113 lines
9.4 KiB
Markdown
113 lines
9.4 KiB
Markdown
---
|
|
id: serialization-formats-(frontend-vs-api)
|
|
title: "Serialization Formats (Frontend vs API)"
|
|
category: "10_Wiki/Topics"
|
|
status: "draft"
|
|
verification_status: "conceptual"
|
|
canonical_id: ""
|
|
aliases: ["Frontend JSON", "API JSON", "workflow.json", "workflow_api.json"]
|
|
duplicate_of: ""
|
|
source_trust_level: "B"
|
|
confidence_score: 0.90
|
|
created_at: 2026-05-19
|
|
updated_at: 2026-05-19
|
|
review_reason: ""
|
|
merge_history: []
|
|
tags: ["research", "Comfyui workflow json 생성 방법", "Serialization", "API"]
|
|
raw_sources: ["NotebookLM Synthesis"]
|
|
applied_in: ["comfyui-workflow-to-api-converter-endpoint (bc85382)", "ComfyUI-to-Python-Extension", "Mystic Pipeline (new_pipeline.py)"]
|
|
github_commit: "bc85382"
|
|
---
|
|
|
|
# [[Serialization Formats (Frontend vs API)]]
|
|
|
|
## 🎯 한 줄 통찰 (One-line insight)
|
|
ComfyUI는 인간 중심의 시각적 편집을 위한 **Frontend Format**과 기계 중심의 효율적 실행을 위한 **API Format**으로 직렬화 규격을 이원화하여 관리한다 [1, 2].
|
|
|
|
## 🧠 핵심 개념 (Core concepts)
|
|
- **Frontend Format (workflow.json):** 사용자와의 상호작용 및 시각화를 위해 설계된 포맷으로, Litegraph 표준을 따르며 노드 좌표, 크기, 그룹화 정보 등 모든 UI 메타데이터를 포함한다 [1, 3, 4].
|
|
- **Backend/API Format (workflow_api.json):** 서버 사이드 처리에 최적화된 스트림라인 실행 그래프로, 시각적 메타데이터를 제거하고 실행에 필요한 노드 유형과 입력값, 연결 관계만을 유지한다 [1, 5].
|
|
- **Metadata Stripping:** API 포맷 생성 과정에서 불필요한 UI 속성을 제거하여 파일 크기를 압축하고 실행 효율성을 극대화하는 전략이다 [1, 2].
|
|
- **Link Embedding:** API 포맷에서는 링크가 별도의 객체가 아니라 노드 입력 내부에 `[origin_node_id, output_slot_index]` 형태의 참조값으로 직접 포함된다 [1, 6].
|
|
|
|
## 🧩 추출된 패턴 (Extracted patterns)
|
|
- **Bifurcation Pattern:** 동일한 워크플로우를 사용 목적에 따라 시각적 레이아웃(Frontend)과 논리적 실행 순서(API)로 분리하여 저장 및 관리한다 [1].
|
|
- **Execution Model Inversion:** 엔진 실행 시 출력 노드(Save Image 등)에서 시작하여 역방향으로 그래프를 탐색함으로써, JSON 내에 미사용 노드가 있더라도 실행 성능에 영향을 주지 않도록 설계되었다 [7].
|
|
- **Metadata Injection:** 생성된 이미지(PNG/WebP)의 텍스트 청크(tEXt/zTXt)에 두 포맷을 모두 주입하여, 이미지 자체가 실행 논리의 컨테이너 역할을 수행하도록 한다 [8, 9].
|
|
|
|
## 📖 세부 내용 (Details)
|
|
ComfyUI의 직렬화 구조는 크게 두 가지 운영 맥락으로 나뉜다.
|
|
|
|
**1. Frontend JSON (workflow.json)의 구조와 역할**
|
|
이 형식은 사용자가 웹 인터페이스에서 워크플로우를 편집하고 공유할 때 사용된다 [2]. 주요 특징은 다음과 같다:
|
|
- **시각적 메타데이터:** `pos`(좌표), `size`(크기), `flags`(노드 상태), `groups`(그룹 구조)와 같은 캔버스 레이아웃 정보를 완벽하게 보존한다 [1, 10].
|
|
- **링크 표현:** 노드 간의 연결이 별도의 `links` 배열 내에서 명시적인 연결 객체로 관리된다 [2, 11].
|
|
- **호환성:** 웹 인터페이스에서 드래그 앤 드롭을 통해 워크플로우를 원상복구하는 데 필수적이다 [3, 12].
|
|
|
|
**2. API JSON (workflow_api.json)의 구조와 역할**
|
|
서버리스 배포나 외부 애플리케이션 연동 시 사용되는 실행 전용 포맷이다 [2, 13].
|
|
- **효율성 최적화:** 모든 UI 관련 정보를 제거하여 파일 용량을 줄이고 처리 속도를 높인다 [2].
|
|
- **노드 식별:** 노드는 고유한 기능적 키(주로 숫자 문자열)로 식별되며, `class_type`과 `inputs` 필드가 핵심을 이룬다 [2, 14].
|
|
- **연결 방식:** 별도의 링크 객체 없이, 노드의 입력 필드 내에 소스 노드와 슬롯 번호를 직접 기입하는 방식을 취한다 [1, 2].
|
|
|
|
**3. 포맷 간 전환 및 생성**
|
|
기본적으로 ComfyUI 설정의 'Dev mode Options'를 활성화해야 'Save (API format)' 버튼이 노출된다 [15, 16]. 일부 도구는 Frontend 포맷을 서버 사이드에서 API 포맷으로 변환하는 기능을 제공하여 개발자가 UI 버전만 관리할 수 있도록 돕기도 한다 [17, 18].
|
|
|
|
## ⚖️ 모순 및 업데이트 (Contradictions & updates)
|
|
- **가독성 vs 실행력:** API JSON은 실행에는 최적화되어 있으나, 다시 UI로 불러올 경우 시각적 레이아웃이 파괴된 'Skeleton' 상태로 나타나 편집이 매우 어렵다는 한계가 있다 [18].
|
|
- **데이터 유실 위험:** PNG 이미지에 포함된 메타데이터는 SNS 업로드나 압축 과정에서 쉽게 제거될 수 있으며, 이 경우 워크플로우 복구가 불가능해진다 [9, 19].
|
|
- **버전 호환성:** ComfyUI가 빈번하게 업데이트됨에 따라, 이전 버전에서 생성된 JSON 파일이 최신 엔진에서 정상적으로 동작하지 않을 수 있는 모순이 존재한다 [19].
|
|
|
|
## 🛠️ 적용 사례 (Applied in summary)
|
|
- **comfyui-workflow-to-api-converter-endpoint:** 클라이언트 사이드의 변환 로직을 Python으로 구현하여 `/workflow/convert` 엔드포인트를 통해 비 API 포맷을 API 포맷으로 변환한다 (Git Commit: `bc85382`) [17, 20, 21].
|
|
- **ComfyUI-to-Python-Extension:** API JSON 포맷을 읽어 실행 가능한 순수 Python 스크립트(`.py`)로 변환하며, `workflow_api.py`라는 기본 파일명을 사용한다 [22, 23].
|
|
- **Mystic Pipeline:** `workflow.json`을 포함한 디렉토리 구조에서 `new_pipeline.py`를 통해 입력 프롬프트를 JSON에 주입하고 실행하는 파이프라인 아키텍처를 구성한다 [24, 25].
|
|
- **Replicate fofr/any-comfyui-workflow:** API JSON 블록을 직접 입력받아 GPU 환경에서 실행하고 결과물을 반환하는 프로덕션 모델로 활용된다 [26, 27].
|
|
|
|
## ✅ 검증 상태 및 신뢰도
|
|
- **상태:** draft
|
|
- **검증 단계:** conceptual (다양한 커스텀 노드 및 확장 도구에서 적용 사례 확인됨)
|
|
- **출처 신뢰도:** B (Official Documentation / GitHub Source Code README / Expert Tutorials)
|
|
- **중복 검사 결과:** 신규 생성 (New discovery)
|
|
|
|
|
|
## 🔗 관련 문서 링크 (Related document links)
|
|
|
|
### 상위/유사 개념
|
|
#### [아키텍처/기반 기술]
|
|
- [[ComfyUI Workflow JSON 생성 방법]]
|
|
- 연결 이유: 본 주제의 루트 주제로서 전체적인 생성 맥락을 제공함.
|
|
- [[Litegraph Standard]]
|
|
- 연결 이유: Frontend 포맷의 시각적 레이아웃 규격을 결정하는 핵심 기술임.
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 노드 좌표 및 링크 객체 처리 방식의 원리.
|
|
|
|
#### [구현/활용 도구]
|
|
- [[Dev Mode Options]]
|
|
- 연결 이유: API 포맷을 추출하기 위해 반드시 선행되어야 하는 UI 설정임.
|
|
- [[ComfyUI-Manager]]
|
|
- 연결 이유: JSON 로드 시 발생하는 종속성(Custom Node) 문제를 해결하는 필수 도구임 [28].
|
|
- [[Load Image (Base64)]]
|
|
- 연결 이유: API 요청 시 외부 이미지 파일을 JSON 내부에 직렬화하여 포함하는 주요 방식임 [29].
|
|
|
|
### 심층 후속 질문 (Deeper Research Questions)
|
|
- Frontend JSON의 `links` 배열 구조와 API JSON의 `inputs` 내 임베디드 참조 방식 간의 변환 알고리즘은 구체적으로 어떻게 작동하는가?
|
|
- 이미지 메타데이터(tEXt/zTXt)에 두 가지 포맷을 동시에 저장할 때 발생하는 오버헤드와 실제 처리 우선순위는 무엇인가?
|
|
- `object_info.json`은 API JSON을 동적으로 생성하거나 검증하는 과정에서 어떤 데이터 스키마를 제공하는가? [13]
|
|
- 왜 ComfyUI는 API 포맷 노출을 기본적으로 숨기고 'Dev Mode'를 통해서만 접근하도록 설계했는가? [17]
|
|
- `ComfyUI-to-Python-Extension`이 변환한 파이썬 코드와 원본 API JSON 간의 실행 효율 차이는 존재하는가?
|
|
- 복잡한 서브그래프(Subgraph)가 포함된 워크플로우를 API 포맷으로 직렬화할 때의 제약 사항은 무엇인가? [30]
|
|
|
|
### 실무 적용 맥락 (Practical Application Contexts)
|
|
- **Implementation:** 외부 Python 앱에서 ComfyUI 서버로 프롬프트를 보낼 때는 반드시 API 포맷을 사용해야 하며, 프롬프트 내 특정 노드 ID의 값을 동적으로 변경하여 전송한다 [31, 32].
|
|
- **System Design:** 프로덕션 환경에서는 사용자가 시각적으로 편집한 `workflow.json`을 저장하고, 시스템 내부적으로 이를 API 포맷으로 변환하여 큐에 삽입하는 아키텍처가 권장된다 [18].
|
|
- **Operation / Maintenance:** 모델 파일명 변경이나 커스텀 노드 누락에 대비하여 JSON 내의 `class_type`과 실제 서버의 `object_info`를 대조하는 검증 로직이 필요하다 [33].
|
|
- **Learning Path:** 초보자는 Frontend JSON을 통한 시각적 학습에 집중하고, 자동화 단계로 넘어갈 때 API 포맷의 노드 ID 및 입력 구조를 파악해야 한다 [34].
|
|
|
|
### 인접 주변 주제 (Adjacent Topics)
|
|
- [[Model Hashing (SHA-256)]]
|
|
- 확장 방향: JSON 파일 내의 하드코딩된 파일명 문제를 해결하기 위한 모델 식별 기술 [35].
|
|
- [[Retrieval-Augmented Generation (RAG) for Nodes]]
|
|
- 확장 방향: LLM을 이용해 동적으로 최적의 노드 그래프를 생성하는 미래 기술 [36].
|
|
|
|
## 📝 변경 이력 (Change history)
|
|
- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) |