前言

这节主要介绍 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

这些脚本有的可以在txt2imgimg2img模式下都可以使用,有的只能用于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 三个维度我都选择了,分别是:

  1. 采样器,右侧点击黄色图标可以列出全部的采样方案,我这里只列出了部分
  2. CFG scale。5-15 (+3) 表示从 5-12 范围内,按照 + 3 的方式递增,也就是 5,8,11,14 这 4 个值。
  3. 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 有基本了解,然后修改titleuirun方法的逻辑即可。

当然你还可以通过 官方文档 Developing custom scripts 获取更多信息。

延伸阅读

  1. https://gigazine.net/gsc_news/en/20220909-automatic1111-stable-diffusion-webui-prompt-matrix/
  2. https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Custom-Scripts