Stable Diffusion WebUI 与 ComfyUI 安装

暑假都折腾着玩了一下,还差点把自己的小P104服务器开爆了。稍稍记录一下环境折腾过程。

背景知识

Stable Diffusion WebUI (以下简称sd-webui) 和 ComfyUI 都是调用模型进行AI图片视频生成的前端,并不直接提供具体模型,原则上这两个只需其一即可完成创作。

至于优劣,原始A1111sd-webui需要插件才能使用诸如LyCORIS之类更多的模型,在视频生产等工作上也没那么方便。ComfyUI 工作流上手则需要更多一点基础知识(我觉得其实还好)。

Stable Diffusion WebUI

系统依赖

作为一个AI任务,基础的CUDA组件自然是必不可少的,不再赘述。

在容器Debian中,可能还需要额外安装一些组件:

1
sudo apt install bc google-perftools libgl1 libglib2.0-0 --no-install-recommends 

若是还有缺失的组件,莫慌,可以去https://packages.debian.org,在下面的Search the contents of packages中直接搜索缺失的库文件,安装对应的包即可,基本上不需要手动编译额外库文件。

设置网络

在安装过程中,需要加载一些网络资源,需要首先设置网络访问。

最简单的方法是设置一些PROXY,不过需要注意,要将localhost排除在外,否则webui.sh执行中会报错。

1
2
3
export NO_PROXY="localhost, 127.0.0.1, ::1"
export HTTP_PROXY=http://127.0.0.1:8888
export HTTPS_PROXY=http://127.0.0.1:8888

Python环境准备

如果没有额外需求,将一切包袱丢给webui.sh,任其自动创建所需的虚拟环境,倒也是一种懒人方法。

不过,如果期望自定义配置,那额外折腾的部分也不见得麻烦。

默认情况下,sd-webui期望的Python版本是3.10,对于比较新的系统,请考虑使用Conda等方法创建虚拟环境,并指定Python版本号。

虚拟环境激活后,sd-webui就会使用检测到的Python虚拟环境。

使用uv管理环境

更激进一点,如果使用uv作为pip的替代品,情况又略有不同,因为sd-webui直接通过调用pip模块安装所需组件,但uv创建的虚拟环境并没有提供pip模块。

幸好,安装过程也不麻烦,只需要不断重复运行webui.sh,把报错的pip install命令复制出来,直接改成uv pip install并执行即可。

需要注意,uv pip install没有--prefer-binary,似乎直接省略也无伤大雅。

克隆环境

1
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui

xformers

如果使用的是uv,那其实很好办,uv能自动处理xformerstorch的兼容关系,只需要在安装torch的时候一并安装即可。

1
uv pip install "numpy<2" torch==2.1.2 torchvision==0.16.2 xformers --extra-index-url https://download.pytorch.org/whl/cu121

如果使用的是pip,在无法自动匹配正确版本,或是pip动了卸载torch的心时,则需要亲自去Releases · facebookresearch/xformers · GitHub翻一下时间线,寻找和环境中torch版本匹配的小版本,然后指定版本号手动安装。

模型文件

把模型文件放到对应的models/Stable-diffusion/, models/VAE/, 还有models/Lora/文件夹下,就可以了。

一些插件

1
2
3
4
5
6
7
8
9
10
11
12
13
git clone "https://github.com/Physton/sd-webui-prompt-all-in-one.git" extensions/sd-webui-prompt-all-in-one
vim extensions/sd-webui-prompt-all-in-one/install.py
vim extensions/sd-webui-prompt-all-in-one/scripts/physton_prompt/packages.py
uv pip install chardet PyExecJS lxml pathos cryptography

git clone "https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git" extensions/a1111-sd-webui-tagcomplete
git clone https://github.com/CompVis/taming-transformers.git repositories/taming-transformers
git clone https://github.com/hako-mikan/sd-webui-regional-prompter.git extensions/sd-webui-regional-prompter
git clone https://github.com/pkuliyi2015/multidiffusion-upscaler-for-automatic1111.git extensions/multidiffusion-upscaler-for-automatic1111
git clone https://github.com/Mikubill/sd-webui-controlnet.git extensions/sd-webui-controlnet
git clone https://github.com/dtlnor/stable-diffusion-webui-localization-zh_CN.git extensions/stable-diffusion-webui-localization-zh_CN
git clone https://github.com/AlUlkesh/stable-diffusion-webui-images-browser.git extensions/stable-diffusion-webui-images-browser
git clone https://github.com/arenasys/stable-diffusion-webui-model-toolkit.git extensions/stable-diffusion-webui-model-toolkit

启动!

1
./webui.sh

ComfyUI

克隆环境

1
git clone https://github.com/comfyanonymous/ComfyUI.git

安装虚拟环境

如果使用的是uv,那其实很好办,uv能自动处理xformerstorch的兼容关系,只需要在安装torch的时候一并安装即可。

A1111sd-webui 不同,ComfyUI所需的Python依赖项均已提供在requirements.txt中。

不过,默认的requirements.txt没有定义torch的版本,也没有定义xformers依赖项(xformers能大幅减少显存消耗)。所以,我们可以稍微修改一下。

ComfyUI对任意新版torch的兼容性都比较好,所以我们可以去pytorch官网,找到自己适合的torch版本,将版本信息写到requirements.txt中。同时,加上xformers依赖项。

requirements.txt
1
2
3
4
5
6
7
8
9
10
-torch
+torch==2.5.1

-torchvision
+torchvision==0.20.1

-torchaudio
+torchaudio==2.5.1

+xformers

其他就都不用管了。直接创建一个虚拟环境,然后开装!

1
2
3
4
uv venv venv -p 3.12
source venv/bin/activate

uv pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121

模型文件复用

装完环境后,如果原本安装有sd-webui,还有一大堆模型文件,不想将模型文件再复制一份?可以直接将ComfyUI目录下的extra_model_paths.yaml.example复制一份,命名为extra_model_paths.yaml,然后按照里面的提示进行编辑,就可以指示ComfyUI前往sd-webui的目录搜索加载Stable Diffusion模型检查点了。

Nginx反向代理

如果在使用Nginx反向代理ComfyUI,并在保存工作流时遇到报错: Error storing user data file 'workflows/xxx': 405,请检查Nginx配置文件,看proxy_pass末尾是否存在斜杠。

如果存在斜杠,请将其删除。

nginx.conf
1
2
3
4
5
6
7
8
location / {

# 这是不OK的!
- proxy_pass http://127.0.0.1:8188/;

# 这是OK的!
+ proxy_pass http://127.0.0.1:8188;
}

参考: [Bug]: Save workflow 405(Method Not Allowed) When using Nginx reverse

提示词插件

手写提示词太痛苦,尤其是习惯了sd-webuisd-webui-prompt-all-in-one插件后。

幸好,ComfyUI也有类似的插件,叫WeiLin-Comfyui-Tools。只需要git cloneComfyUI/custom_nodes,然后根据该插件的requirements.txt补齐Python依赖,在ComfyUI中就可以使用类似的Prompt编辑器了。

当然,要是不喜欢,也可以用原来all-in-one插件的独立版本sd-webui-prompt-all-in-one-app,可以作为一个独立的Web应用运行。