技术点滴 · 2024年3月27日 0

上手使用 Stable Diffusion ComfyUI 的基本功能

学习 ComfyUI 的最佳方法是通过示例。因此,在本文中我们将学习如何在最简单的文本转图像工作流程中在 ComfyUI 中执行操作。在学习了一些基本示例后,您将开始了解如何制作自己的示例。

在本教程的最后,我们将学习制作一个相当复杂的工作流程来了解并上手 ComfyUI

ComfyUI 基本控制

  • 界面缩放:使用鼠标滚轮或双指捏合来放大或缩小。
  • 连接节点:拖拽并按住输入或输出的点即可形成连接。您只能连接相同类型的输入和输出。
  • 移动节点:按住并拖动左键即可在工作区内移动。
  • 面板显示:按 Ctrl-0 (Windows)Cmd-0 (Mac) 显示队列面板。

ComfyUI 管理器

ComfyUI 管理器是一个自定义节点,可让您通过 ComfyUI 界面安装和更新其他自定义节点。

在 Windows 上安装 ComfyUI Manager

在文件资源管理器应用程序中,导航到文件夹ComfyUI_windows_portable > ComfyUI > custom_nodes

在地址栏中输入cmd并按 Enter

应该会出现一个命令提示符终端。

键入以下命令并按 Enter

git clone https://github.com/ltdrdata/ComfyUI-Manager

等待它完成。

重新启动 ComfyUI。您应该会在浮动面板上看到新的 “Manager” 按钮

提示:如果 ComfyUI 管理器没有出现,请阅读终端中的错误消息。

常见的错误模式是系统中未安装GIT(源代码管理系统)。安装它应该可以解决问题。

在 Mac 上安装 ComfyUI Manager

要安装 ComfyUI Manager,请转到自定义节点文件夹终端(Mac)应用程序:

cd ComfyUI/custom_nodes

并将节点克隆到本地存储。

git clone https://github.com/ltdrdata/ComfyUI-Manager

完全重启 ComfyUI。

使用 ComfyUI Manager

安装后,您应该在队列提示菜单上看到一个额外的管理器 (Manager) 按钮。

单击”Manager“按钮会显示一个 GUI,让您:

  • 安装/卸载自定义节点 ( Install Custom Nodes )。
  • 安装当前工作流中缺失的节点 (Install Missing Custom Nodes)。
  • 安装模型,例如 Checkpoint模型、AI Upscaler、VAE、LoRA、ControlNet 模型等。
  • 更新 ComfyUI 用户界面。
  • 阅读社区手册。

安装缺失节点功能对于查找当前工作流程中所需的自定义节点特别有用。

安装自定义节点菜单可让您管理自定义节点。您可以卸载或禁用已安装的节点,也可以安装新节点。

ComfyUI 管理器。

如何安装缺失的自定义节点

您可能没有安装工作流中所需的所有自定义节点。加载工作流文件后,请执行以下步骤安装缺少的自定义节点。

  1. 单击菜单中的 “Manager
  2. 单击“Install Missing Custom Nodes”。
  3. 完全重启 ComfyUI

ComfyUI 全部更新

更新 ComfyUI 最简单的方法是单击ComfyUI 管理器中的“Update All”按钮。它将更新 ComfyUI 本身和所有已安装的自定义节点。重新启动 ComfyUI 以完成更新。

如果您想单独更新 ComfyUI 或自定义节点,请按照以下更新步骤操作。

如何更新 ComfyUI

要更新 ComfyUI:

  1. 单击菜单中的 “Manager
  2. 单击 “Update ComfyUI“。
  3. 完全重启 ComfyUI

如何更新自定义节点

您可以使用 ComfyUI 管理器来更新自定义节点。

  1. 单击菜单中的 “Manager
  2. 点击 “Fetch Updates“。这可能需要一段时间才能完成。
  3. 单击Install Custom Nodes
  4. 如果有可用更新,已安装的自定义节点旁边会出现一个新的 “Update” 按钮。
  5. 单击 “Update” 以更新节点。

