ComfyUI API 포맷은 시각적 메타데이터를 제거하고 노드 간의 논리적 연결과 입력값만을 보존하여 서버 측 실행 및 프로그래밍 방식의 자동화에 최적화된 경량화된 실행 그래프이다 [1-3].
🧠 핵심 개념 (Core concepts)
실행 그래프 (Execution Graph): UI 좌표, 노드 크기, 그룹화 정보 등 시각적 요소를 배제하고 백엔드 엔진이 프롬프트를 실행하는 데 필요한 순수 논리 구조만 포함한다 [1, 3, 4].
임베디드 링크 (Embedded Links): 별도의 링크 객체 배열을 사용하는 대신, 노드의 입력 필드(inputs) 내에 소스 노드 ID와 출력 슬롯 번호를 직접 참조(예: [5, 6])하여 연결을 정의한다 [1, 2, 7].
기능적 키 매핑 (Functional Key Mapping): JSON 객체의 최상위 키가 노드 ID(문자열)이며, 각 값은 class_type과 inputs를 포함하는 딕셔너리 구조를 가진다 [8-10].
개발자 모드 활성화 (Dev Mode Requirement): 일반적인 저장 방식과 달리 ComfyUI 설정에서 'Enable Dev mode Options'를 활성화해야만 내보낼 수 있는 특수 포맷이다 [11-14].
🧩 추출된 패턴 (Extracted patterns)
UI/백엔드 이원화 패턴: 사용자 인터페이스용 workflow.json과 실행 전용 workflow_api.json을 분리하여 편집 효율성과 실행 속도를 동시에 확보한다 [1, 2, 15].
메타데이터 캡슐화: PNG 이미지의 tEXt 또는 zTXt 청크에 API 포맷(prompt) 데이터를 포함시켜 이미지 자체가 실행 가능한 소스 코드 역할을 하도록 설계한다 [16, 17].
직접 딕셔너리 조작 패턴: 개발자가 JSON을 로드하여 특정 노드 ID의 inputs 값을 파이썬 등으로 수정 후 /prompt 엔드포인트에 전송하는 동적 제어 방식을 지원한다 [8, 10, 18].
📖 세부 내용 (Details)
ComfyUI의 API 포맷은 주로 workflow_api.json 파일로 알려져 있으며, 서버리스 API 호출이나 외부 애플리케이션 통합 시 핵심적인 역할을 한다 [2, 15]. 이 포맷은 Litegraph 표준을 따르는 프론트엔드 포맷과 달리, 백엔드 엔진이 즉시 해석할 수 있도록 평탄화(Flattened)된 구조를 가진다 [1, 11].
구조적으로 API 포맷은 노드 ID를 키로 사용하는 단일 JSON 객체이다 [9]. 각 노드 정의에는 해당 노드의 클래스 이름인 class_type과 위젯 값 및 링크 정보를 포함하는 inputs 딕셔너리가 들어간다 [3, 8]. 예를 들어, CLIPTextEncode 노드의 경우 텍스트 입력값과 함께 연결된 CLIP 모델의 노드 정보를 [노드ID, 슬롯번호] 형태의 배열로 보유한다 [7, 10].
이 포맷은 데이터 용량이 작고 효율적이지만, 다시 ComfyUI 인터페이스로 드래그했을 때 시각적 레이아웃 정보가 없어 노드들이 겹치거나 연결 구조를 파악하기 힘든 '스켈레톤(Skeleton)' 상태로 로드된다는 특징이 있다 [19, 20]. 따라서 실무에서는 시각적 편집용 원본 워크플로를 별도로 보관하는 것이 권장된다 [20]. 또한, 최근에는 시각적 포맷을 API 포맷으로 실시간 변환해주는 서버측 엔드포인트 도구들이 개발되어 이 단점을 보완하고 있다 [19, 21].
⚖️ 모순 및 업데이트 (Contradictions & updates)
가독성 vs 실행력: API 포맷은 인간이 읽기에 간결하지만, 시각적 정보가 결여되어 있어 복잡한 워크플로를 이 포맷만으로 수동 편집하기에는 한계가 있다 [17, 20].
버전 호환성: ComfyUI가 빈번하게 업데이트됨에 따라 구버전의 JSON API 포맷이 최신 서버 환경에서 정상적으로 작동하지 않을 수 있다는 경고가 존재한다 [22].
데이터 유실 위험: 표준 이미지 편집기나 소셜 미디어를 거칠 경우 PNG 메타데이터에 포함된 API 포맷 정보가 삭제될 수 있어 전송 시 주의가 필요하다 [16].