为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位置编码和允许任意顺序预测跨度来改进空白填充预训…

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

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

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

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

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

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

论文阅读 - 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效率更高,我们可以通过两种方法将定时任务变成…

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

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

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

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

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

过滤器,监听器与拦截器的区别 ​ 过滤器和监听器不是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)的数…

【Linux】常用的基本指令

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

C# Microsoft消息队列服务器的使用 MSMQ

先安装消息队列服务器 private static readonly string path ".\\Private$\\myQueue";private void Create(){if (!MessageQueue.Exists(path)){MessageQueue.Create(path);}}private void Send(){Stopwatch stopwatch new Stopwatch();stopwatch.Start();Message…

K8s的详细介绍

1.编写yaml文件的方式 2.yaml里面的内容介绍 Pod实现机制:(1)共享网络(2)共享存储 共享网络:通过Pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一个名称空间中,…

【Spring Cloud 三】Eureka服务注册与服务发现

系列文章目录 【Spring Cloud一】微服务基本知识 Eureka服务注册与服务发现 系列文章目录前言一、什么是Eureka?二、为什么要有服务注册发现中心?三、Eureka的特性四、搭建Eureka单机版4.1Eureka服务端项目代码pom文件配置文件启动类启动项目查看效果 E…

海量小文件传输慢的原因以及对应的优化方案

在日常工作中,我们经常遇到需要传输一些小文件的情况,但是当小文件的数量很多的时候,为什么小文件传输的速度就会变得很慢呢?为什么复制许多较小的文件时,小文件传输效率就会降低呢?针对这些问题&#xff0…

Mybatis插件

文章目录 1. 如何自定义插件1.1 创建接口Interceptor的实现类1.2 配置拦截器1.3 运行程序 2. 插件原理2.1 解析过程2.2 创建代理对象2.2.1 Executor2.2.2 StatementHandler2.2. 3ParameterHandler2.2.4 ResultSetHandler 2.3 执行流程2.4 多拦截器的执行顺序 3. PageHelper3.1 …

聊天系统登录后端实现

定义返回的数据格式 # Restful API from flask import jsonifyclass HttpCode(object):# 响应正常ok 200# 没有登陆错误unloginerror 401# 没有权限错误permissionerror 403# 客户端参数错误paramserror 400# 服务器错误servererror 500def _restful_result(code, messa…

Matlab Optimization Toolbox中的遗传算法工具包(GA)

matlab optimization 中使用了GA求解器 默认的是小于等于 找到GA 工具包 找到 APP选择 Optimization Tool 选择Solver ga - Genetic Algorithm 应用GA solver 定义适应度函数(Fitness function)与问题约束(Constraints) example one 优化函数 sin(x) 2 * cos(x)极其重要的…