ComfyUI 工作流进阶教程 - NEKOparapa/ReaDreamAI GitHub Wiki
ComfyUI 工作流进阶教程
本教程将指导你如何将自己搭建或喜爱的 ComfyUI 工作流(Workflow)与我们的应用程序无缝集成,从而实现高度个性化、功能强大的 AI 绘画体验。
1.为什么要使用自定义工作流?
虽然应用内置了优秀的预设工作流,但自定义工作流能为你解锁无限可能:
- 更换核心模型:轻松切换你喜欢的任何 SDXL 或 SD 1.5 大模型(Checkpoints)。
- 集成 LoRA:在工作流中串联一个或多个 LoRA 模型,以实现特定的画风、角色或概念。
- 高级图像处理:加入高清放大、面部修复、ControlNet 等复杂节点。
- 完全掌控:从采样器(Sampler)到调度器(Scheduler),工作流的每一个细节都由你精确掌控。
2.核心原理:应用如何与你的工作流“对话”?
要让应用驱动你的工作流,它需要知道几个关键的“控制开关”在哪里。想象你的工作流是一台复杂的机器,应用需要知道:
- “正面提示词”应该填入哪个节点的哪个输入框?
- “负面提示词”应该填入哪个节点的哪个输入框?
- “生成图片的宽度和高度”在哪个节点设置?
- “一次生成几张图片(Batch Size)”在哪个节点设置?
这些“开关”的地址就是通过 “节点 ID (Node ID)” 和 “输入字段名 (Field Name)” 来确定的。我们的应用设置界面,正是为了让你填入这些精确的“地址”。
第一步:准备自定义的工作流
在 ComfyUI 中,搭建或加载一个你希望使用的文生图工作流。为了能被应用控制,这个工作流必须包含能实现以下功能的节点:
- 正面提示词输入:通常是
CLIPTextEncode (CLIP文本编码器)节点。 - 负面提示词输入:通常是另一个
CLIPTextEncode (CLIP文本编码器)节点。 - 图像尺寸和数量控制:通常是
EmptyLatentImage(空Latent)节点,它同时控制width(宽度)、height(高度)和batch_size(生图数量)。 - 图像的保存和预览:生成图片用来展示或者保存的节点,通常由此获取最后的图像
最核心的四个节点:
你可以在此基础上添加任意多的 LoRA、ControlNet 或其他节点,只要保证上述核心功能的节点存在即可。
第二步:查找关键节点的 ID 和字段名
这是最关键的一步。我们提供两种方法来找到这些信息。
方法一(推荐):在 ComfyUI 界面中直接查看
这是最直观、最简单的方法。
-
开启节点ID显示:点击ComfyUI的loog,弹出下拉菜单,找到⚙️图标进入设置页面,找到"画面"-->“节点ID标签”选项,进行勾选。现在,每个节点的标题上都会显示它的 ID 号。
-
查找节点ID:
- 找到你用来输入正面提示词的
CLIPTextEncode节点,记下它的 ID。 - 找到你用来输入负面提示词的
CLIPTextEncode节点,记下它的 ID。 - 找到控制图像尺寸和数量的
EmptyLatentImage节点,记下它的 ID。
- 找到你用来输入正面提示词的
- 确定字段名:
- 对于
CLIPTextEncode节点,应用需要控制的是那个大的文本输入框,它的字段名固定为text。 - 对于
EmptyLatentImage节点,它的输入字段名分别是width、height和batch_size。
- 对于
方法二(备用):从导出的 API 文件中查找
如果你更习惯看代码,或者想再次确认,可以从导出的 JSON 文件中查找。
-
在 ComfyUI 点击右侧菜单的 "Save (API Format)" 按钮,将工作流保存为
.json文件。 -
用文本编辑器(如 VS Code, Notepad++)打开这个
.json文件。它本质上是一个记录了所有节点及其连接方式的文本文件。 -
定位节点:文件内容是一个大的 JSON 对象,每个键值对代表一个节点,键是节点的 ID。你可以通过
class_type(节点类型)和inputs(输入)来定位。示例 JSON 片段:
{ // ... 其他节点 ... "6": { // <--- 这是正面提示词节点的 ID "inputs": { "text": "masterpiece, best quality, girl", // <--- 这是输入字段名 "clip": [ "4", 1 ] }, "class_type": "CLIPTextEncode", // <--- 这是节点类型 "_meta": { "title": "Positive Prompt" } }, "7": { // <--- 这是负面提示词节点的 ID "inputs": { "text": "bad hands, worst quality", // <--- 这是输入字段名 "clip": [ "4", 1 ] }, "class_type": "CLIPTextEncode", "_meta": { "title": "Negative Prompt" } }, "5": { // <--- 这是图像尺寸/数量节点的 ID "inputs": { "width": 1024, // <--- 宽度字段名 "height": 1024, // <--- 高度字段名 "batch_size": 1 // <--- 生图数量字段名 }, "class_type": "EmptyLatentImage", "_meta": { "title": "Empty Latent Image" } } // ... 其他节点 ... }
第三步:在应用中配置
现在,你已经拥有了所有需要的信息。回到我们的应用,进入 设置 -> ComfyUI设置 页面。
- 选择工作流类型:将“文生图工作流”选项切换为 “自定义工作流”。
- 选择工作流文件:点击“选择”按钮,选中你在上一步中导出的那个
.json文件。应用会自动复制并管理这个文件。 - 填写ID和字段:将你在第二步中找到的值,一一填入对应的输入框中。
根据上面的示例,配置应该如下:
- 正面提示词节点 ID:
6 - 输入字段:
text - 负面提示词节点 ID:
7 - 输入字段:
text - 生图数量节点 ID:
5 - 生图数量输入字段:
batch_size - 图片尺寸节点 ID:
5(注意:通常和生图数量是同一个节点) - 图片宽度输入字段:
width - 图片高度输入字段:
height
填写完毕后,设置会自动保存。现在,回到生图页面,应用就会使用你的自定义工作流进行AI绘画了!
常见问题与排错 (Troubleshooting)
-
Q: 我的提示词没有生效!
- A: 最常见的原因是节点ID或字段名填错。请仔细核对JSON文件或ComfyUI界面。确保你找到的是正确的
CLIPTextEncode节点,并且字段名是text。
- A: 最常见的原因是节点ID或字段名填错。请仔细核对JSON文件或ComfyUI界面。确保你找到的是正确的
-
Q: 应用报错或无法生成图片。
- A1: 请确认你导出的是 API格式 (Save (API Format)) 的JSON文件,而不是普通的工作流 (Save)。普通工作流缺少应用所需的详细信息。
- A2: 请确保你的工作流在 ComfyUI 中本身能够独立正常运行。有时工作流在本地可以跑,但在服务器上因为缺少模型、节点或路径错误而失败。
- A3: 检查你的ComfyUI服务器是否正在运行,并且应用中的地址和端口设置正确。
-
Q: 我可以把生图数量和图片尺寸分开用不同的节点控制吗?
- A: 可以!本应用的设计非常灵活。如果你的工作流中,有一个节点(比如ID为
10)控制尺寸,另一个节点(比如ID为12)控制数量,你只需在设置中分别填入10和12即可。但对于绝大多数工作流,它们都是由同一个EmptyLatentImage节点控制的。
- A: 可以!本应用的设计非常灵活。如果你的工作流中,有一个节点(比如ID为
-
Q: 修改了ComfyUI里的工作流,需要重新在App里配置吗?
- A: 如果你只是调整了节点参数(比如采样步数)或更换了模型/LoRA文件,而没有改变我们配置中用到的那几个核心节点的ID,那么无需在App中做任何改动。如果你删除并重新添加了这些核心节点(导致ID变化),则需要重新导出API JSON文件,并在App中重新选择并填写新的ID。