一个扎心的场景
搭建了整整两小时的工作流------Load Checkpoint连好了,两个CLIP Text Encode调好了,KSampler的参数试了十几轮终于找到了最佳组合,VAE Decode和Save Image也各就各位。你盯着右侧面板里那张近乎完美的生成图,满意地伸了个懒腰。
然后你关掉了浏览器。
第二天打开ComfyUI,画布上一片空白。昨晚那个"完美工作流"的所有节点、连线、参数,统统消失了。你试图回忆------那个CFG值到底是7还是7.5?Seed是固定了还是随机的?正向提示词里那句关键的风格描述是怎么写的来着?
如果你有过类似的经历,你不是一个人。 这是ComfyUI新手最常踩的"隐形坑":把工作流当成临时草稿,而不是可复用的生产力资产。
今天这篇文章,就是来解决这个问题的。我们会完整走一遍工作流的保存、分享与版本管理全流程。更重要的是,我会带你回顾这20天走过的路,完成第一阶段的正式收官。
一、工作流的本质:不是截图,是可执行的JSON蓝图
很多人误以为"保存工作流"就是把当前画布截个图,或者导出一张带预览的图片。其实完全不是。
在ComfyUI中,工作流是一个结构清晰、完全可序列化的JSON文件。它不包含任何图像数据、模型权重或运行时状态,只记录三类核心信息:
第一类:节点定义 。每个节点的类型(如CLIPTextEncode、KSampler)、唯一ID、在画布上的位置坐标。
第二类:连接关系 。输入端口与输出端口之间的连线------比如"clip": ["2", 0]表示"从ID为2的节点的第0个输出端口获取CLIP编码"。
第三类:参数配置。所有可调参数的当前值------Steps、CFG、Seed、提示词文本、模型名称等。
关键洞察 :一个
.json工作流文件可以在任意ComfyUI实例中100%还原你的工作流。文件体积极小(通常<50KB),便于版本管理、邮件发送、云盘同步。甚至可以用文本编辑器直接打开修改关键参数,无需启动UI。
不要把"保存工作流"和"保存图像"混为一谈。 前者保存的是整个生成逻辑(蓝图),后者只是保存某次运行的输出结果(成品)。就像建筑设计图 vs 建成的房子------图纸丢了,房子再美也建不出第二栋。
二、三种保存方式,覆盖全场景
方式一:标准保存(日常使用,最推荐)
这是最直观、最安全的方式,适合绝大多数用户。
操作步骤:
- 在ComfyUI网页界面中,完成工作流搭建并确认所有节点参数无误
- 点击顶部菜单栏的 Workflow → Save(注意不是Save As)
- 浏览器会自动下载一个名为
ComfyUI_XXXXXX.json的文件(时间戳命名)
或者使用快捷键:Ctrl+S (Windows/Linux)或 Cmd+S(Mac)。
如果想另存为新版本,使用 Workflow → Save As,可以自定义文件名。
小贴士 :
Workflow → Save和Workflow → Save As的区别在于------前者直接用时间戳命名自动下载,后者让你自己输入文件名。日常快速保存用前者,正式归档用后者。
方式二:API格式导出(开发者/自动化场景)
ComfyUI前端可以以两种格式保存工作流。除了上面的"保存格式",还有一种是 API格式。
两者的关键区别:
| 保存格式 | API格式 | |
|---|---|---|
| 菜单路径 | 文件 → 保存 或 Ctrl+S | 文件 → 导出工作流 (API) |
| 节点键 | 节点标题或标签 | 数字节点ID |
| 位置/布局数据 | 包含 (x, y, width) | 不包含 |
| 颜色/分组 | 包含 | 不包含 |
| 用途 | 在前端重新打开 | API提交、程序化调用 |
API格式省略了UI元数据(位置、颜色、分组、节点尺寸),这些仅在前端可视化编辑时需要。这使JSON更小、更简洁,适合通过Cloud API或自建服务器以编程方式调用ComfyUI。
导出方法 :在ComfyUI前端打开工作流,导航到 文件 → 导出工作流 (API) 。这将下载一个只包含API相关数据的.json文件。
如果你有一个保存格式的工作流需要转为API格式,最简单的方法是:在前端通过 文件 → 加载 打开.json文件,再通过 文件 → 导出工作流 (API) 重新导出。
方式三:图像嵌入(分享展示场景)
ComfyUI生成的PNG图片中内嵌了完整的工作流元数据。这意味着:
- 你可以把这张图拖回ComfyUI界面,它会自动恢复当时使用的工作流
- 你可以把图片分享给朋友,对方拖进自己的ComfyUI就能复现你的配置
这种方式特别适合成果展示、社交媒体分享、教学案例等场景。
注意:图像嵌入方式不支持版本控制,且元数据可能被某些图像编辑软件清除。因此它更适合"分享"而非"归档"。
三、.json文件里到底有什么?------深入工作流文件格式
理解了保存方式之后,我们有必要深入看一眼.json文件内部到底长什么样。
一个典型的ComfyUI工作流JSON文件结构大致如下:
json
{
"last_node_id": 6,
"last_link_id": 5,
"nodes": [
{
"id": 4,
"type": "CheckpointLoaderSimple",
"pos": [200, 300],
"widgets_values": ["v1-5-pruned-emaonly-fp16.safetensors"]
},
{
"id": 6,
"type": "CLIPTextEncode",
"pos": [400, 200],
"widgets_values": ["a cat, sitting on a wooden floor"]
}
],
"links": [
[1, 4, 0, 6, 0]
]
}
如果是API格式,结构更加精简,节点用数字ID作为键名:
json
{
"3": {
"inputs": {
"seed": 156680208700286,
"steps": 20,
"cfg": 8,
"sampler_name": "euler",
"scheduler": "normal",
"denoise": 1,
"model": ["4", 0],
"positive": ["6", 0],
"negative": ["7", 0],
"latent_image": ["5", 0]
},
"class_type": "KSampler",
"_meta": { "title": "KSampler" }
}
}
理解这个结构的价值:当你需要批量调整参数时(比如把100个工作流的Seed全部改成随机),你不需要逐个打开UI------直接写个脚本批量修改JSON文件即可。这就是"工作流即代码"的真正含义。
四、分享工作流:让别人一键复现你的成果
保存工作流只是第一步。真正的价值在于分享------把你的工作流发给别人,对方一键导入、完全复现。
分享的正确姿势
第一步:导出JSON文件
使用上面介绍的"标准保存"方式,导出.json文件。
第二步:打包外部依赖(关键!)
一个.json文件本身只记录节点结构和参数值,不保存模型路径、自定义节点插件、LoRA文件引用等外部依赖。
这意味着:直接把.json文件发给同事,很可能打不开。
分享时应该一并提供:
- 模型文件的名称和下载来源(或直接提供模型文件)
- 自定义节点的GitHub仓库地址和版本号
- LoRA文件(如果有)
- 必要的环境说明(ComfyUI版本、Python依赖等)
第三步:接收方导入
在ComfyUI中点击 Load ,选择.json文件,或直接将JSON文件拖入界面。如果缺少模型,ComfyUI会自动弹窗提示下载。
一个专业的分享示例
与其只发一个.json文件,不如建立一个这样的分享包:
my_workflow/
├── workflow.json # 工作流文件
├── README.md # 使用说明
│ ├── 模型要求(名称、下载链接)
│ ├── 自定义节点列表(GitHub链接 + 版本)
│ └── 运行步骤
└── examples/
└── sample_output.png # 示例输出图(内含工作流元数据)
这样别人拿到你的工作流,不仅能一键导入,还能理解为什么这么搭、需要什么前置条件。
五、版本管理:像管理代码一样管理工作流
当你开始频繁修改和迭代工作流时,版本管理就变得不可或缺了。
为什么需要版本管理?
ComfyUI工作流JSON是纯文本格式,天然适合纳入版本控制系统(如Git) 。
使用Git管理有三大好处:
- 完整的历史追踪:每一次修改都有记录,可以随时回滚到任意历史版本
- 分支与协作:不同成员可以在不同分支上开发,最后合并
- 差异对比:用Diff工具直观对比不同版本间的差异
实际操作方法
第一步:建立Git仓库
在你的工作流目录下初始化Git仓库:
bash
mkdir my_comfyui_workflows
cd my_comfyui_workflows
git init
第二步:建立目录结构
建议采用如下结构:
workflow-repo/
├── workflows/
│ ├── production/ # 生产环境稳定版本
│ │ └── v2.1.3.json
│ └── experimental/ # 实验性工作流
├── models/ # 模型清单(非模型文件本身)
│ └── model_list.yaml # 记录模型名称和SHA256哈希值
└── README.md
第三步:每次修改后提交
bash
git add workflows/
git commit -m "feat: 增加ControlNet姿态控制节点,优化人像生成效果"
进阶技巧:让Git Diff更干净
ComfyUI导出的JSON中包含节点位置坐标(pos字段),这些坐标会随着你在画布上拖动节点而频繁变化。如果直接提交,每次拖动都会产生大量无意义的Diff。
解决方案 :使用pre-commit钩子,在提交前自动移除pos字段。或者养成习惯------在提交前先用"导出工作流 (API)"格式,因为API格式本身就不包含位置信息。
版本命名规范
避免使用workflow_v1.json、final.json这类模糊名称。推荐采用:
{任务类型}_{模型版本}_{功能特点}_{日期}.json
示例:
text2img_sd15_chinese_prompt_20260811.jsonimg2img_sdxl_portrait_v3_20260811.jsonbrand-campaign_inpainting_controlnet_v7_2026-02-20.json
这样命名后,即使不打开文件也能快速判断其用途,便于检索和归档。
六、整理与收藏:建立你的工作流工具箱
20天下来,你可能已经积累了多个工作流------文生图、图生图、不同模型的版本、不同风格的配置......是时候好好整理一下了。