概述
当 ComfyUI 保存输出文件时,它可以将生成该文件的工作流存储在文件本身内部。 你可以将此视为将已生成的图像连同其配方一起保存。图像是结果,嵌入的工作流描述了创建它所用的步骤。 嵌入的工作流元数据允许你:- 在 ComfyUI 中重新打开已生成的文件并恢复其工作流。
- 共享已生成的文件以及用于创建它的工作流。
- 在自动化工作流中检查生成设置。
- 构建能够从输出文件中读取 ComfyUI 工作流元数据的工具。
嵌入字段
ComfyUI 通常存储两个 JSON 字段:
简化示例如下:
extra_pnginfo 添加字段。
这两个字段的用途不同。workflow 用于在前端恢复工作流。prompt 是面向执行的表示形式,用于向 ComfyUI 服务器提交工作流。文件可能只包含其中一个字段。
支持的格式
内置保存节点会将元数据嵌入到以下输出格式中:
具体的元数据支持取决于保存节点和文件写入路径。经过其他应用程序重新编码的文件可能不再包含元数据。
动画 WebP 文件会将这些值存储在 EXIF 标签中。标签值包含类似
workflow:{JSON} 和 prompt:{JSON} 的字符串。这与 MP4 和 WebM 不同,后两者会将这些值存储为容器元数据标签。
ComfyUI 如何写入元数据
内置输出节点在 ComfyUI 执行工作流时会收到 API prompt 和额外的工作流信息。除非已禁用元数据保存,否则保存节点会将这些值序列化为 JSON 并写入输出文件。 对于 PNG 输出,这些值将以文本条目的形式写入。标准字段名为prompt 和 workflow。
元数据不是单独的旁车文件,而是在保存操作期间写入输出文件本身。因此,复制文件也会复制其中嵌入的工作流,但任何重写文件的操作都可能移除或替换元数据。
要在启动 ComfyUI 时禁用元数据,请使用:
ComfyUI 如何读取元数据
要在 ComfyUI 界面中恢复工作流,请将已生成的文件拖放到画布上。你也可以从文件 > 打开中打开文件。 如果文件同时包含workflow 和 prompt,ComfyUI 会使用嵌入的 workflow 来重建画布。如果文件不包含工作流,ComfyUI 会将支持的媒体文件视为常规输入媒体。
构建集成时,请先检查字段是否存在,再进行解析。文件可能因为使用了 --disable-metadata 创建、保存节点没有收到工作流信息,或被其他应用重新编码而不包含元数据。
如果你需要在浏览器中查看或编辑嵌入的工作流,可以使用 ComfyUI 嵌入式工作流编辑器。该编辑器是可选工具。你不需要使用它,就可以在 ComfyUI 中恢复工作流或通过程序读取元数据。
使用 Python 读取 PNG 元数据
以下示例从 PNG 文件中读取标准字段:Image.info 公开 PNG 文本块。这些值是 JSON 字符串,因此在将它们用作 Python 对象之前,需要调用 json.loads。
从命令行读取 PNG 元数据
你可以使用 ImageMagick 检查 PNG 文本元数据:workflow 和 prompt 的文本条目。
读取视频元数据
ComfyUI 将工作流元数据存储在 MP4 和 WebM 输出的容器元数据中。您可以使用ffprobe 检查这些字段:
.webm 文件路径:
workflow 和 prompt 标签的值。
读取 WebP 元数据
ComfyUI 会将动画 WebP 文件的元数据存储在 EXIF 标签中。你可以使用 Pillow 读取这些标签,然后去掉字段前缀并解析 JSON:读取 Latent 元数据
.latent 文件使用 safetensors 格式。可以使用 safetensors Python 包读取元数据:
workflow 和 prompt 值时,将它们解析为 JSON。
对于任何格式,都应将元数据视为可选且不可信的输入。使用前请验证值是否为有效 JSON,也不要假设工作流包含运行它所需的所有模型或自定义节点。
限制
- 嵌入的元数据并非数字签名。它不能证明谁创建或修改了文件。
- 工作流不包含其依赖的模型文件、输入资产或自定义节点包。
- 移动或重命名模型、输入资产或自定义节点可能会导致恢复的工作流无法运行。
- 图像和视频编辑器在重新编码文件时可能会移除元数据。
- 使用
--disable-metadata创建的文件不包含标准的 ComfyUI 工作流元数据。