【深度学习】ComfyUI(基于节点/流程图的 Stable Diffusion WebUI)_webui 8188
ComfyUI 是一个基于节点/流程图的 Stable Diffusion WebUI,它提供了更灵活、更强大的工作流构建能力,尤其适合高级用户、自动化任务和复杂图像生成流程。与 AUTOMATIC1111 的 WebUI 相比,它更底层、更模块化,学习曲线稍陡峭,但控制力更强且资源效率更高。
运行示例:
一、 安装 ComfyUI
前提条件
- Python (3.10 或 3.11 推荐): 确保已安装。可通过
python --version
或python3 --version
在终端/命令提示符检查。 - Git: 用于克隆仓库。
- NVIDIA GPU (推荐): 虽然 CPU 也能运行,但速度极慢。需要安装匹配的 NVIDIA 显卡驱动。
- Stable Diffusion 模型文件 (.ckpt 或 .safetensors): 如
v1-5-pruned-emaonly.safetensors
,sd_xl_base_1.0.safetensors
等。将其准备好放在一个你知道的位置(稍后需要复制到 ComfyUI 目录)。
安装方法 (Windows / Linux 类似)
方法 1: 使用独立安装包 (Windows 最简单)
- 访问 ComfyUI GitHub Releases 页面:
https://github.com/comfyanonymous/ComfyUI/releases
- 找到最新的
ComfyUI_windows_portable_nvidia_cu121_or_cpu.7z
或类似名称的包 (注意 CUDA 版本,cu121
对应 CUDA 12.1,这是目前主流。如果你的显卡较老驱动不支持 CUDA 12.x,可能需要找旧版本或使用方法 2)。 - 下载该压缩包。
- 使用 7-Zip 解压到一个没有中文和特殊字符的路径 (例如
D:\\ComfyUI
)。 - 放置模型文件:
- 将你的 Stable Diffusion 基础模型 (如
sd_xl_base_1.0.safetensors
) 复制到ComfyUI\\models\\checkpoints
目录下。 - 可选:如果需要使用 VAE,将 VAE 文件 (如
sdxl_vae.safetensors
) 复制到ComfyUI\\models\\vae
目录下。 - 可选:下载并放置 LoRA 模型到
ComfyUI\\models\\loras
,嵌入/Textual Inversion 到ComfyUI\\models\\embeddings
,ControlNet 模型到ComfyUI\\models\\controlnet
。
- 将你的 Stable Diffusion 基础模型 (如
- 运行:
- 双击
run_nvidia_gpu.bat
(如果你有 NVIDIA GPU)。 - 如果没有 NVIDIA GPU 或想使用 CPU,双击
run_cpu.bat
(非常慢,不推荐)。
- 双击
方法 2: 通过 Git Clone (适合开发者或需要最新功能)
- 打开终端 (Windows 用命令提示符或 PowerShell, Linux/macOS 用终端)。
- 导航到你想要安装 ComfyUI 的目录。
- 克隆仓库:
git clone https://github.com/comfyanonymous/ComfyUI
- 进入克隆的目录:
cd ComfyUI
- (强烈推荐) 创建并激活 Python 虚拟环境 (避免依赖冲突):
python -m venv venv # Windows# 或python3 -m venv venv # Linux/macOSvenv\\Scripts\\activate # Windows# 或source venv/bin/activate # Linux/macOS
- 安装依赖:
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # 根据你的 CUDA 版本选择,cu121 是 CUDA 12.1pip install -r requirements.txt
- 放置模型文件: 同方法 1 第 5 步,将模型文件复制到
ComfyUI/models/
下对应的子目录 (checkpoints
,vae
,loras
,controlnet
,embeddings
)。 - 启动 ComfyUI:
python main.py
- 可选参数:
--listen
: 允许局域网内其他设备访问 (默认只监听127.0.0.1
)。--port 8188
: 指定端口 (默认是 8188)。- 例如:
python main.py --listen --port 9000
- 可选参数:
成功启动后
- 如果一切顺利,终端会显示类似
* Running on http://127.0.0.1:8188/
的信息。 - 打开你的 Web 浏览器,访问
http://127.0.0.1:8188
(或你指定的地址和端口)。
二、 使用 ComfyUI (基础入门)
ComfyUI 的核心概念是节点和工作流。每个节点执行一个特定功能 (如加载模型、输入提示、采样、保存图像),节点之间通过连接线传递数据 (如潜在空间图像、条件信息)。
1. 界面概览
- 画布 (Canvas): 主要区域,用于放置和连接节点。
- 节点菜单: 右键单击画布空白处弹出,包含所有可用节点类别 (Loaders, Conditioning, Latent, Image, etc.)。
- 节点属性: 点击一个节点,其参数会显示在右侧或下方。
- 队列提示 (Queue Prompt): 点击此按钮执行当前工作流。
- 工作流管理: 可以保存 (
Save
)、加载 (Load
)、清除 (Clear
) 整个工作流。 - 历史记录 (View Queue History / Images): 查看之前生成的图片和工作流。
- 管理器 (Manager): 管理模型、节点等。
2. 构建一个基础的文生图 (txt2img) 工作流(也可以从模板创建(工作流>模板))
- 加载检查点模型:
- 右键画布 ->
Loaders
->CheckpointLoaderSimple
- 在节点属性中选择你放置在
models/checkpoints
下的模型文件。
- 右键画布 ->
- 输入提示 (Prompt):
- 右键画布 ->
Conditioning
->CLIPTextEncode
- 你需要创建两个 CLIPTextEncode 节点:
- 一个用于正面提示词 (
Positive
)。在text
输入框中输入你的描述。 - 一个用于负面提示词 (
Negative
)。在text
输入框中输入你不想要的内容。
- 一个用于正面提示词 (
- 将这两个节点的
CLIP
输出连接到CheckpointLoaderSimple
节点的CLIP
输出。
- 右键画布 ->
- 设置采样器 (Sampler):
- 右键画布 ->
Sampling
->KSampler
或KSamplerAdvanced
(推荐 KSampler)。 - 配置采样器参数:
Model
: 连接到CheckpointLoaderSimple
的MODEL
输出。Positive
: 连接到正面CLIPTextEncode
节点的CONDITIONING
输出。Negative
: 连接到负面CLIPTextEncode
节点的CONDITIONING
输出。Latent Image
: 暂时不连 (下一步创建)。Sampler
/Scheduler
: 选择你喜欢的采样器和调度器 (如dpmpp_2m
/karras
)。Steps
: 采样步数 (如 20-30)。CFG Scale
: 提示词相关性 (如 7-8)。Seed
: 随机种子 (0 表示随机)。
- 右键画布 ->
- 创建初始潜在空间图像 (Latent Image):
- 右键画布 ->
Latent
->Empty Latent Image
- 设置你想要的图像
Width
和Height
(如 1024x1024 for SDXL)。 - 将其
LATENT
输出连接到KSampler
节点的Latent Image
输入。
- 右键画布 ->
- 解码潜在图像为像素图像 (VAE Decode):
- 右键画布 ->
Latent
->VAEDecode
- 将
KSampler
节点的LATENT
输出连接到VAEDecode
的latent_image
输入。 - 将
CheckpointLoaderSimple
节点的VAE
输出连接到VAEDecode
的vae
输入。
- 右键画布 ->
- 保存或预览图像 (Save Image / Preview Image):
- 保存: 右键画布 ->
Image
->Save Image
。将VAEDecode
节点的IMAGE
输出连接到Save Image
节点的images
输入。可以设置保存文件名前缀 (filename_prefix
)。 - 预览: 右键画布 ->
Image
->Preview Image
。将VAEDecode
节点的IMAGE
输出连接到Preview Image
节点的images
输入。这会在界面上显示生成的图片,但不保存到硬盘。
- 保存: 右键画布 ->
- 执行工作流:
- 检查所有连接是否正确。
- 点击
Queue Prompt
按钮。
3. 关键操作
- 添加节点: 右键画布空白处 -> 选择节点类别 -> 选择具体节点。
- 连接节点: 点击一个节点的输出“点”(小圆圈),拖拽到另一个节点的输入“点”。
- 断开连接: 点击已连接的线,然后按
Delete
键,或直接将线拖离输入/输出点。 - 移动节点: 点击并拖动节点。
- 复制/粘贴节点:
Ctrl+C
/Ctrl+V
(Windows/Linux),Cmd+C
/Cmd+V
(Mac)。也可以框选多个节点一起复制。 - 删除节点: 选中节点,按
Delete
键。 - 加载示例工作流: 官方仓库 (
ComfyUI/examples
) 或网上社区分享了很多.json
或.png
工作流文件。通常通过Load
按钮加载.json
,或者直接将.png
图片拖入 ComfyUI 画布(如果图片内嵌了工作流信息)。 - 安装自定义节点: ComfyUI 有丰富的社区扩展。通常通过 ComfyUI Manager(一个流行的管理插件)安装,或者手动将节点代码放到
ComfyUI/custom_nodes/
目录下,然后重启 ComfyUI。
三、 进阶与技巧
- 图生图 (img2img):
- 使用
LoadImage
节点加载图片。 - 使用
VAEEncode
节点将像素图片编码为潜在空间表示(连接到KSampler
的Latent Image
输入)。 - 在
KSampler
中设置较低的denoise
值 (如 0.4-0.8) 来控制原图保留程度。
- 使用
- 使用 LoRA:
- 添加
LoraLoader
节点。 - 连接到
CheckpointLoaderSimple
的MODEL
和CLIP
输出。 - 选择你的 LoRA 文件 (放在
models/loras
) 并设置强度 (strength_model
,strength_clip
)。 - 将
LoraLoader
输出的MODEL
和CLIP
连接到后续节点 (如CLIPTextEncode
和KSampler
)。
- 添加
- 使用 ControlNet:
- 使用
ControlNetLoader
加载 ControlNet 模型 (放在models/controlnet
)。 - 使用预处理节点 (如
Preprocessor for Canny
,Preprocessor for Depth
) 或LoadImage
获取控制图。 - 使用
ApplyControlNet
节点,将控制条件应用到KSampler
的Positive
或Negative
条件输入上。
- 使用
- 高清修复 (Hires Fix / Upscale):
- 有多种方法:
- 采样后放大: 在
VAEDecode
后接Upscale Model
(如 ESRGAN) 或ImageScale
(简单放大)。 - 潜在空间放大: 使用
LatentUpscale
节点在采样后、第二次采样前放大潜在图像,然后接第二个KSampler
(通常降低步数和去噪强度)。这是更接近 AUTOMATIC1111 的 Hires.fix 的方法。 - 专用高清修复节点: 一些自定义节点 (如
UltimateSDUpscale
) 提供更复杂的高清修复流程。
- 采样后放大: 在
- 有多种方法:
- 批处理: 在
Empty Latent Image
节点设置Batch Size
> 1,或者在提示词中使用逗号分隔的列表配合特定节点。 - 使用 ComfyUI Manager: 强烈推荐安装!它极大简化了自定义节点、模型的管理和更新。安装方法通常在 Manager 的 GitHub 页面说明。
四、 常见问题
- 启动报错 (ModuleNotFoundError): 缺少 Python 依赖。激活虚拟环境后,在
ComfyUI
目录下运行pip install -r requirements.txt
。 - 启动报错 (CUDA out of memory): 显存不足。
- 尝试减小
Width
xHeight
。 - 尝试减小
Batch Size
。 - 在
KSampler
中勾选Add noise
(对于某些 img2img 工作流可能不需要)。 - 使用
--lowvram
或--medvram
启动参数 (在main.py
命令后添加,如python main.py --medvram
)。 - 关闭其他占用显存的程序。
- 考虑升级显卡硬件。
- 尝试减小
- 模型加载失败/找不到: 确认模型文件 (.ckpt 或 .safetensors) 已正确放置在
models/checkpoints
目录下,并且在CheckpointLoaderSimple
节点中选择了正确的文件名。 - 生成的图像全黑/全灰/乱码:
- 检查工作流连接是否正确,特别是
MODEL
,CLIP
,VAE
,CONDITIONING
,LATENT
这些关键连接线。 - 确认使用了匹配的模型和 VAE (尤其是 SDXL 模型需要 SDXL VAE)。
- 尝试不同的
Sampler
/Scheduler
组合。 - 检查提示词是否有效。
- 尝试不同的
Seed
。
- 检查工作流连接是否正确,特别是
- 如何更新 ComfyUI:
- 安装包用户: 重新下载最新安装包,解压覆盖(注意备份你的
models
文件夹和自定义工作流)。 - Git Clone 用户: 在
ComfyUI
目录下执行:git pullpip install -r requirements.txt --upgrade
- 安装包用户: 重新下载最新安装包,解压覆盖(注意备份你的
- 界面卡顿/反应慢: 复杂工作流可能导致浏览器负担重。尝试关闭不用的浏览器标签页或使用更轻量的浏览器。
五、 学习资源
- 官方 GitHub 仓库 & Wiki:
https://github.com/comfyanonymous/ComfyUI
(必看!有基础示例和讨论) - ComfyUI Reddit:
https://www.reddit.com/r/comfyui/
(社区交流,分享工作流) - Civitai:
https://civitai.com/
(搜索 “ComfyUI”,有很多分享的工作流.json
或.png
文件以及配套模型)。 - ComfyUI Workflow Examples:
https://comfyanonymous.github.io/ComfyUI_examples/
(官方基础示例)