stable-diffusion-webui:把扩散模型调参装进浏览器
用 Gradio 把 Stable Diffusion 的采样器、步数、ControlNet 等参数搬进 Web 界面,本地加载模型即可出图。
装一个 Web 界面,比写一行 Python 调用更难——这听起来反直觉,但 stable-diffusion-webui 的安装章节确实比它的功能列表长得多。它把「跑一张扩散模型图」这件事从脚本里搬进了浏览器,代价是你得先让 Python、git、显卡驱动和一堆依赖在同一台机器上达成一致。
这个项目在 GitHub 上有 165071 个星标、33559 个 fork,用 AGPL-3.0 许可发布,主语言 Python,topics 里同时挂着 gradio、pytorch、txt2img、img2img、upscaling、web。这些标签基本勾勒出了它的形状:一个用 Gradio 搭起来的前端,底下压着 PyTorch 和扩散模型。
它真正解决的问题:把参数暴露出来
Stable Diffusion 的原生用法是写代码调模型。采样器、步数、CFG、种子、分辨率、负面提示词——每一个都是函数参数。改一次参数要改一次脚本、跑一次进程。
stable-diffusion-webui 的做法是把这些参数全部变成 UI 控件。README 的功能清单里,与「调参」直接相关的条目密度极高:
- 采样方法选择,可调 sampler eta 值(噪声乘数),以及更高级的噪声设置
- 批次使用正确的种子(Correct seeds for batches)
- 实时校验 prompt 的 token 长度
- 生成参数随图保存:PNG 写进 PNG chunk,JPEG 写进 EXIF
- 把图片拖到 PNG info 标签页,可还原生成参数并自动填回 UI
- 生成参数读取按钮,把参数载入 prompt 框
- 设置页可改 UI 元素的默认值/最小值/最大值/步长
- 鼠标悬停在多数 UI 元素上有提示
这套设计的核心不是「生成图像」,而是让一次生成变成可复现、可回溯的实验。参数跟着图片走,图片拖回来参数就回来了——这是把实验记录做进了文件格式里。
架构:五层,从浏览器到显卡
README 没有给架构图,但它列出的组件名足够还原分层。按请求流转的方向拆:
第一层 · Gradio 前端
README 第一句就写明「implemented using Gradio library」。所有标签页——txt2img、img2img、Extras、PNG info、Settings、Training、Checkpoint Merger——都是 Gradio 组件。这一层只负责收集参数和展示结果,不做计算。
第二层 · 生成流程编排
txt2img 与 img2img 是两条主流程,围绕它们挂了一串改造器:
- Prompt 侧:Attention 语法(
((tuxedo))加权、(tuxedo:1.21)显式权重)、Prompt Matrix、Prompt Editing(生成中途换 prompt)、Composable-Diffusion(用大写AND分隔多段 prompt 并支持权重)、Styles(保存 prompt 片段供下拉复用) - 迭代侧:Loopback(img2img 反复跑)、Variations(同图微差)、Seed resizing(同图不同分辨率)、Highres Fix(一键出高分辨率图而不产生常见畸变)
- 区域侧:Outpainting、Inpainting,以及对 RunwayML 专用 inpainting 模型的支持
第三层 · 模型与采样
采样器选择、eta 值、噪声设置、Clip skip 都在这一层生效。模型加载支持 safetensors 格式,支持运行中重载 checkpoint(Reloading checkpoints on the fly),支持从设置页切换 VAE。Checkpoint Merger 标签页可以把最多 3 个 checkpoint 合并成一个。
第四层 · 后处理与增强
Extras 标签页是一组独立模型:GFPGAN 修脸、CodeFormer 作为 GFPGAN 的替代、RealESRGAN 与 ESRGAN 放大、SwinIR 与 Swin2SR 放大、LDSR 做潜空间超分。README 的 Credits 段说明这些是通过 Spandrel 接入的。另有 CLIP interrogator 从图片反推 prompt,DeepDanbooru 集成给动漫类 prompt 生成 danbooru 风格标签。
第五层 · 扩展与外部接口
Custom scripts 机制让社区扩展能挂进来(README 举例 History tab 就是通过扩展实现的)。API 是内建能力。设置里还能开启「从 UI 运行任意 Python 代码」,但必须带 --allow-code 参数启动。
请求的流转大致是:Gradio 收到表单 → 编排层把 prompt 按 Attention/Composable 语法解析、按 Prompt Editing 切成阶段 → 采样层按选定采样器和 eta 逐步去噪 → 后处理层按需调用放大/修脸模型 → 结果连同参数一起写回前端,并按设置决定是否嵌入 PNG chunk 或 EXIF。
| 层 | 核心模块 | 职责 | 关键开关 |
|---|---|---|---|
| 前端 | Gradio 标签页 | 收集参数、展示进度与预览 | 设置页可重排 UI 元素 |
| 编排 | txt2img / img2img / Loopback / Prompt Editing | 解析 prompt 语法、控制迭代与阶段切换 | Prompt Matrix、Composable-Diffusion |
| 采样 | 采样器选择、eta、噪声设置 | 去噪主循环、种子管理 | --xformers 加速 |
| 后处理 | Extras:GFPGAN / CodeFormer / RealESRGAN / ESRGAN / SwinIR / Swin2SR / LDSR | 修脸、放大、超分 | 设置页选 VAE |
| 扩展 | Custom scripts、API、Training | 社区扩展、程序化调用、embedding/hypernetwork 训练 | --allow-code |
注意 Training 标签页也在这一层:它支持 hypernetworks 和 embeddings 训练,以及图像预处理(裁剪、镜像、用 BLIP 或 deepdanbooru 自动打标)。README 提到 embedding 可以在 8GB 显存上训练,也有 6GB 可用的报告。
安装:一键脚本,但前置条件不省
README 的安装章节按硬件分叉:NVidia(推荐)、AMD、Intel CPU/GPU(外链 wiki)、Ascend NPU(外链 wiki),另有 Google Colab 等在线服务列表。Apple Silicon 单独指向 wiki 页。
Windows + NVidia 有两条路。用 release 包最省事:
- 从
v1.0.0-pre下载sd.webui.zip并解压 - 运行
update.bat - 运行
run.bat
自动安装路线则要求先装 Python 3.10.6(README 明确写「更新版本的 Python 不支持 torch」),安装时勾选「Add Python to PATH」,再装 git,然后 clone 仓库,以普通非管理员用户运行 webui-user.bat。
Linux 的依赖安装按发行版给出,Debian 系是:
bash# Debian-based: sudo apt install wget git python3 python3-venv libgl1 libglib2.0-0 # Red Hat-based: sudo dnf install wget git python3 gperftools-libs libglvnd-glx # openSUSE-based: sudo zypper install wget git python3 libtcmalloc4 libglvnd # Arch-based: sudo pacman -S wget git python3
系统太新时需要单独装 python3.11 或 python3.10,README 给了 Ubuntu 24.04 和 Manjaro/Arch 的做法,并提示在启动脚本里设 python_cmd="python3.11"。装完依赖后:
bashgit clone https://github.com/AUTOMATIC1111/stable-diffusion-webui cd stable-diffusion-webui ./webui.sh
webui-user.sh 里可以配置启动选项。README 提到的显存门槛是 4GB 显卡可用,也有 2GB 可用的报告——这个数字比大多数人对扩散模型的预期低,原因是项目对 cross attention 层做了多轮优化(Credits 里列了 Doggettx、InvokeAI/lstein、Alex Birch、Amin Rezaei 等人的工作)。
用起来是什么样
启动后是一个本地 Web 服务,浏览器里操作。最小可用路径就是:在 txt2img 标签页填 prompt,选采样器和步数,点生成。README 里最值得单独拎出来的是 Attention 语法,因为它直接改变了 prompt 的写法:
texta man in a ((tuxedo)) # 模型会更关注 tuxedo a man in a (tuxedo:1.21) # 另一种写法,显式给权重
选中文本按 Ctrl+Up / Ctrl+Down(macOS 上是 Command+Up / Command+Down)可以自动调整选中部分的注意力权重。Composable-Diffusion 则用大写 AND 拼多段 prompt,并且每段可以带权重:
texta cat :1.2 AND a dog AND a penguin :2.2
另一个反直觉的能力是 prompt 没有 token 上限——原生 Stable Diffusion 最多 75 个 token,这里解除了这个限制。Prompt Editing 允许生成中途换 prompt,README 给的例子是「先做西瓜,中途切换成动漫女孩」。
参数复现的用法值得单独说:生成时参数会写进 PNG 的 chunk 或 JPEG 的 EXIF,把图片拖到 PNG info 标签页就能还原参数并自动填回 UI。这个功能可以在设置里关掉。
和同主题项目比,它站在哪
素材给的对照项目里,tensorflow、pytorch、opencv 是底层框架与库,d2l-zh、cs-video-courses 是学习资源。它们和 stable-diffusion-webui 不在同一层,但对照能说清定位。
| 项目 | 语言 | 星标(快照) | 定位 | 与 webui 的关系 |
|---|---|---|---|---|
| stable-diffusion-webui | Python | 165071 | 扩散模型的浏览器调参台 | 本项目的对象 |
| pytorch | Python | 约 104530 | 深度学习框架,张量与动态神经网络 | webui 的计算底座 |
| tensorflow | C++ | 约 200872 | 从建模到训练部署的完整工具链 | 同层框架,webui 不用它 |
| opencv | C++ | 约 91156 | 计算机视觉库,含深度学习推理 | 图像处理层可对照 |
| d2l-zh | Python | 约 81568 | 中文深度学习教材 | 学习侧,非工具侧 |
| cs-video-courses | 未标注 | 约 83658 | 计算机课程清单 | 学习侧,非工具侧 |
关键差异在于抽象层级。PyTorch 给你张量和梯度,你得自己写采样循环;stable-diffusion-webui 把这些全部封装成表单控件,代价是你被绑定在它的参数语义上。它不是一个「库」,你没法 import 它来写自己的推理管线——虽然它有 API,但那是给 UI 背后的服务做程序化调用用的。
这也解释了它为什么星标比 PyTorch 还高:它的用户不是研究者,是想出图的人。README 的功能清单里,「不需要写代码」这件事没有被明说,但每一条功能都在服务这个目标——X/Y/Z plot 用不同参数画三维图、Styles 保存 prompt 片段、Generate forever 持续生成、鼠标悬停提示。这些都是给反复试参数的人准备的,不是给写训练脚本的人准备的。
一个 AGPL 项目的边界
许可从 README 的一句话能看出来:「Now with a license!」——这是 changelog 式的口吻,说明许可是在项目演进中补上的。现在是 AGPL-3.0,对网络服务场景有传染性要求。
项目本身不带模型。README 的 Credits 段把借用的代码逐条列出:Stable Diffusion 来自 Stability-AI/stablediffusion、CompVis/taming-transformers、mcmonkey4eva/sd3-ref;k-diffusion 来自 crowsonkb;Spandrel 来自 chaiNNer-org,它实现了 GFPGAN、CodeFormer、ESRGAN、SwinIR、Swin2SR;LDSR 来自 Hafiidz;MiDaS 来自 isl-org。Textual Inversion 用的是 Rinon Gal 的想法而非代码,README 明确写了这一点。完整的代码许可列表在 Settings -> Licenses 屏幕和 html/licenses.html 文件里。
支持的模型谱系在 README 里散落着:Stable Diffusion 2.0、Alt-Diffusion、Segmind Stable Diffusion(SSD-1B)、RunwayML 的 inpainting 模型、safetensors 格式的 checkpoint。分辨率限制被放宽到「必须是 8 的倍数,而不是 64」。
谁该用它,谁不该
如果你要在本地反复试采样器、步数、ControlNet 这类参数,看同一 prompt 在不同设置下的差异,这个项目的 X/Y/Z plot、参数随图保存、PNG info 回填就是为你做的。4GB 显存能跑、2GB 有报告,门槛比想象中低。
如果你要的是把扩散模型嵌进自己的产品管线,它的 API 和 Custom scripts 是入口,但 AGPL-3.0 的许可需要先看清楚。如果你要训练模型而不是调参出图,Training 标签页只覆盖 hypernetworks 和 embeddings,不是完整的训练框架。
源码在 github.com/AUTOMATIC1111/stable-diffusion-webui。素材中没有提供独立的官网地址,文档在仓库的 wiki 里——README 专门留了一个给搜索引擎爬的 wiki 镜像链接,并标注「not for humans」。