ComfyUI 工作流进阶教程 - NEKOparapa/ReaDreamAI GitHub Wiki

ComfyUI 工作流进阶教程

本教程将指导你如何将自己搭建或喜爱的 ComfyUI 工作流(Workflow)与我们的应用程序无缝集成,从而实现高度个性化、功能强大的 AI 绘画体验。

1.为什么要使用自定义工作流?

虽然应用内置了优秀的预设工作流,但自定义工作流能为你解锁无限可能:

  • 更换核心模型:轻松切换你喜欢的任何 SDXL 或 SD 1.5 大模型(Checkpoints)。
  • 集成 LoRA:在工作流中串联一个或多个 LoRA 模型,以实现特定的画风、角色或概念。
  • 高级图像处理:加入高清放大、面部修复、ControlNet 等复杂节点。
  • 完全掌控:从采样器(Sampler)到调度器(Scheduler),工作流的每一个细节都由你精确掌控。

2.核心原理:应用如何与你的工作流“对话”?

要让应用驱动你的工作流,它需要知道几个关键的“控制开关”在哪里。想象你的工作流是一台复杂的机器,应用需要知道:

  1. “正面提示词”应该填入哪个节点的哪个输入框?
  2. “负面提示词”应该填入哪个节点的哪个输入框?
  3. “生成图片的宽度和高度”在哪个节点设置?
  4. “一次生成几张图片(Batch Size)”在哪个节点设置?

这些“开关”的地址就是通过 “节点 ID (Node ID)”“输入字段名 (Field Name)” 来确定的。我们的应用设置界面,正是为了让你填入这些精确的“地址”。


第一步:准备自定义的工作流

在 ComfyUI 中,搭建或加载一个你希望使用的文生图工作流。为了能被应用控制,这个工作流必须包含能实现以下功能的节点:

  1. 正面提示词输入:通常是 CLIPTextEncode (CLIP文本编码器) 节点。
  2. 负面提示词输入:通常是另一个 CLIPTextEncode (CLIP文本编码器) 节点。
  3. 图像尺寸和数量控制:通常是 EmptyLatentImage(空Latent) 节点,它同时控制 width(宽度)、height(高度)和 batch_size(生图数量)。
  4. 图像的保存和预览:生成图片用来展示或者保存的节点,通常由此获取最后的图像

最核心的四个节点:

你可以在此基础上添加任意多的 LoRA、ControlNet 或其他节点,只要保证上述核心功能的节点存在即可。


第二步:查找关键节点的 ID 和字段名

这是最关键的一步。我们提供两种方法来找到这些信息。

方法一(推荐):在 ComfyUI 界面中直接查看

这是最直观、最简单的方法。

  1. 开启节点ID显示:点击ComfyUI的loog,弹出下拉菜单,找到⚙️图标进入设置页面,找到"画面"-->“节点ID标签”选项,进行勾选。现在,每个节点的标题上都会显示它的 ID 号。

  2. 查找节点ID

    • 找到你用来输入正面提示词CLIPTextEncode 节点,记下它的 ID。
    • 找到你用来输入负面提示词CLIPTextEncode 节点,记下它的 ID。
    • 找到控制图像尺寸和数量EmptyLatentImage 节点,记下它的 ID。
  1. 确定字段名
    • 对于 CLIPTextEncode 节点,应用需要控制的是那个大的文本输入框,它的字段名固定为 text
    • 对于 EmptyLatentImage 节点,它的输入字段名分别是 widthheightbatch_size

方法二(备用):从导出的 API 文件中查找

如果你更习惯看代码,或者想再次确认,可以从导出的 JSON 文件中查找。

  1. 在 ComfyUI 点击右侧菜单的 "Save (API Format)" 按钮,将工作流保存为 .json 文件。

  2. 用文本编辑器(如 VS Code, Notepad++)打开这个 .json 文件。它本质上是一个记录了所有节点及其连接方式的文本文件。

  3. 定位节点:文件内容是一个大的 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设置 页面。

  1. 选择工作流类型:将“文生图工作流”选项切换为 “自定义工作流”
  2. 选择工作流文件:点击“选择”按钮,选中你在上一步中导出的那个 .json 文件。应用会自动复制并管理这个文件。
  3. 填写ID和字段:将你在第二步中找到的值,一一填入对应的输入框中。

根据上面的示例,配置应该如下:

  • 正面提示词节点 ID: 6
  • 输入字段: text
  • 负面提示词节点 ID: 7
  • 输入字段: text
  • 生图数量节点 ID: 5
  • 生图数量输入字段: batch_size
  • 图片尺寸节点 ID: 5 (注意:通常和生图数量是同一个节点)
  • 图片宽度输入字段: width
  • 图片高度输入字段: height

填写完毕后,设置会自动保存。现在,回到生图页面,应用就会使用你的自定义工作流进行AI绘画了!


常见问题与排错 (Troubleshooting)

  • Q: 我的提示词没有生效!

    • A: 最常见的原因是节点ID或字段名填错。请仔细核对JSON文件或ComfyUI界面。确保你找到的是正确的 CLIPTextEncode 节点,并且字段名是 text
  • Q: 应用报错或无法生成图片。

    • A1: 请确认你导出的是 API格式 (Save (API Format)) 的JSON文件,而不是普通的工作流 (Save)。普通工作流缺少应用所需的详细信息。
    • A2: 请确保你的工作流在 ComfyUI 中本身能够独立正常运行。有时工作流在本地可以跑,但在服务器上因为缺少模型、节点或路径错误而失败。
    • A3: 检查你的ComfyUI服务器是否正在运行,并且应用中的地址和端口设置正确。
  • Q: 我可以把生图数量和图片尺寸分开用不同的节点控制吗?

    • A: 可以!本应用的设计非常灵活。如果你的工作流中,有一个节点(比如ID为 10)控制尺寸,另一个节点(比如ID为 12)控制数量,你只需在设置中分别填入 1012 即可。但对于绝大多数工作流,它们都是由同一个 EmptyLatentImage 节点控制的。
  • Q: 修改了ComfyUI里的工作流,需要重新在App里配置吗?

    • A: 如果你只是调整了节点参数(比如采样步数)或更换了模型/LoRA文件,而没有改变我们配置中用到的那几个核心节点的ID,那么无需在App中做任何改动。如果你删除并重新添加了这些核心节点(导致ID变化),则需要重新导出API JSON文件,并在App中重新选择并填写新的ID。