【AI】comfy UI详解

系统拆解 ComfyUI------当前最灵活的AI图像/视频生成工作流工具。


一、本质定位:节点式AI生成引擎

工具 交互方式 核心哲学 适用人群
Midjourney 聊天命令 黑盒美学,Prompt即魔法 设计师、快速出图
Stable Diffusion WebUI 参数面板 调参炼丹,控制与易用平衡 进阶玩家
ComfyUI 节点图(Node Graph) 全透明、全可控、可编程 工程师、流水线设计者

ComfyUI 不是"更好用的工具",是"可编程的生成基础设施"


二、核心概念:节点(Node)与边(Edge)

2.1 节点 = 函数

每个节点是一个Python函数,有输入端口和输出端口:

复制代码
┌─────────────────────────┐
│     KSampler (采样器)    │
│                         │
│  model ◀──── 模型输入    │
│  positive ◀─ 正向提示词  │
│  negative ◀─ 反向提示词  │
│  latent_image ◀─ 潜空间图 │
│                         │
│  ▶ LATENT  输出潜空间图  │
└─────────────────────────┘

2.2 边 = 数据流

节点之间通过有向边连接,数据(张量、字符串、模型权重)沿边流动:

复制代码
Load Checkpoint ──▶ CLIP Text Encode ──▶ KSampler ──▶ VAE Decode ──▶ Save Image
     (加载模型)        (编码提示词)       (采样)       (解码潜空间)      (保存)

2.3 工作流 = 完整DAG

一个ComfyUI工作流就是一个有向无环图(DAG),描述从"随机噪声"到"最终图像"的完整计算路径。


三、标准文生图工作流拆解

复制代码
[1] Load Checkpoint (加载SD模型)
    ├── model → [2] KSampler
    ├── clip  → [3] CLIP Text Encode (Positive)
    └── clip  → [4] CLIP Text Encode (Negative)

[3] Positive Prompt: "masterpiece, best quality, 1girl, standing in garden"
    └── CONDITIONING → [2] KSampler (positive)

[4] Negative Prompt: "bad anatomy, worst quality, lowres"
    └── CONDITIONING → [2] KSampler (negative)

[5] Empty Latent Image (512x512, batch_size=1)
    └── LATENT → [2] KSampler (latent_image)

[2] KSampler (steps=20, cfg=7.0, sampler_name=euler, scheduler=normal, seed=12345)
    ├── model ← [1]
    ├── positive ← [3]
    ├── negative ← [4]
    ├── latent_image ← [5]
    └── LATENT → [6] VAE Decode

[6] VAE Decode
    ├── vae ← [1] (checkpoint里的VAE)
    ├── samples ← [2]
    └── IMAGE → [7] Save Image

[7] Save Image → 输出到 output 目录

关键理解:潜空间(Latent Space)是核心------所有采样在压缩的潜空间进行,最后VAE解码回像素空间,节省显存。


四、核心节点类型详解

4.1 模型加载类

节点 功能 输出
CheckpointLoaderSimple 加载SD 1.5/SDXL/Flux大模型 MODEL, CLIP, VAE
UNETLoader 单独加载UNet(Comfy原生格式) MODEL
CLIPLoader 单独加载CLIP文本编码器 CLIP
VAELoader 单独加载VAE VAE
ControlNetLoader 加载ControlNet模型 CONTROL_NET

4.2 条件控制类(决定"画什么")

节点 功能 关键技术
CLIPTextEncode 文本编码为CONDITIONING CLIP tokenizer + text encoder
CLIPTextEncodeFlux Flux模型的双CLIP编码 T5 + CLIP-L 双编码器
ConditioningSetArea 限定提示词作用区域 区域控制,实现多角色分区
ConditioningCombine 合并多个条件 多提示词融合
IPAdapterAdvanced 图像提示适配 用参考图控制风格/人物

4.3 采样类(核心生成引擎)

节点 功能 参数意义
KSampler 标准采样器 steps(步数)、cfg(提示词强度)、sampler(算法)、scheduler(调度器)
KSamplerAdvanced 高级采样,可指定起始/结束步 用于inpainting、分步控制
SamplerCustom 自定义采样算法 接入研究级采样器

