一句话定义
ComfyUI 把文生图管线表达为一张节点有向图:每个节点是一个接受张量/模型/条件输入并输出结果的纯函数,连线即数据依赖,执行引擎按依赖拓扑求值并缓存未变子图的结果。
定位说明:ComfyUI 的界面操作与工作流搭建另有独立站点(comfyui)专门讲解;本知识点只讲节点图背后的机制与调参原理,操作细节不在此展开。
为什么重要
ComfyUI 已是开源图像生成的生产力标准(截至 2026-10),而多数使用问题(为什么改一个参数全图重跑、为什么两条链可以共用一段、这个报错为什么指向类型不匹配)都是节点图机制问题。理解「连线 = 数据依赖」这一件事,界面就不再是拼图游戏而是可推理的计算图;本库此前所有机制(三件套、CFG、采样器)在节点图上都有精确的落点。
前置知识
kp-008(三件套架构——节点图正是它的可视化形态);kp-022(标准管线,本节可与其对照阅读)。
核心概念
- 节点(node):带类型化输入输出口的计算单元,如 CLIPTextEncode(文本→条件)、KSampler(模型+条件+潜码→潜码)。
- 连线(link):输出口到输入口的类型化张量/对象传递,即数据依赖边。
- 拓扑执行:引擎只运行「输出被需要」的节点,按依赖顺序求值。
- 子图缓存:输入完全相同的节点不重算——改提示词只重跑其下游。
- 类型系统:MODEL/CLIP/VAE/CONDITIONING/LATENT/IMAGE 等端口类型不匹配即拒绝连线,是多数新手报错的来源。
原理与机制
节点图是一个声明式计算图:你声明的不是「操作步骤」而是「数据如何流动」,执行顺序由拓扑排序决定而非节点摆放位置——这是与表单式工具(一栏到底的参数列表)的本质区别,也是它能表达任意管线(双 CFG、分块放大、多分支融合)的原因。以最小文生图链为例(对照 kp-022 的参数拆解):
KSampler 的五个输入精确对应 kp-008 的三件套与 kp-010 的 CFG:model(主干)、positive/negative(条件对)、latent(起点)、seed/steps/cfg/sampler_name(采样链配置)。缓存机制的粒度是「节点级输入指纹」:改正向提示词只有 CLIPTextEncode 及其下游(KSampler、VAEDecode)重算,CheckpointLoader 命中缓存;两段独立分支共享上游节点时同样按指纹判断——这解释了「多分支工作流为什么快」。类型系统的深层意义:MODEL 是三件套的主干对象、CONDITIONING 是「嵌入 + 可选控制信息」的复合对象(kp-019 的权重语法、kp-014 的 ControlNet 注入都发生在 CONDITIONING 的加工节点上)——工作流里那些 ConditioningCombine / ConditioningSetTimestepRange 节点,就是 CFG 与条件调度在图上的显式形态。
公式与推导
本节不适用——节点图是机制(kp-008~kp-010)的工程表达,不引入新数学。
直观类比
节点图像流水线工厂图纸:每个车间(节点)只看进料口(输入)与出料口(输出),车间怎么排(画布位置)不重要,图纸上的传送带(连线)才决定工序。原料没变的车间直接出货(缓存),改了配方只有下游车间返工。
实例或案例
- 性能诊断实例:同事抱怨「每次只换 CFG 都要等全图重跑」——检查发现其种子接在一个随机数节点上,每轮种子变化导致 KSampler 指纹全变,缓存全失效;把种子固定后改 CFG 只重跑 KSampler 下游,耗时降一个量级。
- 双模型对比工作流:一个 CheckpointLoader 的 MODEL 输出分叉接两个不同参数的 KSampler,共享同一提示词分支——类型系统保证两边条件一致,是 kp-020 受控迭代的图形化实现。
- 常见报错「latent 与 model 不匹配」:SD1.5 主干(64×64 基准潜码)接了 128×128 的 EmptyLatentImage——类型对了但分辨率约定错,机制根源是 kp-003 的潜码尺寸约定。
常见误区
- 误区一:节点从左到右执行。执行由依赖拓扑决定,与画布摆放无关;摆得乱的图照样正确执行。
- 误区二:改上游参数必然全图重跑。只有指纹变化的节点及其下游重算;理解缓存才能设计高效工作流。
- 误区三:连线随便连。类型系统是硬约束;「能连上」不代表语义正确(MODEL 接 VAE 口之类会被拒,但 CONDITIONING 内部语义错乱不会被拒)。
自测题
- 「连线表示什么?执行顺序由什么决定?」
答案要点:连线表示类型化数据依赖;执行由依赖拓扑排序决定,与节点摆放位置无关。
- 为什么改正向提示词不必重跑 CheckpointLoader?
答案要点:其输入(模型文件)未变,节点输出命中缓存;只有提示词下游的节点输入指纹变化。
- KSampler 的五个输入分别对应前面哪个知识点的哪个概念?
答案要点:model=kp-008 主干、pos/neg=kp-010 条件对、latent=kp-003 潜码起点、cfg/steps/sampler=kp-009/kp-010 采样链。
与其他知识点的关系
kp-022 把标准链拆到参数级(本节的姊妹篇);kp-023 决定图里加载哪个 checkpoint;kp-024 的算力账决定图的分支策略。
延伸阅读
ComfyUI 官方仓库 README 与示例工作流(本库不引链接,操作与工作流搭建见独立站点 comfyui)。