ComfyUI 是Stable Diffusion 的基于节点的用户界面。ComfyUI 由Comfyanonymous于 2023 年 1 月创建,用于了解 Stable Diffusion 的工作原理。Stable Diffusion 的创建者 StabilityAI 也使用 ComfyUI 在内部测试 Stable Diffusion。此后,他们还聘请了 Comfyanonymous 来帮助他们开发内部工具。
ComfyUI 简介
ComfyUI 是一个基于节点的界面。基于节点的界面在 3D 设计和 VFX 行业最为常见。如果您使用过Maya或Blender3D等工具,您可能遇到过它们。在这些接口中,每个节点都执行一些代码。节点有输入(传递给代码的值)和输出(代码返回的值)。
使用鼠标,用户可以:
- 创建新节点
- 编辑节点上的参数(变量)
- 通过输入和输出将节点连接在一起
在 ComfyUI 中,每个节点代表 Stable Diffusion 过程的不同部分。通过创建和连接执行该过程不同部分的节点,您可以运行 Stable Diffusion 。
ComfyUI 基本界面如下所示:
ComfyUI 与 AUTOMATIC1111
很多 ComfyUI 的新手都是从更简单的界面开始的,比如AUTOMATIC1111、InvokeAI或SD.Next。
他们都在想同一件事:为什么要使用如此复杂的工具来做同样的事情?
是的,你可以做同样的事情,但是使用 ComfyUI,你还可以做更多。
极高的可配置性
想要在生成过程的任何阶段输出预览图像吗?
想要同时运行两代来比较采样方法吗?
这是很多人喜欢使用 ComfyUI 的原因。
ComfyUI 让您可以同时做很多事情
想象一下,你对所有图像都遵循类似的过程:首先,生成图像。然后将结果发送到 img2img。最后,对其进行放大。
在 AUTOMATIC1111 中,您必须手动完成所有这些步骤。
在 ComfyUI 中,您只需单击一下即可执行所有这些步骤。
这非常适合SDXL v1.0,它带有 2 个模型和 2 个步骤: 基本模型 用于生成噪声 潜在值,然后用专门用于去噪的细化模型进行处理 。
性能和速度
因为它们是可配置的,所以 ComfyUI 生成可以以 AUTOMATIC1111 生成无法实现的方式进行优化。
这 极大地优化了 速度。与 AUTOMATIC1111 相比,使用 ComfyUI 的生成速度提高了 3-5 倍。
了解 Stable Diffusion 的工作原理
ComfyUI 的设置使得节点能够反映扩散过程的不同部分在底层的工作方式。通过学习如何使用 ComfyUI,您将了解 Stable Diffusion 的实际工作原理!
安装 ComfyUI
从 Github 克隆 (Windows / Linux)
1. NVIDIA GPU
Windows,打开命令提示符(搜索“cmd”)。Linux,打开终端(Ctrl+Alt+T)。
然后逐个运行以下命令:
git cline https://github.com/comfyanonymous/ComfyUI
cd ComfyUI
pip instal torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 xformers -r requirements.txt
您现在可以使用以下命令启动 ComfyUI:
python main.py
如果收到“Torch 未使用 CUDA 启用进行编译”错误,请卸载 torch:
pip uninstall torch
(出现提示时按“y”)
并使用与之前相同的命令再次安装:
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 xformers -r requirements.txt
2. AMD GPU
Windows,打开命令提示符(搜索“cmd”)。Linux,打开终端(Ctrl+Alt+T)。
然后逐个运行以下命令:
git install https://github.com/comfyanonymous/ComfyUI
cd ComfyUI
python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.4.2 -r requirements.txt
如果由于您的 GPU 未得到 ROCm(6700 XT 等)的官方支持而失败,您可以尝试运行以下命令:
HSA_OVERRIDE_GFX_VERSION=10.3.0 python main.py
您现在可以使用以下命令启动 ComfyUI:
python main.py
从 Github 克隆 (Mac)
您可以使用任何最新的 macOS 版本在 Apple Mac 芯片(M1 或 M2)中安装 ComfyUI。
按照 Mac 上的加速 PyTorch 训练 指南安装 pytorch。
打开终端并克隆repo:
git clone https://github.com/comfyanonymous/ComfyUI
安装 ComfyUI 依赖项:
cd ComfyUI
pip install -r requirements.txt
通过运行以下命令启动 ComfyUI:
python main.py --force-fp16
请注意,仅当您安装了最新的 pytorch nightly 时,–force-fp16 才会起作用。
更新 ComfyUI
要更新 ComfyUI,请导航到命令提示符/终端中的 ComfyUI 文件夹并输入:
git pull
ComfyUI 用户界面
节点
您可以通过右键单击空白处 -> 来添加节点Add Node
。
您可以双击空白处来获取所有节点的列表和搜索栏:
TRL + 拖动可选择多个节点。SHIFT + 拖动可同时移动它们。
您可以更改节点的颜色以帮助您保持井然有序。右键单击 -> Color
-> 选择颜色:
连接节点
如果您将输入拖放到空白处并释放,您将获得兼容节点的列表:
输入和输出只有颜色相同时才兼容。请注意,我可以将紫色输入连接到紫色输出,但无法连接其他任何输入。
执行
当您单击 时Queue Prompt
,工作流将按照节点连接的顺序通过节点,从没有输入、只有输出的加载器开始。
如果任何节点缺少输入,您将无法运行提示:
ComfyUI 节点详解
我们如何了解实际发生的情况以便创建和修改工作流程?
为了理解节点,我们必须了解 Stable Diffusion 的工作原理。
让我们看一下默认的工作流程。如果您没有使用默认工作流程,请单击Load Default
右侧边栏。
Load Checkpoint 节点
用于生成图像的 checkpoint 模型( .safetensors, .ckpt )有 3 个主要组成部分:
- CLIP 模型:将文本转换为 Unet 可以理解的格式
- Unet:执行“扩散”过程,即对图像进行逐步处理,我们称之为生成
- VAE:将图像从潜在空间解码到像素空间(在进行 img2img 时也用于将常规图像从像素空间编码到潜在空间)
在 ComfyUI 工作流程中,这表示为 Load Checkpoint 节点及其 3 个输出(模型指的是 Unet)。
这些输出连接到什么呢?
CLIP Text Encode 节点
Load Checkpoint节点的 CLIP
输出连接到 CLIP Text Encode 节点。
CLIP 模型用于将文本转换为 Unet 可以理解的格式(文本的数字表示)。我们称之为嵌入 ( Embeddings )。
CLIP Text Encode 节点将 Checkpoint 的 CLIP 模型作为输入,将提示( positive 和 negative )作为变量,执行编码过程,并将这些嵌入输出到下一个节点,即采样器 ( KSampler )。
KSampler
在 Stable Diffusion 中,图像由称为采样的过程生成。
在 ComfyUI 中,这个过程发生在 KSampler 节点。这是实际的“生成”部分,因此您会注意到,当您排队提示时,KSampler 需要花费最多的时间来运行。
KSampler 接受以下输入:
model
:来自Load Checkpoint节点的MODEL
输出( Unet )positive
:来自 CLIP Text Encode 节点的 positive promptnegative
:来自 CLIP Text Encode 节点的 negative promptlatent_image
:潜在空间中的图像(Empty Latent Image节点)
由于我们仅从提示(txt2img)生成图像,因此我们使用 Empty Latent Image 节点。
您也可以将实际图像传递给 KSampler 而执行 img2img。我们将在下面讨论这一点。
KSampler 中发生了什么?
扩散是实际产生图像的过程。我们从一个随机信息数组和嵌入(编码的正面和负面提示)开始。
扩散分为多个步骤,每个步骤对信息阵列(也称为潜在信息)进行操作,并产生另一个更类似于提示文本的信息阵列。因此,我们从一个随机信息数组开始,最终得到一个类似于我们所知道的信息数组,并通过 KSampler 输出此信息。但是,它目前还不在像素空间中(我们看不到它),它仍然是一种潜在的表示。
VAE
VAEDecode 节点需要 2 个输入:
- Checkpoint 模型自带的 VAE(您也可以添加自己的 VAE)
- KSampler 已完成去噪的潜在空间图像( latent space image )
VAE 用于将图像从潜在空间转换到像素空间。它将最终的像素图像传递给保存图像节点,用于展示图像并下载。
默认工作流程是 ComfyUI 中能找到的最简单的工作流程。
下载模型
为了运行 SDXL,您可能还需要其他几个模型。
您可以先下载 checkpoint 模型,然后根据需要下载其余模型。
Checkpoint
将 checkpoint 模型放置在文件夹 ComfyUI/models/checkpoints
:
VAE
将 VAE 放入文件夹 ComfyUI/models/vae
:
LoRA
将 LoRA 放入文件夹ComfyUI/models/loras
:
Upscaler
Upscaler 可以放大您的图像,将升级器放入文件夹 ComfyUI/models/upscaler
:
推荐的工作流程
ComfyUI 的一大优点是它可以轻松下载并在工作流程之间切换。
这是官方 ComfyUI 仓库中的示例工作流程列表。
要加载工作流,只需单击 Load
右侧栏上的按钮,然后选择工作流.json
文件。
一些工作流程还需要您将项目repo 通过 git clone 到您的ComfyUI/custom_nodes
文件夹,然后重新启动 ComfyUI。
以下是 Stable Diffusion 社区中的一些流行工作流程:
Sytan 的 SDXL 工作流程
SDXL 最受欢迎的工作流程之一。具有升级功能。相关文档。
Searge SDXL 工作流程
具有 3 种操作模式(文本转图像、图像转图像和修复),均可从同一工作流程获得,并可通过选项进行切换。相关文档。
建议安装:
- 导航到你的
ComfyUI/custom_nodes/
目录 - 在 custom_nodes 目录中打开命令行窗口
- 运行
git clone https://github.com/SeargeDP/SeargeSDXL.git
- 重启 ComfyUI