ComfyUI 工作流搭建:AIGC 设计的高效引擎

上周有位学员小李给我发来消息:“老师,我在 Midjourney 里调了一整天参数,想生成一张‘赛博朋克风格的书店内部,书架上有发光的古籍,桌旁坐着一只机械猫’,但每次生成的构图都偏了,要么猫在头顶飘着,要么书架的透视完全不对。我是不是该放弃这个创意?”

我给他回了一句话:“你缺的不是创意,而是一个能精确控制每个元素的工作流。从今天起,忘掉反复抽卡,试试 ComfyUI。”

ComfyUI 不是另一个 AI 绘图工具——它是 AIGC 设计的“乐高积木”。它让你像搭建电路板一样,用节点连接起模型、提示词、图像处理、条件控制等模块,最终生成精确、可复现、高质量的设计作品。下面,我将带你从零搭建一个能够解决小李这类问题的核心工作流。

第一章:为什么 ComfyUI 是“设计引擎”而非“绘图工具”?

传统工具(如 Midjourney、Stable Diffusion WebUI)本质上是“黑箱”:你输入提示词,它输出图像。一旦结果不理想,你只能改词、重跑,像在黑暗中摸索开关。而 ComfyUI 把一切拆解为节点,每个节点有明确输入输出,你可以看到数据如何流动、模型如何响应。