6. 重新启动 ComfyUI

如果此更新过程不起作用,您将需要使用终端(例如 PowerShell 应用程序(Windows)或终端应用程序(Mac))来执行 git pull

搜索自定义节点

Add Node”菜单可能不是查找自定义节点的最佳方式。安装许多自定义节点后,事情只会变得更加困难。

您可以双击任何空白区域来调出菜单来搜索节点。

文本转图像(txt2img)

我们首先来看最简单的情况:从文本生成图像

通过这个例子,你也会学到 ComfyUI 文本转图像的思路(它和 Automatic1111 WebUI 非常不同)。另外,通过 ComfyUI 你还会更好地了解 Stable Diffusion 是如何工作的。

1. 在 ComfyUI 里生成第一张图片

首次启动 ComfyUI 后,您应该会看到默认的文本转图像工作流程。它应该看起来像这样:

如果您看到的不是这个,请单击右侧面板上的“加载默认值 (Load Default)”以返回此默认的文本到图像工作流程。

如果您没有看到右侧面板,请按 Ctrl-0 (Windows)Cmd-0 (Mac)

您将看到工作流程由两个基本构建块组成:节点 ( node ) 和边 ( edge )。

节点( node )是矩形块,例如,加载检查点、剪辑文本编码器等。每个节点执行一些代码。如果你有一些编程经验,你可以把它们看作函数。每个节点需要三件事

  • 输入:位于节点左侧的文本和点,一般用小写的名字。
  • 输出:位于节点右侧的文本和点,一般用大写的名字。
  • 参数:节点中心的字段。

边( edge )是连接不同节点的输出和输入之间的线。

如果节点上的术语看起来令人生畏,请不要担心。我们将通过一个使用 ComfyUI 的简单示例来介绍一些概念,然后逐步转向更复杂的工作流程。

以下是在默认的工作流程中使用 ComfyUI 的最简单方法。

1.1 选择模型

首先,在加载检查点 ( Load Checkpoint ) 节点中选择一个 Stable Diffusion 检查点 ( Checkpoint ) 模型。单击模型名称以显示可用模型的列表。

如果节点太小,您可以使用鼠标滚轮或在触摸板上用两根手指捏合来放大或缩小。

如果单击模型名称没有任何反应,则可能是您没有安装模型,请先下载相关的模型。

1.2 输入正向提示( positive )和反向( negative )提示

你应该看到两个标记为 CLIP Text Encode (Prompt) 的节点。在上面的节点中输入你的正向提示,在下面的节点中输入你的反向提示。

CLIP Text Enode 节点首先将提示转换为标记 ( tokens ),然后使用文本编码器将其编码为嵌入 ( embeddings )。

您可以使用语法(keyword:weight)来控制关键字的权重。例如 (关键字:1.2) 可增加其效果。 (关键字:0.8) 可降低其效果。

1.3. 生成图像

单击 “Queue Prompt” 以运行工作流程。短暂等待后,您应该会看到生成的第一张图像。

2. 理解 txt2img 的工作过程

2.1 加载检查点节点

使用“Load Checkpoint”节点选择模型。Stable Diffusion模型主要有三个部分:

  1. 模型:潜在空间中的噪声预测模型。
  2. CLIP:语言模型对正向和反向提示进行预处理。
  3. VAE:VAE在像素和潜在空间之间转换图像。

MODEL 输出连接到采样器 ( KSampler ),在这里完成逆向扩散过程。

CLIP 输出连接到提示,因为提示需要经过 CLIP 模型处理后才有用。

在文本转图像中,VAE 只用于最后一步:将图像从潜在空间转换为像素空间。换句话说,我们只使用自动编码器的解码器部分。

2.2 CLIP 文本编码

