Stable Diffusion入门第19-20天:保存与分享你的工作流——第一阶段收官,从“能用”到“可复用”

一个扎心的场景

搭建了整整两小时的工作流------Load Checkpoint连好了,两个CLIP Text Encode调好了,KSampler的参数试了十几轮终于找到了最佳组合,VAE Decode和Save Image也各就各位。你盯着右侧面板里那张近乎完美的生成图,满意地伸了个懒腰。

然后你关掉了浏览器。

第二天打开ComfyUI,画布上一片空白。昨晚那个"完美工作流"的所有节点、连线、参数,统统消失了。你试图回忆------那个CFG值到底是7还是7.5?Seed是固定了还是随机的?正向提示词里那句关键的风格描述是怎么写的来着?

如果你有过类似的经历,你不是一个人。 这是ComfyUI新手最常踩的"隐形坑":把工作流当成临时草稿,而不是可复用的生产力资产。

今天这篇文章,就是来解决这个问题的。我们会完整走一遍工作流的保存、分享与版本管理全流程。更重要的是,我会带你回顾这20天走过的路,完成第一阶段的正式收官。

一、工作流的本质:不是截图,是可执行的JSON蓝图

很多人误以为"保存工作流"就是把当前画布截个图,或者导出一张带预览的图片。其实完全不是。

在ComfyUI中,工作流是一个结构清晰、完全可序列化的JSON文件。它不包含任何图像数据、模型权重或运行时状态,只记录三类核心信息:

第一类:节点定义 。每个节点的类型(如CLIPTextEncodeKSampler)、唯一ID、在画布上的位置坐标。

第二类:连接关系 。输入端口与输出端口之间的连线------比如"clip": ["2", 0]表示"从ID为2的节点的第0个输出端口获取CLIP编码"。

第三类:参数配置。所有可调参数的当前值------Steps、CFG、Seed、提示词文本、模型名称等。

关键洞察 :一个.json工作流文件可以在任意ComfyUI实例中100%还原你的工作流。文件体积极小(通常<50KB),便于版本管理、邮件发送、云盘同步。甚至可以用文本编辑器直接打开修改关键参数,无需启动UI。

不要把"保存工作流"和"保存图像"混为一谈。 前者保存的是整个生成逻辑(蓝图),后者只是保存某次运行的输出结果(成品)。就像建筑设计图 vs 建成的房子------图纸丢了,房子再美也建不出第二栋。

二、三种保存方式,覆盖全场景

方式一:标准保存(日常使用,最推荐)

这是最直观、最安全的方式,适合绝大多数用户。

操作步骤

  1. 在ComfyUI网页界面中,完成工作流搭建并确认所有节点参数无误
  2. 点击顶部菜单栏的 Workflow → Save(注意不是Save As)
  3. 浏览器会自动下载一个名为ComfyUI_XXXXXX.json的文件(时间戳命名)

或者使用快捷键:Ctrl+S (Windows/Linux)或 Cmd+S(Mac)。

如果想另存为新版本,使用 Workflow → Save As,可以自定义文件名。

小贴士Workflow → SaveWorkflow → 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.jsonfinal.json这类模糊名称。推荐采用:

复制代码
{任务类型}_{模型版本}_{功能特点}_{日期}.json

示例:

  • text2img_sd15_chinese_prompt_20260811.json
  • img2img_sdxl_portrait_v3_20260811.json
  • brand-campaign_inpainting_controlnet_v7_2026-02-20.json

这样命名后,即使不打开文件也能快速判断其用途,便于检索和归档。

六、整理与收藏:建立你的工作流工具箱

20天下来,你可能已经积累了多个工作流------文生图、图生图、不同模型的版本、不同风格的配置......是时候好好整理一下了。

相关推荐
爱敲键盘的猴子1 小时前
Spring MVC 详解(一):全注解开发与请求响应处理
java·spring·mvc
云水初1 小时前
【agent篇】RAG 知识库构建避坑指南
开发语言·python·学习·agent·rag
2019一路前行1 小时前
Python 函数、循环语句
开发语言·python
counting money1 小时前
SpringBoot 项目创建(IDEA不全,还需要修改)
java·spring boot·spring·maven
Dr.kangder1 小时前
嵌入式面试总结(二十二)——指针
java·面试·职场和发展·架构·嵌入式
MacroZheng1 小时前
几行代码给项目集成AI功能,Spring AI 2.0太香了!
java·人工智能·spring boot
Devin~Y2 小时前
从内容社区到AI智能客服:Spring Boot + Spring Cloud + Spring AI 全栈实战面试拆解
java·spring boot·redis·elasticsearch·spring cloud·kafka·mybatis
未秃头的程序猿2 小时前
从写CRUD到做AI Agent:我花了6个月转型,这是我的完整路线图
java·后端·ai编程
Java内核笔记2 小时前
万字长文剖析 Spring Boot 4.1.0 启动流程源码:从 main 到就绪
java·后端