核心优势

  • 精确控制:你可以单独调整每个元素的权重、位置、风格,甚至用 ControlNet 限定构图。
  • 可复现性:保存的工作流文件(.json)可以让同事或客户直接打开,生成完全一致的结果。
  • 模块化扩展:社区贡献了超过 3000 个自定义节点,从视频生成到 3D 重建,无所不包。
  • 版本说明:本文基于 ComfyUI v0.2.3(2025年4月发布),使用 SDXL 1.0 模型配合 ControlNet v1.1。请确保你的 ComfyUI 已安装最新版,并配置好 Python 3.10+ 环境。

    第二章:核心工作流搭建——从提示词到可控图像

    我们以小孔的需求为例:“赛博朋克书店,书架上的发光古籍,桌旁机械猫”。目标:让猫坐在桌子右侧,古籍在左侧书架上,构图稳定。

    2.1 基础节点链:文本到图像的“骨架”

    打开 ComfyUI,你会看到空白的画布。右键点击,搜索并添加以下节点:

    1. Checkpoint Loader:加载模型。选择 `sd_xl_base_1.0.safetensors`。参数:`model_name` 设为你的模型路径。
    2. CLIP Text Encode (Prompt):输入提示词。正面提示词:`cyberpunk bookstore interior, glowing ancient books on shelves, a mechanical cat sitting on the table at right side, neon lights, volumetric lighting, high detail, 8k`。负面提示词:`blurry, low quality, distorted, extra limbs, text`。
    3. KSampler:核心采样器。参数设置:
    – `seed`:固定为 `12345`(后续可调整)
    – `steps`:`30`(平衡速度与质量)
    – `cfg`:`7.0`(创意与保真度的折中)
    – `sampler_name`:`dpmpp_2m`
    – `scheduler`:`karras`
    – `denoise`:`1.0`(首次生成保持完整)
    4. VAE Decode:将潜空间图像解码为 PNG。
    5. Save Image:输出结果。

    连接方式:Checkpoint Loader 的 `model` 输出到 KSampler 的 `model`,CLIP Text Encode 的输出到 KSampler 的 `positive/negative`,KSampler 的 `latent` 到 VAE Decode,最后到 Save Image。

    第一次运行:点击“Queue Prompt”。你大概率会得到一张猫悬浮在半空、古籍位置随机的图像。别急,这证明基础链路通了。接下来我们加入“控制”模块。

    2.2 加入 ControlNet:锁定构图与姿态

    ControlNet 是 ComfyUI 的“定海神针”。它通过额外条件(如深度图、边缘图、姿态图)来约束生成结果。

    步骤
    1. 添加节点:`ControlNet Loader`,选择 `control_v11p_sd15_scribble.safetensors`(涂鸦控制,适合粗略构图)。
    2. 添加节点:`ControlNet Apply`,连接方式:
    – ControlNet Loader 的 `control_net` 输出到 ControlNet Apply 的 `control_net`。
    – KSampler 的 `model` 输出到 ControlNet Apply 的 `model`。
    – ControlNet Apply 的 `model` 再输出回 KSampler 的 `model`(注意:此时 KSampler 的输入变为 ControlNet 处理后的模型)。
    3. 添加节点:`Load Image`,加载一张你手绘的涂鸦(或从网上下载的简单构图参考图)。例如:画一个矩形代表书架,一个圆形代表桌子,一个三角形代表猫的位置。
    4. 添加节点:`Scribble Preprocessor`,将涂鸦图转换为处理后的边缘图。参数:`resolution` 设为 `1024`(匹配 SDXL 分辨率)。
    5. 连接:Load Image 到 Scribble Preprocessor,输出到 ControlNet Apply 的 `image`。

    ControlNet 节点连接示意图

    参数调整:ControlNet Apply 中有 `strength` 参数(0-1)。设为 `0.8`,让构图约束生效,同时保留模型的部分创意自由。

    第二次运行:猫的姿势大概率会贴合你的涂鸦。但古籍可能还是不够“发光”。别急,我们还有最后一招。

    第三章:进阶技巧——用 LoRA 和 IP-Adapter 注入风格与细节

    3.1 LoRA:精准控制元素风格

    LoRA(Low-Rank Adaptation)是一种轻量级微调技术,可以单独调整某个物体的风格,而不影响整体。比如,我们要让古籍发出“蓝色荧光”,而不是默认的黄色。

    操作
    1. 下载一个“发光古籍”风格的 LoRA(推荐从 CivitAI 搜索 `glowing_books_sdxl_lora`,版本 v1.0)。
    2. 添加节点:`LoRA Loader`,参数:
    – `lora_name`:选择下载的 `.safetensors` 文件。
    – `strength_model`:`0.6`(控制强度,过高会覆盖模型)。
    3. 连接:LoRA Loader 的 `model` 输入从 Checkpoint Loader 来,输出到 KSampler 的 `model`(注意:LoRA Loader 要插在 Checkpoint Loader 和 ControlNet Apply 之间)。

    效果:现在提示词中 `glowing ancient books` 会被 LoRA 强化,生成的书页会带有蓝色光晕。

    3.2 IP-Adapter:用参考图统一风格

    如果你希望整张图都呈现“赛博朋克”的特定色调(比如紫色与青色),可以用 IP-Adapter 加载一张参考图。

    1. 安装 `ComfyUI_IPAdapter_plus` 自定义节点。
    2. 添加节点:`IPAdapter Unified Loader`,选择 `ip-adapter_sdxl_vit-h.safetensors`。
    3. 添加节点:`IPAdapter Apply`,连接:
    – Load Image 加载一张“赛博朋克色调参考图”(例如《攻壳机动队》的截图)。
    – IPAdapter Apply 的 `model` 输入来自 LoRA 输出,输出到 KSampler。
    – `weight` 设为 `0.4`(避免完全复制参考图风格)。

    IP-Adapter 工作流示意图

    第三次运行:现在,你的书店中,机械猫端坐在桌子右侧,蓝色发光的古籍整齐排列在左边书架上,整张图笼罩在紫青色的霓虹氛围中。小李的问题,解决了。

    总结与进阶建议

    ComfyUI 的核心思想是“拆解与重组”。通过将文本、图像、模型、控制条件拆解为节点,你可以像调音师一样精确控制每个频段。本文的工作流已经能解决 80% 的构图与风格问题,但真正的进阶在于:

    1. 自定义节点:学习 Python 基础,尝试编写自己的节点(比如“随机生成古籍书名”的节点)。
    2. 批量生成:用 `Latent Upscale` 节点实现图像放大,或结合 `FFmpeg` 生成视频。
    3. 工作流复用:将你的工作流保存为 `.json`,上传到 ComfyUI 社区,获取反馈。

    学习路径建议

  • 第一周:模仿本文工作流,生成 10 张不同主题的图像。
  • 第二周:探索 ControlNet 的 depth 和 normal 模式,尝试 3D 场景控制。
  • 第三���:研究 AnimateDiff 节点,生成短视频。
  • 第四周:参与 ComfyUI 的 Discord 社区,提交你的工作流。
  • 记住:AIGC 不是“一键生成”,而是“设计编程”。ComfyUI 给了你编程的权力,剩下的,靠你的创意与耐心。

    常见问题 FAQ

    Q1:我的 ComfyUI 启动后没有节点列表,怎么办?
    A:确保已安装 Python 3.10-3.11(不要用 3.12),并运行 `pip install -r requirements.txt`。如果仍空白,检查 `custom_nodes` 文件夹是否为空,从 GitHub 下载 `ComfyUI-Manager` 进行节点管理。

    Q2:ControlNet 加载后出错,提示“model not found”?
    A:ControlNet 模型需要单独下载,放入 `ComfyUI/models/controlnet` 文件夹。推荐从 Hugging Face 的 `lllyasviel/ControlNet-v1-1` 仓库下载 `control_v11p_sd15_scribble.pth`,并重命名为 `.safetensors` 格式。

    Q3:生成图像分辨率太低,如何放大?
    A:在 KSampler 后添加 `LatentUpscale` 节点,选择 `4x_NMKD-Superscale-SP_178000_G` 模型(需下载),再将放大后的潜图解码。注意:放大后需调整 `steps` 至 20 以上,避免细节丢失。

    Q4:LoRA 加载后效果不明显,或过度扭曲?
    A:调整 `strength_model` 参数:从 0.3 开始逐步增加,观察效果。同时检查 LoRA 是否与模型兼容(SDXL 的 LoRA 不能用于 SD1.5 模型)。

    Q5:如何保存工作流分享给他人?
    A:点击 ComfyUI 界面右上角的��Save”按钮,导出为 `.json` 文件。对方只需在 ComfyUI 中拖入该文件,即可自动加载所有节点(需确保已安装对应自定义节点)。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。