CLIP文本编码节点获取提示并将其输入到 CLIP 语言模型中。CLIP OpenAI 的语言模型,将提示中的每个单词转换为嵌入 ( Embeddings )。

2.3 空潜像 ( Empty Latent Image )

文本到图像的过程从潜在空间中的随机图像开始。

潜在图像的大小与像素空间中的实际图像成正比。因此,如果你想改变图像的大小,你就要改潜在图像的大小。您可以设置高度权重来改变像素空间中的图像大小。在这里,您还可以设置批量大小,即每次运行生成的图像数量。

2.4 采样器 ( KSampler )

KSampler Stable Diffusion 中图像生成的核心。它将随机图像降噪为与您的提示相匹配的图像。

以下是 KSampler 节点中的参数。

  • 种子 ( seed ):随机种子值控制清晰图像的初始噪声,从而控制最终图像的组成。
  • Control_after_generation:种子在每一代之后应如何变化。它可以是获取随机值(随机化)、增加 1(增量)、减少 1(减量)或保持不变(固定)。
  • Steps:采样步骤数。步数越高,数值过程中的伪影越少。
  • Sampler_name:在这里,您可以设置采样算法。
  • 调度程序 (scheduler):控制噪声水平在每个步骤中如何变化。
  • 去噪 (denoise):去噪过程应消除多少初始噪声。1 表示全部。

图像到图像 ( img2img ) 工作流程

Img2img工作流程是 Stable Diffusion 中的另一个主要工作流程。它根据提示和输入图像生成图像。可以通过调整去噪强度来控制稳定扩散应跟随基础图像的程度。

首先将此工作流图像下载并拖放到 ComfyUI 进行加载。

comfyUI img2img 工作流程。

要使用此 img2img 工作流程:

  1. 选择检查点模型。
  2. 修改正向和反向的提示。
  3. 可选择调整KSampler 节点中的去噪(去噪强度)。
  4. 按下队列提示开始生成。

通过 Upscale 提高图像分辨率

stable diffusion 中有几种方法可以进行upscale。为了教学目的,让我们使用

  1. AI upscaler
  2. Hi-res fix
  3. Ultimate upscale

AI upscaler

AI upscaler 是一种在填充细节的同时放大图像的 AI 模型。它们不是 Stable Diffusion 模型,而是经过放大图像训练的神经网络。

首先下载页面上的图像,然后加载此升级工作流程。将图像拖放到 ComfyUI

提示:拖放使用 ComfyUI 制作的图像会加载生成该图像的工作流程。

ComfyUI 中升级工作流程中的 AI 升级器。

在这个基本示例中,您可以看到文本转图像的唯一附加功能是

  • Load Upscale Model:用于加载 AI upscaler 模型。(此节点位于“Add Node” > “loaders”)
  • Upscale Image (using Model):该节点现在位于 VAE 解码器和保存图像节点之间。它采用图像和升级模型。并输出升级后的图像。(此节点位于”Add Node” > “Image“> upscaling“)

要使用此 upscale 工作流程,您必须从Upscaler Wiki下载一个 upscaler 模型,并将其放在文件夹 models > upscale_models 中。

选择一个放大器并单击“Queue Prompt”以生成放大后的图像。该图像应该已被 AI 放大器放大了 4 倍。

练习:重新创建从文本到图像的 AI 升频器工作流程

通过在默认的文本到图像工作流程中添加升频器来创建您的第一个自定义工作流程是一个很好的练习。

  1. 单击“Load Default”返回基本文本转图像工作流程。

2. 右键点击 Save Image 旁边的空白处。选择 Add Node > loaders > Load Upscale Model

3. 单击 VAE DecodeSave Image 之间的连线上的点。单击 Delete 以删除该连线。

4. 右键单击​​空白处,然后选择 “Add Node” > “image” > “upscaling” > “Upscale Image (using Model)” 以添加新节点。

5. 拖拽并按住 “Load Upscale Model” 的 “UPSCALE_MODEL” 输出。将其放到 Upscale Image (using Model) 节点的 upscale_model 处。