采样器算法

  • euler / euler_ancestral:快,基础质量
  • dpmpp_2m / dpmpp_2m_sde:质量高,推荐
  • uni_pc / uni_pc_bh2:步数少时质量好
  • ddim:确定性采样,可复现

4.4 图像操作类

节点 功能
EmptyLatentImage 创建空白潜空间图(文生图起点)
LoadImage 加载图片(图生图、ControlNet起点)
VAEEncode 像素图编码为潜空间图
VAEDecode 潜空间图解码为像素图
ImageScale 图像缩放
ImageCompositeMasked 图像合成(带遮罩,用于inpainting)

4.5 ControlNet类(结构控制)

复制代码
Load Image ──▶ ControlNetApply ──▶ KSampler
                ▲
                │
ControlNetLoader ──▶ (canny/depth/openpose/lineart模型)
ControlNet类型 控制什么 适用场景
Canny 边缘轮廓 保持构图重绘
Depth 深度图 3D结构控制
OpenPose 人体骨架 人物姿势固定
Lineart 线稿 动漫上色
SoftEdge 柔和边缘 风格化重绘
Segmentation 语义分割 物体替换

五、高级工作流模式

5.1 图生图(Img2Img)

复制代码
Load Image ──▶ VAEEncode ──▶ KSampler (denoise=0.75) ──▶ VAEDecode
                ▲                              │
                └── 噪声强度控制重绘幅度 ──────┘

denoise参数:0.0=原图不变,1.0=完全重绘,0.5-0.75常用。

5.2 局部重绘(Inpainting)

复制代码
Load Image ──▶ Load Mask (或VAEEncodeMask) ──▶ SetLatentNoiseMask ──▶ KSampler
                                              │
                                              └── 只采样遮罩区域

5.3 高清修复(Hires Fix / 两步采样)

复制代码
[1] KSampler @ 512x512 ──▶ VAEDecode ──▶ ImageScale(2x) ──▶ VAEEncode ──▶ [2] KSampler @ 1024x1024
                                              │
                                              └── 二次采样细化细节

5.4 多提示词分区(Regional Prompting)

复制代码
Prompt1 + SetArea(0,0,256,512) ──┐
                                   ├── Combine ──▶ KSampler
Prompt2 + SetArea(256,0,512,512) ──┘
                                   
左半画面:Prompt1 | 右半画面:Prompt2

5.5 视频生成(AnimateDiff / SVD)

复制代码
Load AnimateDiff Model ──▶ (注入KSampler的model输入)
                              │
Load Video ──▶ VAEEncode ──▶ KSampler (batch=16帧) ──▶ VAEDecode ──▶ Save Animated WEBP/GIF

六、ComfyUI vs WebUI 的核心差异

维度 ComfyUI WebUI (AUTOMATIC1111)
可控性 每个张量可见,可中断、修改、复用 黑盒流水线,只能调参数
复用性 工作流存为JSON,分享即运行 依赖Prompt+参数记录,难精确复现
扩展性 自定义节点 = Python插件,生态爆炸 插件机制受限,依赖Gradio
学习曲线 陡峭,需理解底层原理 平缓,开箱即用
性能 可手动优化节点图,减少冗余计算 固定流水线,有 overhead
多GPU 原生支持,不同节点可指定不同GPU 单GPU,多卡需外部工具

七、自定义节点开发

ComfyUI的强大在于可编程

7.1 最小节点示例

python 复制代码
# custom_nodes/my_custom_node.py
import torch
from comfy.model_management import get_torch_device

class MyLatentMultiplier:
    """
    自定义节点:将潜空间图乘以标量
    """
    # 节点在UI显示的名称
    CATEGORY = "latent"
    RETURN_TYPES = ("LATENT",)  # 输出类型
    FUNCTION = "multiply"       # 执行函数名
    
    @classmethod
    def INPUT_TYPES(s):
        return {
            "required": {
                "latent": ("LATENT",),      # 输入:潜空间图
                "multiplier": ("FLOAT", {   # 输入:标量
                    "default": 1.0, 
                    "min": 0.0, 
                    "max": 10.0, 
                    "step": 0.1
                }),
            }
        }
    
    def multiply(self, latent, multiplier):
        # latent["samples"] 是实际的张量 (batch, 4, h, w)
        samples = latent["samples"] * multiplier
        return ({"samples": samples},)  # 必须返回tuple

