展开本页目录
开始前准备什么
- 已有本地 ComfyUI 环境;按所用模型官方说明准备硬件和权重。
- 下载本页材料,检查模型家族、目录与来源;模型权重未打包。
- 保留原文件与实际版本,UI workflow 与 API prompt 分开。
- 使用保留元数据的原图
- 提取 workflow 字段
- 检查两个格式的差异
- 在 ComfyUI 恢复画布
- 固定 seed 与运行环境
- 保存可追溯的复现目录
- 验证元数据丢失的失败分支
2026-10-24 核验材料;实际执行范围、结果与限制见下方记录。
补充:原有练习资料与下载
含 UI/单独 API JSON、原输入、模型清单、校验脚本和真实负例;无权重及本次推理输出。
按官方 0.4 格式整理;仅结构核验,需在你的目标版本实际导入。
从本页工作流 Loader 字段读取;按官方来源准备兼容权重。
空结果栏,供你填写实际输出与故障;不预填虚构成功结果。
PNG 恢复实测:原生打开还原 3 节点,像素相同的无元数据负例无法恢复
使用本次实际输出 PNG 恢复工作流,并用像素一致但无元数据的 PNG 做负例,说明图片能看见不等于工作流还在。
· 真实 SaveImage PNG 中 workflow/prompt 可读取,原生菜单导入恢复 3 节点和 2 连线;对照去元数据 PNG 及标准化 API 一致性。
- 运行环境
- ComfyUI 0.42.0;官方提交 8baf68d53d751216dd95d4f678bf109d82db3442;原生前端 1.57.1,中文界面;Python 3.12.13,CPU;独立本地实例 127.0.0.1:3344;关闭自定义节点与合作伙伴节点,未下载模型权重;输入为本站原创几何测试图,不含用户图片;本地练习无需 apizt API Key
1. 使用原始输出文件
下载 single-single_00001_.png,保留原文件;不要先截图、社交软件转存或另存 JPEG。该 PNG 来自真正 SaveImage。
2. 从原生菜单打开
在 ComfyUI 点击菜单 → 文件 → 打开,选择此 PNG;原生标题切换为 single-single_00001_,画布恢复 LoadImage、ImageScale、SaveImage 与两条 IMAGE 连线。
3. 检查是否还需输入和依赖
恢复画布只恢复配置。此例要有 proof-a.png;真实扩散工作流还需模型权重、自定义节点和匹配版本,PNG 不内嵌这些文件。
4. 读取并导出元数据
用 Pillow 检查 workflow 和 prompt 字段,将它们导出为 JSON;原生 prompt 的 is_changed 是运行时字段,比较 class_type/inputs 后与 API 节点一致。
bashpython3 check_png_metadata.py single-single_00001_.png5. 核对无元数据负例
对 negative-no-metadata.png 执行相同检查,其像素 SHA 与原 PNG 一致,但 metadataKeys=[];原生打开后没有生成新的恢复画布。不能仅凭图片相似推断 workflow 可恢复。
这次实际得到什么
- 真实 SaveImage PNG 同时有 prompt、workflow;workflow 对象与提交画布完整一致,包含 3 节点和 2 连线。
- 原生 File → Open 成功恢复画布,截图可见原 PNG 文件名和节点参数。
- 剥离元数据后的负例像素相同,但 workflow/prompt 均不存在;原生打开未恢复新工作流。
- 原始 prompt 因 is_changed 字段不与请求全对象相等,去掉运行时辅助字段后可执行 class_type/inputs 完全一致。


使用这份结果时注意
- 本次验证 ComfyUI SaveImage 原生 PNG,不保证其他平台图片、转存 PNG 或 JPEG 含有相同元数据。
- 工作流恢复不包含模型权重、插件程序或外部输入文件;也不保证随机模型生成可逐像素复现。
提取原PNG中的workflow字段
需要Pillow。先下载本页原始PNG并保留原件;这个脚本只提取UI工作流,不推理、不改变PNG。
extract_workflow.py
import json
from pathlib import Path
from PIL import Image
source = Path("original-workflow.png")
with Image.open(source) as image:
workflow = image.info.get("workflow")
if not workflow:
raise SystemExit("没有workflow元数据:截图或压缩图不能据此恢复原工作流")
if isinstance(workflow, str):
workflow = json.loads(workflow)
if not isinstance(workflow, dict) or "nodes" not in workflow:
raise SystemExit("这不是本教程要恢复的UI工作流")
Path("recovered-workflow.json").write_text(
json.dumps(workflow, ensure_ascii=False, indent=2), encoding="utf-8"
)
print("已提取UI工作流;模型与输入文件仍需另行准备")1. 使用保留元数据的原图
下载 original-workflow.png,不用截图、社交平台压缩图或经过图片转换的副本。图片能显示并不说明仍包含节点 JSON;本页原图来自官方示例仓库,来源在 provenance.json 中。
2. 提取 workflow 字段
运行 python recover_png.py original-workflow.png recovered-workflow.json。脚本读取 PNG 文本块的 workflow 键,没有该键时明确失败;不把识图或提示词猜测称为恢复。素材包另含去掉元数据的 negative-no-metadata.png。
3. 检查两个格式的差异
打开恢复出的 JSON,找到 nodes 与 links。PNG 如果另有 prompt 键,它用于服务器 API;这两个对象用途不同,不要把 prompt 当成原画布的 UI JSON。统计节点和链接,与本页渲染的字段表比对。
4. 在 ComfyUI 恢复画布
拖入原 PNG 或用 Workflows → Open 打开 recovered-workflow.json。模型名称、输入文件名与提示词仍须人工核对;工作流记录的机器路径不会让缺失的权重自动出现。
5. 固定 seed 与运行环境
把 KSampler 的 control_after_generate 设为 fixed,记录 seed、sampler、scheduler、steps 和模型哈希。不同模型、精度或软件版本可能产生差异,不能只看相同 seed 就保证逐像素复现。
6. 保存可追溯的复现目录
保留原 PNG、恢复 JSON、版本记录与自己新输出。输入图片也要单独保存;只有元数据没有输入时,图生图工作流仍可能无法重跑。用 recovery-report.json 标注找回字段和未找到材料。
7. 验证元数据丢失的失败分支
运行 python recover_png.py negative-no-metadata.png missing.json,确认报 No workflow metadata。对无元数据的图片只能另建任务,不写成一键找回原工作流。
8. 下载工作流、输入和结构检查
完整包包含官方来源 JSON、按本页整理的 UI workflow、单独的 API prompt、真实输入 PNG、模型与参数清单、空验收表、故障负样本和离线脚本。先执行 python check.py,再在自己的 ComfyUI 安装中导入与实际运行。包内权重未下载,结构检查不能替代前端兼容与推理验收。
怎样确认已经完成
- 原始 PNG 真正包含 workflow 文本块,恢复对象具有 nodes 与 links。
- seed 与模型字段来自元数据,而不是人工猜测。
- 无元数据 PNG 被脚本拒绝,实际复现结果与源图分开记录。
常见问题
ComfyUI怎么从图片恢复工作流?PNG元数据与失败排查本次实际验证了什么?
使用本次实际输出 PNG 恢复工作流,并用像素一致但无元数据的 PNG 做负例,说明图片能看见不等于工作流还在。
本次结果有哪些适用限制?
本次验证 ComfyUI SaveImage 原生 PNG,不保证其他平台图片、转存 PNG 或 JPEG 含有相同元数据。 工作流恢复不包含模型权重、插件程序或外部输入文件;也不保证随机模型生成可逐像素复现。