6. 拖拽 “VAE Decode” 的 “IMAGE” 输出并按住,将其放到 “Upscale Image (using Model)” 的图像输入处。

7. 拖拽并按住 Upscale Image (uisng Model) 节点的 IMAGE 输出。将其放到 “Save Image” 节点的 “images” 输入处。

8. 单击 Queue Prompt 以测试工作流程。

现在您知道如何创建新的工作流程。这项技能对于创建您自己的工作流程非常有用。

高分辨率修复 (Hi-Res Fix)

下载此页面上的第一个图像并将其放入 ComfyUI 中以加载 Hi-Res Fix 工作流程。

这是一个比较复杂的例子,但也展示了 ComfyUI 的强大功能。研究完节点和边后,你就会知道 Hi-Res Fix 到底是什么。

第一部分与文本转图像相同:使用采样器对潜像进行去噪,并根据正向和反向提示进行调节。

然后,工作流程会在潜在空间中对图像进行放大,并执行一些额外的采样步骤。它会向图像添加一些初始噪声,并以一定的去噪强度对其进行去噪。

然后,VAE 解码器对较大的潜在图像进行解码,以生成放大的图像。

SD Ultimate Upscale – ComfyUI edition

SD Ultimate upscale是AUTOMATIC1111 WebUI的升级扩展。您也可以在 ComfyUI 上使用它:ComfyUI SD Ultimate Upscale Github 页面

这对于安装自定义节点也是一个很好的练习。

安装 SD Ultimate Upscale

要安装此自定义节点,请转到PowerShell(Windows)或终端(Mac)应用程序中的自定义节点文件夹:

cd ComfyUI/custom_nodes

并将节点克隆到本地存储。

git clone https://github.com/ssitu/ComfyUI_UltimateSDUpscale --recursive

完全重启 ComfyUI。

使用 SD Ultimate Upscale

一个好的练习是从 AI Upscale 工作流程开始。添加 SD Ultimate Upscale 并比较结果。您可以在下面下载此工作流程示例。将图像拖放到 ComfyUI 进行加载:Ultimate Upscale 工作流程

通过将图像拖放到 ComfyUI 或使用 “Load” 按钮进行加载,加载 AI Upscale 工作流程。

右键单击空白处。选择 “Add Node” > “image” > “upscaling” > “Ultimate SD Upscale“。

您应该会看到新节点 Ultimate SD Upscale。按如下方式连接其输入。

  • 将 “image” 转换为 VAE Decode 的 “IMAGE“。
  • 用 “model” 来加载检查点的模型。
  • 将正向提示框的 CONDITIONING 连接到 Ultimate SD Upscale 的 “positive”。
  • 将反向提示框的 CONDITIONING 连接到 Ultimate SD Upscale 的 “negative“。
  • vae 连接到 “Load Checkpoint” 的 VAE
  • upscale_model 连接到 Load Upscale Model UPSCALE_MODEL

对于输出:

  • IMAGE 保存图像。

如果它们连接正确,单击 “Queue Prompt” 应该会显示两个大图像,一个带有 AI Upscale,另一个带有 Ultimate Upscale

ComfyUI 修复 ( Inpainting )

您可以使用 ComfyUI 进行修复。这是重新生成图像某一部分的基本技术。

1. 打开 inpaint 工作流程

下载以下修复工作流程。将 JSON 文件拖放到 ComfyUI。

下载

2. 上传图片

选择您想要修复的图像。您可以在此处下载 PNG 格式的图像,并将其上传至工作流程。

下载

3. 创建修复蒙版

右击图像。在上下文菜单中选择“Open in MaskEditor” 。

遮盖您想要再生的区域。

ComfyUI 稳定的 Diffusion XL 工作流程。
简单的 SDXL 工作流程。

单击“Save to node”。

4. 调整参数

选择检查点模型。请注意,修复模型不适用于该工作流程。

