> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comfy.org/llms.txt
> Use this file to discover all available pages before exploring further.

# 워크플로 메타데이터

> ComfyUI가 생성된 파일에 워크플로를 포함하는 방법과 포함된 메타데이터를 읽는 방법을 알아보세요

## 개요

ComfyUI가 출력 파일을 저장할 때, 해당 파일을 생성한 워크플로를 파일 자체에 저장할 수 있습니다.

이는 생성된 이미지를 레시피와 함께 저장하는 것과 같습니다. 이미지는 결과물이며, 내장된 워크플로는 이를 생성하는 데 사용된 단계를 설명합니다.

내장된 워크플로 메타데이터를 사용하면 다음을 수행할 수 있습니다:

* 생성된 파일을 ComfyUI에서 다시 열고 해당 워크플로를 복구할 수 있습니다.
* 생성된 파일을 생성하는 데 사용된 워크플로와 함께 공유할 수 있습니다.
* 자동화된 워크플로에서 생성 설정을 검사할 수 있습니다.
* 출력 파일에서 ComfyUI 워크플로 메타데이터를 읽는 도구를 구축할 수 있습니다.

메타데이터는 파일 형식 내부에 저장됩니다. 보이는 이미지 또는 비디오 콘텐츠는 변경되지 않습니다.

## 내장 필드

ComfyUI는 일반적으로 두 개의 JSON 필드를 저장합니다:

| 필드         | 설명                                                    |
| ---------- | ----------------------------------------------------- |
| `workflow` | 노드, 링크 및 레이아웃 정보를 포함한 전체 워크플로 그래프입니다.                 |
| `prompt`   | 워크플로를 실행하는 데 사용되는 API 프롬프트입니다. 실행에 필요한 노드와 입력을 포함합니다. |

간단한 예시는 다음과 같습니다:

```json theme={null}
{
  "workflow": {
    "nodes": [],
    "links": []
  },
  "prompt": {
    "3": {
      "class_type": "KSampler",
      "inputs": {}
    }
  }
}
```

실제 내용은 워크플로와 ComfyUI 버전에 따라 달라집니다. 커스텀 노드는 `extra_pnginfo`를 통해 필드를 추가할 수도 있습니다.

두 필드는 서로 다른 용도로 사용됩니다. `workflow`는 프론트엔드에서 워크플로를 복구하는 데 사용됩니다. `prompt`는 실행을 위한 표현으로, ComfyUI 서버에 워크플로를 제출할 때 사용됩니다. 파일에 두 필드 중 하나만 포함될 수도 있습니다.

## 지원되는 형식

기본 제공 저장 노드는 다음 출력 형식에 메타데이터를 포함합니다:

| 출력             | 메타데이터 위치                                      |
| -------------- | --------------------------------------------- |
| PNG            | PNG `tEXt` 청크                                 |
| 애니메이션 PNG      | PNG 텍스트 메타데이터                                 |
| 애니메이션 WebP     | EXIF 태그                                       |
| MP4            | 컨테이너 메타데이터 태그                                 |
| WebM           | 컨테이너 메타데이터 태그                                 |
| `.latent`      | Safetensors 메타데이터                             |
| `.safetensors` | 워크플로 메타데이터를 포함하는 노드로 작성된 경우 Safetensors 메타데이터 |

정확한 메타데이터 지원은 저장 노드와 파일 작성 경로에 따라 달라집니다. 다른 애플리케이션에서 다시 인코딩된 파일에는 메타데이터가 더 이상 포함되지 않을 수 있습니다.

Animated WebP 파일은 값을 EXIF 태그에 저장합니다. 태그에는 `workflow:{JSON}` 및 `prompt:{JSON}`와 같은 문자열이 포함됩니다. 이는 값을 컨테이너 메타데이터 태그로 저장하는 MP4 및 WebM과 다릅니다.

## ComfyUI가 메타데이터를 저장하는 방법

ComfyUI가 워크플로를 실행하면 기본 제공 출력 노드는 API 프롬프트와 추가 워크플로 정보를 받습니다. 메타데이터 저장이 비활성화되지 않은 경우 저장 노드는 이러한 값을 JSON으로 직렬화하고 출력 파일에 기록합니다.

PNG 출력의 경우 값은 텍스트 항목으로 기록됩니다. 표준 필드 이름은 `prompt` 및 `workflow`입니다.

메타데이터는 별도의 사이드카 파일이 아닙니다. 저장 작업 중 출력 파일 자체에 기록됩니다. 따라서 파일을 복사하면 내장된 워크플로도 함께 복사되지만, 파일을 다시 작성하는 작업에서 메타데이터가 제거되거나 바뀔 수 있습니다.

ComfyUI를 시작할 때 메타데이터를 비활성화하려면 다음을 사용하세요:

```bash theme={null}
python main.py --disable-metadata
```

ComfyUI Desktop에서는 **Settings** > **Server-Config**를 열고 \*\*Disable saving prompt metadata in files.\*\*를 활성화하세요.

이 옵션이 활성화된 상태에서 생성된 파일은 포함된 메타데이터에서 워크플로를 복구하는 데 사용할 수 없습니다.

## ComfyUI가 메타데이터를 읽는 방법

