大家好,我是想象,AI 破局 9 颗 AI 之心持有者。ComfyUI 已经出来有一段时间了,一直没有深入去学习过,今天花了点时间跑了一下。体验下来,就两个字:惊艳!
这张 3 个小丑的图,很真实吧。毫无疑问,就是今天的主角 ComfyUI 跑出来的,如果你想知道具体用了哪些节点,一定要看到最后,绝对惊掉你的下巴。
今天介绍一下 ComfyUI( Stable Diffusion的基于节点的界面)使用指南。
会包括下面几个内容:
-
ComfyUI 是什么
-
ComfyUI 与 AUTOMATIC1111(我们经常看到的 Stable Diffusion 用户界面)相比如何
-
如何安装
-
它是如何工作的(简要概述 Stable Diffusion 的工作原理)
-
如何使用它来完成流行的 Stable Diffusion 任务(img2img、修复、LoRA)
-
推荐一些工作流
言归正传,让我们开始吧。
一、ComfyUI 是什么以及它有什么作用?
ComfyUI 是用于 Stable Diffusion 的基于节点的用户界面。
ComfyUI 由 Comfyanonymous 于 2023 年 1 月创建,他创建了该工具来学习 Stable Diffusion 的工作原理。
为了让我们了解它有多强大:StabilityAI(Stable Diffusion 的创建者),使用 ComfyUI 在内部测试 Stable Diffusion。此后,他们聘请了 Comfyanonymous 来帮助他们开发内部工具。
ComfyUI 看起来像这样:
基于节点的界面最常见于 3D 设计和 VFX 行业。如果我们使用过 Maya 或 Blender3D 等工具,我们可能会遇到过它们。
在这些接口中,每个节点都会执行一些代码。
节点具有输入(传递给代码的值)和输出(由代码返回的值)。
使用鼠标,用户能够:
-
创建新节点
-
编辑节点上的参数(变量)
-
通过输入和输出将节点连接在一起
在 ComfyUI 中,每个节点代表 Stable Diffusion 过程的不同部分。通过创建和连接执行流程不同部分的节点,我们可以运行 Stable Diffusion。
二、ComfyUI VS AUTOMATIC1111
ComfyUI 的许多新用户都来自更简单的界面,例如 AUTOMATIC1111、InvokeAI 或 SD.Next。
他们都想知道同一件事:为什么要使用如此复杂的工具来完成同样的事情?
嗯,你可以做同样的事情,但你也可以做更多的事情。
极高的可配置性
想要在生成过程的任何阶段输出预览图像吗?
想同时运行两个生成过程以比较采样方法吗?
想一个出图流程复用吗?不需要一遍一遍的复制粘贴
这是我使用 ComfyUI 时最喜欢的原因。
ComfyUI 可让我们同时做很多事情,同时完成许多任务。
想象一下,我们对所有图像都采用类似的流程:首先,生成一个图像;然后将结果发送给img2img;最后,进行放大。
在 AUTOMATIC1111 中,我们需要手动执行所有这些步骤。
在 ComfyUI 中,我们可以通过单击一次执行所有这些步骤。
这非常适合 SDXL v1.0 版本,该版本配备了 2 个模型和一个 2 步骤过程:基础模型(Base Model)用于生成噪声潜变量,并使用专门用于去噪的精炼模型(refiner model)处理(实际上使图像更清晰、更详细)。
性能和速度
由于它们具有如此高度可配置性,ComfyUI 的生成方式可以进行优化,而 AUTOMATIC1111 的生成方式则无法实现。
这大大提高了速度,有人报告使用 ComfyUI 相比 AUTOMATIC1111 生成方式快 3-5 倍。
了解 Stable Diffusion的工作原理
ComfyUI 被设置成节点可以反映出 Stable Diffusion 出图过程中不同部分在内部是如何工作的。通过学习如何使用 ComfyUI,我们将了解到 Stable Diffusion 实际上是如何工作的!
三、如何安装 ComfyUI
AutoDL 云端服务器
使用 AutoDL 云端服务器,选择小潘总的镜像,会自带 ComfyUI 环境。
快速安装(Windows、NVIDIA)
ComfyUI 有一个便携式独立版本,可让我们使用 NVIDIA GPU 或 CPU 运行 ComfyUI。CPU 生成速度非常慢,因此这也可能是仅限 NVIDIA 的安装程序:
单击此链接,我们将开始下载:
https://github.com/comfyanonymous/ComfyUI/releases/download/latest/ComfyUI_windows_portable_nvidia_cu118_or_cpu.7z
解压之后,我们将得到一个名为 ComfyUI_windows_portable 的文件夹,其中包含 ComfyUI 文件夹。
双击文件 run_nvidia_gpu.bat 以 NVIDIA GPU 运行,或 run_cpu.bat 以CPU运行。
从 Github 克隆(Windows、Linux)
NVIDIA GPU
Windows,打开命令提示符(搜索“cmd”)。Linux,打开终端 (Ctrl+Alt+T)。
然后一一运行以下命令:
`git clone https://github.com/comfyanonymous/ComfyUI cd ComfyUI pip install 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`
AMD GPU
Windows,打开命令提示符(搜索“cmd”)。Linux,打开终端 (Ctrl+Alt+T)。
然后一一运行以下命令:
`git clone 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`
如果由于 ROCm(6700 XT 等)官方不支持我们的 GPU 而导致失败,我们可以尝试运行以下命令:
`HSA_OVERRIDE_GFX_VERSION=10.3.0 python main.py`
我们现在可以使用以下命令启动 ComfyUI:
`python main.py`
从 Github 克隆(Mac)
我们可以在任何最新 macOS 版本的 Apple Mac 芯片(M1 或 M2)中安装 ComfyUI。
按照 Mac 上的 Accelerated PyTorch 培训指南安装 pytorch。
打开终端并克隆存储库:
`git clone https://github.com/comfyanonymous/ComfyUI`
安装 ComfyUI 依赖项:
`cd ComfyUI pip install -r requirements.txtCopy`
如果我们有另一个 Stable Diffusion UI,我们也许可以重用依赖项。
通过运行以下命令启动 ComfyUI:
`python main.py --force-fp16`
请注意,只有在安装了最新的PyTorch夜间版之后,–force-fp16选项才能生效。
更新 ComfyUI
如果我们从 Github 克隆 ComfyUI(没有使用快速安装独立版本),则只能更新 ComfyUI。
要更新 ComfyUI,请导航到命令提示符/终端中的 ComfyUI 文件夹并键入:
`git pull`
四、ComfyUI 用户界面
节点
我们可以通过右键单击空白处 -> Add Node 来添加节点。
我们可以双击空白区域来获取所有节点的列表和搜索栏:
CTRL + 拖动可让我们选择多个节点。我们可以使用 SHIFT + 拖动将它们一起移动。
我们可以更改节点的颜色以帮助我们保持井井有条。右键 -> Color -> 选择颜色:
连接节点
如果将输入拖动并释放到空白区域,我们将获得兼容节点的列表:
输入和输出仅在颜色相同时才兼容。请注意我如何将紫色输入连接到紫色输出,但无法连接其余任何部分。
执行
当我们单击 Queue Prompt 时,工作流会按照节点的连接顺序传递节点,从加载器开始,加载器没有输入,只有输出。
如果任何节点缺少输入,我们将无法运行提示:
五、ComfyUI 节点解释
我们如何理解实际发生的事情,以便能够创建和修改工作流程?
要理解节点,我们必须了解一些关于 Stable Diffusion 的知识。
让我们来看一下默认的工作流程。
如果我们不在默认的工作流程上,或者我们已经在界面上进行了调整,请点击右侧边栏上的加载默认按钮。
Checkpoint 底模节点
用于生成图像的 .safetensors 或 .ckpt checkpoint 模型有 3 个主要组件:
-
CLIP 模型:将文本转换为 Unet 可以理解的格式
-
Unet:执行“扩散”过程,即我们称之为生成的图像的逐步处理
-
VAE:将图像从潜在空间解码为像素空间(也用于将常规图像从像素空间编码到潜在空间,当我们进行img2img时)
在 ComfyUI 工作流程中,这由 Load Checkpoint 节点及其 3 个输出表示(MODEL 指 Unet)。
这些输出连接到什么?
CLIP 提示词节点
Load Checkpoint 节点的 CLIP 输出连接到 CLIP Text Encode 节点。
CLIP 模型用于将文本转换为 Unet 可以理解的格式(文本的数字表示),我们称这些为嵌入。
CLIP Text Encode 节点将checkpoint的 CLIP 模型作为输入,将提示(正向和负向)作为变量,执行编码过程,并将这些嵌入输出到下一个节点 KSampler。
KSampler 采样器节点
在 Stable Diffusion 中,图像是通过称为采样的过程生成的。
在 ComfyUI 中,此过程发生在 KSampler 节点中。这是实际的“生成”部分,因此我们会注意到,当我们对提示进行排队时,KSampler 需要花费最多的时间来运行。
KSampler 接受以下输入:
-
model :从 Load Checkpoint 节点输出的 MODEL(Unet)
-
positive :由 CLIP 模型编码的正向提示(CLIP Text Encode 节点)
-
negative :由 CLIP 模型编码的负向提示(其他 CLIP Text Encode 节点)
-
latent_image :潜在空间中的图像(Empty Latent Image节点)
由于我们只是根据提示生成图像(txt2img),所以我们使用空白潜在图像节点将 latent_image 传递给一个空白图像。
KSampler发生了什么事情?
扩散是生成图像的实际过程。
我们从一个随机信息数组和嵌入(编码的正向和负向提示)开始。
扩散分为多个步骤进行,每一步都对信息数组(也称为潜变量)进行操作,并产生另一个更接近提示文本的信息数组。
因此,我们从一个随机信息数组开始,最终得到类似于我们所知道的东西。
KSampler输出这些信息。然而,它还没有转换成像素空间(我们看不见它),仍然是一种潜在表示。
VAE 节点
VAEDecode 节点有 2 个输入:
-
我们的 checkpoint 模型附带的 VAE(我们也可以添加自己的 VAE)
-
我们的 KSampler 已经完成去噪的潜在空间图像。
VAE用于将图像从潜空间翻译为像素空间。
最终,它将传递给 Save Image 节点以显示并允许我们下载像素图像。
默认工作流程是我们在 ComfyUI 中找到的最简单的工作流程。
六、ComfyUI 案例
SDXL 案例
SDXL 基本 checkpoint 可以像 ComfyUI 中的任何常规 checkpoint 一样使用。唯一重要的是,为了获得最佳性能,分辨率应设置为 1024x1024 或具有相同像素数但宽高比不同的其他分辨率。例如:896x1152 或 1536x640 都是不错的分辨率。
要将基础模型与精炼模型一起使用,我们可以使用此工作流程。我们可以下载此图像并加载它或将其拖动到 ComfyUI 上来获取它。
-
在左上角,Prompt Group 包括 Prompt 和 Negative Prompt 作为 String Nodes,分别连接到 base 和 refiner 模型的 Samplers。
-
中间左侧的图像尺寸设置为1024 x 1024。
-
SDXL base、SDXL refiner 的底模节点和 VAE 节点位于左下角。
-
SDXL base 和 refiner 的 Samplers 以及 VAE 节点显示在右侧。
-
生成的 base 图像显示在左侧,而 refiner 图像显示在右侧。
SDXL 基础模型
SDXL 精炼模型
基础图像与精炼图像的结果比较
-
精炼图像中的线条更加饱满,杂乱程度较低。
-
背景行星表面在精炼图像中看起来更好。
-
马的面部线条在精炼图像中被简化了。
如何下载工作流程?
-
整个工作流嵌入在工作流图片本身中。只需下载它,将其拖到 ComfyUI 中,我们将拥有与上面相同的工作流程。
-
要加载工作流程,只需单击右侧边栏上的 Load 按钮,然后选择工作流程 .json 文件。
Lora 的例子
所有 LoRA 风格:Lycoris、loha、lokr、locon 等……都以这种方式使用。
我们可以在 ComfyUI 中加载这些图像以获得完整的工作流程。
Loras 是应用在主 MODEL 和 CLIP 模型之上的补丁,因此要使用它们,请将它们放在 models/loras 目录中,并使用 LoraLoader 节点,如下所示:
我们可以通过链接多个 LoraLoader 节点来应用多个 Loras,如下所示:
ControlNet 案例
涂鸦 ControlNet
这是一个如何使用 controlnets 的简单示例,该示例使用 scribble controlnet 和 AnythingV3 模型。我们可以在 ComfyUI 中加载此图像以获得完整的工作流程。
这是我用于此工作流程的输入图像:
OpenPose ControlNet
这是本示例中将使用的输入图像:
这是一个使用 AnythingV3 进行第一次传递的示例,首先通过 Controlnet 进行,然后在第二次传递时不再使用 Controlnet,并且采用 AOM3A3(深渊橙色混合物 3)和它们的 VAE。
我们可以在 ComfyUI 中加载此图像以获得完整的工作流程。
混合 ControlNet
多个 ControlNet 和 T2I 适配器可以像这样应用,并产生有趣的结果:
我们可以在 ComfyUI 中加载此图像以获得完整的工作流程。
输入图像:
七、下载模型
使用 AutoDL 云端模型时不需要下载的,小潘总镜像中已经帮我们下载好了。
为了运行 SDXL,我们可能还需要其他几个模型。
我们可以从下载 checkpoint 模型开始,并在需要时下载其余模型。
checkpoint
将 checkpoint 放置在文件夹 ComfyUI/models/checkpoints 中:
- SDXL 1.0 基础底模
https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors
- SDXL 1.0 精炼底模
https://huggingface.co/stabilityai/stable-diffusion-xl-refiner-1.0/resolve/main/sd_xl_refiner_1.0.safetensors
VAE
将 VAE 放入文件夹 ComfyUI/models/vae 中
- Fixed SDXL 0.9 VAE
https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/resolve/main/sdxl_vae.safetensors
LoRA
将 LoRA 放入文件夹 ComfyUI/models/loras 中
- SDXL Offset Noise LoRA
https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors
Upscaler
对于放大图像:某些工作流程不包含它们,其他工作流程需要它们。
将 upscalers 放入文件夹 ComfyUI/models/upscaler 中
- 4x_NMKD-Siax_200k.pth upscaler
https://huggingface.co/uwg/upscaler/resolve/main/ESRGAN/4x_NMKD-Siax_200k.pth
- 4x-Ultrasharp.pth upscaler
https://huggingface.co/uwg/upscaler/resolve/main/ESRGAN/4x-UltraSharp.pth
八、推荐的工作流
ComfyUI 最好的部分之一是下载和在工作流程之间切换非常容易。
以下是官方 ComfyUI 存储库中的示例工作流程列表。
https://comfyanonymous.github.io/ComfyUI_examples/
要加载工作流程,只需单击右侧边栏上的 Load 按钮,然后选择工作流程 .json 文件。
有些工作流程还要求我们将存储库 git clone 到我们的 ComfyUI/custom_nodes 文件夹,然后重新启动 ComfyUI。
以下是 Stable Diffusion社区中一些流行的工作流程:
Sytan 的 SDXL 工作流
https://github.com/SytanSD/Sytan-SDXL-ComfyUI
SDXL 最流行的工作流程之一。具有升级功能。
Searge 的 SDXL 工作流
https://github.com/SeargeDP/SeargeSDXL/blob/main/README.md
具有 3 种操作模式(文本到图像、图像到图像和修复),这些模式均可在同一工作流程中使用,并且可以通过选项进行切换。
本文最开始的三个小丑,就是用下面这个工作流画的。是不是有点震惊!反正我的眼睛已经是看花了。
为了帮助大家更好地掌握 ComfyUI,我在去年花了几个月的时间,撰写并录制了一套ComfyUI的基础教程,共六篇。这套教程详细介绍了选择ComfyUI的理由、其优缺点、下载安装方法、模型与插件的安装、工作流节点和底层逻辑详解、遮罩修改重绘/Inpenting模块以及SDXL工作流手把手搭建。
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取
一、ComfyUI配置指南
- 报错指南
- 环境配置
- 脚本更新
- 后记
- …
二、ComfyUI基础入门
- 软件安装篇
- 插件安装篇
- …
三、 ComfyUI工作流节点/底层逻辑详解
- ComfyUI 基础概念理解
- Stable diffusion 工作原理
- 工作流底层逻辑
- 必备插件补全
- …
四、ComfyUI节点技巧进阶/多模型串联
- 节点进阶详解
- 提词技巧精通
- 多模型节点串联
- …
五、ComfyUI遮罩修改重绘/Inpenting模块详解
- 图像分辨率
- 姿势
- …
六、ComfyUI超实用SDXL工作流手把手搭建
- Refined模型
- SDXL风格化提示词
- SDXL工作流搭建
- …
由于篇幅原因,本文精选几个章节,详细版点击下方卡片免费领取