更改提示:

a man wearing sunglasses, epic style, super hero, highly detailed

原始去噪强度(denoise)太高。将其设置为 0.6。

5. 生成修复

最后,按下 “Queue Prompt” 来执行修复。

SDXL 工作流程

由于其极高的可配置性,ComfyUI 是首批使Stable Diffusion XL 模型发挥作用的 GUI 之一。下载以下 ComfyUI 的 SDXL 工作流程。将图像拖放到 ComfyUI 进行加载:下载

你需要改变

  • 积极提示
  • 负面提示

就是这样!

本页面上还有一些更复杂的 SDXL 工作流程。

打开终端。

cd 到自定义节点的目录。下面是进入 controlnet aux 目录的示例。

 cd ComfyUI/custom_nodes/comfyui_controlnet_aux/

执行 git pull。

git pull

重新启动 ComfyUI。

ComfyUI Impact 包

ComfyUI Impact 包是一组免费自定义节点包,可极大地增强 ComfyUI 的功能。

Impact Pact 中的自定义节点比我在本文中介绍的要多。请参阅官方教程以逐一学习它们。如果您想有效地使用这组节点,请通读初学者教程。

安装 ComfyUI Impact

要安装 ComfyUI Impact Pack,首先打开PowerShell应用程序(Windows)或终端应用程序(Mac 或 Linux)。

cd custom_nodes

将 Impact Pack 克隆到您的本地存储。

git clone https://github.com/ltdrdata/ComfyUI-Impact-Pack.git

克隆 Impact Pack 所需的工作流组件。

git clone https://github.com/ltdrdata/ComfyUI-Workflow-Component

完全重启 ComfyUI。

使用 Face Detailer (SDXL) 重新生成脸部

ADetailer是一个 AUTOMATMIC1111 扩展,可自动使用修复功能修复面部。ComfyUI 中的对应功能是Face Detailer(也称为DDetailer)。它包含在Impact Pack中。

您可以在 Impact Pack 中使用此工作流程,使用Face Detailer自定义节点和 SDXL 基础和细化模型重新生成面部。下载 JSON 文件并将其放入 ComfyUI。

下载

要使用此工作流程,您需要设置

  • “Load Image”节点中的初始图像。
  • 上方的Load Checkpoint节点中的 SDXL base model。
  • 下方的Load Checkpint节点中的 SDXL refiner model。
  • 新图像的正向提示和反向提示。

单击“Queue Prompt”以启动工作流程。

刘德华的脸不需要任何修饰,所以我用提示把他变成了韩国流行音乐明星。

a closeup photograph of a korean k-pop star man

只有脸部发生了变化,而背景和其他一切保持不变。

使用Face Detailer (SD v1.5) 重新生成脸部

以下是使用 Face Detailer 自动修复面部的文本转图像工作流程示例。这是 v1.5 工作流程:下载

使用ControlNet进行修复可通过遵循原始内容提供额外的一致性。以下是使用 Face Detailer 和 ControlNet Tile 进行文本到图像工作流程的示例:下载

嵌入(embeddings)

要在 ComfyUI 中使用嵌入(embedding,也称为文本反转),请在正向或反向提示框中输入 embedding: 。例如:

embedding:BadDream

ComfyUI 将在文件夹 ComfyUI > models > embeddings 中搜索具有相同文件名的嵌入。

嵌入自动完成功能

但查找文件名需要做很多工作。相反,您可以通过安装ComfyUI-Custom-Scripts自定义节点来启用嵌入名称的自动完成功能。

您可以使用 ComfyUI 管理器进行安装。单击管理器 > 安装自定义节点。搜索“ComfyUI-Custom-Scripts”并安装。重新启动 ComfyUI。

输入提示后embedding:,将出现可用嵌入的列表。选择您要使用的嵌入。

嵌入权重

由于嵌入只是关键字,因此您可以以类似的方式将关键字权重应用于嵌入。

