一、什么是 Subgraph子工作流?
工作流中的Subgraph(子图)是指将一组内部节点与逻辑封装为单一可复用模块,在父级工作流中表现为一个具有明确输入/输出接口的“黑盒”节点,用于实现复杂流程的模块化、分层管理与状态隔离。
二、为什么需要 Subgraph子工作流?
当工作流变复杂时,常见痛点:
-- 同样的「CLIP 正负 + 基础采样」重复出现多次;
-- 画布节点上百,滚动找线困难;
-- 改一处逻辑要复制粘贴多份,容易漏改。
Subgraph 把 一组节点打包成一个「超级节点」:
-- 对外暴露必要的输入/输出;
-- 内部逻辑折叠隐藏;
-- 主画布更简洁,维护集中在子图内部。
类比:编程里的 函数 — 把常用代码块封装,主程序只调函数名。
三、Subgraph子工作流 与「保存 JSON 再加载」的区别
|
方式 |
特点 |
|---|---|
|
保存整份工作流 JSON |
整图替换,不适合局部复用 |
|
复制粘贴节点 |
可行但同步修改麻烦 |
|
Subgraph |
同一文件内模块化,改子图处处生效 |
|
自定义节点(Python) |
最强大,需编程;Subgraph 零代码 |
Subgraph 适合 不会写 Python、但想模块化 的用户。
四、创建 Subgraph 的基本流程
不同 ComfyUI 版本菜单文案可能略有差异(如 Convert to Subgraph、Collapse to Subgraph),以你当前版本为准。
4.1 准备一段可封装的节点
示例:将 「双 CLIP Text Encode + 连到 KSampler 的正负 conditioning 准备」 封装(更常见的是封装「带 VAE Decode 的采样块」)。
更典型的封装单元:
Empty Latent → KSampler → VAE Decode
(MODEL / CONDITIONING / VAE 作为外部输入)
4.2 框选并转换
-
框选 要打包的所有节点(含它们之间的连线);
-
右键 → Convert to Subgraph / Group to Subgraph;
-
系统生成一个 Subgraph 节点,原节点折叠其内。
4.3 定义对外接口
Subgraph 需要明确 哪些线要穿到外部:
-
输入:如
model、positive、negative、latent、vae; -
输出:如
IMAGE或LATENT。
在 Subgraph 编辑界面中,通常通过 Input / Output 节点 或拖拽边界定义暴露的插槽。
4.4 命名 Subgraph
双击 Subgraph 节点 Title,例如:
-
采样块_T2I_v1 -
SDXL_VAE解码输出
与 4-2 命名规范一致。
五、编辑与进入 Subgraph
-
双击 Subgraph 节点 → 进入 子图内部编辑;
-
修改内部节点后 返回主图,对外接口保持不变(除非主动增删接口);
-
可嵌套 Subgraph,但 不宜过深,否则调试困难。
六、实战示例:封装「文生图采样输出块」
6.1 内部节点(Subgraph 内)
[输入: model, positive, negative, latent, vae]
↓
[KSampler]
↓
[VAE Decode]
↓
[输出: IMAGE]
6.2 主工作流(Subgraph 外)
[Load Checkpoint] ── model / vae ──→ [Subgraph: 采样输出块]
[CLIP+] ── positive ───────────────→
[CLIP-] ── negative ───────────────→
[Empty Latent] ── latent ──────────→
↓ IMAGE
[Save Image]
效果:主图只剩约 6–8 个「大块」,阅读成本明显下降。
七、使用 Subgraph 的最佳实践
7.1 适合封装的模块
|
模块 |
说明 |
|---|---|
|
采样 + 解码 |
最常用 |
|
高清放大双采样 |
第二遍 KSampler 固定时 |
|
ControlNet 应用块 |
同一套预处理器 + Apply |
|
人物一致 InstantID 块 |
身份应用重复使用时 |
7.2 不适合封装的情况
-
仅出现一次、且常改线的一次性实验;
-
接口经常变(今天 3 输入明天 5 输入)的探索阶段;
-
封装后比原来还难懂(过度抽象)。
7.3 版本与文档
在 Subgraph 外 Note 中注明:
Subgraph「采样输出块_v1」
输入:model, positive, negative, latent, vae
输出:IMAGE
内部 steps 默认 28,进子图修改
八、Subgraph vs 模板 JSON
|
|
Subgraph |
模板 JSON |
|---|---|---|
|
位置 |
单文件内 |
多个文件 |
|
同步修改 |
改一处全局生效 |
每个文件分别改 |
|
分享 |
随主 JSON 导出 |
可单独分发 |
|
适合 |
个人/团队大型工作流 |
入门模板、社区下载 |
社区工作流多为 整 JSON,导入后可 选中一段转为 Subgraph 做二次整理。
九、常见问题
|
问题 |
处理 |
|---|---|
|
转换后缺输入 |
进 Subgraph 补 Input 节点并连到边界 |
|
外部类型不匹配 |
检查暴露接口类型名与主线一致 |
|
子图内改完主图仍报错 |
返回主图刷新,必要时重新 Queue |
|
找不到 Convert 菜单 |
升级 ComfyUI;查阅当前版本 Release Note |