ComfyUI 인터페이스에서 워크플로를 복구하려면 생성된 파일을 캔버스로 끌어다 놓습니다. **File** > **Open**에서 파일을 열 수도 있습니다.

파일에 `workflow`와 `prompt`가 모두 포함된 경우 ComfyUI는 포함된 `workflow`를 사용하여 캔버스를 재구성합니다. 파일에 워크플로가 포함되지 않은 경우 ComfyUI는 지원되는 미디어 파일을 일반 입력 미디어로 취급합니다.

통합 기능을 구축할 때는 파싱하기 전에 해당 필드가 있는지 확인하세요. `--disable-metadata` 옵션으로 생성된 파일, 저장 노드에 워크플로 정보가 전달되지 않은 파일, 또는 다른 애플리케이션에서 다시 인코딩한 파일에는 메타데이터가 없을 수 있습니다.

브라우저에서 내장된 워크플로를 확인하거나 편집하려면 [ComfyUI Embedded Workflow Editor](https://comfyui-embedded-workflow-editor.vercel.app/)를 사용할 수 있습니다. 이 편집기는 선택 사항이며, ComfyUI에서 워크플로를 복구하거나 프로그래밍 방식으로 메타데이터를 읽는 데 필요하지 않습니다.

## Python으로 PNG 메타데이터 읽기

다음 예제는 PNG 파일에서 표준 필드를 읽습니다:

```python theme={null}
from PIL import Image
import json

image = Image.open("output.png")

if "workflow" in image.info:
    workflow = json.loads(image.info["workflow"])
    print(workflow)

if "prompt" in image.info:
    prompt = json.loads(image.info["prompt"])
    print(prompt)
```

Pillow는 `Image.info`를 통해 PNG 텍스트 청크를 노출합니다. 값은 JSON 문자열이므로 Python 객체로 사용하기 전에 `json.loads`를 호출하세요.

## 명령줄에서 PNG 메타데이터 읽기

ImageMagick으로 PNG 텍스트 메타데이터를 확인할 수 있습니다:

```bash theme={null}
identify -verbose output.png
```

출력에서 `workflow` 및 `prompt` 텍스트 항목을 찾으세요.

## 비디오 메타데이터 읽기

ComfyUI는 MP4 및 WebM 출력의 컨테이너 메타데이터에 워크플로 메타데이터를 저장합니다. `ffprobe`로 이러한 필드를 확인할 수 있습니다:

```bash theme={null}
ffprobe -v quiet -show_entries format_tags -of json output.mp4
```

WebM 파일의 경우 `.webm` 파일 경로와 함께 동일한 명령을 사용합니다:

```bash theme={null}
ffprobe -v quiet -show_entries format_tags -of json output.webm
```

반환된 태그에는 JSON 문자열이 포함됩니다. JSON 파서로 `workflow` 및 `prompt` 태그의 값을 파싱하세요.

## WebP 메타데이터 읽기

ComfyUI는 Animated WebP 파일의 메타데이터를 EXIF 태그에 저장합니다. Pillow로 태그를 읽은 다음 필드 접두사를 제거하고 JSON을 파싱할 수 있습니다.

```python theme={null}
from PIL import Image
import json

image = Image.open("output.webp")

for _, value in image.getexif().items():
    if not isinstance(value, str) or ":" not in value:
        continue

    field, encoded_value = value.split(":", 1)
    if field in {"workflow", "prompt"}:
        data = json.loads(encoded_value)
        print(field, data)
```

메타데이터는 첫 번째 이미지 프레임에 저장됩니다. 애플리케이션이 WebP 파일을 다시 작성하면 EXIF 태그가 제거될 수 있습니다.

## 잠재 데이터 메타데이터 읽기

`.latent` 파일은 safetensors 형식을 사용합니다. 메타데이터는 `safetensors` Python 패키지로 읽을 수 있습니다:

```python theme={null}
from safetensors import safe_open

with safe_open("output.latent", framework="pt", device="cpu") as file:
    metadata = file.metadata() or {}
    print(metadata.get("workflow"))
    print(metadata.get("prompt"))
```

Safetensors 메타데이터 값은 문자열입니다. `workflow` 및 `prompt` 값이 존재하면 JSON으로 파싱하세요.

모든 형식에서 메타데이터를 선택 사항이자 신뢰할 수 없는 입력으로 취급하세요. 사용하기 전에 값이 올바른 JSON인지 검증하고, 워크플로에 실행에 필요한 모든 모델이나 커스텀 노드가 포함되어 있다고 가정하지 마세요.

## 제한 사항

* 포함된 메타데이터는 디지털 서명이 아닙니다. 파일을 누가 만들었거나 수정했는지 증명하지 않습니다.
* 워크플로에는 의존하는 모델 파일, 입력 에셋, 또는 커스텀 노드 패키지가 포함되지 않습니다.
* 모델, 입력 에셋, 또는 커스텀 노드를 이동하거나 이름을 바꾸면 복구된 워크플로가 실행되지 않을 수 있습니다.
* 이미지 및 비디오 편집기는 파일을 다시 인코딩할 때 메타데이터를 제거할 수 있습니다.
* `--disable-metadata`로 생성된 파일에는 표준 ComfyUI 워크플로 메타데이터가 포함되지 않습니다.