# 注册节点
NODE_CLASS_MAPPINGS = {
    "MyLatentMultiplier": MyLatentMultiplier,
}
NODE_DISPLAY_NAME_MAPPINGS = {
    "MyLatentMultiplier": "Latent Multiplier (Custom)",
}

7.2 节点开发关键规范

要素 规则
INPUT_TYPES 定义输入端口,类型必须是大写标准名
RETURN_TYPES 定义输出端口,与返回tuple长度一致
RETURN_NAMES 可选,UI显示的名称
CATEGORY UI左侧分类名,用/创建子菜单
FUNCTION 实际执行的方法名
数据传递 节点间传递的是Python对象(张量、字典、字符串),不是JSON

八、生态与资源

8.1 核心仓库

资源 地址 用途
ComfyUI 主仓库 comfyanonymous/ComfyUI 引擎本体
ComfyUI Manager ltdrdata/ComfyUI-Manager 节点包管理器(必装)
Comfyroll Studio 多种自定义节点集合 工作流增强

8.2 热门自定义节点包

包名 功能 场景
ComfyUI-AnimateDiff-Evolved 视频生成 动画、短视频
ComfyUI-IPAdapter-Plus 图像提示增强 人物一致性、风格迁移
ComfyUI-ControlNet-Aux 预处理器集合 Canny/Depth/OpenPose预处理
ComfyUI-Impact-Pack 细节修复、人脸修复 人像精修
ComfyUI-Efficiency-Nodes 性能优化节点 减少显存占用
ComfyUI-VideoHelperSuite 视频加载/保存/处理 视频工作流

8.3 工作流分享平台

  • OpenArt.ai / Civitai --- 社区工作流分享
  • 工作流文件就是JSON,拖进ComfyUI即运行(需安装对应节点包)

九、给你的AI导游项目的联想

你之前设计网页版AI导游框架(输入→钩子引擎→模型→多模态输出),ComfyUI的节点哲学可以直接迁移:

复制代码
┌─────────────────────────────────────────┐
│        你的AI导游框架(ComfyUI式)        │
├─────────────────────────────────────────┤
│  [UserInput] ──▶ [IntentClassifier]      │
│                    │                      │
│                    ▼                     │
│  [HookEngine] ──▶ [KnowledgeSelector]   │
│       │                    │             │
│       ▼                    ▼             │
│  [ContextAssembler] ──▶ [LLM API]        │
│                            │             │
│                            ▼             │
│  [TTS Engine] ◀── [ImageGenerator]      │
│       │                    │             │
│       └────────┬───────────┘             │
│                ▼                         │
│         [OutputMixer] ──▶ [User]         │
└─────────────────────────────────────────┘

启示

  • 把"钩子引擎"做成可配置节点
  • 把"叙事切片"做成可插拔模块
  • 工作流JSON = 不同景点的导游策略配置

相关推荐
SelectDB1 小时前
强行拍平?全表扫描? AI Agent 动态 JSON 的观测分析
数据库·人工智能·数据分析
点PY1 小时前
Weaving Context Across Images论文精读
人工智能
挨踢学霸1 小时前
MsgHelper 5.0 全新发布:微信群发+微信群发群双引擎,按标签群发/定时群发/多于500人群发,数据本地化守护企业隐私安全
人工智能·安全·微信·自动化
imbackneverdie1 小时前
2026硕博科研绘图全流程操作指南
人工智能·科技·考研·aigc·科研·科研绘图·ai工具
lazybird741 小时前
PINN-物理信息神经网络及其在航空中的应用
人工智能·深度学习·神经网络
captain_AIouo1 小时前
Captain AI打造OZON全员协同智能工具
大数据·人工智能·经验分享·aigc
甲维斯1 小时前
Claude Code 中文界面版成了!改了5000多行代码
人工智能·ai编程
2301_780029041 小时前
A survey on large language model based autonomous agents —— 论文精读
人工智能·语言模型·自然语言处理
机器学习之心1 小时前
轴承剩余寿命预测 | 基于BP神经网络的轴承剩余寿命预测MATLAB实现!
人工智能·神经网络·matlab·轴承剩余寿命预测