Stable Diffusion高级教程 - Script
/ / / 阅读数:29649前言
这节主要介绍 stable-diffusion-webui 提供的脚本 (script) 功能。脚本和扩展一样也被独立出来,脚本主要是涉及生成图片的逻辑上,不涉及生成算法,类似于 Python 语言的装饰器的用途,可以在生成图片前按照规则调整提示词、参数值等内容,对于执行的每个步骤插入更多的操作。
脚本和扩展的区别
按我的理解,扩展是为了扩充 stable-diffusion-webui 的 UI 界面,所以会涉及前端的静态文件 (如 javascript、CSS 等),所以它会在 Web UI 页面上新增 Tab。
而脚本如其名字,是实现某个功能的 Python 脚本,突出轻便简单,写代码时需要继承 scripts.Script 这个基类,按照对应的方法编写对应逻辑。
脚本列表
项目的 wiki 有专门的页面: https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Scripts
这里面列出来当前全部的扩展,但是我还没有用到。目前只用到了官方项目中自带的一些:
ls ~/workspace/stable-diffusion-webui/scripts poor_mans_outpainting.py prompts_from_file.py prompt_matrix.py custom_code.py postprocessing_codeformer.py sd_upscale.py img2imgalt.py postprocessing_gfpgan.py xyz_grid.py loopback.py postprocessing_upscale.py outpainting_mk_2.py |
这些脚本有的可以在 txt2img 和 img2img 模式下都可以使用,有的只能用于 img2img 模式,请注意。
接下来我重点介绍几个常用的脚本,其他的欢迎大家补充用途和用法
Prompt matrix
如其名字,按照不同的提示词生成图片矩阵。我们过去写提示词,就是一些标签然后逗号隔开。但是如果你想要了解或者不确定几个提示词的组合效果,那么可能你得多次生成,效率低也不方便。
而启用这个脚本后,可以使用 | 语法分割词,这样会组成多个提示词组合让你一次性的看到效果:
可以看到正面提示词最后 2 个,用的是 headphones|,lora:blindbox_v1_mix:1| lora:iu_V35:1,这样就可以生成一个矩阵图完整的看到这两种 lora 模型以及是否戴耳机的效果:
图里面分别是戴耳机用 blindbox、戴耳机用 iu、不戴耳机用 blindbox、不戴耳机用 iu。Btw,可以看到换个 Lora 会让效果差别极大~
X/Y/Z plot
无论是初学者还是有一定经验使用 SD 的用户很多时候也不能确定各个参数到底取那个值是最符合需求的,按过去的模式只能是修改参数,然后生成图保存下来,在修改参数然后生成图。不断地循环,最终尝试出最佳的值。但是这个过程是非常漫长繁琐的,而这个 X/Y/Z plot 脚本可以快速的放我们了解这些功能参数的意义和效果。接下来我们通过调整各个参数生成一个矩阵图,这样非常方便对比出参数的效果。
首先看页面的选择 (提示词等还是用了之前生产的 一张图 ,额外加了个负面次 nsfw,也就是 not safe from work,除此之外我指定了 seed 方便对比):
这个例子里 x/y/z 三个维度我都选择了,分别是:
- 采样器,右侧点击黄色图标可以列出全部的采样方案,我这里只列出了部分
- CFG scale。5-15 (+3) 表示从 5-12 范围内,按照 + 3 的方式递增,也就是 5,8,11,14 这 4 个值。
- Steps。20-35 [3] 是另外一种表达方式,是从 20-35 范围内,找 3 个值,也就是 20,27,35 这 3 个值。
注意,你选择的范围越大就越耗时(这是相乘的关系),例如采样器本来有二十多种,我只选择了 3 种。可以通过这样的方式小范围的了解不同参数的值的效果,我这里是一个比较极端的例子 (完成生成大概花了 1 个小时),如果经验多了会慢慢的知道不同参数什么值会更合理。
它的结果的图很大,我截个整体的图,在截取 step 为 27 的子图:
另外不一定需要三个轴都选择,可以只选 2 个甚至 1 个指标,然后生成参数值变化时对图的影响,但是要注意需要固定 seed。
脚本安装
目前安装脚本也有三种方法,没有推荐偏向,按个人习惯即可。
手动拷贝文件
第一种是直接把项目中的脚本拷贝到 scripts 目录下,例如 https://github.com/memes-forever/Stable-diffusion-webui-video
可以这样:
wget https://raw.githubusercontent.com/memes-forever/Stable-diffusion-webui-video/main/videos.py -O ~/workspace/stable-diffusion-webui/scripts/videos.py |
当然,先 git clone 代码再拷贝文件也可以。
通过 UI 界面「Install from URL」或者「Available」
如果项目里面脚本放在 scripts 目录下,还可以直接使用安装扩展的方法。点最后一个 Tab「Extensions」,再点「Install from URL」或者「Available」,安装后点击「Installed」的「Apply and restart UI」重启 UI 就可以了。
开发脚本
官方文档有 一个例子 ,非常清晰,你需要对 Gradio 有基本了解,然后修改 title、ui 和 run 方法的逻辑即可。
当然你还可以通过 官方文档 Developing custom scripts 获取更多信息。