Skip to main content

概述

当 ComfyUI 保存输出文件时,它可以将生成该文件的工作流存储在文件本身内部。 你可以将此视为将已生成的图像连同其配方一起保存。图像是结果,嵌入的工作流描述了创建它所用的步骤。 嵌入的工作流元数据允许你:
  • 在 ComfyUI 中重新打开已生成的文件并恢复其工作流。
  • 共享已生成的文件以及用于创建它的工作流。
  • 在自动化工作流中检查生成设置。
  • 构建能够从输出文件中读取 ComfyUI 工作流元数据的工具。
元数据存储在文件格式内部。它不会改变可见的图像或视频内容。

嵌入字段

ComfyUI 通常存储两个 JSON 字段: 简化示例如下:
实际内容取决于工作流和 ComfyUI 版本。自定义节点还可以通过 extra_pnginfo 添加字段。 这两个字段的用途不同。workflow 用于在前端恢复工作流。prompt 是面向执行的表示形式,用于向 ComfyUI 服务器提交工作流。文件可能只包含其中一个字段。

支持的格式

内置保存节点会将元数据嵌入到以下输出格式中: 具体的元数据支持取决于保存节点和文件写入路径。经过其他应用程序重新编码的文件可能不再包含元数据。 动画 WebP 文件会将这些值存储在 EXIF 标签中。标签值包含类似 workflow:{JSON}prompt:{JSON} 的字符串。这与 MP4 和 WebM 不同,后两者会将这些值存储为容器元数据标签。

ComfyUI 如何写入元数据

内置输出节点在 ComfyUI 执行工作流时会收到 API prompt 和额外的工作流信息。除非已禁用元数据保存,否则保存节点会将这些值序列化为 JSON 并写入输出文件。 对于 PNG 输出,这些值将以文本条目的形式写入。标准字段名为 promptworkflow 元数据不是单独的旁车文件,而是在保存操作期间写入输出文件本身。因此,复制文件也会复制其中嵌入的工作流,但任何重写文件的操作都可能移除或替换元数据。 要在启动 ComfyUI 时禁用元数据,请使用:
在 ComfyUI Desktop 中,打开设置 > 服务器配置,启用禁止将提示词元数据保存到文件中。 启用该选项期间创建的文件无法用于从嵌入的元数据中恢复工作流。

ComfyUI 如何读取元数据

要在 ComfyUI 界面中恢复工作流,请将已生成的文件拖放到画布上。你也可以从文件 > 打开中打开文件。 如果文件同时包含 workflowprompt,ComfyUI 会使用嵌入的 workflow 来重建画布。如果文件不包含工作流,ComfyUI 会将支持的媒体文件视为常规输入媒体。 构建集成时,请先检查字段是否存在,再进行解析。文件可能因为使用了 --disable-metadata 创建、保存节点没有收到工作流信息,或被其他应用重新编码而不包含元数据。 如果你需要在浏览器中查看或编辑嵌入的工作流,可以使用 ComfyUI 嵌入式工作流编辑器。该编辑器是可选工具。你不需要使用它,就可以在 ComfyUI 中恢复工作流或通过程序读取元数据。

使用 Python 读取 PNG 元数据

以下示例从 PNG 文件中读取标准字段:
Pillow 通过 Image.info 公开 PNG 文本块。这些值是 JSON 字符串,因此在将它们用作 Python 对象之前,需要调用 json.loads

从命令行读取 PNG 元数据

你可以使用 ImageMagick 检查 PNG 文本元数据:
在输出中查找 workflowprompt 的文本条目。

读取视频元数据

ComfyUI 将工作流元数据存储在 MP4 和 WebM 输出的容器元数据中。您可以使用 ffprobe 检查这些字段:
对于 WebM 文件,请使用相同的指令并附带 .webm 文件路径:
返回的标签包含 JSON 字符串。使用 JSON 解析器解析 workflowprompt 标签的值。

读取 WebP 元数据

ComfyUI 会将动画 WebP 文件的元数据存储在 EXIF 标签中。你可以使用 Pillow 读取这些标签,然后去掉字段前缀并解析 JSON:
元数据存储在第一帧图像中。如果应用程序重新写入 WebP 文件,可能会移除 EXIF 标签。

读取 Latent 元数据

.latent 文件使用 safetensors 格式。可以使用 safetensors Python 包读取元数据:
Safetensors 元数据值为字符串。当存在 workflowprompt 值时,将它们解析为 JSON。 对于任何格式,都应将元数据视为可选且不可信的输入。使用前请验证值是否为有效 JSON,也不要假设工作流包含运行它所需的所有模型或自定义节点。

限制

  • 嵌入的元数据并非数字签名。它不能证明谁创建或修改了文件。
  • 工作流不包含其依赖的模型文件、输入资产或自定义节点包。
  • 移动或重命名模型、输入资产或自定义节点可能会导致恢复的工作流无法运行。
  • 图像和视频编辑器在重新编码文件时可能会移除元数据。
  • 使用 --disable-metadata 创建的文件不包含标准的 ComfyUI 工作流元数据。