(embedding: BadDream:1.2)

这会使嵌入权重增加 20%。

LoRA

LoRA是一个修改检查点模型的小型模型文件。它经常用于修改样式或将人物注入模型。

事实上,LoRA的修改在ComfyUI中是很清楚的:

LoRA模型改变了检查点模型的MODEL和CLIP,但保留了VAE不变。

简单的 LoRA 工作流程

这是最简单的 LoRA 工作流程:使用 LoRA 和检查点模型将文本转为图像。

下载简单的 LoRA 工作流程

要使用工作流:

  1. 选择一个检查点模型。
  2. 选择 LoRA。
  3. 修改提示和否定提示。
  4. 单击“Queue Prompt”

多个 LoRA

您可以在同一个文本到图像工作流程中使用两个 LoRA。

下载双 LoRA 工作流程

用法与一个 LoRA 类似,但现在您必须选择两个。

这两个 LoRA 是相继应用的。

连接两个字符串

要连接两个字符串,您将使用ComfyUI-Custom-Scripts自定义节点中名为“String Function”的节点。

您应该已经安装此自定义节点以启用文本反转的自动完成。如果没有,请在 ComfyUI Manager 中安装它。

双击空白处。搜索并添加StringFunction节点。

右键单击节点并选择将 text_a 转换为输入,节点现在应如下所示:

添加一个 Primitive 节点并将其连接到 text_a 输入。现在,您可以在两个不同的文本框中编写提示。它们将连接在一起。

要使用它,您需要将CLIP Text Encode(Prompt)的文本框转换为输入。

最后,连接 String FunctionCLIP Text Encode (Prompt) 节点。

ComfyUI 的快捷方式和技巧

复制和粘贴

选择一个节点并按Ctrl+C复制。

Ctrl+V粘贴。

Ctrl+Shift+V粘贴时输入连接保持完整。

移动多个节点

创建一个来将一组节点一起移动。

或者,按住 Ctrl 并拖动以创建一个框来选择多个节点。您也可以按住 Ctrl 来选择多个节点。

要移动它们,请按住 Shift 并移动鼠标。

静音节点

您可以通过静音来暂时禁用节点。选择一个节点,然后按 Ctrl+M 来禁用节点。

没有键盘快捷键可以将组静音。您可以在右键菜单中选择“绕过组节点”来绕过它。或者将组中的第一个节点静音以禁用它。

最小化节点

单击节点左上角的点可将其最小化。

生成图像

Ctrl+Enter将工作流程放入队列并生成图像。

嵌入式工作流程

ComfyUI 将整个工作流程保存在其保存的 PNG 文件的元数据中。要加载工作流程,请将图像拖放到 ComfyUI。

修复种子以节省时间

ComfyUI 仅在输入发生变化时重新运行节点。如果您正在处理一长串节点,则可以通过修复种子来节省重新生成上游结果的时间。

练习:制定一个工作流程来比较有无 LoRA

要想擅长使用 ComfyUI,您确实需要制定自己的工作流程。

一个很好的练习是创建一个工作流程来比较有和没有 LoRA 的文本到图像,同时保持其他所有条件不变。

为了实现这一点,您需要知道如何在两个节点之间共享参数。

两个节点之间共享参数

让我们在两个 K-Sampler 中使用相同的种子。

它们有自己的种子值。要在两者之间使用相同的种子值,请右键单击节点并选择将种子转换为输入

您应该获得一个名为seed的新输入节点。

右键单击空白处。选择添加节点>实用程序>原始节点。将原始节点连接到两个种子输入。

现在,两个采样器之间共享一个种子值。

比较带有和不带有 LoRA 的图像的工作流程

仅使用此技术,您就可以修改单个 LoRA示例,以创建比较 LoRA 效果的工作流程,同时保持其他所有条件不变。

比较 Epilson 抵消 LoRA 的效果。顶部:使用 LoRA。底部:不使用 LoRA。