--- id: generative-ai-pipeline title: "Generative AI Pipeline" category: "10_Wiki/Topics" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: ["ComfyUI Workflow JSON Serialization"] duplicate_of: "" source_trust_level: "B" confidence_score: 0.85 created_at: 2026-05-19 updated_at: 2026-05-19 review_reason: "" merge_history: [] tags: ["research", "Comfyui workflow json 생성 방법"] raw_sources: ["NotebookLM Synthesis"] applied_in: ["comfyui-workflow-to-api-converter-endpoint/README.md", "DanielPFlorian/ComfyUI-WorkflowGenerator", "pydn/ComfyUI-to-Python-Extension", "ComfyUI/custom_nodes", "ComfyUI/models/LLM/"] github_commit: "bc85382, 82df278, 6cdcc23" --- # [[Generative AI Pipeline]] ## 🎯 ν•œ 쀄 톡찰 (One-line insight) ComfyUI μ›Œν¬ν”Œλ‘œ JSON은 λ³΅μž‘ν•œ μƒμ„±ν˜• AI νŒŒμ΄ν”„λΌμΈμ„ λ°©ν–₯μ„± λΉ„μˆœν™˜ κ·Έλž˜ν”„(DAG) ν˜•νƒœλ‘œ μ§λ ¬ν™”ν•˜μ—¬ μ‹œκ°μ  λ””μžμΈκ³Ό ν”„λ‘œκ·Έλž˜λ°μ  μ‹€ν–‰ κ°„μ˜ 가ꡐ 역할을 ν•˜λŠ” 핡심 청사진이닀 [1-3]. ## 🧠 핡심 κ°œλ… (Core concepts) - **ν˜•μ‹μ˜ 이뢄화 (Bifurcation of Formats):** μ‹œκ°μ  λ ˆμ΄μ•„μ›ƒκ³Ό 메타데이터λ₯Ό ν¬ν•¨ν•œ 'ν”„λ‘ νŠΈμ—”λ“œ ν˜•μ‹(workflow.json)'κ³Ό 싀행에 ν•„μš”ν•œ ν•„μˆ˜ λ…Όλ¦¬λ§Œ 남긴 'API ν˜•μ‹(workflow_api.json)'으둜 κ΅¬λΆ„λœλ‹€ [2, 4, 5]. - **메타데이터 μž„λ² λ”© (Metadata Embedding):** μƒμ„±λœ PNG μ΄λ―Έμ§€μ˜ tEXt λ˜λŠ” zTXt 청크 내에 JSON μ›Œν¬ν”Œλ‘œ 데이터λ₯Ό 숨겨 μ €μž₯ν•¨μœΌλ‘œμ¨ 이미지 μžμ²΄κ°€ μ›Œν¬ν”Œλ‘œ λ°±μ—… 역할을 μˆ˜ν–‰ν•˜κ²Œ ν•œλ‹€ [6-8]. - **LLM 기반 ν•©μ„± (LLM-Driven Synthesis):** μžμ—°μ–΄ μ„€λͺ…을 톡해 λ…Έλ“œ κ·Έλž˜ν”„λ₯Ό μžλ™ μƒμ„±ν•˜λŠ” 닀단계 νŒŒμ΄ν”„λΌμΈ(생성-검증-ꡬ좕)을 톡해 λΉ„κΈ°μˆ μžλ„ λ³΅μž‘ν•œ νŒŒμ΄ν”„λΌμΈμ„ ꡬ좕할 수 있게 ν•œλ‹€ [9-11]. - **μ‹€ν–‰ λͺ¨λΈ μ—­μ „ (Execution Model Inversion):** μ΅œμ’… 좜λ ₯ λ…Έλ“œμ—μ„œ μ‹œμž‘ν•˜μ—¬ ν•„μš”ν•œ μ˜μ‘΄μ„±λ§Œ μ—­μΆ”μ ν•˜μ—¬ μ‹€ν–‰ν•¨μœΌλ‘œμ¨ κ·Έλž˜ν”„ λ‚΄ λ―Έμ‚¬μš© λ…Έλ“œμ˜ μ„±λŠ₯ 영ν–₯을 μ΅œμ†Œν™”ν•œλ‹€ [12]. ## 🧩 μΆ”μΆœλœ νŒ¨ν„΄ (Extracted patterns) - **데이터 볡ꡬ 및 μΆ”μΆœ νŒ¨ν„΄:** μ „μš© 도ꡬ(exiftool)λ‚˜ 온라인 μΆ”μΆœκΈ°λ₯Ό μ‚¬μš©ν•˜μ—¬ 온라인 ν”Œλž«νΌμ—μ„œ 제거되기 μ‰¬μš΄ 이미지 메타데이터 λ‚΄μ˜ JSON μ›Œν¬ν”Œλ‘œλ₯Ό λ³΅κ΅¬ν•œλ‹€ [13-15]. - **API μ •κ·œν™” νŒ¨ν„΄:** ν”„λ‘ νŠΈμ—”λ“œ ν˜•μ‹μ—μ„œ 링크 객체λ₯Ό μ œκ±°ν•˜κ³  λ…Έλ“œ μž…λ ₯κ°’ 내에 직접 μ†ŒμŠ€ λ…Έλ“œ ID와 슬둯 번호λ₯Ό μž„λ² λ”©ν•˜μ—¬ μ‹€ν–‰ κ·Έλž˜ν”„λ₯Ό κ°„μ†Œν™”ν•œλ‹€ [2, 16, 17]. - **동적 νŒŒλΌλ―Έν„° μ£Όμž…:** Python μŠ€ν¬λ¦½νŠΈλ‚˜ 래퍼 라이브러리λ₯Ό 톡해 JSON λ”•μ…”λ„ˆλ¦¬λ₯Ό 직접 μ‘°μž‘ν•˜μ—¬ μ‹œλ“œ(Seed), ν”„λ‘¬ν”„νŠΈ 등을 λ™μ μœΌλ‘œ λ³€κ²½ν•˜λ©° λŒ€λŸ‰ 생성을 μžλ™ν™”ν•œλ‹€ [18-20]. ## πŸ“– μ„ΈλΆ€ λ‚΄μš© (Details) ComfyUI μ›Œν¬ν”Œλ‘œ JSON 생성은 μ‚¬μš©μžμ˜ λͺ©μ μ— 따라 μˆ˜λ™ 내보내기, 이미지 메타데이터 μΆ”μΆœ, ν”„λ‘œκ·Έλž˜λ°μ  생성 및 LLM 기반 ν•©μ„±μ˜ λ„€ κ°€μ§€ 경둜둜 λ‚˜λ‰œλ‹€. **1. μˆ˜λ™ 및 μ‹œκ°μ  생성:** μ‚¬μš©μžλŠ” ComfyUI μ›Ή μΈν„°νŽ˜μ΄μŠ€μ—μ„œ λ…Έλ“œλ₯Ό μ—°κ²°ν•˜μ—¬ νŒŒμ΄ν”„λΌμΈμ„ μ„€κ³„ν•œλ‹€. `Ctrl + S` λ˜λŠ” λ©”λ‰΄μ˜ 'Export' κΈ°λŠ₯을 톡해 ν”„λ‘ νŠΈμ—”λ“œ ν˜•μ‹μ˜ JSON을 생성할 수 있으며, μ΄λŠ” λ…Έλ“œ μœ„μΉ˜, 크기, κ·Έλ£Ήν™” 정보 λ“± μΊ”λ²„μŠ€ λ ˆμ΄μ•„μ›ƒ 메타데이터λ₯Ό λͺ¨λ‘ ν¬ν•¨ν•œλ‹€ [21, 22]. API ν˜ΈμΆœμ„ μœ„ν•΄μ„œλŠ” μ„€μ •μ—μ„œ 'Dev mode'λ₯Ό ν™œμ„±ν™”ν•œ ν›„ 'Save (API format)'λ₯Ό 선택해야 ν•œλ‹€ [23, 24]. **2. 이미지 기반 μ›Œν¬ν”Œλ‘œ μΆ”μΆœ:** ComfyUIμ—μ„œ μƒμ„±λœ λͺ¨λ“  PNG μ΄λ―Έμ§€λŠ” 기본적으둜 μ›Œν¬ν”Œλ‘œ 데이터λ₯Ό ν¬ν•¨ν•œλ‹€ [25]. μ‚¬μš©μžλŠ” 이미지λ₯Ό μΊ”λ²„μŠ€μ— λ“œλž˜κ·Έ μ•€ λ“œλ‘­ν•˜κ±°λ‚˜ `exiftool -b -workflow input.png > workflow.json` λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ JSON을 μΆ”μΆœν•  수 μžˆλ‹€ [14, 26]. λ‹€λ§Œ, 이미지 νŽΈμ§‘κΈ°λ‚˜ SNS μ—…λ‘œλ“œ μ‹œ 메타데이터가 μ‚­μ œλ  수 μžˆμœΌλ―€λ‘œ μ£Όμ˜κ°€ ν•„μš”ν•˜λ‹€ [8, 27]. **3. ν”„λ‘œκ·Έλž˜λ°μ  및 API 기반 생성:** κ°œλ°œμžλŠ” Python의 `json` 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Œν¬ν”Œλ‘œ ν…œν”Œλ¦Ώμ˜ νŠΉμ • λ…Έλ“œ ID와 μž…λ ₯κ°’(inputs)을 μˆ˜μ •ν•  수 μžˆλ‹€ [18]. `Comfy API Simplified`와 같은 λž˜νΌλŠ” 숫자 ID λŒ€μ‹  λ…Έλ“œ 제λͺ©μœΌλ‘œ μ ‘κ·Όν•  수 있게 ν•˜μ—¬ μœ μ§€λ³΄μˆ˜μ„±μ„ 높이며, `ComfyUI-to-Python-Extension`은 JSON을 직접 μ‹€ν–‰ κ°€λŠ₯ν•œ `.py` 슀크립트둜 λ³€ν™˜ν•œλ‹€ [19, 28]. **4. LLM 기반 μžμ—°μ–΄ 생성:** `ComfyUI-WorkflowGenerator`와 같은 μ΅œμ‹  μ‹œμŠ€ν…œμ€ Qwen2.5-14B와 같은 λ―Έμ„Έ μ‘°μ •λœ λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžμ˜ μ˜λ„λ₯Ό ν•΄μ„ν•œλ‹€ [9, 29]. 이 과정은 1) 논리적 κ·Έλž˜ν”„ ꡬ쑰 생성(Generator), 2) 둜컬 λ…Έλ“œ λ ˆμ§€μŠ€νŠΈλ¦¬μ™€μ˜ 이름 일치 μ—¬λΆ€ 검증(Validator), 3) μ‹€ν–‰ κ°€λŠ₯ν•œ JSON으둜 컴파일(Builder)ν•˜λŠ” 3단계 νŒŒμ΄ν”„λΌμΈμ„ κ±°μΉœλ‹€ [10, 11]. ## βš–οΈ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & updates) - **버전 ν˜Έν™˜μ„± 문제:** ComfyUI의 μž¦μ€ μ—…λ°μ΄νŠΈλ‘œ 인해 이전 λ²„μ „μ˜ JSON 파일이 μ΅œμ‹  λ²„μ „μ—μ„œ μ •μƒμ μœΌλ‘œ μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€λŠ” 점이 μ§€μ λ˜μ—ˆλ‹€ [30]. - **API ν˜•μ‹μ˜ λΆˆμ™„μ „μ„±:** API ν˜•μ‹μ˜ JSON은 μ‹€ν–‰μ—λŠ” μ΅œμ ν™”λ˜μ–΄ μžˆμœΌλ‚˜ μ‹œκ°μ  데이터가 μ œκ±°λ˜μ–΄ μžˆμ–΄, 이λ₯Ό λ‹€μ‹œ UI둜 뢈러올 경우 μ›Œν¬ν”Œλ‘œμ˜ ꡬ쑰가 파괴된 'μŠ€μΌˆλ ˆν†€' μƒνƒœλ‘œ λ‚˜νƒ€λ‚˜λŠ” ν•œκ³„κ°€ μžˆλ‹€ [27, 31]. - **μ˜μ‘΄μ„± 였λ₯˜:** μ™ΈλΆ€ μ†ŒμŠ€μ—μ„œ λ‘œλ“œν•œ JSON은 'Missing Custom Nodes' 였λ₯˜(빨간색 λ°•μŠ€)λ₯Ό μΌμœΌν‚¬ 수 있으며, μ΄λŠ” ComfyUI Managerλ₯Ό ν†΅ν•œ μ„€μΉ˜ 및 μ„œλ²„ μž¬μ‹œμž‘μœΌλ‘œ ν•΄κ²°ν•΄μ•Ό ν•œλ‹€ [32, 33]. ## πŸ› οΈ 적용 사둀 (Applied in summary) - **comfyui-workflow-to-api-converter-endpoint:** μ„œλ²„ μΈ‘μ—μ„œ ν”„λ‘ νŠΈμ—”λ“œ ν˜•μ‹μ„ API ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λŠ” `/workflow/convert` μ—”λ“œν¬μΈνŠΈλ₯Ό μ œκ³΅ν•œλ‹€ (Commit `bc85382`) [31, 34, 35]. - **ComfyUI-WorkflowGenerator:** μ‚¬μš©μžμ˜ μžμ—°μ–΄ λͺ…λ Ή(예: "Create a text-to-image workflow using SDXL")을 λ°›μ•„ `ComfyUI/models/LLM/` λ‚΄μ˜ λͺ¨λΈμ„ μ‚¬μš©ν•˜μ—¬ μ›Œν¬ν”Œλ‘œλ₯Ό μžλ™ μƒμ„±ν•œλ‹€ [11, 36, 37]. - **ComfyUI-to-Python-Extension:** μ›Œν¬ν”Œλ‘œ JSON을 λ…λ¦½ν˜• Python 슀크립트둜 λ³€ν™˜ν•˜μ—¬ `COMFYUI_PATH` ν™˜κ²½ λ³€μˆ˜ 섀정을 톡해 μ„œλ²„ 없이도 μ‹€ν–‰ κ°€λŠ₯ν•œ ν™˜κ²½μ„ κ΅¬μΆ•ν•œλ‹€ [28, 38]. - **P-Reinforce 적용 μœ„μΉ˜:** `ComfyUI/custom_nodes/` 디렉토리에 μ„€μΉ˜λ˜λŠ” λ‹€μ–‘ν•œ μ»€μŠ€ν…€ λ…Έλ“œ νŒ¨ν‚€μ§€λ“€μ—μ„œ JSON 규격 v1.0에 맞좘 직렬화 둜직이 κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€ [39-41]. ## βœ… 검증 μƒνƒœ 및 신뒰도 - **μƒνƒœ:** draft - **검증 단계:** conceptual (μ‹€μ œ 적용 사둀 발견 μ‹œ applied/validated둜 승격 κ°€λŠ₯) - **좜처 신뒰도:** B (Official Documentation / Primary Source via NotebookLM) - **쀑볡 검사 κ²°κ³Ό:** μ‹ κ·œ 생성 (New discovery) ## πŸ“ λ³€κ²½ 이λ ₯ (Change history) - 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine.