为Stable Diffusion web UI开发自己的插件实战

最近,Stable Diffusion AI绘画受到了广泛的关注和热捧。它的Web UI提供了了一系列强大的功能,其中特别值得一提的是对插件的支持,尤其是Controlnet插件的加持,让它的受欢迎程度不断攀升。那么,如果你有出色的创意,如何将其融入Stable Diffusion Web UI中呢?不用担心,我们可以开发相关的插件来实现这个目标。实际上,开发Stable Diffusion Web UI并不困难,因为Web UI框架本身就支持插件开发。Stable Diffusion的大部分代码是用Python编写的,其Web UI采用了Gradio框架。相信大家对这两个概念已经非常熟悉,因此在这里不再过多阐述。下面,我将与大家分享我的一个小测试!

首先我们来到Stable Diffusion 的modeules目录找到scripts.py文件,目录如下

打开scripts.py可以查看其中的代码。这个文件包含了常用的UI方法,我们可以在开发过程中引用这些方法来对UI进行重载。这里我就不一一阐述每个方法的作用了,相信大家根据每个方法的字面意思也可以理解方法的作用了吧。

新建项目,目录结构如下,目录结构中一定要有scripts目录,这里面也是存放我们开发插件文件的地方。其他的可以根据自己的习惯存放。

下面是一个reminderPlugn.py的源码,

import contextlibimport gradio as gr
from modules import scriptsdef send_text_to_prompt(new_text,old_text):if old_text =="":return new_textprint(old_text+","+new_text)return old_text+","+new_textclass reminderPlugin(scripts.Script):def __init__(self) -> None:super().__init__()def title(self):return "test-project"def show(self,is_img2img):return scripts.AlwaysVisibledef ui(self,is_img2img):with gr.Group():with gr.Accordion("测试插件",open=False):send_text_button = gr.Button(value="发送文本",variant='primary')text_to_be_sent = gr.Textbox(label="文本内容")types_to_sent = gr.Dropdown(["cat", "dog", "bird"], label="Animal", info="Will add more animals later!")with contextlib.suppress(AttributeError):if is_img2img:#根据当前的Tab来设置点击后数据输出的组件send_text_button.click(fn=send_text_to_prompt,inputs=[text_to_be_sent,send_text_button])else:#根据当前的Tab来设置点击后数据输出的组件send_text_button.click(fn=send_text_to_prompt,inputs=[text_to_be_sent,send_text_button])return [text_to_be_sent,send_text_button,types_to_sent]def after_component(self,component,**kwargs):if kwargs.get("elem_id")=="txt2img_prompt":self.boxx = componentif kwargs.get("elem_id")=="img2img_prompt":self.boxxIMG = component

完成上面的代码后,我们将项目文件拷贝到Stable Diffusion 的extensions目录中

 再重启Stable Diffusion web UI,在参数调试下面我们就可以看到测试插件显示了。

 至些,插件就完成了,上面的代码只是展示了web UI显示功能,功能还未完善,大家可以根据自己的需求完成不同的功能,这里只是起到抛砖引玉的作用! 

如果文章对你有用,别忘记一键三连,感谢关注我,你的关注就是我持续输出的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/19599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GLM模型介绍

paper: 《GLM: General Language Model Pretraining with Autoregressive Blank Infilling》 摘要: 我们提出了一个基于自回归空白填充的通用语言模型(GLM)来解决这一挑战。GLM通过添加2D位置编码和允许任意顺序预测跨度来改进空白填充预训…

机器学习笔记之优化算法(四)线搜索方法(步长角度;非精确搜索)

机器学习笔记之优化算法——线搜索方法[步长角度,非精确搜索] 引言回顾:精确搜索步长及其弊端非精确搜索近似求解最优步长的条件反例论述 引言 上一节介绍了从精确搜索的步长角度观察了线搜索方法,本节将从非精确搜索的步长角度重新观察线搜…

【Rust】Rust学习

文档:Rust 程序设计语言 - Rust 程序设计语言 简体中文版 (bootcss.com) 墙裂推荐这个文档 学习了第一章:入门指南 - Rust 程序设计语言 简体中文版 学习了第二章:猜猜看游戏教程 - Rust 程序设计语言 简体中文版 20230802

蓝网科技股份有限公司存在SQL注入

书把他从沉重的生活中拉出来,使他的精神不致被劳动压的麻木不仁。通过不断地读书,他认识到,只有一个人对世界了解得更广大,对人生看得更深刻,那么,他才可能对自己所处的艰难和困苦有更高意义的理解&#xf…

数据可视化入门指南

数据可视化是一种将抽象的数值和数据转换为易于理解的图像的方法。它可以帮助人们更好地理解数据的含义,并且可以揭示数据中可能被忽视的模式和趋势。本文将为你提供一个简单的数据可视化入门指南。 为什么数据可视化重要? 在我们的生活中,数…

AI 绘画Stable Diffusion 研究(五)sd文生图功能详解(下)

大家好,我是风雨无阻。 上一篇文章详细介绍了sd文生图的功能及使用注意事项,感兴趣的朋友可以前往查看:AI 绘画Stable Diffusion 研究(四)sd文生图功能详解(上) 。 那今天这篇文章,我…

Day06-JS高级编程

Day01-JS高级编程 一 变量和常量 1 概念 在程序中,变量是值可以改变的量,常量是值不可以改变的量 在ES6以前变量的创建使用var关键字 (可以创建多个同名变量) 从ES6开始变量的创建推荐使用let关键字 (不可以创建多个同名变量) 从ES6开始常量的创建使用const关键 (不可以创建…

论文阅读 - Social bot detection in the age of ChatGPT: Challenges and opportunities

论文链接:https://www.researchgate.net/publication/371661341_Social_bot_detection_in_the_age_of_ChatGPT_Challenges_and_opportunities 目录 摘要: 引言 1.1. Background on social bots and their role in society 1.2. The rise of AI-gene…

计算机是如何工作的(笔记)

目录 寄存器 操作系统 进程(process) CPU pcb中关于进程调度相关的属性 寄存器 用来存储数据的单位,是CPU的一部分 寄存器,存储空间更小,访问速度更快,成本更高,掉电后数据会丢失 寄存器…

java 定时任务不按照规定时间执行

这里写目录标题 使用异步启动可能出现的问题排查代码中添加的定时任务步骤是否正确排查是否任务阻塞,如果定时任务出现异常阻塞后,将不会在次执行java中多个Scheduled定时器不执行为了让Scheduled效率更高,我们可以通过两种方法将定时任务变成…

Linux CentOS上快速安装Docker并运行服务

在 CentOS 上快速安装 Docker,可以按照以下步骤进行: 1. 更新系统: sudo yum update 2. 安装 Docker: sudo yum install docker 3. 启动 Docker 服务: sudo systemctl start docker 4. 设置 Docker 开机自启动&…

【LeetCode 75】第十五题(1456)定长子串中元音的最大数目

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 就难度而言,我觉得算不上中等,因为和上一题基本一致,只不过上一题是求最大平均数&#xff0c…

大麦订单生成器 大麦订单购买截图生成

后台一键生成链接,独立后台管理 教程:修改数据库config/Conn.php 不会可以看源码里有教程 下载程序:https://pan.baidu.com/s/16lN3gvRIZm7pqhvVMYYecQ?pwd6zw3

事件以及事件相关的兼容性问题

事件以及事件相关的兼容性问题 事件最早是在 IE3 和 Navigator2 中出现的,当时是作为分担服务器运算负担的一种手段。要实现和网页的交互,就需要通过 JavaScript 里面的事件来实现。 每次用户与一个网页进行交互,例如点击链接,按下…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析概览

本专栏将分析普中HC6800-EM3 V3.0 (9.22)\5--实验程序\基础实验例程中的各个例程的代码。 引言:本专栏将对历程中的关键代码进行分析与拓展,再学习一遍51,记录与各位一起进步。 下面是文件列表: E:\USER\000study\000_51单片…

过滤器,监听器与拦截器的区别

过滤器,监听器与拦截器的区别 ​ 过滤器和监听器不是Spring MVC中的组件,而是Servlet的组件,由Servlet容器来管理。拦截器是Spring MVC中的组件,由Spring容器来管理 ​ Servlet过滤器与Spring MVC 拦截器在Web应用中所处的层次如…

node.js系列-多种方案教你在node程序中同时使用CommonJS 和 ES Module 混合开发最佳实践

前情提要 我们平时使用的npm 第三方包一般基于这两种规范开发的,很容易遇到一个项目里既有 CommonJS 又有 ES Module 的情况,那么我们应该如何解决这种CommonJS 和 ES Module 混合开发的问题呢? CommonJS是什么? 2009年&#x…

MySQL主从复制原理以及实操

一、MySQL主从复制原理: 1、MySQL将数据变化记录到二进制日志中; 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中; 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数…

c++ / python / java / PHP / SQL / Ruby / Objective-C / JavaScript 发展史

c发展史 C是由丹尼斯里奇和肯汤普森在1970年代早期开发的C语言的扩展。C最初被称为“C with Classes”,是在1980年代初期由比雅尼斯特劳斯特鲁普开发的。 1983年,斯特劳斯特鲁普将C with Classes重新命名为C。在1985年,C编译器的第一个版本被…

【Linux】常用的基本指令

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…