diff --git a/10_Wiki/Comfyui/API Format (workflow_api.json).md b/10_Wiki/Comfyui/API Format (workflow_api.json).md new file mode 100644 index 00000000..b4c26dd8 --- /dev/null +++ b/10_Wiki/Comfyui/API Format (workflow_api.json).md @@ -0,0 +1,107 @@ +--- +id: api-format-(workflow_api.json) +title: "API Format (workflow_api.json)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Backend Format", "API JSON"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "API"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-workflow-to-api-converter-endpoint/README.md", "comfy_api_simplified", "ComfyUI-to-Python-Extension", "Mystic pipeline code", "Replicate any-comfyui-workflow"] +github_commit: "" +--- + +# [[API Format (workflow_api.json)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์ˆ˜์ ์ธ ๋…ธ๋“œ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋งŒ์„ ์••์ถ•ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ `/prompt` ์—”๋“œํฌ์ธํŠธ ์‹คํ–‰์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์‹คํ–‰ ์ตœ์ ํ™” (Execution-centric):** ์‹œ๊ฐ์  ๋ฐฐ์น˜ ์ •๋ณด๊ฐ€ ์•„๋‹Œ ๋ฐฑ์—”๋“œ ์—”์ง„์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋…ผ๋ฆฌ ๊ทธ๋ž˜ํ”„๋งŒ ํฌํ•จํ•จ [1, 3]. +- **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ (Metadata Stripping):** ๋…ธ๋“œ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ๊ทธ๋ฃน, ์ƒ‰์ƒ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๊ฒฝ๋Ÿ‰ํ™”ํ•จ [1, 2, 4]. +- **๋‚ด์žฅํ˜• ๋งํฌ ์ฐธ์กฐ (Embedded Linkage):** ๋ณ„๋„์˜ ๋งํฌ ๊ฐ์ฒด ๋ฐฐ์—ด ๋Œ€์‹  ๋…ธ๋“œ ์ž…๋ ฅ(inputs) ๋‚ด์— ์†Œ์Šค ๋…ธ๋“œ ID์™€ ์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง [1, 5]. +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์˜์กด์„ฑ (Dev Mode Dependency):** ํ‘œ์ค€ ํ™˜๊ฒฝ์—์„œ๋Š” ์ˆจ๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ, ์„ค์ •์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ๋งŒ ์ƒ์„ฑ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•จ [6-8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋…ธ๋“œ ์‹๋ณ„ ํŒจํ„ด:** ๊ฐ ๋…ธ๋“œ๋Š” ์ˆซ์ž ๋ฌธ์ž์—ด(์˜ˆ: "5", "6") ํ˜•ํƒœ์˜ ๊ณ ์œ  ํ‚ค๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ๊ธฐ๋Šฅ์  ๋งคํ•‘์„ ์œ„ํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋จ [3, 9, 10]. +- **๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ํŒจํ„ด:** ํŠน์ • ๋…ธ๋“œ์˜ ์ž…๋ ฅ ํ•„๋“œ์— `[๋…ธ๋“œID, ์ถœ๋ ฅ์Šฌ๋กฏ๋ฒˆํ˜ธ]` ํ˜•ํƒœ์˜ ๋ฆฌ์ŠคํŠธ(์˜ˆ: `[11, 12]`)๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •์˜ํ•จ [5]. +- **์ง๋ ฌํ™” ๊ตฌ์กฐ:** ๋ฃจํŠธ ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ ID๋ฅผ ํ‚ค๋กœ ํ•˜๊ณ , ๊ทธ ๊ฐ’์œผ๋กœ `class_type`๊ณผ `inputs`๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•จ [10, 13]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +### 1. ํฌ๋งท์˜ ์ •์˜์™€ ๋ชฉ์  +API ํฌ๋งท(`workflow_api.json`)์€ ComfyUI ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ง์ ‘ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” **ํ‰ํƒ„ํ™”๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„(flattened execution graph)**์ž…๋‹ˆ๋‹ค [6]. ์ฃผ๋กœ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ตํ•ฉ, ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰, ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ(queue)์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 9]. + +### 2. ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ ์š”์†Œ +- **๊ตฌ์กฐ์  ์ฐจ์ด:** ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท(`workflow.json`)์ด Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ์‹œ๊ฐ์  ๊ฐ€๋…์„ฑ์„ ์ค‘์‹œํ•˜๋Š” ๋ฐ˜๋ฉด, API ํฌ๋งท์€ ๋ฐฑ์—”๋“œ ์—”์ง„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ ์‚ฌ์–‘์— ๋งž์ถฐ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค [1, 9]. +- **๋…ธ๋“œ ์ •์˜:** ๊ฐ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” `class_type`๊ณผ ์‹ค์ œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋‹ด์€ `inputs` ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [2, 10]. +- **์—ฐ๊ฒฐ ๋ฐฉ์‹:** ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์˜ `links` ๋ฐฐ์—ด์ด ์ œ๊ฑฐ๋˜๊ณ , ๋ชจ๋“  ์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ `inputs` ๋‚ด์— ์ง์ ‘ ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CLIP ํ…์ŠคํŠธ ์ธ์ฝ”๋”ฉ ๋…ธ๋“œ์˜ `clip` ์ž…๋ ฅ๊ฐ’์€ ์—ฐ๊ฒฐ๋œ ์†Œ์Šค ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค [5]. + +### 3. ์ƒ์„ฑ ๋ฐ ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค +- **์ˆ˜๋™ ์ƒ์„ฑ:** ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Enable Dev mode Options'๋ฅผ ์ฒดํฌํ•œ ํ›„, ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” **'Save (API Format)'** ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค [7, 8, 14]. +- **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ๋ณ€ํ™˜:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง ์—†์ด ์„œ๋ฒ„ ์ธก์—์„œ ์ง์ ‘ ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹์„ API ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ฐ€์—ญ์„ฑ ๋ฌธ์ œ (Fragility):** API ํฌ๋งท์€ ์‹คํ–‰์—๋Š” ์™„๋ฒฝํ•˜์ง€๋งŒ ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๋‹ค์‹œ UI๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋กœ๋“œํ•˜๋ฉด ๋…ธ๋“œ ๋ฐฐ์น˜๊ฐ€ ๊นจ์ง€๊ฑฐ๋‚˜ ๊ทธ๋ฃน ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„ '์Šค์ผˆ๋ ˆํ†ค(skeleton)' ์ƒํƒœ๋กœ ๋‚˜ํƒ€๋‚˜ ํŽธ์ง‘์ด ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค [17, 18]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹คํ–‰ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค [19, 20]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„ ์ธก์—์„œ API ํฌ๋งท์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [15, 21]. +- **deimos-deimos/comfy_api_simplified:** API ํฌ๋งท ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ํŒŒ์ด์ฌ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋‹ค๋ฃจ๊ณ , ๋…ธ๋“œ ์ œ๋ชฉ(title)์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [22, 23]. +- **Mystic & Replicate:** ์‚ฌ์šฉ์ž ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค API๋กœ ๋ฐฐํฌํ•  ๋•Œ, ์‹คํ–‰์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ `workflow_api.json`์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [14, 24, 25]. +- **ComfyUI-to-Python-Extension:** API ํฌ๋งท์˜ JSON์„ ์ž…๋ ฅ๋ฐ›์•„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ(`.py`)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [26, 27]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฐ ํ”Œ๋žซํผ์—์„œ ํ•ต์‹ฌ ๊ทœ๊ฒฉ์œผ๋กœ ํ™œ์šฉ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository README ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Frontend Format (workflow.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท๊ณผ ๋Œ€์นญ๋˜๋Š” ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ์‹œ UI ์ •๋ณด์™€ ์‹คํ–‰ ์ •๋ณด์˜ ๋ถ„๋ฆฌ ์„ค๊ณ„ ๋ฐฉ์‹. +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท์€ ๋…ธ๋“œ์™€ ๋งํฌ๋กœ ๊ตฌ์„ฑ๋œ ์ถ”์ƒํ™”๋œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ์˜์กด์„ฑ ๋ฐ ์‹คํ–‰ ์ˆœ์„œ ๊ฒฐ์ • ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI API]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท์€ `/prompt` ์—”๋“œํฌ์ธํŠธ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ํŽ˜์ด๋กœ๋“œ์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค์ œ ์„œ๋ฒ„ ํ†ต์‹  ๋ฐ ์ž‘์—… ํ์ž‰ ํ”„๋กœ์„ธ์Šค. +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์„ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ ์‹คํ–‰ ์ฝ”๋“œ๋กœ ์น˜ํ™˜๋˜๋Š” ๋งคํ•‘ ์›๋ฆฌ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์™œ ComfyUI๋Š” ์‹œ๊ฐ์  ์ •๋ณด์™€ ์‹คํ–‰ ์ •๋ณด๋ฅผ ํ•˜๋‚˜์˜ JSON์— ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋‘ ๊ฐ€์ง€ ํฌ๋งท์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? [1] +- API ํฌ๋งท์—์„œ ๋…ธ๋“œ ID๊ฐ€ ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ ์ˆซ์ž๋กœ ๊ณ ์ •๋  ๋•Œ, ์›Œํฌํ”Œ๋กœ์šฐ ํŽธ์ง‘ ์‹œ ID ์ถฉ๋Œ์ด๋‚˜ ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [3, 28] +- `comfyui-workflow-to-api-converter-endpoint`๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ํŒŒ์ด์ฌ ์„œ๋ฒ„ ์ธก ๋กœ์ง์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ด์‹ํ–ˆ๋Š”๊ฐ€? [15] +- ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ(์˜ˆ: 200KB ์ด์ƒ)๋ฅผ API ํฌ๋งท์œผ๋กœ ํ˜ธ์ถœํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋Š”๊ฐ€? [16] +- `object_info.json`์— ์ •์˜๋œ ๋…ธ๋“œ ์Šคํ‚ค๋งˆ์™€ API ํฌ๋งท์˜ `inputs` ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์ด์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”๊ฐ€? [13] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API JSON์„ ๋กœ๋“œํ•˜๊ณ , ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋™์  ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ [10, 29]. +- **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๋ฐฑ์—”๋“œ ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์บ์‹ฑ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•  ์ˆ˜ ์žˆ์Œ [17]. +- **Operation / Maintenance:** ์ปค์Šคํ…€ ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ ์‹œ API ํฌ๋งท ๋‚ด์˜ `class_type` ๋ช…์นญ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•จ [19]. +- **Learning Path:** ๋…ธ๋“œ ๊ธฐ๋ฐ˜ UI์— ์ต์ˆ™ํ•ด์ง„ ํ›„, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ถ”์ถœ๋œ API JSON์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ์ง„์ž…ํ•จ [6]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API JSON ๋‚ด์˜ ๋ชจ๋ธ ํŒŒ์ผ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ  ์‹๋ณ„ ๊ธฐ์ˆ  ์กฐ์‚ฌ [30]. +- [[Serverless Deployment]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ํฌ๋งท์„ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(Replicate, Mystic)์— ๋ฐฐํฌํ•˜์—ฌ ํ™•์žฅ์„ฑ ์žˆ๋Š” AI ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ• [14, 31]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/API Format.md b/10_Wiki/Comfyui/API Format.md new file mode 100644 index 00000000..50e05a63 --- /dev/null +++ b/10_Wiki/Comfyui/API Format.md @@ -0,0 +1,103 @@ +--- +id: api-format +title: "API Format" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API JSON", "workflow_api.json", "Backend Format"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "API", "JSON", "Automation"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-workflow-to-api-converter-endpoint", "deimos-deimos/comfy_api_simplified", "pydn/ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[API Format]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +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]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์„œ๋ฒ„์ธก `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค [19]. + - **Git ์ปค๋ฐ‹:** `bc85382` (์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์˜ ๋Œ€์†Œ๋ฌธ์ž ์ •๊ทœํ™” ์ˆ˜์ • ํฌํ•จ) [23, 24]. +- **deimos-deimos/comfy_api_simplified:** ๋…ธ๋“œ ์ œ๋ชฉ(Title)์„ ๊ธฐ์ค€์œผ๋กœ API ํฌ๋งท์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ํ์— ๋“ฑ๋กํ•˜๋Š” ํŒŒ์ด์ฌ ๋ž˜ํผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [25-27]. +- **pydn/ComfyUI-to-Python-Extension:** ์ €์žฅ๋œ API ํฌ๋งท JSON์„ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” CLI ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค [28-30]. +- **Mystic (Pipeline AI):** ์‚ฌ์šฉ์ž์˜ API JSON์„ ํŒŒ์ด์ฌ ์—”๋“œํฌ์ธํŠธ ๋‚ด์— ์ฃผ์ž…ํ•˜์—ฌ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•œ๋‹ค [14, 31]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜) [23, 32] +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Frontend Format]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท๊ณผ ๋Œ€์กฐ๋˜๋Š” ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž„. [1, 2] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ ์ „๋žต ๋ฐ Litegraph ํ‘œ์ค€์˜ ํ•œ๊ณ„. [1, 33] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ง๋ ฌํ™”๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์ž„. [34] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ์‹คํ–‰ ์ˆœ์„œ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ œ์–ด ์›๋ฆฌ. [34, 35] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์„ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ง์ ‘์ ์ธ ๋„๊ตฌ์ž„. [28] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ ํŒŒ์ด์ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋งคํ•‘๋˜๋Š” ๊ณผ์ •. [29, 36] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ž„. [37, 38] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฐ `class_type` ๊ธฐ๋ฐ˜์˜ ๋…ธ๋“œ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. [37, 39] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API ํฌ๋งท์—์„œ ๋…ธ๋“œ ID๊ฐ€ ๋‹จ์ˆœํ•œ ์ˆซ์ž ๋ฌธ์ž์—ด์„ ๋„˜์–ด ๊ธฐ๋Šฅ์  ํ‚ค(Functional Key)๋กœ ์ž‘๋™ํ•  ๋•Œ, ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์—์„œ ID ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 2] +- `workflow_api.json`์— ํฌํ•จ๋œ `_meta` ํ•„๋“œ๋Š” ์‹คํ–‰ ์—”์ง„์—์„œ ์–ด๋–ค ๊ตฌ์ฒด์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ํ•„์ˆ˜ ์š”์†Œ์ธ๊ฐ€? [9] +- ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๊ฐ€ ์ค‘์ฒฉ๋œ ์›Œํฌํ”Œ๋กœ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ, ๋‚ด๋ถ€ ๋งํฌ ID์™€ ์™ธ๋ถ€ ๋งํฌ ID์˜ ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๊ฐ€? [40] +- API ํฌ๋งท ๋‚ด์˜ `inputs` ํ•„๋“œ์—์„œ ์œ„์ ฏ ๊ฐ’(`widgets_values`)๊ณผ ๋™์  ๋งํฌ ์—ฐ๊ฒฐ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ๋ฌธ ๋ถ„์„ ๋กœ์ง์€ ๋ฌด์—‡์ธ๊ฐ€? [7, 41] +- `exiftool`๊ณผ ๊ฐ™์€ ์™ธ๋ถ€ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PNG์—์„œ API JSON์„ ์ถ”์ถœํ•  ๋•Œ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ์„ ๋ณต๊ตฌํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ์Šคํ‚ค๋งˆ๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€? [42, 43] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API JSON ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ํŠน์ • ๋…ธ๋“œ ID์˜ ์ž…๋ ฅ๊ฐ’์„ ์ˆ˜์ •ํ•œ ๋’ค ์„œ๋ฒ„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ด ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค [8, 10, 18]. +- **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ํŽธ์ง‘ ๋„๊ตฌ์™€ ๋ฐฑ์—”๋“œ ์‹คํ–‰๊ธฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ, ์‚ฌ์šฉ์ž๋Š” ์›น UI์—์„œ ํŽธ์ง‘ํ•˜๊ณ  ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ API JSON๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [1, 44]. +- **Operation / Maintenance:** API JSON์—๋Š” ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ์˜ ์ด๋ฆ„์ด ํ•˜๋“œ์ฝ”๋”ฉ๋˜๋ฏ€๋กœ, ์„œ๋ฒ„ ๊ฐ„ ๋ชจ๋ธ ๊ณต์œ  ์‹œ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256) ๊ธฐ์ˆ ๊ณผ ํ•จ๊ป˜ ์šด์šฉํ•œ๋‹ค [45, 46]. +- **Learning Path:** ๋จผ์ € GUI์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์™„์„ฑํ•œ ํ›„, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด API ํฌ๋งท์„ ๋‚ด๋ณด๋‚ด๊ณ  ๊ทธ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ œ์–ด ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ํ‘œ์ค€ ํ•™์Šต ๊ฒฝ๋กœ์ด๋‹ค [14, 47]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Node Definitions]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ํฌ๋งท ๋‚ด `class_type`์ด ์ฐธ์กฐํ•˜๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ํƒ€์ž… ์ •์˜ ์—ฐ๊ตฌ. [43] +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API JSON ์ „์ฒด ์ค‘ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ์›๋ฆฌ ์ดํ•ด. [32, 48] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. ๊ธฐ๋ฐ˜ ์†Œ์Šค 18๊ฐœ ์ข…ํ•ฉ ๋ถ„์„ ์™„๋ฃŒ. [1-186] \ No newline at end of file diff --git a/10_Wiki/Comfyui/API JSON.md b/10_Wiki/Comfyui/API JSON.md new file mode 100644 index 00000000..16f5ffd1 --- /dev/null +++ b/10_Wiki/Comfyui/API JSON.md @@ -0,0 +1,67 @@ +--- +id: api-json +title: "API JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["workflow_api.json", "Backend Format", "API Format"] +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-WorkflowGenerator", "comfyui-workflow-to-api-converter-endpoint", "ComfyUI-to-Python-Extension", "comfy_api_simplified"] +github_commit: "" +--- + +# [[API JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +API JSON์€ ComfyUI์˜ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์ˆœ์ˆ˜ ์‹คํ–‰ ๋กœ์ง๋งŒ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ œ์–ด์™€ ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๋ฐฑ์—”๋“œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ (Backend Execution Graph):** ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ UI ๊ด€๋ จ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ๋…ธ๋“œ ํƒ€์ž…๊ณผ ์ž…๋ ฅ๊ฐ’, ์—ฐ๊ฒฐ ๊ด€๊ณ„๋งŒ์„ ๋‚จ๊ธด ์ฝคํŒฉํŠธํ•œ ํ˜•์‹์ด๋‹ค [1, 3]. +2. **์ž„๋ฒ ๋”ฉ๋œ ์ฐธ์กฐ ๊ตฌ์กฐ (Reference-based Linking):** ๋ณ„๋„์˜ ๋งํฌ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹๊ณผ ๋‹ฌ๋ฆฌ, ๋…ธ๋“œ ์ž…๋ ฅ ํ•„๋“œ ๋‚ด์— ์ง์ ‘ ์†Œ์Šค ๋…ธ๋“œ ID์™€ ์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค [1, 3, 4]. +3. **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ (Dev Mode) ํ™œ์„ฑํ™”:** ํ‘œ์ค€ ComfyUI ํ™˜๊ฒฝ์—์„œ API JSON์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •(Settings) ๋ฉ”๋‰ด์—์„œ ๋ฐ˜๋“œ์‹œ ์„ ํ–‰ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค [5-7]. +4. **ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์—”๋“œํฌ์ธํŠธ ํ˜ธํ™˜์„ฑ:** `/prompt` ์—”๋“œํฌ์ธํŠธ์— ํŽ˜์ด๋กœ๋“œ๋กœ ์ง์ ‘ ์ „๋‹ฌ๋˜์–ด ์„œ๋ฒ„ ์ธก์—์„œ ์ฆ‰์‹œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [8-10]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Bifurcation (์ด์›ํ™”) ์ €์žฅ ํŒจํ„ด:** ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ `workflow.json`๊ณผ ๊ธฐ๊ณ„์  ์‹คํ–‰์„ ์œ„ํ•œ `workflow_api.json`์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ์šฉ๋„์— ์ตœ์ ํ™”๋œ ์„ฑ๋Šฅ๊ณผ ๊ด€๋ฆฌ ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค [1, 8, 11]. +- **Metadata Chunk ์ค‘๋ณต ์ €์žฅ:** ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ์— ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ API ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋กœ ์‹œ๊ฐ์  ๋ณต์›๊ณผ API ์‹คํ–‰์„ ๋™์‹œ์— ๋ณด์žฅํ•œ๋‹ค [12, 13]. +- **Execution Model Inversion:** ์—”์ง„์ด ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฒฐ๊ณผ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ๋ณ„ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [14]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +### 1. ๊ธฐ์ˆ ์  ๊ตฌ์กฐ ๋ฐ ์‚ฌ์–‘ +API JSON์€ ๋ฃจํŠธ ํ‚ค๊ฐ€ **๋…ธ๋“œ ID(๋ฌธ์ž์—ด)**๋กœ ๊ตฌ์„ฑ๋œ ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ทจํ•œ๋‹ค [15, 16]. ๊ฐ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ธ `class_type`๊ณผ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” `inputs` ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค [3, 17]. ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์€ `inputs` ๋‚ด์— `[๋…ธ๋“œ_ID, ์ถœ๋ ฅ_์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ํ˜•์‹์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜์–ด ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค [4, 18]. ์ด๋Š” Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท๋ณด๋‹ค ํ›จ์”ฌ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๋น ๋ฅด๋‹ค [8]. + +### 2. ์ˆ˜๋™ ์ƒ์„ฑ ๋ฐ ์ถ”์ถœ ๋ฐฉ๋ฒ• +๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„ค์ • ๋ฉ”๋‰ด์—์„œ **"Enable Dev mode Options"**๋ฅผ ์ฒดํฌํ•˜๋ฉด ์ปจํŠธ๋กค ํŒจ๋„์— **"Save (API Format)"** ๋ฒ„ํŠผ์ด ๋…ธ์ถœ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฆ‰์‹œ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๋‹ค [5, 6, 19, 20]. ๋˜ํ•œ, ์ด๋ฏธ ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์—์„œ `exiftool`๊ณผ ๊ฐ™์€ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ˆจ๊ฒจ์ง„ API JSON(Prompt) ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค [21, 22]. + +### 3. ์ž๋™ํ™” ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ƒ์„ฑ +- **LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ:** `ComfyUI-WorkflowGenerator`๋Š” ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ, ์˜๋ฏธ๋ก ์  ๊ฒ€์ฆ, ๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ API JSON์„ ์ž๋™์œผ๋กœ ๊ตฌ์ถ•ํ•œ๋‹ค [23-25]. +- **๋™์  ๋ณ€ํ™˜:** `comfyui-workflow-to-api-converter-endpoint` ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ์„œ๋ฒ„์ธก์—์„œ `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ‘œ์ค€ JSON์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค [10, 26, 27]. +- **Python ๋ž˜ํผ ๋ฐ ํ™•์žฅ:** `comfy_api_simplified`๋‚˜ `ComfyUI-to-Python-Extension`์€ API JSON์„ ๋กœ๋“œํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(์‹œ๋“œ, ํ”„๋กฌํ”„ํŠธ ๋“ฑ)๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•œ ํ›„ ํ์ž‰ํ•˜๊ฑฐ๋‚˜, ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ํ˜• Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [28-30]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์ œํ•œ:** ComfyUI๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ๋งค์šฐ ์žฆ์•„ ์ด์ „ ๋ฒ„์ „์—์„œ ์ƒ์„ฑ๋œ API JSON์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋‚˜ ์Šคํ‚ค๋งˆ์™€ ์ถฉ๋Œํ•˜์—ฌ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ์กดํ•œ๋‹ค [31]. +- **๋ฐ์ดํ„ฐ ํŒŒ๊ดด ์œ„ํ—˜:** ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•  ๊ฒฝ์šฐ, API JSON์ด ํฌํ•จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ์˜๊ตฌ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค [12, 31]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Mystic Python SDK ์—ฐ๋™:** `workflow_api.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ-ํˆฌ-๋น„๋””์˜ค ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ๋กœ ๋ฐฐํฌํ•˜๋ฉฐ, Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค [32, 33]. +- **Replicate API ํ˜ธ์ถœ:** `fofr/any-comfyui-workflow` ๋ชจ๋ธ์„ ํ†ตํ•ด API JSON์„ ์ง์ ‘ ์ž…๋ ฅ๋ฐ›์•„ ์›๊ฒฉ GPU์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค [7, 34]. +- **ComfyUI-to-Python-Extension:** CLI๋ฅผ ํ†ตํ•ด `workflow_api.json`์„ ์ž…๋ ฅ ํŒŒ์ผ๋กœ ๋ฐ›์•„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด๋•Œ `--input_file` ํ”Œ๋ž˜๊ทธ๋กœ API JSON ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ๋‹ค [35, 36]. +- **Lou@blog Python ์ฝ”๋“œ:** `urllib`์™€ `websocket`์„ ์‚ฌ์šฉํ•˜์—ฌ API JSON์˜ ํŠน์ • ๋…ธ๋“œ ID(์˜ˆ: #37 TextInput)์˜ `inputs.text` ๊ฐ’์„ ๊ต์ฒดํ•œ ํ›„ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค [16, 37]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ์— ๋”ฐ๋ผ ์ถ”ํ›„ applied/validated ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ README/๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•จ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Comfy CLI.md b/10_Wiki/Comfyui/Comfy CLI.md new file mode 100644 index 00000000..ebe6a3ae --- /dev/null +++ b/10_Wiki/Comfyui/Comfy CLI.md @@ -0,0 +1,91 @@ +--- +id: comfy-cli +title: "Comfy CLI" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["comfy-cli"] +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: ["Comfy-Org/comfy-cli Issue #341"] +github_commit: "" +--- + +# [[Comfy CLI]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +GUI์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋Œ€๋Ÿ‰ ๊ด€๋ฆฌ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๋ฐ ์ž๋™ํ™”๋œ ์‹คํ–‰์„ ์ง€์›ํ•˜๋Š” ComfyUI ์ƒํƒœ๊ณ„์˜ ํ†ตํ•ฉ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค ๋„๊ตฌ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **ํ—ค๋“œ๋ฆฌ์Šค ์ž๋™ํ™” (Headless Automation):** ์›น ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด ๋ช…๋ น์ค„์—์„œ ์ง์ ‘ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค [3, 4]. +2. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ€๊ณต ๋ฐ ๋ณต๊ตฌ:** ์ด๋ฏธ์ง€ ํŒŒ์ผ(PNG, WebP)์ด๋‚˜ ์˜์ƒ ํŒŒ์ผ(MP4)์— ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค [2]. +3. **๋ฐฐ์น˜ ์ฒ˜๋ฆฌ (Batch Processing):** ๋Œ€๊ทœ๋ชจ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํšจ์œจ์ ์ธ ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•œ๋‹ค [1, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ ์ „๋žต:** `exiftool`๊ณผ ๊ฐ™์€ ํ•˜์œ„ ์ˆ˜์ค€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ „์šฉ CLI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์—์„œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค [1, 5, 6]. +- **ํ†ตํ•ฉ ์ง€์› ๊ตฌ์กฐ:** ๊ฐœ๋ณ„์ ์œผ๋กœ ํฉ์–ด์ง„ `Workflow Extractor`, `Python API Converter` ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ CLI(comfy-cli)๋กœ ์ˆ˜๋ ดํ•˜์—ฌ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Comfy CLI๋Š” ComfyUI์˜ ๊ฐ•๋ ฅํ•œ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ํ„ฐ๋ฏธ๋„ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + +- **์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ ๋ฐ ๊ด€๋ฆฌ:** CLI ๋„๊ตฌ๋Š” ํŠนํžˆ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” `exiftool -b -workflow input.png > workflow.json`๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ํ†ตํ•ด ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ JSON ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `Comfy_UI_prompt_extractor`์™€ ๊ฐ™์€ ์ „๋ฌธ CLI ๋„๊ตฌ๋Š” ๊ธ์ •์  ํ”„๋กฌํ”„ํŠธ, API ๊ทธ๋ž˜ํ”„, UI ๋ ˆ์ด์•„์›ƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 5]. +- **์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณต์› ๊ธฐ๋Šฅ:** GIMP์™€ ๊ฐ™์€ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์€ ํŒŒ์ผ ํฌ๊ธฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. CLI๋Š” ์œ ์‹ค๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…(Insert)ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌ(Copy)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด๋™์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2, 5, 6]. +- **์›Œํฌํ”Œ๋กœ์šฐ ์ „ํ™˜ ์ง€์›:** CLI ํ™˜๊ฒฝ์—์„œ [[Workflow JSON (Frontend Format)]]์„ [[Workflow API JSON (Backend Format)]]์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ์•„์˜ˆ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ์—ฐ๋™์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [7, 8]. +- **์„ค์น˜ ๋ฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ:** Comfy CLI๋Š” ComfyUI ์„ค์น˜ ๊ฐ€์ด๋“œ์˜ ์ฃผ์š” ํ•ญ๋ชฉ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ ์ƒํƒœ ํ™•์ธ(GPU VRAM, Python ๋ฒ„์ „ ๋“ฑ) ๋ฐ ๋…ธ๋“œ ์นดํƒˆ๋กœ๊ทธ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๋กœ๋„ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [9-11]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ ์ฃผ์˜:** ์ˆ˜๋™ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ CLI ๋„๊ตฌ๋Š” ๋Œ€๋Ÿ‰ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•˜์ง€๋งŒ, ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ „์†ก ๊ณผ์ •์—์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ œ๊ฑฐ๋œ ๊ฒฝ์šฐ์—๋Š” CLI๋กœ๋„ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์†Œ์Šค์—์„œ ์ง€์ ๋ฉ๋‹ˆ๋‹ค [6, 12]. +- **๊ธฐ๋Šฅ ํ†ตํ•ฉ ์ง„ํ–‰ํ˜•:** ํ˜„์žฌ `comfy-cli`๋Š” ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋„๋ก ๊ฐœ๋ฐœ ๋ฐ ์ œ์•ˆ ๋‹จ๊ณ„์— ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ธฐ์กด์˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ณ„ CLI ๋„๊ตฌ๋“ค์„ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ํ†ตํ•ฉํ•˜๋ ค๋Š” ์‹œ๋„๋กœ ๋ถ„์„๋ฉ๋‹ˆ๋‹ค [2, 5]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Comfy-Org/comfy-cli Issue #341:** ์ด๋ฏธ์ง€, WebP, MP4 ๋“ฑ ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋งค์ฒด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ `comfy-cli`์— ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ ์ œ์•ˆ ๋ฐ ๋…ผ์˜๊ฐ€ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค [2, 13]. +- **๋ฐฐ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋ณต๊ตฌ:** ๋Œ€๊ทœ๋ชจ AI ์•„ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ ๊ธฐ์ˆ ์„ ์œ ์ง€ํ•˜๊ณ  ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [1]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ธฐ๋Šฅ ์ œ์•ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Issue Discussion) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI๋ฅผ ํ†ตํ•ด JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ์ƒ์œ„ ์ฃผ์ œ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: GUI ์ด์™ธ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ํš๋“ ๊ฒฝ๋กœ. +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI ๋„๊ตฌ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰์„ ์œ„ํ•ด ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ถ”์ถœํ•ด์•ผ ํ•˜๋Š” ํƒ€๊ฒŸ ํ˜•์‹์ž„. + +#### [๊ตฌํ˜„ ๋ฐ ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI ๋ช…๋ น์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ Python ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์œ ์‚ฌํ•œ ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ๋„๊ตฌ์ž„. +- [[ComfyUI-Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI์—์„œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•  ๋•Œ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ์ž‘๋™ํ•จ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- `comfy-cli`๊ฐ€ ์ด๋ฏธ์ง€ ์™ธ์— ์˜์ƒ(MP4) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํƒœ๊ทธ ๊ตฌ์กฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€? +- `exiftool`์„ ์ด์šฉํ•œ ์ˆ˜๋™ ์ถ”์ถœ ๋ฐฉ์‹๊ณผ `comfy-cli` ์ „์šฉ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•œ ์ถ”์ถœ ๋ฐฉ์‹ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ฐจ์ด๋Š” ์กด์žฌํ•˜๋Š”๊ฐ€? +- CLI ํ™˜๊ฒฝ์—์„œ [[Workflow JSON (Frontend Format)]]์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ง์ ‘ API ์ „์šฉ JSON์„ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์‹œ ๋…ธ๋“œ ID์˜ ์ถฉ๋Œ์ด๋‚˜ ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ CLI์—์„œ ์–ด๋–ป๊ฒŒ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? +- CLI ๋„๊ตฌ๊ฐ€ ์™ธ๋ถ€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(GIMP ๋“ฑ)์— ์˜ํ•ด ์‚ญ์ œ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ 'Shadow Backup' ์ „๋žต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfyui-to-python` CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ƒ์„ฑ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ [8]. +- **System Design:** ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ถ”์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคํ™”ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„ [1, 2]. +- **Operation / Maintenance:** ComfyUI ์—…๋ฐ์ดํŠธ ์‹œ `UpdateNodeCatalog` CLI ๋ช…๋ น์„ ํ†ตํ•ด ๋…ธ๋“œ ํ˜ธํ™˜์„ฑ์„ ์ผ๊ด„ ์ ๊ฒ€ [10]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Metadata Extraction]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: AI ์ƒ์„ฑ ์ด๋ฏธ์ง€ ๋‚ด์— ์ˆจ๊ฒจ์ง„ ํ”„๋กฌํ”„ํŠธ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ฐ ๋ถ„์„ ๊ธฐ์ˆ . + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source references 6, 33, 136, 170, 171, 182) \ No newline at end of file diff --git a/10_Wiki/Comfyui/Comfy GPT.md b/10_Wiki/Comfyui/Comfy GPT.md new file mode 100644 index 00000000..58de13e2 --- /dev/null +++ b/10_Wiki/Comfyui/Comfy GPT.md @@ -0,0 +1,102 @@ +--- +id: comfy-gpt +title: "Comfy GPT" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyGPT", "ComfyUI-WorkflowGenerator"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "LLM", "Automation"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "xiatianzs/resources", "ComfyUI/models/LLM/"] +github_commit: "82df278" +--- + +# [[Comfy GPT]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Comfy GPT๋Š” ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ComfyUI ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(JSON)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ '๋น„์ฃผ์–ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์„ '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์œผ๋กœ ๊ฒฉ์ƒ์‹œํ‚ค๋Š” ๋‹ค๋‹จ๊ณ„ AI ํ•ฉ์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ (Natural Language Generation):** ์‚ฌ์šฉ์ž์˜ ์˜๋„(์˜ˆ: "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ")๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋ณต์žกํ•œ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [2]. +2. **3๋‹จ๊ณ„ ํ•ฉ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ (Three-stage Pipeline):** ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ ์ƒ์„ฑ(Generator), ๋…ธ๋“œ ์ด๋ฆ„ ๋ฐ ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ(Validator), ์ตœ์ข… ์‹คํ–‰ ํŒŒ์ผ ์ปดํŒŒ์ผ(Builder)์˜ ๋‹จ๊ณ„์  ๊ณต์ •์„ ๊ฑฐ์นœ๋‹ค [3, 4]. +3. **์˜๋ฏธ๋ก ์  ๋…ธ๋“œ ๊ฒ€์ฆ (Semantic Node Validation):** ์ƒ์„ฑ๋œ ๋…ธ๋“œ๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ํ†ตํ•ด ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์‹ค์ œ ๋…ธ๋“œ๋กœ ์ž๋™ ๊ต์ •ํ•œ๋‹ค [4-6]. +4. **๋„๋ฉ”์ธ ํŠนํ™” ๋ฏธ์„ธ ์กฐ์ • ๋ชจ๋ธ (Fine-tuned Models):** ComfyUI์˜ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ์Šคํ‚ค๋งˆ ์‚ฌ์–‘์— ์ตœ์ ํ™”๋œ LLM(์˜ˆ: Qwen2.5-14B)์„ ์ค‘์ถ”๋กœ ํ™œ์šฉํ•œ๋‹ค [1, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๊ตฌ์กฐ์  ๋…ผ๋ฆฌ ํ•ฉ์„ฑ ํŒจํ„ด:** ์ž์—ฐ์–ด ์ž…๋ ฅ์„ ๋ฐ”๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ค‘๊ฐ„ ๋‹จ๊ณ„์˜ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ํ˜•์„ฑํ•œ ํ›„ ์ปดํŒŒ์ผํ•œ๋‹ค [4, 6]. +- **๋กœ์ปฌ ํ™˜๊ฒฝ ๋™๊ธฐํ™” ํŒจํ„ด:** `UpdateNodeCatalog` ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ComfyUI์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๊ฒ€์ฆ ๊ธฐ์ค€(Catalog)์„ ์ตœ์‹ ํ™”ํ•œ๋‹ค [7, 8]. +- **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ฆ ์ „๋žต:** ์†๋„๋ฅผ ์œ„ํ•œ '์˜๋ฏธ๋ก ์  ๊ฒ€์ƒ‰' ๋ชจ๋“œ์™€ ์ •ํ™•๋„๋ฅผ ์œ„ํ•œ 'LLM ์ •๋ฐ€ ๊ต์ •' ๋ชจ๋“œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํšจ์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค [6]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Comfy GPT๋Š” **"ComfyGPT: A Self-Optimizing Multi-Agent System for Comprehensive ComfyUI Workflow Generation"** ์—ฐ๊ตฌ์— ๊ธฐ๋ฐ˜ํ•œ ๊ธฐ์ˆ ์  ๊ตฌํ˜„์ฒด์ด๋‹ค [4]. ์ด ์‹œ์Šคํ…œ์€ ์ „๋ฌธ์ ์ธ ๋…ธ๋“œ ์ง€์‹์ด ์—†๋Š” ์‚ฌ์šฉ์ž๋„ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ์ƒ์„ฑ AI ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š”๋‹ค [2]. + +- **์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** + - **Generator:** Qwen2.5-14B ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์ด ์ž…๋ ฅ๋œ ์ž์—ฐ์–ด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„(DAG)์„ ์ •์˜ํ•˜๋Š” ๋…ผ๋ฆฌ์  JSON ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค [5, 6]. + - **NodeValidator:** ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์ด ์‹ค์ œ ์„ค์น˜๋œ ๋…ธ๋“œ ํด๋ž˜์Šค ๋ช…์นญ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค [6]. ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ์˜๋ฏธ๋ก ์  ๊ฒ€์ƒ‰์œผ๋กœ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋…ธ๋“œ๋ฅผ ์ œ์•ˆํ•˜๊ฑฐ๋‚˜, LLM์ด ๋ฌธ๋งฅ์„ ํ†ตํ•ด ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ๋‹ค [5, 6]. + - **WorkflowBuilder:** ์ตœ์ข… ๊ฒ€์ฆ๋œ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ [[Workflow JSON]] v1.0 ๊ทœ๊ฒฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํŒŒ์ผ๋กœ ์ €์žฅํ•œ๋‹ค [3, 8, 9]. +- **๊ธฐ์ˆ ์  ํŠน์ง•:** GGUF ์–‘์žํ™” ๋ชจ๋ธ(q8_0)์„ ์ง€์›ํ•˜์—ฌ ํšจ์œจ์ ์ธ VRAM ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, CUDA ๋ฐ Metal ํ™˜๊ฒฝ์—์„œ ๊ฐ€์†ํ™”๋œ ์ถ”๋ก ์„ ์ œ๊ณตํ•œ๋‹ค [5, 10, 11]. ๋˜ํ•œ, JSON ํŒŒ์ผ์€ ์ƒ์„ฑ ์˜๋„์™€ ์‹คํ–‰ ๋กœ์ง ์‚ฌ์ด์˜ '์ค‘๊ฐ„ ๋ฐ”์ดํŠธ์ฝ”๋“œ' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค [3]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •์  ๋ชจ๋ธ์˜ ํ•œ๊ณ„:** ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์€ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์ปท์˜คํ”„ ์‹œ์  ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋‚˜ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์ง€ ๋ชปํ•˜๋Š” '๋™๊ฒฐ๋œ(Frozen)' ์ƒํƒœ๋ผ๋Š” ์ ์ด ํ•œ๊ณ„๋กœ ์ง€์ ๋œ๋‹ค [12, 13]. +- **ํ• ๋ฃจ์‹œ๋„ค์ด์…˜ ๊ด€๋ฆฌ:** ๋ชจ๋ธ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•  ์œ„ํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ, ํ–ฅํ›„์—๋Š” ์ •์  ๋ฏธ์„ธ ์กฐ์„ฑ์„ ๋„˜์–ด์„  ์‹ค์‹œ๊ฐ„ ์ ์‘ํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ง„ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [13, 14]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **GitHub ํ”„๋กœ์ ํŠธ:** `DanielPFlorian/ComfyUI-WorkflowGenerator`๊ฐ€ ComfyGPT ์—ฐ๊ตฌ๋ฅผ ๋กœ์ปฌ ๋…ธ๋“œ ์ˆ˜ํŠธ๋กœ ๊ตฌํ˜„ํ•œ ๋…๋ฆฝ์  ์‚ฌ๋ก€๋กœ ํ™•์ธ๋œ๋‹ค [2, 15]. +- **Git ์ปค๋ฐ‹ ๊ธฐ๋ก:** `82df278` ์ปค๋ฐ‹์—์„œ ๋“œ๋กญ๋‹ค์šด์˜ ์ค‘๋ณต ๋ชจ๋ธ ๋…ธ์ถœ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ, `config`, `generators`, `nodes` ๋“ฑ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค [15]. +- **๋ชจ๋ธ ๊ฒฝ๋กœ ์‚ฌ์–‘:** ์‚ฌ์šฉ์ž๋Š” GGUF ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ €๋ฅผ `ComfyUI/models/LLM/` ๊ฒฝ๋กœ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๊ตฌ๋™ํ•œ๋‹ค [7]. +- **์ €์žฅ ๋กœ์ง:** ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ๊ธฐ๋ณธ์ ์œผ๋กœ `comfyUI/output` ํด๋”์— ์ €์žฅ๋˜์–ด ์ฆ‰์‹œ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค [16]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ GitHub ํ”„๋กœ์ ํŠธ์™€ ์—ฐ๊ตฌ ๋…ผ๋ฌธ์ด ์กด์žฌํ•˜๋ฉฐ ๊ตฌํ˜„ ๊ฐ€์ด๋“œ๊ฐ€ ์†Œ์Šค์— ํฌํ•จ๋จ) [2, 4] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository README via NotebookLM) [2] +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : Comfy GPT๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฃจํŠธ ์ฃผ์ œ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ˆ˜๋™ ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹์˜ ์ฐจ์ด์ . +- [[Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : Comfy GPT ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ตœ์ข… ์ถœ๋ ฅ๋ฌผ ๊ทœ๊ฒฉ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: v1.0 ์Šคํ‚ค๋งˆ ์ œ์•ฝ ์‚ฌํ•ญ ์ค€์ˆ˜์˜ ์ค‘์š”์„ฑ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON์ด API ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋  ๋•Œ์˜ ์ŠคํŠธ๋ฆผ๋ผ์ธ ํฌ๋งท. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ ์‹คํ–‰ ์ „์šฉ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ. +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: 'Red Nodes' ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ์˜ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์ปท์˜คํ”„ ์ดํ›„ ์ถœ์‹œ๋œ ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ `NodeValidator`๊ฐ€ ์–ด๋А ์ •๋„ ์ˆ˜์ค€๊นŒ์ง€ ๊ต์ •ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [12] +- `UpdateNodeCatalog` ๋…ธ๋“œ๊ฐ€ ๋กœ์ปฌ์˜ `INPUT_TYPES`๋ฅผ ์Šค์บ”ํ•˜์—ฌ LLM์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์ปจํ…์ŠคํŠธ ์ฃผ์ž… ๋ฐฉ์‹์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๊ฐ€? [8] +- GGUF ์–‘์žํ™” ๋ชจ๋ธ ์‚ฌ์šฉ ์‹œ, q8_0์™€ q4_0 ๊ฐ„์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋…ผ๋ฆฌ ํ•ฉ์„ฑ ์ •ํ™•๋„ ์ฐจ์ด๊ฐ€ ์œ ์˜๋ฏธํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? [10] +- 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ ์ค‘ `Generator`๊ฐ€ ์ƒ์„ฑํ•œ '๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„'์™€ ์ตœ์ข… '์‹คํ–‰์šฉ JSON' ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋Š”๊ฐ€? [6, 8] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์‹œ ๋ณต์žกํ•œ `ControlNet`์˜ ๋‹ค์ค‘ ๋ ˆ์ด์–ด ์—ฐ๊ฒฐ์ด๋‚˜ `IPAdapter` ์„ค์ •์˜ ์„ธ๋ฐ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? [2, 16] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `Workflow Generator Pipeline` ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ž์—ฐ์–ด ์ง€์นจ์„ ์ž…๋ ฅํ•˜์—ฌ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•จ [7, 16]. +- **System Design:** ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋งž์ถฐ์ง„ `Node Catalog`๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งž์ถคํ˜• ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฃจํ”„๋ฅผ ๊ตฌ์ถ•ํ•จ [8]. +- **Operation / Maintenance:** ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ ์„ค์น˜ ํ›„ ๋ฐ˜๋“œ์‹œ `Update Node Catalog`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ง€์‹ ๋ฒ ์ด์Šค๋ฅผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•จ [17]. +- **Learning Path:** ๋ณต์žกํ•œ ๋…ธ๋“œ ์ด๋ฆ„์„ ์™ธ์šฐ๋Š” ๋Œ€์‹ , ์ž์—ฐ์–ด๋กœ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋ฉฐ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ• ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๋Š” ๋„๊ตฌ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ [2, 18]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[ComfyUI Custom Scripts]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ž๋™ ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์  ์ด๋ฏธ์ง€(PNG/SVG)๋กœ ๋‚ด๋ณด๋‚ด์–ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์—ฐ๊ตฌ [19, 20]. +- [[Executing ComfyUI Workflows as Standalone Scripts]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: LLM์ด ์ƒ์„ฑํ•œ JSON์„ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์ฆ‰์‹œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•˜๋Š” ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• [21, 22]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [23] \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI API.md b/10_Wiki/Comfyui/ComfyUI API.md new file mode 100644 index 00000000..3beb658f --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI API.md @@ -0,0 +1,112 @@ +--- +id: comfyui-api +title: "ComfyUI API" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API Format", "workflow_api.json"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "automation", "API"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "comfyui-workflow-to-api-converter-endpoint (bc85382)" + - "ComfyUI-WorkflowGenerator (82df278)" + - "ComfyUI-to-Python-Extension (6cdcc23)" +github_commit: "" +--- + +# [[ComfyUI API]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI API๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ๋น„์ฃผ์–ผ ์›Œํฌํ”Œ๋กœ๋ฅผ **์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(JSON)**๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ, ์ฐฝ์˜์  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”๋œ ํ”„๋กœ๋•์…˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **API Format (workflow_api.json):** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์˜ค์ง ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋…ธ๋“œ ์œ ํ˜•๊ณผ ์ž…๋ ฅ ์—ฐ๊ฒฐ ์ •๋ณด๋งŒ์„ ํฌํ•จํ•˜๋Š” ๊ฐ„์†Œํ™”๋œ ๊ทธ๋ž˜ํ”„ ํฌ๋งท์ด๋‹ค [3-5]. +- **Dev Mode Options:** API ํฌ๋งท์œผ๋กœ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ์„ค์ •์œผ๋กœ, ํ™œ์„ฑํ™” ์‹œ 'Save (API format)' ๋ฒ„ํŠผ์ด ๋…ธ์ถœ๋œ๋‹ค [6-8]. +- **Serialization & Mapping:** ๋…ธ๋“œ๋ง์„ JSON ํ˜•์‹์˜ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ numeric ID(์˜ˆ: "37")๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ `class_type`๊ณผ `inputs` ๊ฐ’์„ ์ •์˜ํ•œ๋‹ค [9-11]. +- **Prompt Endpoint (/prompt):** ์ƒ์„ฑ๋œ API JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ComfyUI ์„œ๋ฒ„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ด ์‹ค์ œ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค [10, 12]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Execution Model Inversion:** ์—”์ง„์ด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค [13]. +- **Bifurcation of Formats:** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ Frontend ํฌ๋งท(`workflow.json`)๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์‹คํ–‰์„ ์œ„ํ•œ Backend ํฌ๋งท(`workflow_api.json`)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [3, 14]. +- **Metadata Recovery:** PNG ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— ์ˆจ๊ฒจ์ง„ ์›Œํฌํ”Œ๋กœ JSON ๋ฐ์ดํ„ฐ๋ฅผ `exiftool`์ด๋‚˜ ์ „์šฉ ์ถ”์ถœ๊ธฐ๋ฅผ ํ†ตํ•ด ๋ณต๊ตฌํ•˜์—ฌ ๊ณต์œ  ๋ฐ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [15-17]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) + +### 1. API JSON ์ƒ์„ฑ ๋ฐ ๊ตฌ์กฐ์  ํŠน์ง• +API ํฌ๋งท JSON์€ ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค. +- **๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:** ๋ฃจํŠธ ํ‚ค๋Š” ๋…ธ๋“œ ID(๋ฌธ์ž์—ด)์ด๋ฉฐ, ๊ฐ ๊ฐ’์€ `class_type`๊ณผ `inputs` ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ํฌํ•จํ•œ๋‹ค [10, 18]. +- **์—ฐ๊ฒฐ ํ‘œํ˜„:** ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ๋Š” ๋ณ„๋„์˜ ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด์—์„œ `[origin_node_id, output_slot_index]` ํ˜•ํƒœ์˜ ์ฐธ์กฐ๋กœ ์ง์ ‘ ์ž„๋ฒ ๋”ฉ๋œ๋‹ค [3, 19]. +- **์œ„์ ฏ ๊ฐ’ ์ „ํ™˜:** GUI์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์œ„์ ฏ ๊ฐ’(์‹œ๋“œ, ํ…์ŠคํŠธ ๋“ฑ)์€ API JSON์˜ `inputs` ํ•„๋“œ๋กœ ์ง์ ‘ ๋งคํ•‘๋˜์–ด ๊ณ ์ •๋œ ๊ฐ’์ด ๋œ๋‹ค [19]. + +### 2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์กฐ์ž‘ ๋ฐ ์ž๋™ํ™” +๊ฐœ๋ฐœ์ž๋Š” ํ…œํ”Œ๋ฆฟํ™”๋œ API JSON์„ Python ๋“ฑ์„ ํ†ตํ•ด ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋Œ€๋Ÿ‰ ์ƒ์„ฑ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. +- **์ž…๋ ฅ๊ฐ’ ๊ต์ฒด:** `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ํ•„๋“œ(์˜ˆ: ํ”„๋กฌํ”„ํŠธ ํ…์ŠคํŠธ, ์‹œ๋“œ ๊ฐ’)๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋ณ€๊ฒฝํ•œ๋‹ค [10, 20]. +- **์ด๋ฏธ์ง€ ์ฃผ์ž…:** ์™ธ๋ถ€ ์ด๋ฏธ์ง€๋ฅผ API๋กœ ์ „๋‹ฌํ•  ๋•Œ๋Š” `Load Image (Base64)` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์˜ `input` ๋””๋ ‰ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•œ ํ›„ ํŒŒ์ผ๋ช…์œผ๋กœ ์ฐธ์กฐํ•œ๋‹ค [21, 22]. +- **๊ฒฐ๊ณผ ์ˆ˜์‹ :** ์ƒ์„ฑ ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋Š” WebSocket ํ†ต์‹ ์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, `SaveImageWebsocket` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค [22]. + +### 3. ๊ณ ๋„ํ™”๋œ ์ƒ์„ฑ ๋„๊ตฌ +- **ComfyUI-to-Python-Extension:** JSON ์›Œํฌํ”Œ๋กœ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์—†์ด๋„ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [23, 24]. +- **Comfy API Simplified:** ๋…ธ๋“œ ID ๋Œ€์‹  ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๋…ธ๋“œ ์ œ๋ชฉ(title)์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ์ˆ˜์ • ์‹œ ์ฝ”๋“œ์˜ ํŒŒ์†์„ ๋ฐฉ์ง€ํ•œ๋‹ค [23, 25]. +- **LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ์ž…๋ ฅํ•˜๋ฉด Qwen2.5์™€ ๊ฐ™์€ ๋ชจ๋ธ์ด ์ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ์œ ํšจํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋นŒ๋“œํ•œ๋‹ค [26, 27]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [28]. +- **ํฌ๋งท์˜ ๋น„๊ฐ€์—ญ์„ฑ:** API ํฌ๋งท JSON์€ ์‹คํ–‰ ํšจ์œจ์€ ๋†’์œผ๋‚˜, ์ด๋ฅผ ๋‹ค์‹œ GUI๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋กœ๋“œํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ(๋…ธ๋“œ ์œ„์น˜ ๋“ฑ)์ด ์œ ์‹ค๋œ '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๋กœ ๋‚˜ํƒ€๋‚˜ ํŽธ์ง‘์ด ์–ด๋ ต๋‹ค [12, 29]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์˜ JS ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ์ผ๋ฐ˜ JSON์„ API JSON์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•จ (์ปค๋ฐ‹: bc85382) [12, 30]. +- **ComfyUI-WorkflowGenerator:** ์ž์—ฐ์–ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ(์ƒ์„ฑ-๊ฒ€์ฆ-๋นŒ๋“œ)์„ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ (์ปค๋ฐ‹: 82df278) [27, 31]. +- **ComfyUI-to-Python-Extension:** ์›Œํฌํ”Œ๋กœ๋ฅผ Python ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์ž๋™ํ™” ๋ฐ ๋ฐ˜๋ณต ์ƒ์„ฑ์— ์ตœ์ ํ™”๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ณตํ•จ (์ปค๋ฐ‹: 6cdcc23) [24, 32]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋‹ค์ˆ˜์˜ GitHub ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์‹ค์šฉ์„ฑ ์ž…์ฆ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ README ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : API ๋ฐ์ดํ„ฐ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์Šคํ‚ค๋งˆ ๊ทœ๊ฒฉ + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ์†์„ฑ ๋ฐ ๋งํฌ ์Šคํ‚ค๋งˆ v1.0์˜ ๊ธฐ์ˆ ์  ์ œ์•ฝ ์‚ฌํ•ญ [33]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[API Format]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์„œ๋ฒ„ ํ†ต์‹ ์„ ์œ„ํ•œ ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ ํฌ๋งท + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๋ฐ ์‹คํ–‰ ์ตœ์ ํ™” ๋กœ์ง [5]. +- [[ComfyUI-Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์‹คํ–‰ ์‹œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋„๊ตฌ + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด `class_type`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ž๋™ ๋…ธ๋“œ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค [34]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API JSON์˜ `inputs` ํ•„๋“œ์—์„œ ๋…ธ๋“œ ์ฐธ์กฐ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ์Šฌ๋กฏ ์ธ๋ฑ์Šค์˜ ์ •ํ™•ํ•œ ๋งคํ•‘ ๊ทœ์น™์€ ๋ฌด์—‡์ธ๊ฐ€? [35] +- `Execution Model Inversion`์ด ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์—์„œ ์‹ค์ œ ์„ฑ๋Šฅ(VRAM/์—ฐ์‚ฐ)์— ๋ฏธ์น˜๋Š” ์ •๋Ÿ‰์  ์˜ํ–ฅ์€ ์–ด๋А ์ •๋„์ธ๊ฐ€? [13] +- LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ์‹œ `NodeValidator`๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ ๋ฐฉ์‹์€ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ •ํ™•๋„๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ•˜๋Š”๊ฐ€? [36, 37] +- PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ, `exiftool` ์™ธ์— ๋ฐ”์ด๋„ˆ๋ฆฌ ์ˆ˜์ค€์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์  ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๊ฐ€? [17, 38] +- `comfyui-workflow-to-api-converter`๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” 1MB ์š”์ฒญ ์ œํ•œ์˜ ๊ธฐ์ˆ ์  ๊ทผ๊ฑฐ์™€ ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ(Flux ๋“ฑ) ๋Œ€์‘ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? [39, 40] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/prompt` ์—”๋“œํฌ์ธํŠธ์— ์ „์†กํ•  JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด GUI์˜ 'Dev mode'๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์„ ํ™•๋ณดํ•œ๋‹ค [8]. +- **System Design:** ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ˆ˜์‹ ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ํ…œํ”Œ๋ฆฟ JSON์˜ ํŠน์ • ๋…ธ๋“œ ID ๊ฐ’์„ ๋™์ ์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ComfyUI ์ธ์Šคํ„ด์Šค์— ์ „๋‹ฌํ•œ๋‹ค [22, 41]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ ๋ณ€๊ฒฝ ์‹œ ๋…ธ๋“œ ID๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•ด `comfy_api_simplified`์™€ ๊ฐ™์ด ๋…ธ๋“œ ์ œ๋ชฉ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ž˜ํผ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค [23, 25]. +- **Learning Path:** ๊ธฐ๋ณธ UI ์‚ฌ์šฉ๋ฒ• ์ˆ™์ง€ โ†’ Dev mode ํ™œ์„ฑํ™” ๋ฐ API JSON ๊ตฌ์กฐ ๋ถ„์„ โ†’ Python `requests` ๋ฐ `websocket`์„ ์ด์šฉํ•œ ์›๊ฒฉ ์ œ์–ด ์ˆœ์œผ๋กœ ํ•™์Šตํ•œ๋‹ค [42, 43]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Comfy GPT]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: AI ์—์ด์ „ํŠธ๊ฐ€ ์ง์ ‘ ๋…ธ๋“œ๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ์ž๊ฐ€ ์ตœ์ ํ™” ์‹œ์Šคํ…œ ์—ฐ๊ตฌ [27, 44]. +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ์‹œ ๋ชจ๋ธ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ  [45]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI Backend Engine.md b/10_Wiki/Comfyui/ComfyUI Backend Engine.md new file mode 100644 index 00000000..58667332 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI Backend Engine.md @@ -0,0 +1,100 @@ +--- +id: comfyui-backend-engine +title: "ComfyUI Backend Engine" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI API Engine", "ComfyUI Execution Layer"] +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/custom_nodes/comfyui-workflow-to-api-converter-endpoint", "ComfyUI-to-Python-Extension", "WorkflowExecutor", "ExecutionCache"] +github_commit: "bc85382" +--- + +# [[ComfyUI Backend Engine]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI Backend Engine์€ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ [[API ํฌ๋งท]]์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๊ณ , ์—ญ๋ฐฉํ–ฅ ์˜์กด์„ฑ ์ถ”์ ์„ ํ†ตํ•ด ์ตœ์ ํ™”๋œ ์ƒํƒœ๋กœ ๋จธ์‹ ๋Ÿฌ๋‹ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์‹คํ–‰ ๊ณ„์ธต์ด๋‹ค. [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **API JSON (Backend Format):** UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ขŒํ‘œ, ํฌ๊ธฐ ๋“ฑ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ํด๋ž˜์Šค(class_type)์™€ ์ž…๋ ฅ(inputs) ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ๋งŒ ํฌํ•จ๋œ ์ •์ œ๋œ ์‹คํ–‰ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค. [2, 4, 5] +2. **Execution Model Inversion:** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ(์˜ˆ: Save Image)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•ด ์‹คํ–‰ํ•จ์œผ๋กœ์จ ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ ์—ฐ์‚ฐ์„ ๋ฐฐ์ œํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค. [3] +3. **Standalone Script Execution:** ์›น ์„œ๋ฒ„์™€ UI ๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ์ ์ธ Python ์Šคํฌ๋ฆฝํŠธ๋‚˜ ํ—ค๋“œ๋ฆฌ์Šค(Headless) ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ตฌ๋™ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. [6-8] +4. **Dynamic Prompting:** API ์—”๋“œํฌ์ธํŠธ(/prompt)์— JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•  ๋•Œ ๋…ธ๋“œ ID๋‚˜ ํƒ€์ดํ‹€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋™์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. [9-11] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Serialization Bifurcation (์ง๋ ฌํ™” ์ด์›ํ™”):** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend ํฌ๋งท'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•œ 'Backend API ํฌ๋งท'์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. [2, 12] +- **Backward Dependency Traversal:** ๊ทธ๋ž˜ํ”„ ์ „์ฒด๋ฅผ ์ˆœ์ฐจ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , ๊ฒฐ๊ณผ๊ฐ’ ๋„์ถœ์— ํ•„์ˆ˜์ ์ธ ๋…ธ๋“œ๋“ค๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. [3] +- **Target Node Overriding:** JSON ๋‚ด๋ถ€์˜ ํŠน์ • ๋…ธ๋“œ ID๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์‹œ๋“œ(Seed), ํ”„๋กฌํ”„ํŠธ, ๋ชจ๋ธ ๊ฒฝ๋กœ ๋“ฑ์˜ ๊ฐ’์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค. [10, 13, 14] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) + +ComfyUI์˜ ๋ฐฑ์—”๋“œ ์—”์ง„์€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ **์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)**๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ์ง๋ ฌํ™”(Serialization)ํ•˜์—ฌ ๊ธฐ๊ธฐ ๊ฐ„ ์ด์‹์„ฑ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž๋™ํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค. [1] ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ‘œ์ค€ JSON ํฌ๋งท์ด ์•„๋‹Œ 'API ์ „์šฉ ํฌ๋งท'์ด ํ•„์ˆ˜์ ์ด๋ฉฐ, ์ด๋Š” ComfyUI ์„ค์ • ๋ฉ”๋‰ด์—์„œ **"Dev mode Options"**๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. [15-17] + +### 1. JSON ํฌ๋งท์˜ ๊ตฌ์กฐ์  ์ฐจ์ด +- **Frontend JSON (workflow.json):** `nodes` ๋ฐฐ์—ด ์•ˆ์— ์œ„์น˜ ์ •๋ณด(`pos`), ํฌ๊ธฐ(`size`), ๊ทธ๋ฃน ์ •๋ณด ๋“ฑ UI ๋ ˆ์ด์•„์›ƒ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค. ์—ฐ๊ฒฐ์€ ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค. [18-20] +- **API JSON (workflow_api.json):** ๋…ธ๋“œ ID๊ฐ€ ๋ฃจํŠธ ํ‚ค์ธ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ์ด๋ฉฐ, UI ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์ œ๊ฑฐ๋œ๋‹ค. ๋งํฌ ์ •๋ณด๋Š” ๋…ธ๋“œ ์ž…๋ ฅ๊ฐ’ ๋‚ด์— ์ง์ ‘ ์ฐธ์กฐ(์˜ˆ: `[node_id, output_slot]`) ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜์–ด ํ›จ์”ฌ ์ปดํŒฉํŠธํ•˜๋‹ค. [4, 18, 21, 22] + +### 2. ์‹คํ–‰ ๋ฐ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜ +๋ฐฑ์—”๋“œ ์—”์ง„์€ **/prompt ์—”๋“œํฌ์ธํŠธ**๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ๋œ JSON์„ ๋ถ„์„ํ•œ๋‹ค. [13, 18] ์—”์ง„์˜ **Execution Model Inversion** ์•„ํ‚คํ…์ฒ˜๋Š” ๊ทธ๋ž˜ํ”„์— ์ˆ˜์‹ญ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋”๋ผ๋„ ์ตœ์ข… ๊ฒฐ๊ณผ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๋Š” ์™„์ „ํžˆ ๋ฌด์‹œํ•˜์—ฌ ์ž์›์„ ์ตœ์ ํ™”ํ•œ๋‹ค. [3] ๋˜ํ•œ, `WorkflowExecutor`์™€ `ExecutionCache` ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„œ๋ฒ„ ํ™˜๊ฒฝ ์—†์ด๋„ ๋…๋ฆฝ์ ์ธ Python ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. [9, 23] + +### 3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ํ™•์žฅ์„ฑ +๊ฐœ๋ฐœ์ž๋Š” Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ์ฒด์˜ ํŠน์ • ๋…ธ๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ ๋’ค API ์„œ๋ฒ„๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. [13, 24] ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ ID๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ง€๋ณด์ˆ˜ ๋ฌธ์ œ๋Š” **Comfy API Simplified**์™€ ๊ฐ™์€ ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ œ๋ชฉ(Title)์œผ๋กœ ์ ‘๊ทผํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. [11, 25] ์ตœ๊ทผ์—๋Š” LLM์„ ํ™œ์šฉํ•ด ์ž์—ฐ์–ด๋ฅผ ์ด API ํ˜•์‹์˜ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” **ComfyUI-WorkflowGenerator** ๊ธฐ์ˆ ๋„ ๋„์ž…๋˜๊ณ  ์žˆ๋‹ค. [26, 27] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํฌ๋งท ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ํ‘œ์ค€ JSON ํŒŒ์ผ์„ API ์—”๋“œํฌ์ธํŠธ๋กœ ์ง์ ‘ ๋ณด๋‚ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. [28] +- **API ํฌ๋งท์˜ ์—ญ๋ณ€ํ™˜ ํ•œ๊ณ„:** API ํฌ๋งท JSON์„ UI๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋…ธ๋“œ์˜ ์‹œ๊ฐ์  ์ •๋ณด(์œ„์น˜, ํฌ๊ธฐ ๋“ฑ)๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ถ„์„ ๋ฐ ํŽธ์ง‘์ด ์–ด๋ ค์šด '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๋กœ ๋กœ๋“œ๋œ๋‹ค. [29] +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ๋งค์šฐ ๋นˆ๋ฒˆํ•˜์—ฌ, ๊ตฌ๋ฒ„์ „ JSON์ด ์ตœ์‹  ๋ฒ„์ „ ๋ฐฑ์—”๋“œ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. [30] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ non-API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—”๋“œํฌ์ธํŠธ(/workflow/convert)๋ฅผ ์ œ๊ณตํ•œ๋‹ค. [28, 31] +- **ComfyUI-to-Python-Extension:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. [7, 8] +- **WorkflowExecutor & ExecutionCache:** ์†Œ์Šค ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰๊ณผ ๊ฒฐ๊ณผ ์บ์‹ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํด๋ž˜์Šค ๊ตฌํ˜„์ฒด์ด๋‹ค. [9, 23] +- **P-Reinforce ๊ด€๋ จ:** LLM ๊ธฐ๋ฐ˜ ์ž๋™ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ(Generator -> Validator -> Builder)์—์„œ ์ตœ์ข… ์‹คํ–‰ ๊ฐ์ฒด๋กœ ํ™œ์šฉ๋œ๋‹ค. [32, 33] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ GitHub ๊ธฐ์ˆ  ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ์„ฑ๋จ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ง์ ‘์ ์œผ๋กœ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค. [4] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ์‹ค์ œ ์ง๋ ฌํ™” ๋ฐฉ์‹. [2, 21] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐฑ์—”๋“œ ์—”์ง„ ์‹คํ–‰ ์‹œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ด๋‹ค. [34, 35] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด๋ถ€์˜ class_type ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. [34] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Execution Model Inversion์ด ๋ณต์žกํ•œ ์ˆœํ™˜ ๊ตฌ์กฐ(์‹ค์ œ๋กœ๋Š” DAG์ง€๋งŒ ๋ณต์žกํ•œ ๊ฒฝ์šฐ)์—์„œ ์–ด๋–ป๊ฒŒ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š”๊ฐ€? +- API ํฌ๋งท JSON์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ(Custom Nodes)์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [36] +- Standalone ์‹คํ–‰ ์‹œ `ExecutionCache`๊ฐ€ GPU VRAM ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋กœ์ง์€ ๋ฌด์—‡์ธ๊ฐ€? [23] +- `workflow_api.json` ๋‚ด์˜ ๋…ธ๋“œ ID๋ฅผ ์ˆ˜๋™ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [25] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ `NodeValidator`๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [37] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์›น ์„œ๋น„์Šค ๋ฐฑ์—”๋“œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ JSON์— ์ฃผ์ž…ํ•˜๊ณ  ComfyUI API๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐ ํ™œ์šฉ๋œ๋‹ค. [24, 38] +- **System Design:** ํ—ค๋“œ๋ฆฌ์Šค ๋ Œ๋”๋ง ์„œ๋ฒ„๋‚˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ƒ์„ฑ AI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ํ…Œ์ŠคํŠธํ•˜๋Š” ์šฉ๋„๋กœ ์„ค๊ณ„๋œ๋‹ค. [7, 8] +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋ธ๊ณผ ๋…ธ๋“œ๋ฅผ ์ž๋™ ์„ค์น˜ํ•˜์—ฌ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•œ๋‹ค. [34] +- **Learning Path:** GUI๋ฅผ ํ†ตํ•œ ์‹คํ—˜ ๋‹จ๊ณ„์—์„œ JSON ์Šคํ‚ค๋งˆ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ดํ›„ Python API๋ฅผ ํ†ตํ•œ ๋Œ€๋Ÿ‰ ์ƒ์„ฑ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ํ•ต์‹ฌ ๊ด€๋ฌธ์ด๋‹ค. [10, 39] + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฐฑ์—”๋“œ์—์„œ ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๊ฐ’์„ ํ†ตํ•ด ์ •ํ™•ํ•œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ๋กœ๋“œํ•˜๋Š” ์•ˆ์ •์„ฑ ํ™•๋ณด ๋ฐฉ์•ˆ ์—ฐ๊ตฌ. [40] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Ref: [1-4, 9, 28]) \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI Manager.md b/10_Wiki/Comfyui/ComfyUI Manager.md new file mode 100644 index 00000000..f8e37eea --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI Manager.md @@ -0,0 +1,94 @@ +--- +id: comfyui-manager +title: "ComfyUI Manager" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI-Manager"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes/ComfyUI-Manager"] +github_commit: "" +--- + +# [[ComfyUI Manager]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ **์˜์กด์„ฑ ์ž๋™ ํ•ด๊ฒฐ** ๋ฐ **์ค‘์•™ ์ง‘์ค‘์‹ ์ž์› ๊ด€๋ฆฌ**๋ฅผ ํ†ตํ•ด JSON ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด์‹์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ํ™•์žฅ ๋„๊ตฌ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์˜์กด์„ฑ ํ•ด๊ฒฐ (Dependency Resolution):** ์™ธ๋ถ€์—์„œ ๋กœ๋“œ๋œ JSON ํŒŒ์ผ์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์„ค์น˜๋ฅผ ์ง€์›ํ•จ [1]. +- **์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ ๊ด€๋ฆฌ (Nodes & Models Management):** ์ˆ˜์ฒœ ๊ฐœ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ์™€ ์ฒดํฌํฌ์ธํŠธ, LoRA, VAE ๋“ฑ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ GUI ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์›ํด๋ฆญ์œผ๋กœ ์„ค์น˜ ๋ฐ ์—…๋ฐ์ดํŠธํ•จ [2, 3]. +- **์›Œํฌํ”Œ๋กœ์šฐ ๋ฐœ๊ฒฌ (Workflow Discovery):** ๊ด€๋ฆฌ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ComfyWorkflows, OpenArt ๋“ฑ์˜ ํ”Œ๋žซํผ๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•จ [4]. +- **๋ณด์•ˆ ๋ฐ ํ™˜๊ฒฝ ์„ค์ • (Security & Config):** ์„œ๋ฒ„ ๋ณด์•ˆ ์ˆ˜์ค€์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์ œํ•œ ๊ด€๋ฆฌ ๋ฐ ํ„ฐ๋ฏธ๋„ ๋กœ๊ทธ ํ™•์ธ ๋“ฑ ์‹œ์Šคํ…œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ [5, 6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ˆ„๋ฝ ๋…ธ๋“œ ๋ณต๊ตฌ ํŒจํ„ด (Red Box Recovery):** ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ์šฐ(JSON/PNG) ๋กœ๋“œ ์‹œ ๋นจ๊ฐ„์ƒ‰ ์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋…ธ๋“œ๋ฅผ ์ผ๊ด„ ์„ค์น˜ํ•œ ํ›„ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ๋ณต๊ตฌํ•จ [1, 7]. +- **์˜์กด์„ฑ ๋ช…์‹œ ํŒจํ„ด (Dependency Marking):** ํŠน์ • ๋…ธ๋“œ(์˜ˆ: Workflow to API Converter)๋Š” '๋งˆ์ปค ๋…ธ๋“œ'๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ์— ํฌํ•จ์‹œ์ผœ ComfyUI Manager๊ฐ€ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์˜์กด์„ฑ์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜๋„๋ก ์œ ๋„ํ•จ [8, 9]. +- **๋ชจ๋ธ ๊ฒ€์ƒ‰ ๋ฐ ํ•ด์‹ฑ ํŒจํ„ด:** ํŒŒ์ผ๋ช… ๋Œ€์‹  ๋ชจ๋ธ์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฐ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ [10]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI Manager๋Š” `ltdrdata`๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋กœ, ComfyUI ์ƒํƒœ๊ณ„์˜ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ๊ณผ ๋ชจ๋ธ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์ถ”์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [2]. + +- **์„ค์น˜ ๋ฐ ๊ตฌ์กฐ:** ์‚ฌ์šฉ์ž๋Š” `ComfyUI/custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹น ์ €์žฅ์†Œ๋ฅผ `git clone` ํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ค์น˜ ํ›„ UI์— ๊ด€๋ฆฌ ๋ฉ”๋‰ด๊ฐ€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค [2]. +- **JSON ์›Œํฌํ”Œ๋กœ์šฐ์™€์˜ ๊ด€๊ณ„:** ComfyUI๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ๋น„์ˆœํ™˜ ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ ๊ณต์œ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ œ์ž‘์ž์™€ ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด Manager์˜ ์ฃผ๋œ ์ž„๋ฌด์ž…๋‹ˆ๋‹ค [1, 11]. +- **๊ธฐ๋Šฅ ์ธํ„ฐํŽ˜์ด์Šค:** + - **Install Custom Nodes:** ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค [2]. + - **Install Models:** ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ, ControlNet, LoRA ๋“ฑ์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. + - **Update/Fetch:** ComfyUI ์ž์ฒด ๋ฐ ์„ค์น˜๋œ ๋…ธ๋“œ๋“ค์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2]. +- **๊ณ ๊ธ‰ ์œ ํ‹ธ๋ฆฌํ‹ฐ:** ์‚ฌ์šฉ์ž ์„ค์ • ๋ฉ”๋‰ด์—์„œ "Enable Dev mode Options"๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด API ํฌ๋งท์˜ JSON ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, Manager๋Š” ์ด ๊ณผ์ •์—์„œ ์˜์กด์„ฑ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ์š”์†Œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ณด์กฐ ๋„๊ตฌ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [12, 13]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ณด์•ˆ ์˜ค๋ฅ˜:** ComfyUI Manager ์‚ฌ์šฉ ์‹œ ๋ณด์•ˆ ์„ค์ • ์ˆ˜์ค€์— ๋”ฐ๋ผ 'This action is not allowed' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •์„ ํ†ตํ•œ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [5, 6]. +- **๋…ธ๋“œ ๊ด€๋ฆฌ ๋ฐฉ์‹์˜ ๋ณ€ํ™”:** ์ƒˆ๋กœ์šด ๋…ธ๋“œ ๋งค๋‹ˆ์ €(๊ธฐ๋ณธ Windows ๋นŒ๋“œ ํฌํ•จ)์—์„œ๋Š” ์ผ๋ถ€ ๋ ˆ๊ฑฐ์‹œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋งค๋‹ˆ์ €๊ฐ€ ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์‹œ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **์‹ค์ œ ํŒŒ์ผ ๊ฒฝ๋กœ:** `ComfyUI/custom_nodes/ComfyUI-Manager` ๊ฒฝ๋กœ์— ์œ„์น˜ํ•˜๋ฉฐ ์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋  ๋•Œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค [2]. +- **์›Œํฌํ”Œ๋กœ์šฐ ์ง„๋‹จ:** ์™ธ๋ถ€ ํ”Œ๋žซํผ(Civitai, MimicPC ๋“ฑ)์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์—†๋Š” ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณผ์ •์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 12]. +- **์˜์กด์„ฑ ๋ณด์ฆ:** `comfyui-workflow-to-api-converter-endpoint` ํ”„๋กœ์ ํŠธ์—์„œ Manager๊ฐ€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์˜์กด์„ฑ์„ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก "Workflow to API Converter (Marker)" ๋…ธ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค [8, 9]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / ComfyUI-Wiki / Primary YouTube Tutorials) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +- [[Workflow.json (Frontend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : Manager๊ฐ€ ๋ถ„์„ํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์š”์†Œ๋ฅผ ์ฑ„์›Œ ๋„ฃ๋Š” ์ฃผ๋œ ๋Œ€์ƒ ํŒŒ์ผ ํฌ๋งท์ž…๋‹ˆ๋‹ค [1, 15]. +- [[Custom Nodes]] + - ์—ฐ๊ฒฐ ์ด์œ : Manager๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๊ฐ์ฒด์ด๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค [2, 16]. +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์‹คํ–‰์„ ์œ„ํ•ด UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ ์ตœ์ ํ™”๋œ JSON ํ˜•ํƒœ์ด๋ฉฐ, Manager๋Š” ์ด ๊ณผ์ •์—์„œ์˜ ์˜์กด์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค [1, 17]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI Manager๊ฐ€ JSON ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ์˜ GitHub ์ €์žฅ์†Œ ์ฃผ์†Œ๋ฅผ ์ •ํ™•ํžˆ ์ฐพ์•„๋‚ด๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ํ†ตํ•œ ๋ชจ๋ธ ๊ด€๋ฆฌ ๋ฐฉ์‹์€ ํŒŒ์ผ๋ช… ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ด์‹์„ฑ ์ธก๋ฉด์—์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? [10] +- 'Terminal Log (Manager)' ๋…ธ๋“œ๋Š” ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น… ๋ฐ JSON ์‹คํ–‰ ์˜ค๋ฅ˜ ๋ถ„์„์—์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š”๊ฐ€? [6] +- Manager์˜ ๋ณด์•ˆ ์ˆ˜์ค€(Security Level)์ด 'This action is not allowed' ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ž„๊ณ„ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€? [6] +- ์›Œํฌํ”Œ๋กœ์šฐ ํŒจํ‚ค์ง• ๊ธฐ๋Šฅ(`comfy-pack`)๊ณผ Manager์˜ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๊ธฐ๋Šฅ์€ ์ƒํ˜ธ ๋ณด์™„์ ์ธ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋…๋ฆฝ์ ์ธ ๋Œ€์•ˆ์ธ๊ฐ€? [10, 18] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `git clone`์„ ํ†ตํ•ด `custom_nodes` ํด๋”์— ์„ค์น˜ ํ›„, UI์˜ "Manager" ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋ชจ๋“  ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [2]. +- **System Design:** ์™ธ๋ถ€ API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ์™€ ๋ชจ๋ธ์ด ์‚ฌ์ „์— ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒ€์ฆ ๋„๊ตฌ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [1, 19]. +- **Operation / Maintenance:** ComfyUI ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋“ค์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌํ•˜์—ฌ ํ™˜๊ฒฝ์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2]. +- **Learning Path:** ์ดˆ๋ณด์ž๊ฐ€ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „, ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [7]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[ComfyUI Workspace Manager]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์กฐ์งํ•˜๊ณ  ๋ฐฑ์—…ํ•˜๋Š” ํŠนํ™”๋œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [20]. +- [[Comfy CLI]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [21]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine.--- \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI Workflow Extractor.md b/10_Wiki/Comfyui/ComfyUI Workflow Extractor.md new file mode 100644 index 00000000..2210ef68 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI Workflow Extractor.md @@ -0,0 +1,66 @@ +--- +id: comfyui-workflow-extractor +title: "ComfyUI Workflow Extractor" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["SethRobinson/comfyui-workflow-to-api-converter-endpoint (bc85382)", "Comfy-Org/comfy-cli issue #341", "exiftool CLI implementation"] +github_commit: "bc85382" +--- + +# [[ComfyUI Workflow Extractor]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์ƒ์„ฑ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(PNG Chunks)์— ๋‚ด์žฅ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋…ผ๋ฆฌ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์œ ์‹ค๋œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณต๊ตฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•„์ˆ˜ ๊ธฐ์ˆ . [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** ComfyUI์˜ 'Save Image' ๋…ธ๋“œ๋Š” ์‹คํ–‰ ์‹œ ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ๋ ˆ์ด์•„์›ƒ, ์„ค์ • ๋ฐ ํ”„๋กฌํ”„ํŠธ๋ฅผ PNG ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…ํ•จ. [4, 5] +- **PNG ์ฒญํฌ ๋ถ„์„ (PNG Chunk Analysis):** ์ฃผ๋กœ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ(Frontend ํ˜•์‹)์™€ ํ”„๋กฌํ”„ํŠธ(API ํ˜•์‹)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•จ. [2] +- **๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๋ฐ ๋ณ€ํ™˜ (Data Recovery & Conversion):** ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์— ์˜ํ•ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋…๋ฆฝ์ ์ธ JSON ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜์—ฌ ๊ณต์œ  ๋ฐ ๋ฐฑ์—… ๊ฐ€๋Šฅ์„ฑ์„ ํ™•๋ณดํ•จ. [1, 2] +- **์ถ”์ถœ ๋„๊ตฌ ์ƒํƒœ๊ณ„ (Extraction Tool Ecosystem):** ์›น ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋ถ€ํ„ฐ ๋ช…๋ น์ค„ ๋„๊ตฌ(CLI), Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ•˜์ด ๋ ˆ๋ฒจ ์Šคํฌ๋ฆฝํŠธ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ณต๊ตฌ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•จ. [3, 6] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ ๊ฒฉ๋ฆฌ ํŒจํ„ด:** `exiftool`๊ณผ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋””์–ด ํŒŒ์ผ ๋‚ด์˜ ํŠน์ • ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ(`-workflow`)๋งŒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ‘œ์ค€ JSON ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ „๋žต์„ ์ทจํ•จ. [3, 6] +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋กœ๋”ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ์ถ”์ถœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹ , ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ด๋ฏธ์ง€๋ฅผ ComfyUI ์บ”๋ฒ„์Šค์— ์ง์ ‘ ๋“œ๋กญํ•˜์—ฌ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ์žฌ๊ตฌ์„ฑํ•จ. [4, 7, 8] +- **์ž๋™ํ™”๋œ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ:** ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋Œ€๊ทœ๋ชจ๋กœ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜๊ณ  API ๊ทธ๋ž˜ํ”„์™€ UI ๋ ˆ์ด์•„์›ƒ์„ ๋ณ„๋„์˜ JSON์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋จ. [3] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI Workflow Extractor๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด์— ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ์ „๋ฌธํ™”๋œ ๋„๊ตฌ ๋ชจ์Œ์„ ์˜๋ฏธํ•จ. ComfyUI์—์„œ ์ƒ์„ฑ๋œ ๊ฑฐ์˜ ๋ชจ๋“  PNG ํŒŒ์ผ์€ ๊ทธ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์šด๋ฐ˜์ฒด ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด๋Š” 'Save Image' ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ตœ์ข… ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ์…˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„. [4, 5] + +์ด ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์€ PNG ๊ทœ๊ฒฉ ๋‚ด์˜ ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž„. ๊ตฌ์ฒด์ ์œผ๋กœ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— ๋‘ ๊ฐ€์ง€ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ์‹œ๊ฐ์  ๋ฐฐ์น˜๋ฅผ ํฌํ•จํ•œ **Frontend ์›Œํฌํ”Œ๋กœ์šฐ**์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์‹คํ–‰์„ ์œ„ํ•œ ์ตœ์ ํ™”๋œ **Backend API ํ”„๋กฌํ”„ํŠธ**์ž„. [2] ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋งค์šฐ ์ทจ์•ฝํ•˜์—ฌ ์ด๋ฏธ์ง€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ ์œ ์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ, ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ๊ธฐ๋Š” ์ด๋Ÿฌํ•œ ์œ ์‹ค์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „ ํ˜น์€ ์ €์žฅ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ง€์‹์„ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•จ. [1, 2, 7] + +์ „๋ฌธ์ ์ธ ์ถ”์ถœ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์กด์žฌํ•จ: +- **CLI ๊ธฐ๋ฐ˜ ๋„๊ตฌ:** `exiftool -b -workflow input.png > workflow.json`๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜, `ComfyUI_prompt_extractor`์™€ ๊ฐ™์€ ์ „์šฉ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ์ •์  ํ”„๋กฌํ”„ํŠธ์™€ API ๊ทธ๋ž˜ํ”„๋ฅผ ๋ถ„๋ฆฌํ•จ. [3, 6] +- **์›น ์ธํ„ฐํŽ˜์ด์Šค ๋„๊ตฌ:** 'Weird Wonderful AI Art'์—์„œ ์ œ๊ณตํ•˜๋Š” ์ถ”์ถœ๊ธฐ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์„œ๋ฒ„ ์ธก ์ฒ˜๋ฆฌ ์—†์ด(๋˜๋Š” ๋ณด์•ˆ ์ฒ˜๋ฆฌ ํ›„) ์ฆ‰์‹œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ž„. [1, 9] +- **ํ†ตํ•ฉ ํ™•์žฅ ๋„๊ตฌ:** `ComfyUI-to-Python-Extension`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์ถ”์ถœ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. [10, 11] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฌธ์ œ:** PNG ์ด๋ฏธ์ง€ ๋“œ๋ž˜๊ทธ ๋ฐฉ์‹์€ ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋‚˜ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋ณต๊ตฌ ์‹œ ์ผ๋ถ€ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์†Œ์Šค์—์„œ ํ™•์ธ๋จ. [5] +- **ํ˜•์‹ ๊ฐ„ ์ถฉ๋Œ:** ์ถ”์ถœ ๋„๊ตฌ๋Š” 'Frontend JSON'๊ณผ 'API JSON'์„ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•จ. API ํฌ๋งท์€ ์‹œ๊ฐ์  ์ •๋ณด(๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ ๋“ฑ)๊ฐ€ ์ œ๊ฑฐ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ์ด๋ฅผ ๋‹ค์‹œ ComfyUI UI๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ์‹œ๊ฐ์ ์œผ๋กœ ๋ถˆ์™„์ „ํ•œ ์ƒํƒœ๋กœ ๋กœ๋“œ๋  ์ˆ˜ ์žˆ์Œ. [12, 13] +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ๊ดด์„ฑ:** ๋งŽ์€ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(GIMP ๋“ฑ)๋Š” ์ด๋ฏธ์ง€ ์ €์žฅ ์‹œ ๋น„ํ‘œ์ค€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ, ์›๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ „์šฉ ์‚ฝ์ž…/๋ณต์‚ฌ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•จ์ด ์ œ๊ธฐ๋จ. [14] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **SethRobinson/comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋…ผ๋ฆฌ๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ๋น„-API ์›Œํฌํ”Œ๋กœ์šฐ ํ˜•์‹์„ API ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•จ (Commit: `bc85382`). [15, 16] +- **Comfy-Org/comfy-cli Issue #341:** ์ด๋ฏธ์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ webp, mp4 ๋“ฑ ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋ฏธ๋””์–ด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ `comfy-cli`์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋…ผ์˜์™€ `exiftool` ํ™œ์šฉ ์‚ฌ๋ก€๊ฐ€ ๊ธฐ๋ก๋จ. [6, 14, 17] +- **WeirdWonderfulAI.Art:** ์•ฝ 21,460๊ฐœ ์ด์ƒ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•œ ํ†ต๊ณ„๋ฅผ ๋ณด์œ ํ•œ ์›น ๊ธฐ๋ฐ˜ ์ถ”์ถœ ๋„๊ตฌ ์„œ๋น„์Šค๋ฅผ ์šด์˜ ์ค‘์ž„. [9] +- **exiftool CLI:** `exiftool -b -workflow` ๋ช…๋ น์„ ํ†ตํ•ด PNG์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ํ‘œ์ค€์ ์ธ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๊ธฐ๋ฒ•์œผ๋กœ ํ™œ์šฉ๋จ. [3, 6] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ์œผ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Issue / Technical Guides) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI Workflow JSON Generation and Serialization.md b/10_Wiki/Comfyui/ComfyUI Workflow JSON Generation and Serialization.md new file mode 100644 index 00000000..c3d80749 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI Workflow JSON Generation and Serialization.md @@ -0,0 +1,102 @@ +--- +id: comfyui-workflow-json-generation-and-serialization +title: "ComfyUI Workflow JSON Generation and Serialization" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI Workflow JSON ์ƒ์„ฑ ๋ฐ ์ง๋ ฌํ™”"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "ComfyUI API", "Serialization"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-workflow-to-api-converter-endpoint", "comfyui_to_python.py", "WorkflowGenerator Pipeline", "/workflow/convert endpoint", "comfy_api_simplified"] +github_commit: "bc85382" +--- + +# [[ComfyUI Workflow JSON Generation and Serialization]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ ์ง๋ ฌํ™”๋Š” ์‹œ๊ฐ์  ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ณ„์ธต์  JSON ๊ตฌ์กฐ(Frontend vs. API)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒ์„ฑ AI ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ด์‹์„ฑ, ์ž๋™ํ™” ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ œ์–ด๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **JSON ํฌ๋งท์˜ ์ด๋ถ„ํ™” (Frontend vs. API)**: ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” 'ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท(workflow.json)'๊ณผ ์‹คํ–‰ ์—”์ง„์— ์ตœ์ ํ™”๋˜์–ด UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ '๋ฐฑ์—”๋“œ/API ํฌ๋งท(workflow_api.json)'์œผ๋กœ ๋‚˜๋‰œ๋‹ค [2, 3]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Steganography)**: ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ PNG, WebP ๋“ฑ์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด๋ถ€ ํ…์ŠคํŠธ ์ฒญํฌ(tEXt/zTXt)์— ์ˆจ๊ฒจ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ์†Œ์Šค ์ฝ”๋“œ ์—ญํ• ์„ ํ•˜๊ฒŒ ํ•œ๋‹ค [4-6]. +- **JSON v1.0 ์Šคํ‚ค๋งˆ ํ‘œ์ค€**: ๋…ธ๋“œ ID, ํด๋ž˜์Šค ํƒ€์ž…, ์œ„์ ฏ ๊ฐ’, ์Šฌ๋กฏ ๊ธฐ๋ฐ˜ ๋งํฌ ์—ฐ๊ฒฐ ๋“ฑ์„ ์ •์˜ํ•˜๋Š” ๊ธฐ์ˆ ์  ์ œ์•ฝ ์กฐ๊ฑด ๋ชจ์Œ์ด๋‹ค [7, 8]. +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion)**: ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•จ์œผ๋กœ์จ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰์„ ์ตœ์ ํ™”ํ•œ๋‹ค [9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ ํ”„๋กœํ† ์ฝœ**: ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ API ์ „์šฉ JSON์„ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜, ํ‘œ์ค€ ์ €์žฅ์„ ํ†ตํ•ด UI ํฌํ•จ JSON์„ ์ƒ์„ฑํ•œ๋‹ค [10-12]. +- **ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณ€์กฐ**: JSON์„ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ์ฒด๋กœ ๋กœ๋“œํ•œ ํ›„ ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ๊ฐ’์„ ์ˆ˜์ •ํ•˜์—ฌ ์‹œ๋“œ(seed)๋‚˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค [13, 14]. +- **3๋‹จ๊ณ„ LLM ํŒŒ์ดํ”„๋ผ์ธ**: ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ๋ฐ›์•„ '๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ(Generator) -> ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator) -> ๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ(Builder)' ๊ณผ์ •์„ ๊ฑฐ์ณ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [15-17]. +- **์„œ๋ฒ„์ธก ํฌ๋งท ๋ณ€ํ™˜**: ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—†์ด ์„œ๋ฒ„ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋น„ API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ ํŒจํ„ด์ด๋‹ค [18, 19]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ **์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)**๋กœ ์ทจ๊ธ‰ํ•˜๋ฉฐ, ์ด๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ณผ์ •์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ๋กœ ์ง„ํ–‰๋œ๋‹ค [1]. + +์ฒซ์งธ, **ํ”„๋ก ํŠธ์—”๋“œ JSON(workflow.json)**์€ Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ๋…ธ๋“œ์˜ ์ขŒํ‘œ, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ์ •๋ณด์™€ ๊ฐ™์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค [2, 20]. ์ด๋Š” ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ์˜ ํŽธ์ง‘๊ณผ ๊ณต์œ ๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค [3]. + +๋‘˜์งธ, **API JSON(workflow_api.json)**์€ ์‹ค์ œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋…ผ๋ฆฌ๋งŒ์„ ๋‚จ๊ธด ์ŠคํŠธ๋ฆผ๋ผ์ธํ™”๋œ ๊ทธ๋ž˜ํ”„์ด๋‹ค [2]. ์—ฌ๊ธฐ์„œ๋Š” ๋งํฌ๊ฐ€ ๋ณ„๋„์˜ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ง์ ‘ ์‚ฝ์ž…๋œ ์ฐธ์กฐ ํ˜•ํƒœ(`[origin_node_id, output_slot_index]`)๋กœ ํ‘œํ˜„๋œ๋‹ค [2, 21]. + +๊ธฐ์ˆ ์ ์œผ๋กœ **JSON v1.0 ์Šคํ‚ค๋งˆ**๋Š” `nodes` ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ ๊ฐ์ฒด๊ฐ€ `id`, `type`, `pos`, `size`, `widgets_values`, `mode` ๋“ฑ์˜ ์†์„ฑ์„ ๊ฐ€์งˆ ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค [7]. ํŠนํžˆ ์—ฐ๊ฒฐ(Connectivity)์€ ์ž…๋ ฅ ์Šฌ๋กฏ๊ณผ ์ถœ๋ ฅ ์Šฌ๋กฏ์˜ ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ, ์ด๋Š” VAE Loader์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์ถœ๋ ฅ์„ ๊ฐ€์ง„ ๋…ธ๋“œ์—์„œ ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค [22]. + +์ตœ๊ทผ์—๋Š” **ComfyGPT** ์—ฐ๊ตฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ LLM ์ค‘์‹ฌ ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋„์ž…๋˜์–ด, Qwen2.5-14B์™€ ๊ฐ™์€ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ๋ฒˆ์—ญํ•œ๋‹ค [15, 23]. ๋˜ํ•œ **ComfyUI-to-Python-Extension**๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(headless) ํ™˜๊ฒฝ์—์„œ์˜ ๋…๋ฆฝ์  ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค [24, 25]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ**: ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [26]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜**: ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ์ด๋ฏธ์ง€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด์— ์˜ํ•ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ JSON ์ถ”์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค [6, 26]. +- **API ํฌ๋งท์˜ ๊ฐ€๋…์„ฑ**: API ํฌ๋งท์€ ์‹คํ–‰์—๋Š” ํšจ์œจ์ ์ด์ง€๋งŒ ์ธ๊ฐ„์ด ์ฝ๊ธฐ ์–ด๋ ต๊ณ  ๋…ธ๋“œ ์ขŒํ‘œ๊ฐ€ ์—†์–ด UI๋กœ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ ๋ณด์ด๊ฑฐ๋‚˜ ๋ผˆ๋Œ€๋งŒ ๋‚จ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [18, 27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint**: `bc85382` ์ปค๋ฐ‹์—์„œ ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ํ‹€๋ฆฐ ์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์„ ์ •๊ทœํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ, `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๋น„ API ํฌ๋งท์„ ๋ณ€ํ™˜ํ•œ๋‹ค [28-30]. +- **ComfyUI-to-Python-Extension**: `comfyui_to_python.py` ๋ฐ `comfyui_to_python_utils.py` ํŒŒ์ผ์„ ํ†ตํ•ด JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [31]. +- **DanielPFlorian/ComfyUI-WorkflowGenerator**: ์ž์—ฐ์–ด๋ฅผ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์„ ์œ„ํ•ด `Workflow Generator Pipeline` ๋…ธ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ `UpdateNodeCatalog`๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์นดํƒˆ๋กœ๊ทธํ™”ํ•œ๋‹ค [32-34]. +- **Mystic Pipeline**: `pipeline.yaml`๊ณผ `new_pipeline.py`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ๋กœ ๋ฐฐํฌํ•  ๋•Œ API JSON ํฌ๋งท์ด ์‚ฌ์šฉ๋œ๋‹ค [35, 36]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์™€ ๊ณต์‹ ๋ฌธ์„œ์˜ ํฌ๋งท ๋ช…์„ธ๋ฅผ ํ†ตํ•ด ๊ธฐ์ˆ ์  ๊ตฌ์กฐ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์‹ค์ œ ๊ตฌํ˜„์ฒด GitHub ์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ DAG๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋จ [1]. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ JSON ํฌ๋งท์ด ๋”ฐ๋ฅด๋Š” ์‹œ๊ฐ์  ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ‘œ์ค€ [2, 20]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” 'Missing Custom Node' ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ [37]. +- [[ComfyUI API]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON(API format)์ด ์‹ค์ œ๋กœ ์†Œ๋ชจ๋˜๋Š” ์ตœ์ข… ์ธํ„ฐํŽ˜์ด์Šค [38, 39]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI์˜ 'Execution Model Inversion'์€ ์ˆœ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐฉ์‹๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์–ด๋А ์ •๋„์˜ ๋ฆฌ์†Œ์Šค ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๋Š”๊ฐ€? [9] +- ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt) ์™ธ์— WebP๋‚˜ MP4์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด ํฌ๋งท์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€? [40] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ ๋ฐœ์ƒํ•˜๋Š” 'ํ• ๋ฃจ์‹œ๋„ค์ด์…˜(๋…ธ๋“œ ์˜ค์—ฐ๊ฒฐ)'์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ Semantic Validator์˜ ๊ตฌ์ฒด์ ์ธ ์ž„๋ฒ ๋”ฉ ๋น„๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [23, 41] +- `object_info.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ๊ณผ ์ •์  ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ ์„ฑ๋Šฅ ์ฐจ์ด๋Š” ์–ด๋– ํ•œ๊ฐ€? [42, 43] +- ๋ณตํ•ฉ์ ์ธ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๊ฐ€ ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ์ง๋ ฌํ™”ํ•  ๋•Œ ๋…ธ๋“œ ID ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ ๋งคํ•‘ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? [44] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋”•์…”๋„ˆ๋ฆฌ์˜ `inputs` ํ‚ค๋ฅผ ์กฐ์ž‘ํ•จ์œผ๋กœ์จ ์ž๋™ํ™”๋œ ๋ฐฐ์น˜ ์ƒ์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค [13, 45]. +- **System Design:** API ์ „์šฉ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜์—ฌ UI ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ ์„œ๋ฒ„๋ฆฌ์Šค ์ถ”๋ก  ์—”๋“œํฌ์ธํŠธ(Mystic, Replicate)๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค [39, 46]. +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๊ณต์œ ๋œ JSON์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ์ž๋™ ์ง„๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•œ๋‹ค [37, 47]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ(Default workflow)๋ฅผ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•œ ํ›„, ์ ์ง„์ ์œผ๋กœ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์Šคํ‚ค๋งˆ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ํ•™์Šต์ด ๊ถŒ์žฅ๋œ๋‹ค [48, 49]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์ด์‹์„ฑ์„ ์œ„ํ•ด ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  ๋ชจ๋ธ์˜ ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ  [50]. +- [[Steganography in Generative AI]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ฐฉ์‹์˜ ๋ณด์•ˆ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณด์กด ๊ด€๋ จ ์—ฐ๊ตฌ [6]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI Workflow JSON.md b/10_Wiki/Comfyui/ComfyUI Workflow JSON.md new file mode 100644 index 00000000..0f553ae4 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI Workflow JSON.md @@ -0,0 +1,115 @@ +--- +id: comfyui-workflow-json +title: "ComfyUI Workflow JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์›Œํฌํ”Œ๋กœ์šฐ JSON", "workflow_api.json"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "ComfyUI", "JSON"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "DanielPFlorian/ComfyUI-WorkflowGenerator/README.md" + - "comfyui-workflow-to-api-converter-endpoint/README.md" + - "pydn/ComfyUI-to-Python-Extension/README.md" +github_commit: "82df278, bc85382, 6cdcc23" +--- + +# [[ComfyUI Workflow JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI Workflow JSON์€ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ƒ์„ฑ AI ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ๊ฐ€์‹œ์ ์ธ UI ๋ ˆ์ด์•„์›ƒ๊ณผ ํ”„๋กœ๊ทธ๋žจ์  ์‹คํ–‰ ๋กœ์ง ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์ฒญ์‚ฌ์ง„์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **ํฌ๋งท์˜ ์ด๋ถ„ํ™” (Bifurcation):** ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท(workflow.json)'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์— ์ตœ์ ํ™”๋œ '๋ฐฑ์—”๋“œ/API ํฌ๋งท(workflow_api.json)'์œผ๋กœ ๋‚˜๋‰œ๋‹ค [3-6]. +2. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์˜ tEXt/zTXt ์ฒญํฌ ๋‚ด์— ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ฒจ ์ €์žฅํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ๋ฐฑ์—… ๋ฐ ๊ณต์œ  ์ˆ˜๋‹จ์ด ๋œ๋‹ค [7-9]. +3. **๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ธฐ๋ฐ˜ ์Šคํ‚ค๋งˆ:** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ  ID, ํด๋ž˜์Šค ํƒ€์ž…, ์ž…๋ ฅ/์ถœ๋ ฅ ์Šฌ๋กฏ ๋ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” JSON Schema v1.0 ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค [10-12]. +4. **ํ”„๋กœ๊ทธ๋žจ์  ์ œ์–ด (Programmatic Automation):** JSON ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ „์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค [13-15]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ์—”์ง„์€ ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค [16]. +- **3๋‹จ๊ณ„ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ (LLM):** ์ž์—ฐ์–ด ์„ค๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ ํ•ฉ์„ฑ(Generator), ๋…ธ๋“œ ์ด๋ฆ„ ๊ฒ€์ฆ(Validator), ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JSON ์ปดํŒŒ์ผ(Builder) ์ˆœ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [17-19]. +- **ํ—ค๋“œ๋ฆฌ์Šค ๋ณ€ํ™˜ ํŒจํ„ด:** ์‹œ๊ฐ์  ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœ์ˆ˜ Python ์Šคํฌ๋ฆฝํŠธ(.py)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ GUI ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [20, 21]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง๋ ฌํ™”ํ•œ ๋ฐ์ดํ„ฐ์ด๋‹ค [22, 23]. ์ฃผ์š” ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. + +**1. ํฌ๋งท๋ณ„ ํŠน์„ฑ ๋ฐ ์ƒ์„ฑ** +* **ํ”„๋ŸฐํŠธ์—”๋“œ JSON:** ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน, ์ƒ‰์ƒ ๋“ฑ ์‹œ๊ฐ์  ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ฉฐ Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค [3, 5, 24]. ์ผ๋ฐ˜์ ์ธ 'Save' ๋ฒ„ํŠผ์ด๋‚˜ `Ctrl+S`๋กœ ์ƒ์„ฑํ•œ๋‹ค [8, 25]. +* **API JSON:** UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ๋กœ์ง(๋…ธ๋“œ ํƒ€์ž…, ์ž…๋ ฅ๊ฐ’, ์—ฐ๊ฒฐ ๊ด€๊ณ„)๋งŒ ๋‚จ๊ธด ํšจ์œจ์ ์ธ ํฌ๋งท์ด๋‹ค [3, 6, 26]. ์„ค์ •์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•œ ํ›„ 'Save (API Format)'๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค [27-30]. + +**2. ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ™œ์šฉ ๋ฐ ์ถ”์ถœ** +ComfyUI์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ถ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จํ•œ๋‹ค [31, 32]. ์‚ฌ์šฉ์ž๋Š” PNG ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋‹ค [7, 33, 34]. ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€์—์„œ JSON์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด `exiftool`์ด๋‚˜ ์ „์šฉ CLI ๋„๊ตฌ, ์›น ๊ธฐ๋ฐ˜ ์ถ”์ถœ๊ธฐ(`Weird Wonderful AI Art` ๋“ฑ)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค [35-37]. + +**3. ์ž๋™ํ™” ๋ฐ ๋ณ€ํ™˜ ๋„๊ตฌ** +* **Python API ์—ฐ๋™:** `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋“œ, ํ”„๋กฌํ”„ํŠธ ๋“ฑ ํŠน์ • ๋…ธ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  `/prompt` ์—”๋“œํฌ์ธํŠธ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค [13, 15]. +* **๋ณ€ํ™˜ ์—”๋“œํฌ์ธํŠธ:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ๋น„-API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [38, 39]. +* **์ฝ”๋“œ ๋ณ€ํ™˜:** `ComfyUI-to-Python-Extension`์€ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์ž๋™ํ™” ๋ฐ ์‹คํ—˜์˜ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค [14, 21]. + +**4. LLM ๊ธฐ๋ฐ˜ ๋™์  ์ƒ์„ฑ** +`ComfyUI-WorkflowGenerator`๋Š” Qwen2.5์™€ ๊ฐ™์€ ๊ฑฐ๋Œ€์–ธ์–ด๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ "SDXL์„ ์ด์šฉํ•œ ํ…์ŠคํŠธ ํˆฌ ์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ž์—ฐ์–ด ๋ช…๋ น์„ ์ฆ‰์‹œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ๊ตฌ์ถ•ํ•œ๋‹ค [40-42]. ์ด ๊ณผ์ •์—์„œ ๋กœ์ปฌ ๋…ธ๋“œ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•œ๋‹ค [43, 44]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +* **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [33]. +* **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†Œ์‹ค:** ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ „์†กํ•  ๊ฒฝ์šฐ ์ž„๋ฒ ๋”ฉ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋‹ค [9, 33]. +* **API ํฌ๋งท์˜ ๋‹จ์ :** API ํฌ๋งท์œผ๋กœ๋งŒ ์ €์žฅ๋œ ํŒŒ์ผ์€ UI ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•„ ์บ”๋ฒ„์Šค์— ๋กœ๋“œ ์‹œ ๋…ธ๋“œ๊ฐ€ ๊ฒน์น˜๊ฑฐ๋‚˜ ์‹œ๊ฐ์  ๊ตฌ์กฐ๊ฐ€ ๋ฌด๋„ˆ์ง„ '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค [45]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +* **DanielPFlorian/ComfyUI-WorkflowGenerator:** LLM์„ ์ด์šฉํ•ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„ (์ปค๋ฐ‹: `82df278`) [19, 42, 46]. +* **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ์ด์‹ํ•˜์—ฌ `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด JSON ํฌ๋งท์„ ๋ณ€ํ™˜ (์ปค๋ฐ‹: `bc85382`) [38, 39, 47]. +* **pydn/ComfyUI-to-Python-Extension:** JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ `.py` ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด์–ด ๋‹จ๋… ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ํ™˜๊ฒฝ ๊ตฌ์ถ• (์ปค๋ฐ‹: `6cdcc23`) [48, 49]. +* **Mystic Pipeline:** ์‚ฌ์šฉ์ž์˜ ์ปค์Šคํ…€ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ์— ๋ฐฐํฌํ•˜์—ฌ API ํ˜•ํƒœ๋กœ ์„œ๋น™ [50, 51]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ ์šฉ ์‚ฌ๋ก€ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Primary Source via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Nodes]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋‹จ์œ„ [22, 52]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ ์—ฐ๊ฒฐ ๋ฐฉ์‹ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ตฌ์กฐ [23, 53]. +- [[Litegraph]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ŸฐํŠธ์—”๋“œ JSON ํฌ๋งท์˜ ์‹œ๊ฐ์  ์ง๋ ฌํ™” ํ‘œ์ค€ [3, 5]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ๊ณผ ๋…ธ๋“œ ์ขŒํ‘œ ๊ด€๋ฆฌ ์›๋ฆฌ [4]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋กœ๋“œ ์‹œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋„๊ตฌ [54-56]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• [55]. +- [[Comfy GPT]] + - ์—ฐ๊ฒฐ ์ด์œ : LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์˜ ์›ํ˜•์ด ๋˜๋Š” ์—ฐ๊ตฌ [19, 40]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ž์—ฐ์–ด-๊ทธ๋ž˜ํ”„ ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ [57]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ํ”„๋ŸฐํŠธ์—”๋“œ JSON๊ณผ API JSON ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด๊ฐ€ ์‹ค์ œ ์„œ๋ฒ„ ์‹คํ–‰ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์ •๋Ÿ‰์  ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€? [3, 4] +- PNG ์™ธ์— WebP๋‚˜ MP4 ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‚ด์žฅํ•˜๊ณ  ์ถ”์ถœํ•˜๋Š” ๊ธฐ์ˆ ์  ํ‘œ์ค€์€ ์–ด๋–ป๊ฒŒ ์ •์˜๋˜๋Š”๊ฐ€? [58] +- 'Execution Model Inversion'์ด ๋ณต์žกํ•œ ๋ฃจํ”„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ๋„ ์ผ๊ด€๋œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š”๊ฐ€? [16] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ ์ถœํ˜„ ์‹œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๋Š” ํšจ์œจ์ ์ธ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? [57, 59] +- `.cpack.zip`๊ณผ ๊ฐ™์€ ์›Œํฌํ”Œ๋กœ์šฐ ํŒจํ‚ค์ง• ๋ฐฉ์‹์ด ๊ธฐ์กด JSON ๋ฐฉ์‹์˜ ๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [60] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/prompt` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ API JSON์˜ ํŠน์ • ๋…ธ๋“œ ID ๊ฐ’์„ ๊ฐ€๋กœ์ฑ„์–ด ๋™์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•จ [13, 15]. +- **System Design:** ์‹œ๊ฐ์  ํŽธ์ง‘ ํ™˜๊ฒฝ(ํ”„๋ŸฐํŠธ์—”๋“œ)๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ(๋ฐฑ์—”๋“œ)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํšจ์œจ์ ์ธ AI ํ”„๋กœ๋•์…˜ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• [3, 50, 61]. +- **Operation / Maintenance:** `ComfyUI Manager`๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ๊ณต์œ  ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ํ•ด๊ฒฐ [54, 55]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ ๋กœ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ์„ ํ†ตํ•œ ํƒ€์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๋ถ„์„, ์ตœ์ข…์ ์œผ๋กœ API ๊ธฐ๋ฐ˜ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ๋ฐœ์ „ [62-64]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด `class_type`์ด ์ฐธ์กฐํ•˜๋Š” ์‹ค์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ฒด ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ [8, 55, 65]. +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ํŒŒ์ผ ๋‚ด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ SHA-256 ํ•ด์‹œ๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• [66]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source indices: [1-186]) \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI Workspace Manager.md b/10_Wiki/Comfyui/ComfyUI Workspace Manager.md new file mode 100644 index 00000000..d031eef7 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI Workspace Manager.md @@ -0,0 +1,88 @@ +--- +id: comfyui-workspace-manager +title: "ComfyUI Workspace Manager" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Workspace Manager"] +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 ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ"] +github_commit: "" +--- + +# [[ComfyUI Workspace Manager]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์กฐ์งํ™”ํ•˜๊ณ  ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์•ˆ์ „ํ•œ ์ €์žฅ ๋ฐ ์ž์‚ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํŒŒ์›Œ ์œ ์ €์šฉ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ตœ์ ํ™” ๋„๊ตฌ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ ์กฐ์งํ™” (Visual Organization):** ๋ฒ„ํŠผ ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ๋ จ๋œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•จ [2]. +2. **๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ณดํ˜ธ ์ €์žฅ (Root Directory Storage):** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ComfyUI์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ, ํ–ฅํ›„ ์—…๋ฐ์ดํŠธ ์‹œ ํŒŒ์ผ์ด ์‹ค์ˆ˜๋กœ ๋ฎ์–ด์”Œ์›Œ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐฑ์—… ๋ฐ ๊ณต์œ ๋ฅผ ์ง€์›ํ•จ [2]. +3. **ํ†ตํ•ฉ ์ž์‚ฐ ํš๋“ (Integrated Asset Acquisition):** ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ์ฒดํฌํฌ์ธํŠธ ๋ชจ๋ธ, LoRA ๋ฐ ๊ธฐํƒ€ ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•จ [3]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์—…๋ฐ์ดํŠธ ๋‚ด์„ฑ ์ €์žฅ ํŒจํ„ด:** ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ์™€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณ ์ •๋œ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์— ๋ณด๊ด€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ๋ณด์žฅํ•จ [2]. +- **์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ(JSON) ๊ด€๋ฆฌ์™€ ๋ชจ๋ธ ์ž์‚ฐ(Weights) ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ผ ์‹œ๊ฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์ž‘์—… ํ๋ฆ„์˜ ๋‹จ์ ˆ์„ ์ตœ์†Œํ™”ํ•จ [2, 3]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI Workspace Manager๋Š” ๊ธฐ๋ณธ ComfyUI์˜ ์ €์žฅ ๋ฐ ๋กœ๋“œ ๊ธฐ๋Šฅ์„ ๋„˜์–ด์„  ๊ณ ๋„์˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ์ด๋‹ค [1]. ์ด ๋„๊ตฌ๋Š” ๋‹จ์ˆœํžˆ JSON ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์œ ํ•œ ์ˆ˜๋งŽ์€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์šฉ ๋ธŒ๋ผ์šฐ์ € ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [2]. + +ํŠนํžˆ **๋ฐ์ดํ„ฐ ์•ˆ์ „์„ฑ** ์ธก๋ฉด์—์„œ ๊ฐ•๋ ฅํ•œ ์ด์ ์„ ๊ฐ€์ง€๋Š”๋ฐ, ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ComfyUI ์„ค์น˜ ํด๋”์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ฒด๊ณ„์ ์œผ๋กœ ๋ณด๊ด€ํ•จ์œผ๋กœ์จ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ•ต์‹ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž์˜ ์†Œ์ค‘ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ž์‚ฐ์ด ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [2]. ๋˜ํ•œ, ์‚ฌ์šฉ์ž๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ชจ๋ธ์ด๋‚˜ LoRA๋ฅผ ์ฆ‰์‹œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‚ด๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ์–ด, ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ ๋ฌธ์ œ๋ฅผ ๋„๊ตฌ ๋‚ด์—์„œ ์ฆ‰๊ฐ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค [3]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +๊ธฐ์กด์˜ [[ComfyUI Custom Scripts]]๊ฐ€ ์ €์žฅ/๋กœ๋“œ ๋ฒ„ํŠผ ์•„๋ž˜์— ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, Workspace Manager๋Š” ๋ณ„๋„์˜ ๋…๋ฆฝ์ ์ด๊ณ  ์‹œ๊ฐ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ƒ๊ธ‰ ๋Œ€์•ˆ์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค [1, 2]. ์†Œ์Šค ๋ฐ์ดํ„ฐ ๋‚ด์—์„œ ๊ธฐ๋Šฅ์  ๋ชจ์ˆœ์€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํŒŒ์›Œ ์œ ์ €๋ฅผ ์œ„ํ•œ ํŽธ์˜์„ฑ ํ™•์žฅ ๋„๊ตฌ๋กœ์„œ์˜ ์„ฑ๊ฒฉ์ด ๊ฐ•์กฐ๋œ๋‹ค [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **์ €์žฅ ์œ„์น˜:** ์ด ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์šฐ๋Š” **ComfyUI์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ**์— ์ €์žฅ๋˜์–ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌ๋œ๋‹ค [2]. +- **๊ธฐ๋Šฅ ํ™œ์šฉ:** ์‚ฌ์šฉ์ž๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ **๋ชจ๋ธ ๋ฐ LoRA ๋‹ค์šด๋กœ๋“œ**๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž‘์—… ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•œ๋‹ค [3]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Primary Source via NotebookLM / User Guides) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ ์ฒด๊ณ„] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : Workspace Manager๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋Œ€์ƒ์ธ JSON ํŒŒ์ผ์˜ ์ƒ์„ฑ ์›๋ฆฌ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ JSON์˜ ์–ด๋–ค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐํ™”ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. +- [[ComfyUI Custom Scripts]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ €์žฅ ๋ฐ ๋กœ๋“œ ํŽธ์˜์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ์œ ์‚ฌํ•œ ๋ชฉ์ ์˜ ๋„๊ตฌ์ž„ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ์™€ ์‹œ๊ฐ์  ๊ด€๋ฆฌ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Œ. + +#### [์ž์‚ฐ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ์„ค์น˜ ๋ฐ ๋ชจ๋ธ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํ˜ธ๋ณด์™„์  ๋„๊ตฌ์ž„ [4]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Workspace Manager์˜ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ๊ณผ์˜ ํ†ตํ•ฉ ํ™œ์šฉ๋ฒ•์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Workspace Manager๊ฐ€ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋‚ด๋ถ€์ ์ธ ํด๋” ๊ตฌ์กฐํ™” ๊ทœ์น™์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ธ๋„ค์ผ์ด๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ‘œ์‹œํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์–ด๋– ํ•œ๊ฐ€? +- ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ Git ๋“ฑ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™๋  ๋•Œ์˜ ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ์ด ComfyUI Manager์˜ DB์™€ ๋™๊ธฐํ™”๋˜์–ด ์ž‘๋™ํ•˜๋Š”๊ฐ€, ์•„๋‹ˆ๋ฉด ๋…์ž์ ์ธ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ(์˜ˆ: 200KB ์ด์ƒ์˜ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„) ์ฒ˜๋ฆฌ ์‹œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์„ฑ๋Šฅ ํ•œ๊ณ„๋Š” ์กด์žฌํ•˜๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ๋‹ค์ˆ˜์˜ ํ”„๋กœ์ ํŠธ๋ณ„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ œ์ž‘ ํ™˜๊ฒฝ์— ๋„์ž…. +- **System Design:** ์—…๋ฐ์ดํŠธ๊ฐ€ ์žฆ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ์ž์‚ฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ์ €์žฅ ์ „๋žต์œผ๋กœ ์ฑ„ํƒ. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ์šฐ์™€ ํ•„์š”ํ•œ ๋ชจ๋ธ(Weights)์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ํŒ€ ๋‚ด ๊ณต์œ  ๋ฐ ์ธ์ˆ˜์ธ๊ณ„ ํšจ์œจํ™”. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Workflow JSON]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์˜ ์ƒ์„ธ ์ŠคํŽ™ ์ดํ•ด [5]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI-Manager.md b/10_Wiki/Comfyui/ComfyUI-Manager.md new file mode 100644 index 00000000..be2f0464 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI-Manager.md @@ -0,0 +1,89 @@ +--- +id: comfyui-manager +title: "ComfyUI-Manager" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["ltdrdata/ComfyUI-Manager", "Comfy-Org/ComfyUI-Manager/issues/719"] +github_commit: "" +--- + +# [[ComfyUI-Manager]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI-Manager๋Š” ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์ข…์†์„ฑ์„ ๋™์ ์œผ๋กœ ํ•ด์„ํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ์™€ ๋ชจ๋ธ์„ ์ž๋™ ์„ค์น˜ํ•˜์—ฌ, ์ •์ ์ธ ํŒŒ์ผ ์ƒํƒœ์˜ ์ง€์‹์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ๊ด€๋ฆฌ ์—”์ง„์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์ข…์†์„ฑ ์ž๋™ ํ•ด๊ฒฐ (Dependency Resolution):** ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ์˜จ JSON ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” "Red Box(๋ˆ„๋ฝ๋œ ๋…ธ๋“œ)" ์˜ค๋ฅ˜๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์›ํด๋ฆญ ์„ค์น˜๋ฅผ ์ง€์›ํ•จ [1, 2]. +2. **ํ†ตํ•ฉ ๋ฆฌ์†Œ์Šค ํ—ˆ๋ธŒ (Resource Hub):** ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฒดํฌํฌ์ธํŠธ, LoRA, ControlNet ๋“ฑ ๋‹ค์–‘ํ•œ AI ๋ชจ๋ธ(Weights)์˜ ๊ฒ€์ƒ‰ ๋ฐ ์„ค์น˜๋ฅผ GUI ๋‚ด์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•จ [3, 4]. +3. **์›Œํฌํ”Œ๋กœ์šฐ ๋ธŒ๋ผ์šฐ์ง•:** Comfy Workflows ๋ฐ OpenArt์™€ ๊ฐ™์€ ํ”Œ๋žซํผ๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๋ณด๊ณ  ์ฆ‰์‹œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต๋กœ ์—ญํ• ์„ ํ•จ [5]. +4. **๋ณด์•ˆ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ:** ๋…ธ๋“œ ์„ค์น˜ ์‹œ์˜ ๋ณด์•ˆ ์ˆ˜์ค€(Security Level) ์„ค์ • ๋ฐ ์„œ๋ฒ„ ์—…๋ฐ์ดํŠธ, ํ„ฐ๋ฏธ๋„ ๋กœ๊ทธ ํ™•์ธ ๋“ฑ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•จ [6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Scan-Parse-Install ํŒจํ„ด:** ์‚ฌ์šฉ์ž๊ฐ€ JSON์„ ๋กœ๋“œํ•˜๋ฉด ์‹œ์Šคํ…œ์ด `class_type`์„ ์Šค์บ”ํ•˜๊ณ , ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์„ ํŒŒ์‹ฑํ•œ ๋’ค, ํ•ด๋‹น Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐพ์•„ ์„ค์น˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ์ผ๋ จ์˜ ํ๋ฆ„ [2]. +- **๋งˆ์ปค ๋…ธ๋“œ ํ™œ์šฉ ํŒจํ„ด:** `Workflow to API Converter (Marker)`์™€ ๊ฐ™์€ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ์— ํฌํ•จ์‹œ์ผœ, Manager๊ฐ€ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํŠน์ • ์ข…์†์„ฑ์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜๋„๋ก ์œ ๋„ํ•˜๋Š” ์ „๋žต [7, 8]. +- **์ค‘์•™ ์ง‘์ค‘ํ˜• ์—…๋ฐ์ดํŠธ ์ „๋žต:** ๊ฐœ๋ณ„์ ์œผ๋กœ `git pull`์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹ , Manager๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์—…๋ฐ์ดํŠธ ์ƒํƒœ๋ฅผ ์ผ๊ด„ ํ™•์ธํ•˜๊ณ  ๊ฐฑ์‹ ํ•จ [3, 9]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI-Manager๋Š” **ltdrdata**์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋กœ, ComfyUI ์ƒํƒœ๊ณ„์˜ ๋ณต์žกํ•œ ๋…ธ๋“œ ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค [3]. ์‚ฌ์šฉ์ž๊ฐ€ Civitai๋‚˜ GitHub์—์„œ ๊ณต์œ ๋œ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ–ˆ์„ ๋•Œ, ๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ•ด๋‹น ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ํ™”๋ฉด์— ๋ถ‰์€์ƒ‰ ์ƒ์ž๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค [2]. ์ด๋•Œ Manager๋Š” JSON ๋‚ด์˜ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜์—ฌ "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ˆ„๋ฝ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„ ์„ค์น˜ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•จ์œผ๋กœ์จ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ๋ณต๊ตฌํ•œ๋‹ค [1, 2]. + +๋˜ํ•œ, ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์— ํ•„์ˆ˜์ ์ธ **๋ชจ๋ธ ๊ด€๋ฆฌ** ๊ธฐ๋Šฅ๋„ ๊ฐ•๋ ฅํ•˜๋‹ค. "Install Models" ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด SDXL, Realistic Vision ๋“ฑ ์ฃผ์š” ๋ชจ๋ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ์— ํ•„์š”ํ•œ ControlNet ๋ชจ๋ธ๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ ์ ˆํ•œ ํด๋” ๊ฒฝ๋กœ์— ์ž๋™์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค [4, 10, 11]. + +์„ค์น˜ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์—ฌ, ComfyUI์˜ `custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ `git clone https://github.com/ltdrdata/ComfyUI-Manager` ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ™œ์„ฑํ™”๋œ๋‹ค [3]. ์ตœ๊ทผ์—๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API์šฉ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ข…์†์„ฑ์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•œ 'Marker' ๋…ธ๋“œ ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ์˜ ํ˜ธํ™˜์„ฑ์„ ๋†’์ด๋Š” ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค [7, 8]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ณด์•ˆ ์ˆ˜์ค€ ๊ฐˆ๋“ฑ:** Manager๋ฅผ ํ†ตํ•œ ์ž๋™ ์„ค์น˜ ์‹œ 'This action is not allowed'์™€ ๊ฐ™์€ ๋ณด์•ˆ ๋ ˆ๋ฒจ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์„ค์ • ๋ฉ”๋‰ด์—์„œ์˜ ๋ณ„๋„ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค [6]. +- **๋ชจ๋ธ ๋ช…์นญ ๋ถˆ์ผ์น˜:** ๋™์ผํ•œ ๋ชจ๋ธ์ž„์—๋„ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ(์˜ˆ: `sd_xl_base_v10.safetensors` vs `sdxl_base.safetensors`) Manager๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256) ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์žˆ๋‹ค [12, 13]. +- **ํŠน์ • ๋…ธ๋“œ ๋ˆ„๋ฝ:** IP-Adapter์™€ ๊ฐ™์€ ์ผ๋ถ€ ๋ณต์žกํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ Manager๋ฅผ ํ†ตํ•ด์„œ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ณด๊ณ ๋˜์–ด ์ง€์†์ ์ธ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋‹ค [14]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ltdrdata/ComfyUI-Manager ๋ฆฌํฌ์ง€ํ† ๋ฆฌ:** `ComfyUI/custom_nodes/ComfyUI-Manager` ๊ฒฝ๋กœ์— ์„ค์น˜๋˜์–ด ์ „์ฒด ๋…ธ๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์ž‘๋™ [3]. +- **Workflow to API Converter (Marker) ๋…ธ๋“œ:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ Manager๊ฐ€ ์ข…์†์„ฑ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋งˆ์ปค๋กœ ์‹ค์ œ JSON ๊ตฌ์กฐ ๋‚ด์— ํฌํ•จ๋จ [7, 8]. +- **Issue #719 (ComfyUI-Manager):** IP-Adapter ๋ฐ ๋ˆ„๋ฝ๋œ ๋ชจ๋ธ/์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐจ์›์˜ ์ˆ˜์ • ๋ฐ ๊ธฐ์—ฌ ์‹œ๋„๊ฐ€ ๊ธฐ๋ก๋จ [14]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Wiki ๋ฐ ํŠœํ† ๋ฆฌ์–ผ ์†Œ์Šค ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : Manager๋Š” ์ƒ์„ฑ๋œ JSON์„ ํƒ€ ํ™˜๊ฒฝ์—์„œ ๋ณต๊ตฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ํŒŒ์ผ์˜ ์ด์‹์„ฑ(Portability) ํ™•๋ณด ์›๋ฆฌ. +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํ˜•์‹์˜ JSON์—์„œ๋„ ์ข…์†์„ฑ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Manager์˜ ๋งˆ์ปค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•จ [7]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ์—†๋Š” API ํ™˜๊ฒฝ์—์„œ์˜ ๋…ธ๋“œ ๋ณต๊ตฌ ์ „๋žต. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI-Manager๊ฐ€ JSON์˜ `class_type`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •ํ™•ํ•œ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋‚ด๋ถ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์—…๋ฐ์ดํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256) ๊ธฐ์ˆ ์ด Manager์˜ ๋ชจ๋ธ ๊ฒ€์ƒ‰ ์—”์ง„์— ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? +- ๋ณด์•ˆ ๋ ˆ๋ฒจ ์„ค์ •(`Security Level Error`)์ด ๋…ธ๋“œ ์„ค์น˜ ๊ถŒํ•œ์— ๋ฏธ์น˜๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ํ–ฅ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? +- `Workflow to API Converter (Marker)` ๋…ธ๋“œ๊ฐ€ JSON ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๊ธฐ๋ก๋˜๋Š” ๋ฐฉ์‹๊ณผ Manager๊ฐ€ ์ด๋ฅผ ์ธ์‹ํ•˜๋Š” ๋กœ์ง์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๋‚˜ ์ค‘์ฒฉ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ ๋‚ด์—์„œ Manager์˜ ์ข…์†์„ฑ ๊ฐ์ง€ ์„ฑ๋Šฅ์€ ์–ด๋–ป๊ฒŒ ๋ณด์žฅ๋˜๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ์‹œ `INPUT_TYPES`๋ฅผ ์ •ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ Manager์˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ํ˜ธํ™˜๋˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ [15]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฐํฌ ์‹œ Manager๊ฐ€ ์ธ์‹ ๊ฐ€๋Šฅํ•œ 'Marker' ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•จ [7, 8]. +- **Operation / Maintenance:** ์ •๊ธฐ์ ์œผ๋กœ Manager๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ์—…๋ฐ์ดํŠธ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•˜์—ฌ ์ตœ์‹  ๋ชจ๋ธ ์ง€์› ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•จ [3, 9]. +- **Learning Path:** ์ดˆ๋ณด ์‚ฌ์šฉ์ž๊ฐ€ "Red Box" ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ ํ•™์Šตํ•จ [1, 3]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[ComfyUI Workspace Manager]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: Manager๊ฐ€ ์„ค์น˜๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, Workspace Manager๋Š” ์„ค์น˜๋œ ๋…ธ๋“œ๋“ค์„ ํ™œ์šฉํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹œ๊ฐ์  ์กฐ์งํ™”์™€ ๋ฐฑ์—…์— ์ง‘์ค‘ํ•จ [16, 17]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI-WorkflowGenerator.md b/10_Wiki/Comfyui/ComfyUI-WorkflowGenerator.md new file mode 100644 index 00000000..ac89a087 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI-WorkflowGenerator.md @@ -0,0 +1,106 @@ +--- +id: comfyui-workflowgenerator +title: "ComfyUI-WorkflowGenerator" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "catalog/", "cataloging/", "config/", "generators/", "nodes/", "tests/", "utils/", "wiki/", "workflows/"] +github_commit: "82df278" +--- + +# [[ComfyUI-WorkflowGenerator]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ž์—ฐ์–ด ์„ค๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๋…ผ๋ฆฌ๋ฅผ ์ถ”๋ก ํ•˜๊ณ , ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ [[Workflow API JSON]] ํ˜•์‹์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” LLM ๊ธฐ๋ฐ˜์˜ ์ง€๋Šฅํ˜• ์›Œํฌํ”Œ๋กœ์šฐ ํ•ฉ์„ฑ ์—”์ง„ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ž์—ฐ์–ด-๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๋ณ€ํ™˜ (Natural Language to Node Graph Conversion):** ์‚ฌ์šฉ์ž์˜ ์˜๋„(์˜ˆ: "SDXL ๊ธฐ๋ฐ˜ ํ…์ŠคํŠธ ํˆฌ ์ด๋ฏธ์ง€ ์ƒ์„ฑ")๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•œ ๋…ธ๋“œ ๊ตฌ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ๋ง์„ ์ƒ์„ฑํ•จ [1-3]. +- **3๋‹จ๊ณ„ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ (Three-stage Pipeline):** ๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ(Generator), ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator), ๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ(Builder) ๊ณผ์ •์„ ๊ฑฐ์ณ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ๋„์ถœํ•˜๋Š” ๊ตฌ์กฐ์  ์•„ํ‚คํ…์ฒ˜ [3-5]. +- **๋ฏธ์„ธ ์กฐ์ •๋œ ์ „๋ฌธ ๋ชจ๋ธ (Fine-tuned Specialist LLM):** ComfyUI์˜ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ ์Šคํ‚ค๋งˆ ์‚ฌ์–‘์„ ํ•™์Šตํ•œ Qwen2.5-14B ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์„ ํ•ต์‹ฌ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉํ•จ [1, 6]. +- **๋กœ์ปฌ ๋…ธ๋“œ ๋™๊ธฐํ™” (Local Node Synchronization):** 'Update Node Catalog' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ˜„์žฌ ํ™˜๊ฒฝ์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ง€์‹ ๊ณต๋ฐฑ์„ ๋ณด์™„ํ•จ [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ ๋ฐ ๊ต์ • ํŒจํ„ด (Semantic Validation & Correction):** LLM์ด ์ƒ์„ฑํ•œ ๊ฐ€์ƒ์˜ ๋…ธ๋“œ ์ด๋ฆ„์„ ๋กœ์ปฌ์— ์„ค์น˜๋œ ์‹ค์ œ ๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋Œ€์กฐํ•˜์—ฌ ์ž๋™ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒด ๋…ธ๋“œ๋ฅผ ์ œ์•ˆํ•จ [3, 4, 9]. +- **๋ชจ๋“ˆํ˜• ๋‹จ๊ณ„๋ณ„ ๊ฐœ์ž… (Modular Step-wise Intervention):** ์ƒ์„ฑ-๊ฒ€์ฆ-๊ตฌ์ถ• ๊ณผ์ •์„ ๊ฐœ๋ณ„ ๋…ธ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ(๋…ผ๋ฆฌ ๋‹ค์ด์–ด๊ทธ๋žจ ๋“ฑ)์„ ์ง์ ‘ ๊ฒ€ํ† ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋จ [10, 11]. +- **ํ™˜๊ฒฝ ์ ์‘ํ˜• ์ง€์‹ ํ™•์žฅ (Environment-adaptive Knowledge Expansion):** ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์ปท์˜คํ”„(Cutoff) ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ๊ฒ€์ฆ์— ํ™œ์šฉํ•˜๋Š” ํœด๋ฆฌ์Šคํ‹ฑ์„ ์ ์šฉํ•จ [7, 8, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI-WorkflowGenerator๋Š” **ComfyGPT ์—ฐ๊ตฌ**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋œ ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ๋ฐฐ์น˜ํ•˜๋Š” "์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ" ๋‹จ๊ณ„์—์„œ ์–ธ์–ด๋กœ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜๋Š” "๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์œผ๋กœ์˜ ์ „ํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค [2-4]. + +- **์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ:** + 1. **Generator (๋…ผ๋ฆฌ ํ•ฉ์„ฑ):** LLM์ด ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ธ๋“œ ์ข…๋ฅ˜์™€ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ์ถ”์ƒ์  JSON ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [3, 5, 9]. + 2. **Validator (์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ):** 'Semantic search' ์ „์šฉ ๋ชจ๋“œ ๋˜๋Š” 'LLM refinement' ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๋กœ์ปฌ ํ™˜๊ฒฝ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค [3, 9]. + 3. **Builder (๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ):** ๊ฒ€์ฆ๋œ ์ถ”์ƒ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” **v1.0 ์Šคํ‚ค๋งˆ** ์ค€์ˆ˜ ์›Œํฌํ”Œ๋กœ์šฐ JSON์œผ๋กœ ์ตœ์ข… ๋ณ€ํ™˜ํ•œ๋‹ค [3, 8]. + +- **๋ชจ๋ธ ๋ฐ ์‹คํ–‰ ํ™˜๊ฒฝ:** + - **ํ•ต์‹ฌ ๋ชจ๋ธ:** Qwen2.5-14B๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฏธ์„ธ ์กฐ์ •๋˜์—ˆ์œผ๋ฉฐ, ํšจ์œจ์„ฑ์„ ์œ„ํ•ด **GGUF ์–‘์žํ™”(q8_0)** ํ˜•์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค [6]. + - **ํ•„์ˆ˜ ์˜์กด์„ฑ:** GGUF ๋ชจ๋ธ ๊ตฌ๋™์„ ์œ„ํ•ด `llama-cpp-python` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ๋ณ„๋„์˜ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ(`paraphrase-multilingual-MiniLM-L12-v2`)์„ ํ™œ์šฉํ•œ๋‹ค [6, 13]. + - **์นดํƒˆ๋กœ๊ทธ ๊ด€๋ฆฌ:** `UpdateNodeCatalog` ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ์„ค์น˜๋œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์ž„๋ฒ ๋”ฉ ๋ฐ ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ์„ ์ตœ์‹ ํ™”ํ•˜๋ฉฐ, ์ด๋Š” ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ •ํ™•๋„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ด๋‹ค [7, 8]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •์  ํ•™์Šต ๋ฐ์ดํ„ฐ vs ๋™์  ์ƒํƒœ๊ณ„:** ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์€ ํ•™์Šต ์‹œ์  ์ดํ›„์— ์ถœ์‹œ๋œ ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์ง€์‹์ด ์—†๋Š” "๋™๊ฒฐ(frozen)" ์ƒํƒœ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ๋…ธ๋“œ ์Šค์บ”(Update Catalog)์„ ํ†ตํ•œ ๋ณด์™„์ฑ…์ด ๊ฐ•์กฐ๋œ๋‹ค [12, 14]. +- **๋…ผ๋ฆฌ์  ์ƒ์„ฑ vs ๋ฌผ๋ฆฌ์  ์‹คํ–‰:** ๋ชจ๋ธ์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋…ธ๋“œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋”๋ผ๋„, ๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ•ด๋‹น ์ฒดํฌํฌ์ธํŠธ ๋ชจ๋ธ์ด๋‚˜ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ€์žฌํ•  ๊ฒฝ์šฐ ์ตœ์ข… ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์‹คํ–‰ ์‹คํŒจ(Red Nodes)๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค [3, 14, 15]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **GitHub ํ”„๋กœ์ ํŠธ:** `DanielPFlorian/ComfyUI-WorkflowGenerator` ์ €์žฅ์†Œ์— ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ์™€ ๋…ธ๋“œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ๋‹ค [16]. +- **์ฃผ์š” ํŒŒ์ผ ๊ตฌ์กฐ:** + - `nodes/`: WorkflowGenerator, NodeValidator, WorkflowBuilder ๋“ฑ ํ•ต์‹ฌ ๋…ธ๋“œ ๊ตฌํ˜„์ฒด ํฌํ•จ [11, 16]. + - `catalog/`: ๋กœ์ปฌ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์นดํƒˆ๋กœ๊ทธ ๊ด€๋ฆฌ ํด๋” [8, 16]. + - `generators/`: LLM์„ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๋…ผ๋ฆฌ ์ƒ์„ฑ ์—”์ง„ ํฌํ•จ [16]. +- **ํŠน์ด ์‚ฌํ•ญ:** 6๊ฐœ์›” ์ „ ์ปค๋ฐ‹(`82df278`)์„ ํ†ตํ•ด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋œ ๊ธฐ๋ก์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [16]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋…ผ๋ฌธ ComfyGPT์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ์‹ค์ œ GitHub ๊ตฌํ˜„์ฒด๊ฐ€ ์กด์žฌํ•จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (GitHub Repository ๋ฐ ๊ธฐ์ˆ  ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์ •๋ณด) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +--- + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : WorkflowGenerator์˜ ์ตœ์ข… ์ถœ๋ ฅ๋ฌผ์ด์ž ๋ฐฑ์—”๋“œ ์‹คํ–‰์„ ์œ„ํ•œ ํ•„์ˆ˜ ๊ทœ๊ฒฉ์ž„ [8, 17, 18]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฐ์ œ๋œ ์‹คํ–‰ ์ตœ์ ํ™” ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ. +- [[ComfyGPT]] + - ์—ฐ๊ฒฐ ์ด์œ : WorkflowGenerator์˜ ์ด๋ก ์  ํ† ๋Œ€๊ฐ€ ๋œ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ์—ฐ๊ตฌ์ž„ [2, 3]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: LLM์ด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ์›์ฒœ ๋…ผ๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI-Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON์—์„œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ์‚ฌํ›„ ๊ด€๋ฆฌ ๋„๊ตฌ์ž„ [15, 19]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์™ธ๋ถ€ ๊ณต์œ  ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด ํ”„๋กœ์„ธ์Šค. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- LLM์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ ์ปท์˜คํ”„ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜(์˜ˆ: Wan 2.2)๋ฅผ `UpdateNodeCatalog` ์ •๋ณด๋งŒ์œผ๋กœ ์ •ํ™•ํžˆ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [12] +- Semantic Validation ๋‹จ๊ณ„์—์„œ 'LLM refinement'๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ† ํฐ ์†Œ๋ชจ๋Ÿ‰๊ณผ ์ถ”๋ก  ์‹œ๊ฐ„ ๋Œ€๋น„ ์ •ํ™•๋„ ํ–ฅ์ƒ ๋น„์œจ์€ ์–ด๋А ์ •๋„์ธ๊ฐ€? [9] +- ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ `order` ๋ฐ `mode` ์†์„ฑ์„ ๊ฒฐ์ •ํ•  ๋•Œ WorkflowBuilder๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [8, 20] +- GGUF ์–‘์žํ™” ๊ฐ•๋„(q4_0 vs q8_0)๊ฐ€ ๋…ธ๋“œ ๊ฐ„์˜ ๋ณต์žกํ•œ ์—ฐ๊ฒฐ(Link) ๋…ผ๋ฆฌ ๋ณด์กด๋ ฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ์กด์žฌํ•˜๋Š”๊ฐ€? [21] +- ๋‹ค์ค‘ ControlNet๊ณผ ๊ฐ™์ด ์ค‘์ฒฉ๋œ ์กฐ๊ฑด๋ถ€ ์—ฐ๊ฒฐ์„ ์ž์—ฐ์–ด๋งŒ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ํ‘œ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? [4, 5] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `llama-cpp-python[cuda]`๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ €์‚ฌ์–‘ VRAM ํ™˜๊ฒฝ์—์„œ๋„ LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ [13, 22]. +- **System Design:** ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ˜•ํƒœ์˜ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์ „๋ฌธ ์ง€์‹ ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ฑ์„ ๋†’์ž„ [4, 23]. +- **Operation / Maintenance:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๋Œ€๋Ÿ‰ ์ถ”๊ฐ€ ์‹œ ๋ฐ˜๋“œ์‹œ `UpdateNodeCatalog`๋ฅผ ์žฌ์‹คํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ง€์‹ ๋ฒ ์ด์Šค๋ฅผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•จ [7, 8]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Comfy Nodekit]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ์ •์  ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ์˜ ๋น„๊ต ์—ฐ๊ตฌ [24]. +- [[Litegraph]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์‹œ๊ฐ์  ์š”์†Œ(์œ„์น˜, ํฌ๊ธฐ)๊ฐ€ ์ •์˜๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ‘œ์ค€ ๊ทœ๊ฒฉ ์ดํ•ด [17, 25]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/ComfyUI-to-Python-Extension.md b/10_Wiki/Comfyui/ComfyUI-to-Python-Extension.md new file mode 100644 index 00000000..27c01d50 --- /dev/null +++ b/10_Wiki/Comfyui/ComfyUI-to-Python-Extension.md @@ -0,0 +1,66 @@ +--- +id: comfyui-to-python-extension +title: "ComfyUI-to-Python-Extension" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Save As Script"] +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_to_python.py", "comfyui_to_python_utils.py", "install.py", "init.py", "ComfyUI/custom_nodes"] +github_commit: "6cdcc23" +--- + +# [[ComfyUI-to-Python-Extension]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์‹œ๊ฐ์ ์ธ **ComfyUI ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณ„๋„์˜ ์„œ๋ฒ„ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ด์ฌ(.py) ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜**ํ•˜์—ฌ ์ž๋™ํ™” ๋ฐ ์‹คํ—˜์˜ ๋ฐ˜๋ณต์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ™•์žฅ ๋„๊ตฌ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Save As Script (UI Export):** ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค [2, 3]. +- **CLI Exporter:** ์ €์žฅ๋œ API ํฌ๋งท์˜ JSON ํŒŒ์ผ์„ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ์ผ๊ด„ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค [2, 4]. +- **Runtime Dependency:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‹คํ–‰์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ **ComfyUI ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(PyTorch ๋“ฑ)**๊ณผ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค [5, 6]. +- **Metadata Preservation:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ์ด๋ฏธ์ง€๋Š” ์›๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ, ๋‹ค์‹œ ComfyUI๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜์—ฌ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค [5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Workflow-to-Script Serialization:** ์‹œ๊ฐ์  DAG(Directed Acyclic Graph) ๊ตฌ์กฐ๋ฅผ ์ˆœ์ฐจ์ ์ธ ํŒŒ์ด์ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šคํ™” ์ฝ”๋“œ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค [2, 7]. +- **Headless Execution Pattern:** ์›น ์„œ๋ฒ„๋‚˜ ํ”„๋ก ํŠธ์—”๋“œ ์—†์ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, ๋…๋ฆฝํ˜• ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ๋‚˜ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๊ธฐ ์šฉ์ดํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [8, 9]. +- **Lifecycle Management:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ์˜ `main()` ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ชจ๋ธ ๋ฐ ์บ์‹œ ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” `finally` ๋ธ”๋ก์„ ํฌํ•จํ•˜์—ฌ ์ž์› ๊ด€๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [6]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +- **์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์‚ฌ์šฉ๋ฒ•:** + - **์›น UI ํ™•์žฅ:** `File -> Save As Script` ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด `workflow_api.py` ํŒŒ์ผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋‚ด๋ณด๋‚ธ๋‹ค [3]. + - **CLI ๋ณ€ํ™˜:** `python comfyui_to_python.py --input_file workflow_api.json` ๋ช…๋ น์„ ํ†ตํ•ด ๊ธฐ์กด JSON ํŒŒ์ผ์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `--queue_size` ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค [4]. + - **ํ™˜๊ฒฝ ์„ค์ •:** ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ `COMFYUI_PATH`๋ฅผ ์„ค์ •ํ•˜์—ฌ ComfyUI ์ฝ”๋“œ๋ฒ ์ด์Šค ์œ„์น˜๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค [6, 10]. +- **๊ธฐ์ˆ ์  ํŠน์ง•:** + - **๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋Ÿฌ๋„ˆ:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กฌํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ **๋‹จ๋ฐœ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰๊ธฐ(single-shot runner)**๋กœ ๋™์ž‘ํ•œ๋‹ค [6]. + - **์ธ์ž ์ฒ˜๋ฆฌ:** ComfyUI์˜ ๋Ÿฐํƒ€์ž„ ์ธ์ž ํŒŒ์„œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, `--highvram`, `--cpu`์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ์ง์ ‘ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค [5]. + - **ํŒŒ์ด์ฌ ๋ฒ„์ „ ์š”๊ตฌ์‚ฌํ•ญ:** ์•ˆ์ •์ ์ธ ๋™์ž‘์„ ์œ„ํ•ด **Python 3.12 ์ด์ƒ**์˜ ๋ฒ„์ „์„ ๊ถŒ์žฅํ•œ๋‹ค [2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋™์  ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํ•œ๊ณ„:** ํ•œ ์†Œ์Šค์—์„œ๋Š” ์ด ๋„๊ตฌ๊ฐ€ ์ค‘๊ฐ„ ๋ณ€ํ™˜ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— **๋™์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ(Dynamic workflows)**๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค๋Š” ๋น„ํŒ์  ์‹œ๊ฐ์„ ์ œ์‹œํ•œ๋‹ค [9]. +- **๋ฉ”๋‰ด ์œ„์น˜ ๋ณ€๋™์„ฑ:** ํ”„๋ก ํŠธ์—”๋“œ ๋ฒ„์ „์— ๋”ฐ๋ผ `Save As Script` ๋ฉ”๋‰ด์˜ ์œ„์น˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [3, 6]. +- **์ตœ์‹ ์„ฑ ์œ ์ง€:** ์ •์  ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ํ›ˆ๋ จ๋œ LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ, ์ด ์ต์Šคํ…์…˜์€ ๋กœ์ปฌ์˜ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ๋ณด์ด์ง€๋งŒ, ์—ฌ์ „ํžˆ ์ˆ˜๋™ ๋ณ€ํ™˜ ๊ณผ์ •์ด ์ˆ˜๋ฐ˜๋œ๋‹ค [4, 11]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **pydn/ComfyUI-to-Python-Extension:** ํ•ด๋‹น ๊ฐœ๋…์ด ๊ตฌํ˜„๋œ ํ•ต์‹ฌ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์ด๋‹ค [1]. +- **comfyui_to_python.py / comfyui_to_python_utils.py:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์ด ๋‹ด๊ธด ์‹ค์ œ ์†Œ์Šค ํŒŒ์ผ๋“ค์ด๋‹ค [12]. +- **install.py:** ์ต์Šคํ…์…˜ ์„ค์น˜ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ ์šฉ๋˜์–ด ์žˆ๋‹ค [12]. +- **Save As Script ๋ฉ”๋‰ด:** ComfyUI์˜ `File` ๋ฉ”๋‰ด ํ•˜๋‹จ์— ์‹ค์ œ ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋กœ ๊ตฌํ˜„๋˜์–ด ์ ์šฉ๋˜์—ˆ๋‹ค [3]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•.md b/10_Wiki/Comfyui/Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•.md new file mode 100644 index 00000000..9e30877b --- /dev/null +++ b/10_Wiki/Comfyui/Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•.md @@ -0,0 +1,114 @@ +--- +id: comfyui-workflow-json-์ƒ์„ฑ-๋ฐฉ๋ฒ• +title: "Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI Workflow Serialization", "ComfyUI API JSON Generation"] +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", "API"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["bc85382", "82df278", "DanielPFlorian/ComfyUI-WorkflowGenerator", "SethRobinson/comfyui-workflow-to-api-converter-endpoint", "pydn/ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„(Frontend)์™€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋กœ์ง(API) ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” **์ง๋ ฌํ™”๋œ ์†Œ์Šค ์ฝ”๋“œ**์ด๋ฉฐ, ์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ๋ถ€ํ„ฐ LLM ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ๊นŒ์ง€ ๋‹ค์ธต์ ์ธ ์ƒ์„ฑ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **ํ˜•์‹์˜ ์ด๋ถ„ํ™” (Bifurcation):** ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ **Frontend JSON**(์‚ฌ์šฉ์ž ํŽธ์ง‘์šฉ)๊ณผ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ๋กœ์ง๋งŒ ๋‚จ๊ธด **API JSON**(์„œ๋ฒ„/ํ”„๋กœ๊ทธ๋žจ ํ˜ธ์ถœ์šฉ)์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค [4-7]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** ์ƒ์„ฑ๋œ PNG/WebP ์ด๋ฏธ์ง€์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ ๋‚ด์— ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ฒจ ์ €์žฅํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฑ์—… ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [8, 9]. +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•ด ์‹คํ–‰ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ตฌ์กฐ์  ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค [10, 11]. +- **LLM ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ (LLM-driven Synthesis):** ์ž์—ฐ์–ด ์„ค๋ช…์„ ์„ธ ๋‹จ๊ณ„(์ƒ์„ฑ โ†’ ๊ฒ€์ฆ โ†’ ๋นŒ๋“œ)์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” ์ตœ์‹  ์ ‘๊ทผ๋ฒ•์ด๋‹ค [12-14]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ํ™œ์„ฑํ™” ํŒจํ„ด:** API ์ „์šฉ JSON์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์ • ๋ฉ”๋‰ด์—์„œ **'Enable Dev mode Options'**๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ๋งŒ 'Save (API format)' ๋ฒ„ํŠผ์ด ๋…ธ์ถœ๋œ๋‹ค [2, 15-17]. +- **๋…ธ๋“œ ID ๊ณ ์ •ํ™” ์ „๋žต:** API ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ œ์–ดํ•  ๋•Œ, ๊ฐ€๋ณ€์ ์ธ ๋…ธ๋“œ ID ๋Œ€์‹  **๋…ธ๋“œ ์ œ๋ชฉ(Title)**์ด๋‚˜ **์‚ฌ์šฉ์ž ์ •์˜ ํ‚ค**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ž˜ํผ(Wrapper) ์‚ฌ์šฉ ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [18-20]. +- **์˜์กด์„ฑ ์ž๋™ ํ•ด๊ฒฐ ํŒจํ„ด:** ์™ธ๋ถ€ JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” 'Missing Custom Node' ์˜ค๋ฅ˜(๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **ComfyUI Manager**๊ฐ€ JSON์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ์œ ๋„ํ•œ๋‹ค [21-23]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) + +### 1. GUI๋ฅผ ํ†ตํ•œ ์ˆ˜๋™ ์ƒ์„ฑ ๋ฐฉ๋ฒ• +๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ํ”ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ปจํŠธ๋กค ํŒจ๋„์„ ์‚ฌ์šฉํ•œ๋‹ค. +- **Frontend ํฌ๋งท (workflow.json):** ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ, ๋…ธ๋“œ ์ขŒํ‘œ, ๊ทธ๋ฃน, ์ƒ‰์ƒ ๋“ฑ ์‹œ๊ฐ์  ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค [4, 24]. **Ctrl + S** (๋˜๋Š” Cmd + S) ๋‹จ์ถ•ํ‚ค๋กœ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐ”๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค [24]. +- **API ํฌ๋งท (workflow_api.json):** ์„œ๋ฒ„ ์‹คํ–‰์— ๋ถˆํ•„์š”ํ•œ UI ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ ์ •์ œ๋œ ๊ทธ๋ž˜ํ”„์ด๋‹ค [4, 7]. ์„ค์ •์—์„œ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ์ผ  ํ›„ ์ƒ์„ฑ๋˜๋Š” **'Save (API format)'** ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”์ถœํ•˜๋ฉฐ, `/prompt` ์—”๋“œํฌ์ธํŠธ ํ˜ธ์ถœ์— ํ•„์ˆ˜์ ์ด๋‹ค [2, 25, 26]. + +### 2. ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ์˜ ์ถ”์ถœ +์ด๋ฏธ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ ํŒŒ์ผ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ์ง์„ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ:** ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ PNG ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋–จ์–ด๋œจ๋ฆฌ๋ฉด ์ฆ‰์‹œ ๋…ธ๋“œ ๊ตฌ์„ฑ์ด ๋ณต์›๋œ๋‹ค [8, 27-29]. +- **์ถ”์ถœ ๋„๊ตฌ ํ™œ์šฉ:** `ExifTool`์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ๋ฅผ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜(`exiftool -b -workflow input.png > workflow.json`), ์ „๋ฌธ ์›น ์‚ฌ์ดํŠธ(Weird Wonderful AI Art) ๋ฐ CLI ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฒŒํฌ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค [30-33]. + +### 3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์ž๋™ํ™” ์ƒ์„ฑ +๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜ํ•œ๋‹ค. +- **Python ๋”•์…”๋„ˆ๋ฆฌ ์กฐ์ž‘:** JSON์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘์ฒฉ๋œ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ์ด๋ฏ€๋กœ, `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹œ๋“œ, ํ”„๋กฌํ”„ํŠธ, ๋ชจ๋ธ ๊ฒฝ๋กœ ๋“ฑ์˜ ํŠน์ • ๋…ธ๋“œ ์ž…๋ ฅ์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค์‹œ ์ €์žฅํ•˜๊ฑฐ๋‚˜ API๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค [34, 35]. +- **ํ˜•์‹ ๋ณ€ํ™˜ ์—”๋“œํฌ์ธํŠธ:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ผ๋ฐ˜ Frontend JSON์„ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ฆ‰์‹œ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” `/workflow/convert` API๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค [26, 36]. +- **Python ์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜:** `ComfyUI-to-Python-Extension`์€ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ(.py)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค [18, 37, 38]. + +### 4. LLM ๊ธฐ๋ฐ˜ ์ž์—ฐ์–ด ์ƒ์„ฑ (AI ํ•ฉ์„ฑ) +- **ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ:** `ComfyUI-WorkflowGenerator`๋Š” ์‚ฌ์šฉ์ž์˜ ์ž์—ฐ์–ด ๋ช…๋ น(์˜ˆ: "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ")์„ ์ž…๋ ฅ๋ฐ›์•„ **Generator**(๋…ผ๋ฆฌ ๊ตฌ์กฐ ์ƒ์„ฑ) โ†’ **Validator**(๋…ธ๋“œ ์ด๋ฆ„ ๊ฒ€์ฆ) โ†’ **Builder**(์‹คํ–‰ ๊ฐ€๋Šฅ JSON ๋นŒ๋“œ) ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค [13, 14]. +- **๊ธฐ๋ฐ˜ ๋ชจ๋ธ:** Qwen2.5-14B์™€ ๊ฐ™์ด ๋ฏธ์„ธ ์กฐ์ •๋œ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ์œ ํšจํ•œ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ถ”๋ก ํ•œ๋‹ค [39]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [23, 28]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜:** ์˜จ๋ผ์ธ ๊ณต์œ ๋‚˜ ์••์ถ• ๊ณผ์ •์—์„œ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(JSON ์ •๋ณด ํฌํ•จ)๊ฐ€ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์„ ํ†ตํ•œ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค [9, 28, 40]. +- **Reroute ๋…ธ๋“œ ์ฒ˜๋ฆฌ:** ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ(V2.2.0)์—์„œ๋Š” ๋ณ€ํ™˜๊ธฐ๋“ค์ด ์ƒˆ๋กœ์šด 'reroute' ๋…ธ๋“œ๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋กœ์ง์ด ์ˆ˜์ •๋˜์—ˆ๋‹ค [41]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Git ์ปค๋ฐ‹ bc85382:** `comfyui-workflow-to-api-converter-endpoint` ํ”„๋กœ์ ํŠธ์—์„œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์˜ค๋ฅ˜(True vs true)๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์„ ์ •๊ทœํ™”ํ•˜๋Š” ๋กœ์ง์ด ์ ์šฉ๋จ [41, 42]. +- **Git ์ปค๋ฐ‹ 82df278:** `ComfyUI-WorkflowGenerator`์—์„œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ [43]. +- **/workflow/convert ์—”๋“œํฌ์ธํŠธ:** Seth A. Robinson์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋กœ, ๋น„ API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ [26, 44]. +- **Save As Script ๋ฉ”๋‰ด:** `pydn/ComfyUI-to-Python-Extension` ์„ค์น˜ ์‹œ ComfyUI์˜ 'File' ๋ฉ”๋‰ด์— ์ถ”๊ฐ€๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ [45, 46]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๋‹ค์ˆ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ตฌํ˜„ ์‚ฌ๋ก€ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๊ฐœ๋ฐœ ๋ฌธ์„œ, ๋ฉ”์ด์ € ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ์ˆ  ๋…ธํŠธ ๋ฐ ํŠœํ† ๋ฆฌ์–ผ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… + +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํ˜•์‹์ด ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ๋Š” ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„ ํ‘œ์ค€ [4, 6]. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ [10]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON์˜ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์š”์†Œ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ [21, 22]. +- [[ComfyUI API]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ API JSON์ด ์ตœ์ข…์ ์œผ๋กœ ์†Œ๋น„๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—”๋“œํฌ์ธํŠธ [47, 48]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์™œ ComfyUI๋Š” Frontend์™€ API ํฌ๋งท์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค๊ณ„ํ–ˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์–ป๋Š” ์„ฑ๋Šฅ์  ์ด๋“์€ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฌด์—‡์ธ๊ฐ€? [4, 5] +- PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ(tEXt/zTXt)๋ฅผ ๋„˜์–ด์„œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ด๋ฏธ์ง€์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ์‹œํ‚ค๋Š” ๋Œ€์•ˆ ๊ธฐ์ˆ ์€ ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€? [9] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์‹œ, ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋Š” ์ตœ์‹  ์ปค์ŠคํŠธ ๋…ธ๋“œ์™€์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ)๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [49] +- `Execution Model Inversion` ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ JSON์— ํฌํ•จ๋˜์—ˆ์„ ๋•Œ ์‹ค์ œ ์‹คํ–‰ ํšจ์œจ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์–ด๋– ํ•œ๊ฐ€? [10] +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ์ด์šฉํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์˜ JSON ๋‚ด ๋ชจ๋ธ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‘œ์ค€ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? [50] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ˜์ • ํ›„ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ API ํ˜ธ์ถœ ์ƒ์„ฑ [26]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ๋ฐฐํฌ ์‹œ์—๋Š” API ํฌ๋งท๋งŒ ์ถ”์ถœํ•˜์—ฌ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ(Replicate, Mystic ๋“ฑ)์— ์—…๋กœ๋“œ [16, 17, 51]. +- **Operation / Maintenance:** `object_info.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ „ ๋…ธ๋“œ ์ž…์ถœ๋ ฅ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•จ์œผ๋กœ์จ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๋ฐฉ์ง€ [52, 53]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ตํžŒ ํ›„, `ComfyUI-to-Python`์„ ํ†ตํ•ด ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ์ง„์ž… [38, 54]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ ์ด์‹์„ฑ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ ์‹๋ณ„ ๊ธฐ์ˆ  [50]. +- [[Custom Node Registry]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด `class_type`์ด ์ฐธ์กฐํ•˜๋Š” ์‹ค์ œ ๋…ธ๋“œ ๊ตฌํ˜„ ์ €์žฅ์†Œ ๊ด€๋ฆฌ [55]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source synthesis from 18 documents) [1-188] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Custom Node Dependency Management.md b/10_Wiki/Comfyui/Custom Node Dependency Management.md new file mode 100644 index 00000000..ee81db71 --- /dev/null +++ b/10_Wiki/Comfyui/Custom Node Dependency Management.md @@ -0,0 +1,102 @@ +--- +id: custom-node-dependency-management +title: "Custom Node Dependency Management" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ ๊ด€๋ฆฌ", "Missing Custom Nodes Resolution"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Dependency Management"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes/ComfyUI-Manager", "comfyui-workflow-to-api-converter-endpoint (V2.05)", "UpdateNodeCatalog Node"] +github_commit: "" +--- + +# [[Custom Node Dependency Management]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ด์‹์„ฑ์€ **JSON ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋‚ด `class_type` ๋ถ„์„**๊ณผ **ComfyUI Manager๋ฅผ ํ†ตํ•œ ์ž๋™ ์˜์กด์„ฑ ํ•ด๊ฒฐ** ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๋ณด์žฅ๋œ๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **Red Node Detection:** ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ์‹œ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ์‹œ๊ฐ์  ๊ฒฝ๊ณ (๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋กœ ์‹๋ณ„ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ [1, 3, 4]. +2. **Node Registry (object_info.json):** ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์Šคํ‚ค๋งˆ ๋ฐ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ†ตํ•ฉ ์นดํƒˆ๋กœ๊ทธ [5, 6]. +3. **Class Type Mapping:** JSON ํŒŒ์ผ์˜ `class_type` ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์—ญ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‹๋ณ„ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค [1, 7]. +4. **Automated Resolution (ComfyUI Manager):** ๋ฏธ์„ค์น˜ ๋…ธ๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์›ํด๋ฆญ์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ด€๋ฆฌ ๋„๊ตฌ [3, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Dependency Detection Marker:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ComfyUI Manager๊ฐ€ ์˜์กด์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „์šฉ '๋งˆ์ปค ๋…ธ๋“œ'๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ์ „๋žต [9]. +- **Semantic Validation Pipeline:** LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด ๋ช…๋ น์—์„œ ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์ด ์‹ค์ œ ์„ค์น˜๋œ ๋…ธ๋“œ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ์œผ๋กœ ๊ฒ€์ฆํ•˜๊ณ  ๊ต์ •ํ•˜๋Š” ํŒจํ„ด [10, 11]. +- **Model Weight Hashing:** ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณ ๊ธ‰ ์ง๋ ฌํ™” ๋ฐฉ์‹ [4, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ JSON์ด ๋‹จ์ˆœํ•œ ๊ทธ๋ž˜ํ”ฝ ๋ ˆ์ด์•„์›ƒ์ด ์•„๋‹ˆ๋ผ **์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ผ๋ฆฌ ๊ตฌ์กฐ(DAG)**๋ผ๋Š” ์ ์—์„œ ํ•ต์‹ฌ์ ์ธ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค [2, 13]. + +**์˜์กด์„ฑ ์‹๋ณ„ ๋ฐ ํ•ด๊ฒฐ ํ”„๋กœ์„ธ์Šค** +์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ๋œ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ComfyUI ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ ๋…ธ๋“œ์˜ `class_type`์„ ๋กœ์ปฌ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•œ๋‹ค [1]. ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋…ธ๋“œ๋Š” ์บ”๋ฒ„์Šค์— ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค๋กœ ํ‘œ์‹œ๋œ๋‹ค [3, 14]. **ComfyUI Manager**๋Š” ์ด JSON์„ ๋‹ค์‹œ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๋ฉฐ, "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™ ์„ค์น˜๋ฅผ ์ง€์›ํ•œ๋‹ค [3, 8]. + +**๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ** +์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ๊ทผ๊ฐ„์€ `object_info.json` ํŒŒ์ผ์ด๋‹ค. ์ด ํŒŒ์ผ์€ ์ธ์Šคํ„ด์Šค ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์œ ํ˜•, ๊ธฐ๋ณธ๊ฐ’, ํˆดํŒ ๋“ฑ ์ƒ์„ธ ์Šคํ‚ค๋งˆ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ๋„๊ตฌ ๊ฐœ๋ฐœ ๋ฐ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ํ•„์ˆ˜์ ์ด๋‹ค [6, 15]. ๋˜ํ•œ, ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋„๊ตฌ์ธ **WorkflowGenerator**๋Š” `UpdateNodeCatalog` ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ ์ตœ์‹  ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์œ ์ง€ํ•œ๋‹ค [16, 17]. + +**ํ™˜๊ฒฝ ๊ฐ„ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ** +๋กœ์ปฌ ๊ฒฝ๋กœ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€๋‚˜ ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ, ํƒ€ ์‹œ์Šคํ…œ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ด๋™ํ•  ๋•Œ ๊ฒฝ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค [4]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, `Comfy API Simplified`์™€ ๊ฐ™์ด ๋…ธ๋“œ ID ๋Œ€์‹  'ํƒ€์ดํ‹€'์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ธ๋‹ค [12, 18]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๋Š” ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ, ๊ตฌ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์˜์กด์„ฑ ๋ฌธ์ œ ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์œผ๋ฉฐ ์ˆ˜๋™ ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค [19]. +- **์ •์  ๋ชจ๋ธ์˜ ํ•œ๊ณ„:** ํŠน์ • ์‹œ์ ์— ํ•™์Šต๋œ LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ๋Š” ํ•™์Šต ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์กด์žฌ๋‚˜ ์˜์กด์„ฑ ๊ด€๊ณ„๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” '๋™๊ฒฐ(frozen)' ์ƒํƒœ์˜ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค [20]. +- **๋ณด์•ˆ ์ด์Šˆ:** ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ์ธ `Impact-Pack` ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์—์„œ ์ฑ„๊ตด ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋Š” ๋“ฑ ์ปค์Šคํ…€ ๋…ธ๋“œ ์ƒํƒœ๊ณ„์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ณด๊ณ ๋œ ๋ฐ” ์žˆ๋‹ค [21]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI/custom_nodes/ComfyUI-Manager:** ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ ์„ค์น˜๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ [22]. +- **comfyui-workflow-to-api-converter-endpoint (V2.05):** ์›Œํฌํ”Œ๋กœ์šฐ ์˜์กด์„ฑ ๊ฐ์ง€๋ฅผ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•œ "Marker Node" ๊ธฐ๋Šฅ ๊ตฌํ˜„ [9, 23]. +- **UpdateNodeCatalog ๋…ธ๋“œ:** ๊ฐ€์šฉ ๋…ธ๋“œ(๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€)๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์˜์กด์„ฑ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ํ•„์š”ํ•œ ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ ์—…๋ฐ์ดํŠธ [16, 17]. +- **NodeValidator:** LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ๋…ธ๋“œ ์ด๋ฆ„์„ ์‹ค์ œ ๋กœ์ปฌ ์„ค์น˜ ๋…ธ๋“œ์™€ ๋น„๊ตํ•˜์—ฌ ๊ต์ •ํ•˜๋Š” ๊ฒ€์ฆ ๋…ธ๋“œ [10, 11]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์ฃผ์š” ๋„๊ตฌ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ตฌ์กฐ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์ฃผ์š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฆฌ๋“œ๋ฏธ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow JSON - ComfyUI]] + - ์—ฐ๊ฒฐ ์ด์œ : ์˜์กด์„ฑ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ‘œ์ค€. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `class_type` ํ•„๋“œ์˜ ์ค‘์š”์„ฑ. +- [[API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์ˆ˜ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์—์„œ์˜ ์˜์กด์„ฑ ์ •์˜ ๋ฐฉ์‹. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹ค์งˆ์ ์ธ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐ ์ž๋™ ์„ค์น˜ ๋„๊ตฌ. +- [[object_info.json]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋“  ๋…ธ๋“œ ์˜์กด์„ฑ ๋ฐ ์Šคํ‚ค๋งˆ์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์†Œ์Šค. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI Manager๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋™์ผํ•œ `class_type`์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ•˜๋Š”๊ฐ€? [์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.] +- SHA-256 ๋ชจ๋ธ ํ•ด์‹ฑ์ด ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [12] +- LLM ๊ธฐ๋ฐ˜ `NodeValidator`๊ฐ€ ์˜ค์ธ์‹(Hallucination) ์—†์ด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ •ํ™•ํžˆ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™” ์ „๋žต์€? [10, 20] +- `object_info`๋ฅผ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ํ˜ธ์ถœํ•  ๋•Œ ๋ณด์•ˆ ์ธ์ฆ์ด ์˜์กด์„ฑ ์ •๋ณด ๋…ธ์ถœ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€? [24] +- ์˜์กด์„ฑ ๊ฐ์ง€๋ฅผ ์œ„ํ•œ 'Marker Node'๊ฐ€ JSON ๊ตฌ์กฐ ๋‚ด์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€์ค‘์น˜๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? [9] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ์‹œ `INPUT_TYPES`๋ฅผ ์ •ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ `object_info.json`์— ๋ฐ˜์˜๋˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ [25]. +- **System Design:** ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ, ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ๋กœ ์ธํ•œ ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ComfyUI Manager ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•จ [1]. +- **Operation / Maintenance:** ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ ์„ค์น˜ ํ›„์—๋Š” `UpdateNodeCatalog`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์˜์กด์„ฑ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ํ•จ [17]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ชจ๋ธ ํŒŒ์ผ ๊ด€๋ฆฌ์˜ ์ผ๊ด€์„ฑ ๋ณด์žฅ ๊ธฐ์ˆ . +- [[Retrieval-Augmented Generation (RAG) for Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฏธ๋ž˜์˜ ๋™์  ์˜์กด์„ฑ ํƒ์ƒ‰ ๊ธฐ์ˆ  [26]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [27] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Custom Node Registry.md b/10_Wiki/Comfyui/Custom Node Registry.md new file mode 100644 index 00000000..29b50533 --- /dev/null +++ b/10_Wiki/Comfyui/Custom Node Registry.md @@ -0,0 +1,103 @@ +--- +id: custom-node-registry +title: "Custom Node Registry" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Node Catalog", "Node Schema Registry"] +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/models/LLM/", "ComfyUI/custom_nodes/ComfyUI-WorkflowGenerator", "/object_info endpoint", "/workflow/convert endpoint"] +github_commit: "" +--- + +# [[Custom Node Registry]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Custom Node Registry๋Š” ComfyUI์˜ ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ์„ ์ง€ํƒฑํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, JSON ์›Œํฌํ”Œ๋กœ์˜ ์ถ”์ƒํ™”๋œ ๋…ธ๋“œ ํƒ€์ž…์„ ์‹ค์ œ Python ์‹คํ–‰ ๋กœ์ง ๋ฐ ์Šคํ‚ค๋งˆ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๊ถŒ์œ„ ์žˆ๋Š” ์›์ฒœ์ด๋‹ค. [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Node Mapping (class_type):** ์›Œํฌํ”Œ๋กœ JSON ๋‚ด์˜ `type` ๋˜๋Š” `class_type` ๋ฌธ์ž์—ด์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์„ค์น˜๋œ ์‹ค์ œ Python ํด๋ž˜์Šค ๊ธฐ๋Šฅ๊ณผ ๋งคํ•‘ํ•œ๋‹ค. [2, 4, 5] +- **Schema Discovery (object_info):** ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์—์„œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์œ ํ˜•, ํ•„์ˆ˜ ์—ฌ๋ถ€, ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ๋™์ ์œผ๋กœ ์นดํƒˆ๋กœ๊ทธํ™”ํ•˜์—ฌ ์ œ๊ณตํ•œ๋‹ค. [3, 6] +- **Dependency Tracking:** ์™ธ๋ถ€์—์„œ ์œ ์ž…๋œ JSON ์›Œํฌํ”Œ๋กœ๋ฅผ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. [7, 8] +- **Semantic Validation:** ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ์‹œ, ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์ด ์‹ค์ œ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ณ  ๊ต์ •ํ•˜๋Š” ๊ธฐ์ค€์ ์ด ๋œ๋‹ค. [9-11] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Scan-and-Catalog ํŒจํ„ด:** ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•œ ํ›„ `UpdateNodeCatalog` ๋…ธ๋“œ ๋“ฑ์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ์ปฌ ๋…ธ๋“œ ํ™˜๊ฒฝ์„ ์ตœ์‹ ํ™”ํ•˜๊ณ  ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. [11-13] +- **Runtime Resolution ํŒจํ„ด:** ๋ฐฑ์—”๋“œ ์—”์ง„์€ ์‹คํ–‰ ์‹œ์ ์— JSON์˜ `class_type`์„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ฐพ์•„ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋ฉฐ, ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ API ํฌ๋งท์—์„œ ์ด ๋งคํ•‘์ด ํŠนํžˆ ์ค‘์š”ํ•˜๋‹ค. [2, 5, 14] +- **Schema Inversion ํŒจํ„ด:** `/object_info` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์™ธ๋ถ€๋กœ ๋…ธ์ถœํ•จ์œผ๋กœ์จ, ์™ธ๋ถ€ ์•ฑ์ด ComfyUI ๋‚ด๋ถ€ ๋กœ์ง์„ ๋ชจ๋ฅด๋”๋ผ๋„ ๋…ธ๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. [3, 15] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Custom Node Registry๋Š” ComfyUI ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ๋ฐ ์ง๋ ฌํ™”์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃฌ๋‹ค. ์›Œํฌํ”Œ๋กœ๊ฐ€ JSON์œผ๋กœ ์ €์žฅ๋  ๋•Œ, ๊ฐ ๋…ธ๋“œ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋œ ๊ณ ์œ ํ•œ **class_type**์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹๋ณ„๋œ๋‹ค. [2, 4] ์ด๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ์  ID์™€๋Š” ๋ณ„๊ฐœ์˜ ๊ธฐ๋Šฅ์  ํ‚ค ๊ฐ’์ด๋‹ค. [2, 16] + +**์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์—ญํ• :** +1. **์Šคํ‚ค๋งˆ ์ •์˜ (object_info.json):** ์ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ์š”๊ตฌํ•˜๋Š” `required` ๋ฐ `optional` ์ž…๋ ฅ๊ฐ’, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๋„๊ตฌ ์„ค๋ช…(tooltips) ๋“ฑ์„ ์ƒ์„ธํžˆ ํฌํ•จํ•œ๋‹ค. [3] ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ํ™œ์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜๊ฑฐ๋‚˜ ๋™์ ์œผ๋กœ ์›Œํฌํ”Œ๋กœ ์ˆ˜์ • ๋„๊ตฌ๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. [3, 15, 17] +2. **์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐ ๊ด€๋ฆฌ:** ComfyUI Manager๋Š” ์™ธ๋ถ€์—์„œ ๋กœ๋“œ๋œ JSON์˜ ๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๊ต์ฐจ ๊ฒ€์ฆํ•œ๋‹ค. [7] ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†์„ ๊ฒฝ์šฐ "Missing Custom Node" ์—๋Ÿฌ(๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋™ ์„ค์น˜๋ฅผ ์ง€์›ํ•œ๋‹ค. [7, 18] +3. **API ๋ณ€ํ™˜ ๋ฐ ๊ฒ€์ฆ:** `Workflow to API Converter`์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์ •ํ™•ํ•œ ๋ณ€ํ™˜์„ ์œ„ํ•ด ComfyUI์˜ ์‹ค์ œ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ ์œ„์ ฏ, ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. [19] +4. **LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ์˜ ์ค€๊ฑฐ ์ง‘๋‹จ:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ์›Œํฌํ”Œ๋กœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ(`ComfyUI-WorkflowGenerator`)์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™์Šต๋˜๊ฑฐ๋‚˜, ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€์˜ ์‹œ๋งจํ‹ฑ ๋งค์นญ์„ ํ†ตํ•ด ์œ ํšจํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. [9, 10, 20] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •์  ๋ชจ๋ธ๊ณผ ๋™์  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ฐ„๊ทน:** ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต๋œ LLM ๋ชจ๋ธ์€ ํ•™์Šต ์‹œ์  ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์‹œ๊ฐ„ ์นดํƒˆ๋กœ๊ทธ ์Šค์บ”์ด ํ•„์ˆ˜์ ์ด๋‹ค. [21-23] +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋‚ด์˜ ํด๋ž˜์Šค ์ด๋ฆ„์ด๋‚˜ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ณผ๊ฑฐ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. [24] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **UpdateNodeCatalog:** ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์น˜ํ•œ ๋ชจ๋“  ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๋กœ์ปฌ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. [11, 12] +- **ComfyUI Manager:** JSON ๋‚ด์˜ `class_type`์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—†๋Š” ํŒจํ‚ค์ง€๋ฅผ ํƒ์ง€ํ•˜๊ณ  ์„ค์น˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. [7, 8] +- **Workflow to API Converter Endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก JS ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•ด ๋น„-API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. [19, 25] +- **object_info ์—”๋“œํฌ์ธํŠธ:** `/object_info` ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ธ์Šคํ„ด์Šค์˜ ์ „์ฒด ๋…ธ๋“œ ์Šคํ‚ค๋งˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ฐฐํฌํ•œ๋‹ค. [15] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ ๋‚ด ์—”๋“œํฌ์ธํŠธ ํ˜•ํƒœ๋กœ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ) [7, 15, 19] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository README / API Docs ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—†์ด ์˜ค์ง ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ธฐ๋Šฅ์  ํ‚ค์—๋งŒ ์˜์กดํ•˜์—ฌ ์‹คํ–‰๋œ๋‹ค. [2, 26] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฑ์—”๋“œ ์‹คํ–‰ ๋กœ์ง์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉ์‹. [2, 5] +- [[JSON Schema v1.0]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ •์˜๋œ ๋…ธ๋“œ ๊ฐ์ฒด๋“ค์ด ์ค€์ˆ˜ํ•ด์•ผ ํ•  ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค. [4] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ID, ํƒ€์ž…, ์œ„์ ฏ ๊ฐ’ ๋“ฑ์˜ ๊ธฐ์ˆ ์  ์‚ฌ์–‘. [4, 27] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ๋„๊ตฌ์ด๋‹ค. [7, 18] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ์„ค์น˜ ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค. [7, 28] +- [[ComfyUI-WorkflowGenerator]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ž์—ฐ์–ด๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ์œ ํšจํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•œ๋‹ค. [10, 29] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•œ AI ๊ธฐ๋ฐ˜ ์ž๋™ํ™” ๋ฐฉ๋ฒ•๋ก . [9, 20, 30] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์„œ๋กœ ๋‹ค๋ฅธ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€ ๊ฐ„์— ํด๋ž˜์Šค ์ด๋ฆ„(`class_type`)์ด ์ถฉ๋Œํ•  ๊ฒฝ์šฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์–ด๋–ค ์šฐ์„ ์ˆœ์œ„๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? +- ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ๋™์  ์นดํƒˆ๋กœ๊ทธ ์Šค์บ”(`UpdateNodeCatalog`)์ด ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๋ฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? +- `object_info.json`์˜ ์Šคํ‚ค๋งˆ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ComfyUI ๋…ธ๋“œ UI๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? +- ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(ํ•„๋“œ ์ถ”๊ฐ€/์‚ญ์ œ)์ด ๊ธฐ์กด์— ์ง๋ ฌํ™”๋œ JSON ์›Œํฌํ”Œ๋กœ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ๊ทธ ๋Œ€์‘ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? +- `.cpack.zip`๊ณผ ๊ฐ™์€ ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง• ๋ฐฉ์‹์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์˜๊ตฌ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? [31] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ `/object_info`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์ด ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ทœ๊ฒฉ์— ๋งž๋Š”์ง€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์ฆ‰์‹œ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. [3, 15] +- **System Design:** Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ๋…ธ๋“œ ID ๋Œ€์‹  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ํƒ€์ดํ‹€์ด๋‚˜ ํด๋ž˜์Šค ๋ช…์„ ์ฐธ์กฐํ•˜๋Š” ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. [32] +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ ๊ณต์œ  ์‹œ `Workflow to API Converter (Marker)` ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํƒ€์ธ์ด๋‚˜ ๋งค๋‹ˆ์ €๊ฐ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๋„๋ก ๋•๋Š”๋‹ค. [8] +- **Learning Path:** ๋…ธ๋“œ ๋ฉ”๋‰ด์–ผ์„ ์ฝ๋Š” ๋Œ€์‹  `object_info` ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ž…๋ ฅ ์กฐํ•ฉ๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ธฐ์ˆ ์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. [3] + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์ „์ฒด ๋…ธ๋“œ ์ค‘ ์ตœ์ข… ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ์›๋ฆฌ. [33] +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋…ธ๋“œ ์ •์˜ ์™ธ์—๋„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋ธ ํŒŒ์ผ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ธฐ์ˆ . [34] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [Source 26, 28, 37, 41, 133, 151 ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Custom Nodes.md b/10_Wiki/Comfyui/Custom Nodes.md new file mode 100644 index 00000000..9a374fbf --- /dev/null +++ b/10_Wiki/Comfyui/Custom Nodes.md @@ -0,0 +1,99 @@ +--- +id: custom-nodes +title: "Custom Nodes" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์ปค์Šคํ…€ ๋…ธ๋“œ", "ํ™•์žฅ ๋…ธ๋“œ"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes", "GitHub: DanielPFlorian/ComfyUI-WorkflowGenerator", "GitHub: SethRobinson/comfyui-workflow-to-api-converter-endpoint", "GitHub: pydn/ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[Custom Nodes]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ComfyUI์˜ ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฌดํ•œํžˆ ํ™•์žฅํ•˜๋Š” ํ•ต์‹ฌ ๋™๋ ฅ์ด์ง€๋งŒ, ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์ด์‹์„ฑ๊ณผ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ๊ฐ€์žฅ ํฐ ์ข…์†์„ฑ ๋ณ€์ˆ˜์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ƒํƒœ๊ณ„ ํ™•์žฅ์„ฑ (Ecosystem Extensibility):** ๊ธฐ๋ณธ ๋…ธ๋“œ ์„ธํŠธ(Core nodes) ์™ธ์— ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ Stable Diffusion๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„๋””์˜ค, ์˜ค๋””์˜ค, 3D ์ƒ์„ฑ ๋“ฑ ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฏธ๋””์–ด ์ž์‚ฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [2, 3]. +- **ํด๋ž˜์Šค ํƒ€์ž… ๋งคํ•‘ (Class_type Mapping):** JSON ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ๋‚ด์—์„œ ๊ฐ ๋…ธ๋“œ๋Š” `class_type` ์†์„ฑ์„ ํ†ตํ•ด ์‹๋ณ„๋˜๋ฉฐ, ์‹คํ–‰ ์‹œ ๋กœ์ปฌ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐ๋œ๋‹ค [4, 5]. +- **์ข…์†์„ฑ ๊ด€๋ฆฌ (Dependency Management):** ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ํ•ด๋‹น ์‹œ์Šคํ…œ์— ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด 'Red Boxes' ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ComfyUI Manager์™€ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค [5, 6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ˆ„๋ฝ ๋…ธ๋“œ ๋ณต๊ตฌ ํŒจํ„ด:** ์™ธ๋ถ€ JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” 'Red Boxes'๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ComfyUI Manager๋ฅผ ํ†ตํ•ด "Install Missing Custom Nodes"๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๋ณต๊ตฌ ํ๋ฆ„์ด ์ •ํ˜•ํ™”๋˜์–ด ์žˆ๋‹ค [5, 6]. +- **๋งˆ์ปค ๋…ธ๋“œ ํ™œ์šฉ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ComfyUI Manager๊ฐ€ ์ข…์†์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก "Workflow to API Converter (Marker)"์™€ ๊ฐ™์€ ํŠน์ • ๋งˆ์ปค ๋…ธ๋“œ๋ฅผ ์˜๋„์ ์œผ๋กœ ํฌํ•จ์‹œํ‚จ๋‹ค [7]. +- **LLM ๊ธฐ๋ฐ˜ ์ž๋™ ๊ฒ€์ƒ‰ ํŒจํ„ด:** `Update Node Catalog` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์„ค์น˜๋œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ณ , ์ด๋ฅผ LLM์ด ์ž์—ฐ์–ด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ™œ์šฉํ•œ๋‹ค [8, 9]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ComfyUI์˜ `custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋˜๋ฉฐ, ์ฃผ๋กœ Git ํด๋ก ์„ ํ†ตํ•ด ์ถ”๊ฐ€๋œ๋‹ค [10, 11]. ์›Œํฌํ”Œ๋กœ์šฐ JSON ์ƒ์„ฑ ์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋œ๋‹ค. + +- **JSON ๋‚ด ๊ธฐ๋ก:** ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ €์žฅ๋  ๋•Œ ๊ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์„ค์ •, ์œ„์ ฏ ๊ฐ’, ์—ฐ๊ฒฐ ๊ด€๊ณ„๊ฐ€ JSON์˜ `nodes` ๋ฐฐ์—ด์— ํฌํ•จ๋œ๋‹ค [12, 13]. API ํฌ๋งท์ธ ๊ฒฝ์šฐ ๋น„์ฃผ์–ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ `class_type`๊ณผ `inputs` ์ •๋ณด๋งŒ ๋‚จ๋Š”๋‹ค [4, 14]. +- **์ฃผ์š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜ˆ์‹œ:** + - **ComfyUI-Manager:** ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ ์„ค์น˜/๊ด€๋ฆฌ์˜ ์ค‘์ถ” [10]. + - **Efficiency Nodes:** ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•จ [15, 16]. + - **AnimateDiff Evolved & VideoHelperSuite:** ๋น„๋””์˜ค ์ƒ์„ฑ์„ ์œ„ํ•œ ํ•„์ˆ˜ ํ™•์žฅ [15, 16]. + - **IPAdapter Plus & ControlNet Aux:** ์ •๋ฐ€ํ•œ ์ด๋ฏธ์ง€ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋…ธ๋“œ๊ตฐ [16, 17]. +- **๊ฐœ๋ฐœ์ž ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ:** `Comfy Nodekit`๊ณผ ๊ฐ™์€ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์„œ๋ฒ„์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค [18]. ๋˜ํ•œ `ComfyUI-to-Python-Extension`์€ ์ด๋Ÿฌํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœ์ˆ˜ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค [19]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ, ๊ณผ๊ฑฐ์— ์ƒ์„ฑ๋œ JSON ํŒŒ์ผ ๋‚ด์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ตฌ์„ฑ์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ์™€ ์ถฉ๋Œํ•˜์—ฌ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [20, 21]. +- **๋ฐ์ดํ„ฐ ์ฆ๋ฐœ ์œ„ํ—˜:** ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(JSON)๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์–ด ์ „์šฉ ์ถ”์ถœ ๋„๊ตฌ ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋œ๋‹ค [22, 23]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **์„ค์น˜ ์œ„์น˜:** `ComfyUI/custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— ๊ฐ ๋…ธ๋“œ ํŒจํ‚ค์ง€๊ฐ€ ๋ฐฐ์น˜๋จ [10, 11]. +- **GitHub ํ”„๋กœ์ ํŠธ:** + - `DanielPFlorian/ComfyUI-WorkflowGenerator`: LLM์„ ํ†ตํ•ด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๋…ธ๋“œ ๊ตฌํ˜„ [24, 25]. + - `SethRobinson/comfyui-workflow-to-api-converter-endpoint`: (์ปค๋ฐ‹ `bc85382`) ๋น„ API ํฌ๋งท์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋กœ์ง ๊ตฌํ˜„ [26, 27]. +- **์˜์‚ฌ๊ฒฐ์ • ๊ธฐ๋ก:** ComfyUI Manager์˜ "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์€ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ถ€์žฌ๋กœ ์ธํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์‹คํŒจ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‘œ์ค€ ์šด์˜ ์ ˆ์ฐจ(SOP)๋กœ ํ™•๋ฆฝ๋จ [5, 6]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋‹ค์ˆ˜์˜ GitHub ํ”„๋กœ์ ํŠธ ๋ฐ ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ์‹ค๋ฌด ์ ์šฉ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์ฃผ์š” ๊ฐœ๋ฐœ์ž ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” JSON ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๋™์ ์ธ ์š”์†Œ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด `class_type`์ด ์–ด๋–ป๊ฒŒ ์‹ค์ œ ๊ธฐ๋Šฅ์œผ๋กœ ๋งคํ•‘๋˜๋Š”์ง€ ์ดํ•ด ๊ฐ€๋Šฅ. +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์‹คํ–‰ ์‹œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ž…์ถœ๋ ฅ ๊ตฌ์กฐ๊ฐ€ ์ด ํฌ๋งท์— ๋งž์ถฐ ์ตœ์ ํ™”๋จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ์—†๋Š” ํ™˜๊ฒฝ์—์„œ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ํ˜ธ์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +#### [๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์„ค์น˜, ์—…๋ฐ์ดํŠธ, ๋ˆ„๋ฝ ๋ณต๊ตฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ „์šฉ ๋„๊ตฌ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ `class_type`์ด ์ค‘๋ณต๋  ๊ฒฝ์šฐ ComfyUI๋Š” ์–ด๋–ค ์šฐ์„ ์ˆœ์œ„๋กœ ๋…ธ๋“œ๋ฅผ ๋กœ๋“œํ•˜๋Š”๊ฐ€? +- `Update Node Catalog` ๋…ธ๋“œ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋กœ์ปฌ์— ์„ค์น˜๋˜์ง€ ์•Š์€ ์›๊ฒฉ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [9] +- ์ปค์Šคํ…€ ๋…ธ๋“œ ๋‚ด์—์„œ ์ •์˜๋œ `INPUT_TYPES`๊ฐ€ JSON Schema v1.0 ๊ทœ๊ฒฉ๊ณผ ์ถฉ๋Œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [28] +- `comfy-pack`๊ณผ ๊ฐ™์€ ๋„๊ตฌ์—์„œ ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ์‚ฌ์šฉํ•  ๋•Œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋‚ด๋ถ€์˜ ๋ชจ๋ธ ๊ฒฝ๋กœ ์˜์กด์„ฑ์€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ๋˜๋Š”๊ฐ€? [29] +- LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ์—์„œ ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋Š” ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ธ์‹์‹œํ‚ค๊ธฐ ์œ„ํ•œ RAG(Retrieval-Augmented Generation) ์ ์šฉ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? [30] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ `ComfyUI/custom_nodes`์— Python ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ JSON์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋“ฑ๋กํ•จ [3, 10]. +- **System Design:** API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•จ [31]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ "Red Box" ๋ฐœ์ƒ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ชฉ๋ก์„ ๋ณ„๋„๋กœ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๋งˆ์ปค ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•จ [6, 7]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ™์ง€ ํ›„, `Efficiency Nodes`๋‚˜ `Manager` ์„ค์น˜๋ฅผ ํ†ตํ•ด ๊ณ ๊ธ‰ ์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„ ๋‹จ๊ณ„๋กœ ์ง„์ž…ํ•จ [15, 32]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ • ๋ชจ๋ธ ํŒŒ์ผ์˜ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ณด์™„ ๊ธฐ์ˆ  [29]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source identifiers: [1, 3, 5, 6, 10, 19, 25, 26]) \ No newline at end of file diff --git a/10_Wiki/Comfyui/Directed Acyclic Graph (DAG).md b/10_Wiki/Comfyui/Directed Acyclic Graph (DAG).md new file mode 100644 index 00000000..798afeea --- /dev/null +++ b/10_Wiki/Comfyui/Directed Acyclic Graph (DAG).md @@ -0,0 +1,95 @@ +--- +id: directed-acyclic-graph-(dag) +title: "Directed Acyclic Graph (DAG)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„", "์‹คํ–‰ ๊ทธ๋ž˜ํ”„"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["workflow_api.json", "Execution Model Inversion", "WorkflowExecutor", "validate_prompt"] +github_commit: "bc85382, 82df278" +--- + +# [[Directed Acyclic Graph (DAG)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์•„ํ‚คํ…์ฒ˜๋Š” ๋…ธ๋“œ์™€ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •์˜ํ•˜๋ฉฐ, ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ€์ง„ **Directed Acyclic Graph(DAG)** ๊ตฌ์กฐ๋ฅผ ํ•ต์‹ฌ ์‹คํ–‰ ๋ชจ๋ธ๋กœ ์ฑ„ํƒํ•œ๋‹ค [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Node-based Connectivity:** ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด์ธ ๋…ธ๋“œ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋„คํŠธ์›Œํฌ(๊ทธ๋ž˜ํ”„)๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ๋ชจ๋ธ ๋กœ๋”, ์ƒ˜ํ”Œ๋Ÿฌ, ์ธ์ฝ”๋” ๋“ฑ์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [1-3]. +- **Directional Data Flow:** ๋ฐ์ดํ„ฐ๋Š” ๋งํฌ๋ฅผ ํ†ตํ•ด ํ•œ ๋…ธ๋“œ์˜ ์ถœ๋ ฅ ์Šฌ๋กฏ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ์ž…๋ ฅ ์Šฌ๋กฏ์œผ๋กœ ์ •ํ•ด์ง„ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ํ๋ฅธ๋‹ค [1, 4]. +- **Acyclicity (๋น„์ˆœํ™˜์„ฑ):** ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ๊ฒฝ๋กœ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค์ง€ ์•Š๋Š” ๋น„์ˆœํ™˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ ์‹คํ–‰์˜ ์‹œ์ž‘๊ณผ ๋์ด ๋ช…ํ™•ํ•˜๋‹ค [1]. +- **Serialization:** ๋ณต์žกํ•œ DAG ๋„คํŠธ์›Œํฌ๋Š” JSON ํ˜•์‹์œผ๋กœ ์ง๋ ฌํ™”๋˜์–ด ์ด์‹์„ฑ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [1]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Execution Model Inversion (์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „):** ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , 'Save Image'์™€ ๊ฐ™์€ ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ถ”์ , ํ•„์š”ํ•œ ์ข…์†์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ํŒจํ„ด์ด๋‹ค [5]. +- **Bifurcation of Formats (ํ˜•์‹์˜ ์ด๋ถ„ํ™”):** ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ์„ ํฌํ•จํ•˜๋Š” **Frontend Format**๊ณผ ์ˆœ์ˆ˜ ์‹คํ–‰ ๋…ผ๋ฆฌ(DAG)๋งŒ์„ ๋‚จ๊ธด **Backend/API Format**์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค [6, 7]. +- **Slot-based Indexing:** ์—ฐ๊ฒฐ์€ ๋‹จ์ˆœํžˆ ๋…ธ๋“œ ๊ฐ„์˜ ๊ฒฐํ•ฉ์ด ์•„๋‹ˆ๋ผ, ํŠน์ • ์ถœ๋ ฅ ์Šฌ๋กฏ(์˜ˆ: VAE Loader์˜ VAE ์Šฌ๋กฏ)์—์„œ ํŠน์ • ์ž…๋ ฅ ์Šฌ๋กฏ์œผ๋กœ ์ •๋ฐ€ํ•˜๊ฒŒ ๋งคํ•‘๋˜๋Š” ์ธ๋ฑ์‹ฑ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค [4]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์Šคํ…Œ์ด๋ธ” ๋””ํ“จ์ „๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์ƒ์„ฑํ˜• AI ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ถ”์ƒํ™”ํ•˜๊ธฐ ์œ„ํ•ด DAG๋ฅผ ํ™œ์šฉํ•œ๋‹ค [1]. ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๊ฐ€ DAG์™€ ๋™์˜์–ด๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋Š” 3D ํ”„๋กœ๊ทธ๋žจ์˜ '์”ฌ ๊ทธ๋ž˜ํ”„'๋‚˜ ์˜์ƒ ํŽธ์ง‘ ํ”„๋กœ๊ทธ๋žจ์˜ 'ํ”„๋กœ์ ํŠธ ํŒŒ์ผ'๊ณผ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [8]. + +๊ทธ๋ž˜ํ”„์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์€ **JSON Schema v1.0** ๊ทœ๊ฒฉ์— ์˜ํ•ด ๊ฒ€์ฆ๋œ๋‹ค [9]. ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ  ID, ํด๋ž˜์Šค ํƒ€์ž…(type), ๊ทธ๋ฆฌ๊ณ  ์œ„์ ฏ ๊ฐ’์„ ํฌํ•จํ•˜๋ฉฐ, `inputs` ๋ฐฐ์—ด์€ ์œ ์ž…๋˜๋Š” ๋งํฌ์˜ ID๋ฅผ ๊ธฐ๋กํ•˜๊ณ  `outputs` ๋ฐฐ์—ด์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ํ•˜์œ„ ๋…ธ๋“œ๋“ค์˜ ๋งํฌ ID ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•œ๋‹ค [4, 9]. API ํ˜•์‹์˜ JSON์—์„œ๋Š” ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ , ๋งํฌ๊ฐ€ ๋ณ„๋„์˜ ๋ฐฐ์—ด ๋Œ€์‹  ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [6, 10]. + +์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ์—”์ง„์€ DAG์˜ ํŠน์„ฑ์„ ์ด์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ๋ฐฐ์ œํ•œ๋‹ค. ์ตœ์ข… ์ถœ๋ ฅ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋“ค์ด ๊ทธ๋ž˜ํ”„์— ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„, ์—ญ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰(Backward Traversal)์„ ํ†ตํ•ด ์ด๋ฅผ ๋ฌด์‹œํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [5]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฐ์ดํ„ฐ ๋ณด์กด์˜ ์ทจ์•ฝ์„ฑ:** DAG ๊ตฌ์กฐ๋ฅผ PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์–ด ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๊ฐ€ ํŒŒ๊ดด๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ฃผ์˜์‚ฌํ•ญ์œผ๋กœ ์–ธ๊ธ‰๋œ๋‹ค [11]. +- **ํ˜•์‹ ๊ฐ„์˜ ๋ถˆ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ:** API ํ˜•์‹์œผ๋กœ ์ €์žฅ๋œ ๊ทธ๋ž˜ํ”„(DAG ์ตœ์ ํ™”๋ณธ)๋ฅผ ๋‹ค์‹œ UI๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ, ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๊ฐ€ ์—†์–ด ๋…ธ๋“œ๋“ค์ด ๊ฒน์น˜๊ฑฐ๋‚˜ ๋ผˆ๋Œ€๋งŒ ๋‚จ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [12]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **workflow_api.json:** ์‹œ๊ฐ์  ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์ˆ˜ DAG ํ˜•ํƒœ์˜ ์‹คํ–‰ ํŒŒ์ผ ํ˜•์‹์œผ๋กœ, ์„œ๋ฒ„ ์ธก ์ฒ˜๋ฆฌ ๋ฐ API ํ˜ธ์ถœ์— ์ตœ์ ํ™”๋˜์–ด ์ ์šฉ๋จ [6, 13]. +- **Execution Model Inversion:** ComfyUI ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋…ธ๋“œ ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํšจ์œจ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ ์šฉ๋จ [5, 14]. +- **WorkflowExecutor ํด๋ž˜์Šค:** Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ฐ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ง์— ์ ์šฉ๋จ [15]. +- **validate_prompt ํ•จ์ˆ˜:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „ DAG์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ํ™œ์šฉ๋จ [15]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (ComfyUI ๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ ์ž๋ฃŒ ๊ธฐ๋ฐ˜) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Technical Architectures via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : DAG ๊ตฌ์กฐ๋ฅผ ์ง€์† ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ์ง๋ ฌํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +#### [์‹ค๋ฌด ๊ตฌํ˜„ ๋„๊ตฌ] +- [[API Format (workflow_api.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : DAG์˜ ์‹คํ–‰ ๋…ผ๋ฆฌ๋งŒ์ด ์ •์ œ๋œ ์ตœ์ข… ๋ฐ์ดํ„ฐ ํฌ๋งท. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์˜ ์ฐจ์ด์ . +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : DAG ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์—”์ง„์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐ ์ตœ์ ํ™” ์›๋ฆฌ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- DAG ๊ตฌ์กฐ ๋‚ด์—์„œ ์˜๋„์ ์ธ ์ˆœํ™˜(Looping)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ(์˜ˆ: ๋ฐ˜๋ณต ๊ฐœ์„ ) ComfyUI๋Š” ์ด๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? +- Execution Model Inversion์ด ์ค‘์ฒฉ๋œ [[Subgraph]] ๊ตฌ์กฐ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ, ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์˜ ๊นŠ์ด ์ œํ•œ์ด๋‚˜ ์šฐ์„ ์ˆœ์œ„๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”๊ฐ€? [16, 17] +- ๋…ธ๋“œ ID๊ฐ€ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ์œ ์‹ค๋œ ์†์ƒ๋œ DAG ๊ตฌ์กฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์ „๋žต์ด ์†Œ์Šค ๋ฐ์ดํ„ฐ์— ์กด์žฌํ•˜๋Š”๊ฐ€? +- LLM ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ([[ComfyUI-WorkflowGenerator]])๋Š” DAG์˜ ๋…ผ๋ฆฌ์  ํƒ€๋‹น์„ฑ์„ ์–ด๋–ค ์˜๋ฏธ๋ก ์  ๊ฒ€์ฆ ๊ณผ์ •์„ ํ†ตํ•ด ํ™•๋ณดํ•˜๋Š”๊ฐ€? [18] +- `object_info.json`์— ์ •์˜๋œ ์Šคํ‚ค๋งˆ๊ฐ€ DAG์˜ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ์„ฑ์„ ์ œํ•œํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘์šฉํ•˜๋Š”๊ฐ€? [19] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API JSON์˜ ๋…ธ๋“œ ID๋ฅผ ์ถ”์ ํ•˜๊ณ  `inputs` ๊ฐ’์„ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [20, 21]. +- **System Design:** ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ(Mystic, Replicate ๋“ฑ)์— ๋ฐฐํฌํ•  ๋•Œ, DAG ๊ตฌ์กฐ์—์„œ ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ API ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ†ต์‹  ํšจ์œจ์„ฑ์ด ๋†’์•„์ง„๋‹ค [22, 23]. +- **Operation / Maintenance:** 'Red Nodes'(๋ˆ„๋ฝ๋œ ๋…ธ๋“œ) ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ, DAG ์Šคํ‚ค๋งˆ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค [24]. +- **Learning Path:** ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ๊ฑฐ๊พธ๋กœ ์ž…๋ ฅ์„ ์ฐพ์•„๊ฐ€๋Š” ์—ญ๋ฐฉํ–ฅ ์ถ”์  ๋ฐฉ์‹์„ ์ตํžˆ๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค [5]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Litegraph]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ComfyUI ํ”„๋ก ํŠธ์—”๋“œ์—์„œ DAG๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ ํฌ๋งท ์—ฐ๊ตฌ. [6, 25] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Execution Model Inversion.md b/10_Wiki/Comfyui/Execution Model Inversion.md new file mode 100644 index 00000000..5e04bb1c --- /dev/null +++ b/10_Wiki/Comfyui/Execution Model Inversion.md @@ -0,0 +1,94 @@ +--- +id: execution-model-inversion +title: "Execution Model Inversion" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์—ญ๋ฐฉํ–ฅ ์‹คํ–‰ ๋ชจ๋ธ", "Output-Driven Traversal"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Architecture"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI Server Documentation"] +github_commit: "" +--- + +# [[Execution Model Inversion]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ์„ ์—ญ์ถ”์ ํ•ด ์‹คํ–‰ํ•จ์œผ๋กœ์จ, ์›Œํฌํ”Œ๋กœ ๋‚ด ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ๊ฐ€ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์™„์ „ํžˆ ๋ฐฐ์ œํ•˜๋Š” ComfyUI์˜ ์ตœ์ ํ™” ์•„ํ‚คํ…์ฒ˜ [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ถœ๋ ฅ ๊ธฐ๋ฐ˜ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ (Output-Driven Traversal):** ์‹คํ–‰ ์—”์ง„์ด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹ , 'Save Image'์™€ ๊ฐ™์€ ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฑฐ๊พธ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•จ [1]. +- **์˜์กด์„ฑ ์ž๋™ ์‹๋ณ„ (Dependency Identification):** ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์— ๊ธฐ์—ฌํ•˜๋Š” ๋…ธ๋“œ๋“ค๋งŒ ์‹คํ–‰ ๋ชฉ๋ก(Execution List)์— ํฌํ•จ์‹œํ‚ค๊ณ , ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋”๋ผ๋„ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ๋ฌด์‹œํ•จ [1, 2]. +- **์„ฑ๋Šฅ ๊ฒฉ๋ฆฌ (Performance Isolation):** ์ƒ์„ฑ๋œ JSON ๋‚ด์— ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ฏธ์‚ฌ์šฉ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ๋ฐฑ์—”๋“œ์—์„œ ์ด๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹คํ–‰ ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š์Œ [1]. +- **DAG(์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„) ๊ธฐ๋ฐ˜ ๋…ผ๋ฆฌ:** ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๊ณ  ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์ธ ์—ญ์ถ”์ ์„ ๊ฐ€๋Šฅ์ผ€ ํ•จ [1, 3]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์˜์กด์„ฑ ์ฒด์ธ ๊ฒ€์ฆ ํŒจํ„ด:** `WorkflowExecutor`๊ฐ€ `validate_prompt` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ด๋ฅผ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ [2]. +- **๊ฒฐ๊ณผ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ํ๋ฆ„:** ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋ธ ๋กœ๋”์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ƒ˜ํ”Œ๋Ÿฌ๋ฅผ ๊ฑฐ์ณ ์ถœ๋ ฅ์œผ๋กœ ํ๋ฅด์ง€๋งŒ, ์‹คํ–‰ ์ œ์–ด๋Š” ๊ทธ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ธ ์ถœ๋ ฅ์—์„œ ์‹œ์ž‘๋จ [1, 3]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Execution Model Inversion์€ ComfyUI์˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฐ€์žฅ ์ •๊ตํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ œ์ด๋‹ค [1]. + +- **์ž‘๋™ ์›๋ฆฌ:** ์—”์ง„์€ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค [1]. ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ตœ์ข… ์ถœ๋ ฅ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ƒ์œ„ ๋…ธ๋“œ(์˜์กด์„ฑ)๋“ค์„ ๊ณ„์ธต์ ์œผ๋กœ ํŒŒ์•…ํ•œ๋‹ค [1]. +- **JSON ์„ค๊ณ„์™€์˜ ๊ด€๊ณ„:** ์ด ๋ชจ๋ธ ๋•๋ถ„์— ์‚ฌ์šฉ์ž๋Š” ๋ณต์žกํ•˜๊ณ  ํฐ ๊ทœ๋ชจ์˜ ์›Œํฌํ”Œ๋กœ JSON์„ ์ƒ์„ฑํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค [1]. ๋ฐฑ์—”๋“œ ์—”์ง„์€ ์ตœ์ข… ์ถœ๋ ฅ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ง€๋Šฅ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1]. +- **API ํšจ์œจ์„ฑ:** ํŠนํžˆ **API Format(workflow_api.json)**์œผ๋กœ ๋ณ€ํ™˜๋œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ์ด ๋ชจ๋ธ์€ ์ตœ์†Œํ•œ์˜ ํ•„์ˆ˜ ์—ฐ์‚ฐ๋งŒ์„ ๋ณด์žฅํ•˜์—ฌ ์„œ๋ฒ„ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [1, 4]. +- **์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ์˜ ์—ฐ๊ณ„:** `ExecutionCache`์™€ ๊ฒฐํ•ฉํ•˜์—ฌ, ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ ์ค‘ ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ์‹คํ–‰์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•จ์œผ๋กœ์จ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [5]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ „์ฒด ์‹คํ–‰ vs ๋ถ€๋ถ„ ์‹คํ–‰:** ์ „ํ†ต์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ ๋ฐฉ์‹์ด ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ComfyUI๋Š” ์ถœ๋ ฅ ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๊ฒฝ๋กœ๋งŒ์„ ์‹คํ–‰ํ•˜๋Š” "Lazy Evaluation"๊ณผ ์œ ์‚ฌํ•œ ํŠน์„ฑ์„ ๋ณด์ธ๋‹ค [1]. +- **JSON์˜ ์œ ์—ฐ์„ฑ:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ ๋‚ด์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ ๋งŽ์•„๋„ ์‹œ์Šคํ…œ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์€ ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์ตœ์ ํ™” ์ƒ์‹(๋ฆฌ์†Œ์Šค ์ตœ์†Œํ™”)๊ณผ๋Š” ๋‹ค๋ฅธ ComfyUI๋งŒ์˜ ์„ค๊ณ„์  ํŠน์ง•์ด๋‹ค [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI Server ๊ณต์‹ ๊ฐ€์ด๋“œ:** ๊ณต์‹ ๋ฌธ์„œ์˜ 'ComfyUI Server' ์„น์…˜ ๋‚ด์— "Execution Model Inversion Guide"๋ผ๋Š” ๋ช…์นญ์˜ ๊ธฐ์ˆ  ๋ฌธ์„œ๋กœ ์ƒ์„ธํžˆ ๋‹ค๋ฃจ์–ด์ง€๊ณ  ์žˆ์Œ [6]. +- **WorkflowExecutor ๊ตฌํ˜„:** ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ `WorkflowExecutor` ํด๋ž˜์Šค๊ฐ€ `validate_prompt`๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์— ์ด ๋…ผ๋ฆฌ๊ฐ€ ๋‚ด์žฌ๋˜์–ด ์žˆ์Œ [2]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๊ฐ€์ด๋“œ๋ผ์ธ ์กด์žฌ ํ™•์ธ [6]) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ๋ถ„์„ ๋ฆฌํฌํŠธ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : Execution Model Inversion์ด ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์  ํ† ๋Œ€์ž„ [3]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ๋งํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋…ผ๋ฆฌ์  ํ๋ฆ„์„ ํ˜•์„ฑํ•˜๋Š”์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ. +- [[ComfyUI Backend Engine]] + - ์—ฐ๊ฒฐ ์ด์œ : ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰๊ณผ ์‹คํ–‰ ๋ชฉ๋ก ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ์ฃผ์ฒด์ž„ [1, 2]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[API Format (workflow_api.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : UI ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ ์‹คํ–‰ ์ค‘์‹ฌ์˜ JSON ํฌ๋งท์œผ๋กœ, ์ด ๋ชจ๋ธ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Œ [1, 4]. +- [[WorkflowExecutor]] + - ์—ฐ๊ฒฐ ์ด์œ : ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ ๋…ผ๋ฆฌ๋ฅผ ์‹ค์ œ ์‹คํ–‰ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ž„ [2]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Execution Model Inversion ํ™˜๊ฒฝ์—์„œ 'Bypass'๋œ ๋…ธ๋“œ๋Š” ์—ญ์ถ”์  ๊ณผ์ •์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? [7] +- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ถœ๋ ฅ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ, ์—”์ง„์€ ๊ฐ ์ถœ๋ ฅ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฐ€? +- `ExecutionCache`๊ฐ€ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ ๊ฒฝ๋กœ์— ์žˆ๋Š” ํŠน์ • ๋…ธ๋“œ์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ž„๊ณ„๊ฐ’์€ ๋ฌด์—‡์ธ๊ฐ€? [5] +- ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฐ•์ œ ์‹คํ–‰(Force Execute)ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์šฐํšŒ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋Š”๊ฐ€? +- ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ๋„๊ตฌ์ธ `ComfyUI-WorkflowGenerator`๋Š” ์ด ์‹คํ–‰ ๋ชจ๋ธ์„ ๊ณ ๋ คํ•˜์—ฌ ๋…ธ๋“œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋Š”๊ฐ€? [8, 9] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ์›Œํฌํ”Œ๋กœ์— ํ…Œ์ŠคํŠธ์šฉ ๋…ธ๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ๋”๋ผ๋„ ์„ฑ๋Šฅ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๋ฉฐ ๋ฐฐํฌ ๊ฐ€๋Šฅ [1]. +- **System Design:** ๋Œ€๊ทœ๋ชจ ์ž๋™ํ™” ๋ฐฐ๋„ˆ ๊ด‘๊ณ  ์‹œ์Šคํ…œ ๋“ฑ์—์„œ ๋‹ค์–‘ํ•œ ๋ณ€์ข… ์›Œํฌํ”Œ๋กœ๋ฅผ ํ•˜๋‚˜์˜ JSON ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ๋ฆฌํ•จ [10]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ ๋””๋ฒ„๊น… ์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ์˜์กด์„ฑ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์ง€ํ‘œ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ [11]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Lazy Evaluation in Graph Theory]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปดํ“จํ„ฐ ๊ณผํ•™ ๊ด€์ ์—์„œ์˜ ๊ณ„์‚ฐ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ๋น„๊ต. +- [[Workflow JSON v1.0 Schema]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์— ํ•„์ˆ˜์ ์ธ `id`, `inputs`, `links` ์†์„ฑ์˜ ๊ธฐ์ˆ ์  ๋ช…์„ธ ์ดํ•ด [12, 13]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on Source [1], [6]) \ No newline at end of file diff --git a/10_Wiki/Comfyui/ExecutionCache.md b/10_Wiki/Comfyui/ExecutionCache.md new file mode 100644 index 00000000..7e8ef662 --- /dev/null +++ b/10_Wiki/Comfyui/ExecutionCache.md @@ -0,0 +1,60 @@ +--- +id: executioncache +title: "ExecutionCache" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["Standalone Execution Script (GitHub Gist)"] +github_commit: "" +--- + +# [[ExecutionCache]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋…๋ฆฝํ˜• ์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋…ธ๋“œ ์ถœ๋ ฅ ๋ฐ UI ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜์—ฌ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ์บ์‹œ ๊ด€๋ฆฌ ํด๋ž˜์Šค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **ํ†ตํ•ฉ ์บ์‹œ ๊ด€๋ฆฌ (Unified Cache Management):** ๋…ธ๋“œ ์ถœ๋ ฅ, UI ๋ฐ์ดํ„ฐ, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์บ์‹ฑ์„ ์ค‘์•™์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ํšจ์œจ์„ ๋†’์ž„ [2]. +- **์„ฑ๋Šฅ ์ตœ์ ํ™” (Performance Optimization):** ๋ถˆํ•„์š”ํ•˜๊ณ  ์ค‘๋ณต๋˜๋Š” ๊ณ„์‚ฐ์„ ์ค„์—ฌ ๋…๋ฆฝํ˜• ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•จ [2]. +- **HierarchicalCache ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ:** ComfyUI์˜ ๊ธฐ๋ณธ ๊ณ„์ธต์  ์บ์‹œ(HierarchicalCache) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์œ„์— ๊ตฌ์ถ•๋˜์–ด ๋…ธ๋“œ ๊ฐ์ฒด์™€ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ €์žฅํ•จ [2]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋…๋ฆฝํ˜• ์‹คํ–‰ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰์„ ์กฐ์œจํ•˜๋Š” `WorkflowExecutor`์™€ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” `ExecutionCache`๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ์„œ๋ฒ„ ์—†์ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•จ [1, 3]. +- **๋ฐ์ดํ„ฐ ์บก์Аํ™” ํŒจํ„ด:** ๋…ธ๋“œ ๊ฐ์ฒด(node object), ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ(output data), UI ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ์บ์‹œ ๋‹จ์œ„ ๋‚ด์— ๋ณด๊ด€ํ•˜์—ฌ ComfyUI์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•จ [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ExecutionCache๋Š” ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜์˜ ์›น ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด **๋…๋ฆฝํ˜• ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ**๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž„ [1, 4]. ์ด ํด๋ž˜์Šค๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ. + +์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Œ: +1. **๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ:** ๊ฐ ๋…ธ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ์ธ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, UI ๊ด€๋ จ ๋ฐ์ดํ„ฐ ๋ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ์บ์‹œ์— ์ €์žฅํ•จ [2]. +2. **์ค‘๋ณต ๊ณ„์‚ฐ ๋ฐฉ์ง€:** ๋™์ผํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ์ปดํ“จํŒ… ์ž์›์„ ์ ˆ์•ฝํ•จ [2]. +3. **ํ˜ธํ™˜์„ฑ ์œ ์ง€:** ComfyUI ๋‚ด๋ถ€์˜ `HierarchicalCache`๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด, ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ์˜ ์‹คํ–‰ ๋กœ์ง๊ณผ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณด์žฅํ•จ [2, 3]. + +์ด ํด๋ž˜์Šค๋Š” `WorkflowExecutor`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, `WorkflowExecutor`๊ฐ€ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰(`_execute_node`)ํ•  ๋•Œ ํ•„์š”ํ•œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ ์—ญํ• ์„ ๋‹ด๋‹นํ•จ [1, 2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋…๋ฆฝํ˜• ์‹คํ–‰์˜ ํ•œ๊ณ„:** ExecutionCache๋ฅผ ํฌํ•จํ•œ ๋…๋ฆฝํ˜• ์Šคํฌ๋ฆฝํŠธ ๋ฐฉ์‹์€ ComfyUI ์„œ๋ฒ„์™€ ์›น UI๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์šฐํšŒํ•˜๋ ค๋Š” ์‹œ๋„์ด๋‚˜, ์—ฌ์ „ํžˆ ComfyUI์˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(torch ๋“ฑ)์— ์˜์กดํ•จ [5-7]. +- **์บ์‹œ ์ƒ๋ช…์ฃผ๊ธฐ:** ์„œ๋ฒ„ ํ™˜๊ฒฝ์˜ Web UI ํ”„๋กฌํ”„ํŠธ/๊ฒฐ๊ณผ ์บ์‹ฑ๊ณผ ๋‹ฌ๋ฆฌ, ์ด๋ฅผ ํ™œ์šฉํ•œ ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ๋ฐœ์„ฑ ์‹คํ–‰(single-shot)์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์‹คํ–‰ ์ข…๋ฃŒ ์‹œ ๋ชจ๋ธ/์บ์‹œ ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•จ [8]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **๋…๋ฆฝํ˜• ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ (Standalone Execution Script):** SDXL Turbo ์›Œํฌํ”Œ๋กœ์šฐ ๋“ฑ์„ API JSON ํ˜•์‹์—์„œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ `WorkflowExecutor` ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ ๊ตฌํ˜„๋จ [1, 3, 4]. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํŠน์ • GitHub Gist๋ฅผ ํ†ตํ•ด ๊ณต์œ ๋˜๊ณ  ์žˆ์Œ [1, 4]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (์ „๋ฌธ ๊ฐœ๋ฐœ์ž ๋ธ”๋กœ๊ทธ ๋ฐ ๊ธฐ์ˆ  ๋ถ„์„ ์ž๋ฃŒ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Frontend Format (workflow.json).md b/10_Wiki/Comfyui/Frontend Format (workflow.json).md new file mode 100644 index 00000000..8a90a033 --- /dev/null +++ b/10_Wiki/Comfyui/Frontend Format (workflow.json).md @@ -0,0 +1,70 @@ +--- +id: frontend-format-(workflow.json) +title: "Frontend Format (workflow.json)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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", "ComfyUI-to-Python-Extension", "RunComfy Serverless API"] +github_commit: "" +--- + +# [[Frontend Format (workflow.json)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Frontend Format(`workflow.json`)์€ ComfyUI์˜ **Litegraph ํ‘œ์ค€**์„ ๋”ฐ๋ฅด๋ฉฐ, ๋…ธ๋“œ ๊ฐ„์˜ ์‹คํ–‰ ๋กœ์ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์บ”๋ฒ„์Šค์ƒ์˜ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ณด์กดํ•˜๋Š” **์ธ๊ฐ„ ์ค‘์‹ฌ์˜ ๊ณต์œ  ๋ฐ ํŽธ์ง‘์šฉ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ**์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(UI Metadata) ํฌํ•จ**: ๋…ธ๋“œ์˜ ์œ„์น˜(`pos`), ํฌ๊ธฐ(`size`), ์ƒ‰์ƒ, ๊ทธ๋ฃนํ™” ๊ตฌ์กฐ ๋ฐ ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์—ฌ๋ถ€์™€ ๊ฐ™์€ ์‹œ๊ฐ์  ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค [1, 4, 5]. +- **Litegraph ํ‘œ์ค€ ์ค€์ˆ˜**: ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ์˜ ์‹œ๊ฐ์  ๋ Œ๋”๋ง ๋ฐ ์กฐ์ž‘์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค [1, 2]. +- **๋ช…์‹œ์  ๋งํฌ ํ‘œํ˜„ (Explicit Links)**: ์—ฐ๊ฒฐ์„ ๋…ธ๋“œ ๋‚ด๋ถ€์— ๋งคํ•‘ํ•˜๋Š” ๋Œ€์‹ , ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ณ ์œ  ID๋ฅผ ๊ฐ€์ง„ ๋ช…์‹œ์ ์ธ ์—ฐ๊ฒฐ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•œ๋‹ค [2, 4, 6]. +- **๊ฐ€์—ญ์„ฑ(Reversibility)**: ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ๋˜์–ด ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ๋งŒ์œผ๋กœ ์›๋ณธ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [7-9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํฌ๋งท์˜ ์ด๋ถ„ํ™”(Bifurcation)**: ComfyUI๋Š” ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend ํฌ๋งท'๊ณผ ์„œ๋ฒ„์˜ ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ์œ„ํ•œ 'Backend/API ํฌ๋งท'์„ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์šด์˜ํ•œ๋‹ค [1, 10]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ(Metadata Embedding)**: ์ƒ์„ฑ๋œ PNG/WebP ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ด๋ฏธ์ง€๊ฐ€ ๊ณง ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋˜๋Š” ํŒจํ„ด์„ ํ˜•์„ฑํ•œ๋‹ค [8, 9, 11]. +- **์˜์กด์„ฑ ๊ธฐ๋ฐ˜ ๋…ธ๋“œ ID ํ• ๋‹น**: ๊ฐ ๋…ธ๋“œ๋Š” ์ƒ์„ฑ ์ˆœ์„œ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜์— ๋”ฐ๋ผ ๊ณ ์œ ํ•œ ์ˆซ์žํ˜• ๋ฌธ์ž์—ด ID(์˜ˆ: "37")๋ฅผ ๋ถ€์—ฌ๋ฐ›์•„ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์˜ ํ‚ค๋กœ ํ™œ์šฉ๋œ๋‹ค [4, 5, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์€ ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ **๊ธฐ๋ณธ ์ €์žฅ(Ctrl+S)** ์‹œ ์ƒ์„ฑ๋˜๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ด๋‹ค [13]. ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์žฌ๋กœ๋“œํ–ˆ์„ ๋•Œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ •ํ™•ํ•œ ์ขŒํ‘œ์— ๋‚˜ํƒ€๋‚˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค [13, 14]. + +**JSON ์Šคํ‚ค๋งˆ v1.0 ๊ตฌ์„ฑ ์š”์†Œ [5, 6, 15]**: +- **nodes**: ๊ฐœ๋ณ„ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. + - `id`: ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•œ ๊ณ ์œ  ์‹๋ณ„์ž. + - `type`: ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋งคํ•‘๋œ ํด๋ž˜์Šค ์ด๋ฆ„. + - `pos`/`size`: ์บ”๋ฒ„์Šค ์ขŒํ‘œ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ Œ๋”๋ง ํฌ๊ธฐ. + - `widgets_values`: ์Šฌ๋ผ์ด๋”, ํ…์ŠคํŠธ ๋ฐ•์Šค, ํ† ๊ธ€ ๋“ฑ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์˜ ๋ฐฐ์—ด. + - `order`: ์‹คํ–‰ ๋˜๋Š” ๋ Œ๋”๋ง ๊ถŒ์žฅ ์ˆœ์„œ. + - `mode`: ๋…ธ๋“œ์˜ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ/๋ฐ”์ดํŒจ์Šค ์ƒํƒœ. +- **links**: ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ •์˜ํ•˜๋Š” ์ƒ์œ„ ๋ ˆ๋ฒจ ๋ฐฐ์—ด๋กœ, `[origin_id, origin_slot, target_id, target_slot, type]` ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” 6๊ฐœ ํ•ญ๋ชฉ ๋ฐฐ์—ด ๋˜๋Š” ๊ตฌ์กฐํ™”๋œ ๊ฐ์ฒด ํ˜•ํƒœ๋ฅผ ๋ค๋‹ค [6]. + +์ด ํฌ๋งท์€ **API ํฌ๋งท๊ณผ ๋Œ€์กฐ**์ ์ด๋‹ค. API ํฌ๋งท์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ๋กœ์ง๋งŒ ๋‚จ๊ธด '์ŠคํŠธ๋ฆผ๋ผ์ธ' ๋ฒ„์ „์œผ๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ์ผ์„ API ์—”๋“œํฌ์ธํŠธ์— ์ง์ ‘ ๋ณด๋‚ผ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [1, 14, 16]. ๋”ฐ๋ผ์„œ ์ „๋ฌธ์ ์ธ ์ž๋™ํ™” ํ™˜๊ฒฝ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์„ ์›๋ณธ(Source of truth)์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์‹คํ–‰ ์ง์ „์— API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ถŒ์žฅ๋œ๋‹ค [17, 18]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ**: ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „์—์„œ ์ƒ์„ฑ๋œ ํ”„๋ก ํŠธ์—”๋“œ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‹œ๊ฐ์ ์œผ๋กœ ๊นจ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [19]. +- **๋ฐ์ดํ„ฐ ์œ ์‹ค ์œ„ํ—˜**: ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ ํ”„๋ก ํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์†Œ์…œ ๋ฏธ๋””์–ด๋‚˜ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(GIMP ๋“ฑ)๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ ํŒŒ์ผ ํฌ๊ธฐ ์ตœ์ ํ™” ๋˜๋Š” ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์ด์œ ๋กœ ์ œ๊ฑฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๊ฐ€์—ญ์„ฑ์ด ํŒŒ๊ดด๋  ์ˆ˜ ์žˆ๋‹ค [9, 20]. +- **API ์‹คํ–‰ ๋ถˆ๊ฐ€**: ํ”„๋ก ํŠธ์—”๋“œ JSON์€ `/prompt` ์—”๋“œํฌ์ธํŠธ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ API ํฌ๋งท์œผ๋กœ์˜ ๋ณ€ํ™˜ ๊ณผ์ •์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค [16, 17]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint**: `workflow.json`(ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท)์„ ์ž…๋ ฅ๋ฐ›์•„ ์„œ๋ฒ„ ์ธก์—์„œ API ํฌ๋งท์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋จ [16, 18, 21]. +- **ComfyUI-to-Python-Extension**: ํ”„๋ก ํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์ƒ์„ฑ๋œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“  ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์‹œ ComfyUI๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋จ [11]. +- **RunComfy Serverless**: ๋ฐฐํฌ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ `workflow.json`์—์„œ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์‹œ๊ฐํ™” ๊ฐ€์ด๋“œ๋กœ ํ™œ์šฉํ•จ [3, 10]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ์œผ๋กœ applied ๋‹จ๊ณ„๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ๋ฌธ์„œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. ๋ณธ ๋ฌธ์„œ๋Š” ์†Œ์Šค ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์ˆ ์  ๋ช…์„ธ(v1.0 ์Šคํ‚ค๋งˆ)์™€ ์šด์˜ ํŒจํ„ด(ํฌ๋งท ์ด๋ถ„ํ™”)์„ ์ค‘์‹ฌ์œผ๋กœ ํ•ฉ์„ฑ๋จ. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Generative AI Pipeline.md b/10_Wiki/Comfyui/Generative AI Pipeline.md new file mode 100644 index 00000000..8f06eb68 --- /dev/null +++ b/10_Wiki/Comfyui/Generative AI Pipeline.md @@ -0,0 +1,67 @@ +--- +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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/JSON Schema v1.0.md b/10_Wiki/Comfyui/JSON Schema v1.0.md new file mode 100644 index 00000000..d01ce5f0 --- /dev/null +++ b/10_Wiki/Comfyui/JSON Schema v1.0.md @@ -0,0 +1,109 @@ +--- +id: json-schema-v1.0 +title: "JSON Schema v1.0" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI Workflow JSON v1.0"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "JSON Schema"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["/specs/workflow_json"] +github_commit: "" +--- + +# [[JSON Schema v1.0]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON v1.0์€ Draft-07 ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ์ƒ์„ฑํ˜• AI ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ๋…ผ๋ฆฌ๋กœ ์ด์›ํ™”ํ•˜์—ฌ ์ง๋ ฌํ™”ํ•˜๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Draft-07 Specification:** ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ตœ์‹  ๊ณต์‹ ์Šคํ‚ค๋งˆ ํ‘œ์ค€์ด๋‹ค [2]. +- **๋ฐ์ดํ„ฐ ์ด์›ํ™” (Bifurcation):** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์šฉ 'Frontend Format'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์šฉ 'API Format'์œผ๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค [1, 3]. +- **๋…ธ๋“œ ๊ฐ์ฒด ์†์„ฑ (Node Object Properties):** ๊ฐ ๋…ธ๋“œ๋Š” ID, ์œ ํ˜•, ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์œ„์ ฏ ๊ฐ’(widgets_values) ๋“ฑ์˜ ํ•„์ˆ˜ ๋ฐ ์„ ํƒ์  ์†์„ฑ์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค [2, 4]. +- **์Šฌ๋กฏ ๋ฐ ๋งํฌ ์—ฐ๊ฒฐ์„ฑ (Slot & Link Connectivity):** ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๊ณ ์œ ํ•œ ๋งํฌ ID์™€ ์ž…๋ ฅ/์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•ด ์ •์˜๋œ๋‹ค [5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์‹คํ–‰ ๋ชจ๋ธ ๋ฐ˜์ „ (Execution Model Inversion):** ์—”์ง„์ด ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰, ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค [6]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ์— Frontend์™€ API ํฌ๋งท์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ €์žฅํ•˜์—ฌ ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์žฌ์‹คํ–‰์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค [7-9]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์ œ์•ฝ:** ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ComfyUI ๋ฒ„์ „์—์„œ ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด ๊ด€์ฐฐ๋œ๋‹ค [10]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON v1.0์€ ๋ณต์žกํ•œ ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค [11, 12]. + +**1. ๋…ธ๋“œ ๊ฐ์ฒด์˜ ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ** +- **ํ•„์ˆ˜ ์†์„ฑ:** `id`(๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์šฉ ๊ณ ์œ  ์‹๋ณ„์ž), `type`(๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ํด๋ž˜์Šค ์ด๋ฆ„ ๋งคํ•‘), `pos` ๋ฐ `size`(UI ๋ Œ๋”๋ง์šฉ ์ขŒํ‘œ ๋ฐ ํฌ๊ธฐ), `order`(์‹คํ–‰ ๋˜๋Š” ๋ Œ๋”๋ง ์ˆœ์„œ), `mode`(ํ™œ์„ฑ/๋ฐ”์ดํŒจ์Šค ์ƒํƒœ)๊ฐ€ ํฌํ•จ๋œ๋‹ค [2]. +- **์„ ํƒ์  ์†์„ฑ:** ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์Šฌ๋ผ์ด๋”, ํ…์ŠคํŠธ ๋ฐ•์Šค ๋“ฑ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” `widgets_values`๊ฐ€ ์กด์žฌํ•œ๋‹ค [2]. + +**2. ํฌ๋งท๋ณ„ ๊ตฌ์กฐ์  ์ฐจ์ด** +- **Frontend JSON (workflow.json):** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•ด Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ, ๋…ธ๋“œ ์œ„์น˜, ๊ทธ๋ฃน ๊ตฌ์กฐ, ์ƒ‰์ƒ ๋“ฑ ๋ชจ๋“  ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค [1, 3, 13]. +- **API JSON (workflow_api.json):** ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ ์ŠคํŠธ๋ฆผ๋ผ์ธ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์ด๋‹ค [1]. ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด์— ๋งํฌ๋ฅผ ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1, 3, 14]. + +**3. ์—ฐ๊ฒฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜** +- ์—ฐ๊ฒฐ์€ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ์ •์˜๋˜๋ฉฐ, ๊ฐ ํ•ญ๋ชฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ `origin_id`, `origin_slot`, `target_id`, `target_slot`์„ ์ •์˜ํ•˜๋Š” 6๊ฐœ ํ•ญ๋ชฉ ๋ฐฐ์—ด ๋˜๋Š” ๊ตฌ์กฐํ™”๋œ ๊ฐ์ฒด์ด๋‹ค [5]. +- ์Šฌ๋กฏ ์ธ๋ฑ์‹ฑ์€ ๋งค์šฐ ์—„๊ฒฉํ•˜์—ฌ, ํŠน์ • ๋…ธ๋“œ์˜ ์—ฌ๋Ÿฌ ์ถœ๋ ฅ ์Šฌ๋กฏ ์ค‘ ์ •ํ™•ํžˆ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์šด์ŠคํŠธ๋ฆผ ๋…ธ๋“œ์— ์†Œ๋น„๋˜๋Š”์ง€ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค [5]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ํฌ๋งท์˜ ์ทจ์•ฝ์„ฑ:** PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ๋œ JSON์€ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ์••์ถ•/ํŽธ์ง‘ ์‹œ ์‚ญ์ œ๋˜๊ธฐ ์‰ฌ์šด ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค [9]. +- **๋ฒ„์ „ ๊ฐ„ ๋น„ํ˜ธํ™˜์„ฑ:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ComfyUI Manager ๋“ฑ์˜ ๋„๊ตฌ๊ฐ€ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค [10, 15]. +- **ํ•„๋“œ ๋ช…์นญ ์ฐจ์ด:** Frontend ํฌ๋งท์—์„œ๋Š” `type`์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ API ํฌ๋งท์—์„œ๋Š” `class_type`์ด๋ผ๋Š” ๋ช…์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค [3, 16]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **๊ณต์‹ ๋ฌธ์„œ ๊ฒฝ๋กœ:** `/specs/workflow_json` ์œ„์น˜์— JSON Schema v1.0 ๋ช…์„ธ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค [17]. +- **๋ฒ„์ „ ๊ด€๋ฆฌ:** ํ˜„์žฌ ๊ฐ€์žฅ ์ตœ์‹  ๊ทœ๊ฒฉ์€ Version 1.0์ด๋ฉฐ, ์ด์ „ ๋ฒ„์ „์ธ 0.4์™€ ๊ตฌ๋ถ„๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค [18]. +- **์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ:** `comfyui-workflow-to-api-converter-endpoint` ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋น„-API ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ v1.0 API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค [19, 20]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ช…์„ธ ๋ฐ ๊ฐœ๋ฐœ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์กฐํ™”๋จ) [2, 21] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ๋ณธ ์†Œ์Šค ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Draft-07 Specification]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON Schema v1.0์ด ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ผ๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ  ํ‘œ์ค€์ด๋‹ค [2]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด. +- [[Node-based Visual Programming]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON Schema๊ฐ€ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ์ถ”์ƒํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋‹ค [11, 22]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ์™€ ๋งํฌ๊ฐ€ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ ๋…ผ๋ฆฌ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[API JSON (workflow_api.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : v1.0 ์Šคํ‚ค๋งˆ๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ํ˜•ํƒœ์ด๋‹ค [1, 14]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ ๋ฐ API ํ˜ธ์ถœ ์‹œ์˜ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•. +- [[Frontend JSON (workflow.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : v1.0 ์Šคํ‚ค๋งˆ์˜ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์ด๋‹ค [1, 13]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์—์„œ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์žฌ๊ตฌ์„ฑ๊ณผ ๊ณต์œ . + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- v1.0 ์Šคํ‚ค๋งˆ์—์„œ Draft-07 ๊ทœ๊ฒฉ์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋…ธ๋“œ ์‹คํ–‰ ์ „ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๊ฐ€? [2] +- Frontend JSON์˜ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(pos, size)๊ฐ€ ์‹ค์ œ ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์—”์ง„์— ์ „ํ˜€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ตฌ์กฐ์  ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [1, 3] +- ๋งํฌ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹(6๊ฐœ ํ•ญ๋ชฉ ๋ฐฐ์—ด)์—์„œ ๊ฐ ์ธ๋ฑ์Šค๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์  ์˜๋ฏธ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [5] +- [[Execution Model Inversion]] ํŒจํ„ด์ด ์ ์šฉ๋  ๋•Œ, JSON ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ์–ด๋–ค ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌด์‹œ๋˜๋Š”๊ฐ€? [6] +- API ํฌ๋งท์—์„œ `class_type`์ด ์•„๋‹Œ `inputs` ๋‚ด์— ๋งํฌ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ฐฉ์‹์ด ์‹คํ–‰ ์†๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 3] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ID๋ฅผ ์ถ”์ ํ•˜๊ณ  `widgets_values`๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์ž๋™ํ™”๋œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค [23, 24]. +- **System Design:** ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ComfyUI๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, `workflow_api.json` ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ UI ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์ „์†ก ํšจ์œจ์„ ๋†’์ธ๋‹ค [1, 25]. +- **Operation / Maintenance:** `ComfyUI Manager`๋ฅผ ํ†ตํ•ด JSON ๋‚ด์˜ `class_type`์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค [15]. +- **Learning Path:** ์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋จผ์ € ์ดํ•ดํ•œ ํ›„, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ API ์ „์šฉ JSON ํฌ๋งท์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ํ•™์Šต์ด ์ง„ํ–‰๋œ๋‹ค [26, 27]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Object_info.json]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์˜ ๋…ธ๋“œ ์Šคํ‚ค๋งˆ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ดํ•ดํ•˜์—ฌ JSON์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ ์ œ์ž‘ [28, 29]. +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ณต์œ  ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐฉ์ง€ ๋ฐ ๋ณต๊ตฌ ์ „๋žต [9, 19]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Lazy Evaluation in Graph Theory.md b/10_Wiki/Comfyui/Lazy Evaluation in Graph Theory.md new file mode 100644 index 00000000..60dad65b --- /dev/null +++ b/10_Wiki/Comfyui/Lazy Evaluation in Graph Theory.md @@ -0,0 +1,100 @@ +--- +id: lazy-evaluation-in-graph-theory +title: "Lazy Evaluation in Graph Theory" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Execution Model Inversion"] +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: ["Execution Model Inversion"] +github_commit: "" +--- + +# [[Lazy Evaluation in Graph Theory]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI๋Š” **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „(Execution Model Inversion)** ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ถ”์ ํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (Directed Acyclic Graph, DAG):** ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ทผ๊ฐ„์œผ๋กœ, ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ •์˜ํ•˜๋ฉฐ ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค [2]. +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , '์ถœ๋ ฅ' ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์—ญ์ถ”์ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [1]. +- **์˜์กด์„ฑ ์‹๋ณ„ (Dependency Identification):** ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ตœ์ข… ๊ฒฐ๊ณผ(์˜ˆ: Save Image)์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์‹คํ–‰ ๋ชฉ๋ก(Execution List)์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค [1, 3]. +- **๋ฐฑ์—”๋“œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™”:** API ํฌ๋งท(workflow_api.json)์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์ˆ˜์ ์ธ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ฑ๋งŒ์„ ํฌํ•จํ•˜์—ฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ธ๋‹ค [4, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์—ญ๋ฐฉํ–ฅ ํŠธ๋ฆฌ๊ฑฐ๋ง ํŒจํ„ด:** ์‚ฌ์šฉ์ž๋‚˜ ์‹œ์Šคํ…œ์ด ํŠน์ • ์ถœ๋ ฅ ๋…ธ๋“œ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์ž…๋ ฅ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ์ƒ์œ„ ๋…ธ๋“œ๋“ค์ด ํ™œ์„ฑํ™”๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [1]. +- **๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ๋ฐฐ์ œ:** ์ƒ์„ฑ๋œ JSON ๋‚ด์— ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ฏธ์‚ฌ์šฉ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ์ตœ์ข… ์ถœ๋ ฅ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค [1]. +- **๋™์  ํ”„๋กฌํ”„ํŠธ ๋ณ€ํ™˜:** JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ›„ `DynamicPrompt` ๋ฐ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [3, 6]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์˜ ์ง€์—ฐ ํ‰๊ฐ€(Lazy Evaluation)์  ์ ‘๊ทผ๋ฒ•์€ **๊ทธ๋ž˜ํ”„ ์ด๋ก ์˜ DAG ๊ตฌ์กฐ**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „** ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ตฌ์ฒดํ™”๋œ๋‹ค [1, 2]. ์ „ํ†ต์ ์ธ ์„ ํ˜• ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋‹ฌ๋ฆฌ, ComfyUI ์—”์ง„์€ 'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ์ง€์ ์—์„œ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฑฐ๊พธ๋กœ ํšก๋‹จ(Traverse)ํ•œ๋‹ค [1]. ์ด ๊ณผ์ •์—์„œ ์—”์ง„์€ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๋…ธ๋“œ์™€ ๊ทธ ์ˆœ์„œ๋ฅผ ์‹๋ณ„ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ์™„์ „ํžˆ ๋ฌด์‹œ๋œ๋‹ค [1]. + +์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ JSON์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ ํฐ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹จ์ผ JSON ํŒŒ์ผ ๋‚ด์— ๋‹ค์–‘ํ•œ ์‹คํ—˜์  ๋…ธ๋“œ ๊ตฌ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ค์ œ ์‹คํ–‰ ์‹œ์—๋Š” ํ•„์š”ํ•œ ๊ฒฝ๋กœ๋งŒ ํ™œ์„ฑํ™”๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ์œ ์—ฐํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค [1]. + +ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ๊ด€์ ์—์„œ, ์ด๋Ÿฌํ•œ ์‹คํ–‰ ๋กœ์ง์€ `WorkflowExecutor` ํด๋ž˜์Šค ๋“ฑ์— ์˜ํ•ด ์บก์Аํ™”๋  ์ˆ˜ ์žˆ๋‹ค [3]. ์›Œํฌํ”Œ๋กœ์šฐ JSON์ด ๋กœ๋“œ๋˜๋ฉด `validate_prompt` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋…ธ๋“œ๋ณ„ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰(`get_input_data`)๊ณผ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ(`get_output_data`)์„ ๊ฑฐ์น˜๋Š” ์‹คํ–‰ ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค [3, 6]. ๊ฒฐ๊ณผ์ ์œผ๋กœ JSON ํŒŒ์ผ์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹Œ, ์‹คํ–‰ ์—”์ง„์ด ์ฝ๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” **์ง€์‹œ๋ฌธ(Blueprint)** ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค [7]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ทจ์•ฝ์„ฑ:** JSON ๋ฐ์ดํ„ฐ๋Š” PNG ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)์— ์ €์žฅ๋˜์ง€๋งŒ, ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด ์ด ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค [8]. +- **ํฌ๋งท ๊ฐ„์˜ ๊ดด๋ฆฌ:** ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ์ธ 'Frontend Format'๊ณผ ์‹คํ–‰์šฉ์ธ 'API Format'์ด ์ด์›ํ™”๋˜์–ด ์žˆ์–ด, API ํฌ๋งท ํŒŒ์ผ์„ UI๋กœ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ(๋…ธ๋“œ ์œ„์น˜ ๋“ฑ)์ด ๋ˆ„๋ฝ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค [4, 9, 10]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Execution Model Inversion:** ComfyUI ๊ณต์‹ ๋ฐฑ์—”๋“œ ๋กœ์ง์— ์ ์šฉ๋˜์–ด ์ถœ๋ ฅ ๋…ธ๋“œ ์ค‘์‹ฌ์˜ ์—ญ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํšก๋‹จ์„ ๊ตฌํ˜„ํ•จ [1]. +- **WorkflowExecutor:** Python ๊ธฐ๋ฐ˜ ๋…๋ฆฝ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ๊ตฌํ˜„ ์‹œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์ œ์•ˆ๋จ [3, 6]. +- **ComfyUI-WorkflowGenerator:** LLM์„ ์ด์šฉํ•ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ(JSON)๋กœ ํ•ฉ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋นŒ๋”๋กœ ์ „๋‹ฌํ•˜๋Š” 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ํ™œ์šฉ๋จ [11, 12]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Primary Source via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ตฌ์กฐ์  ๊ทผ๊ฐ„ [2]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ๋ฐฉํ–ฅ์„ฑ๊ณผ ๋…ธ๋“œ ๊ฐ„์˜ ์œ„๊ณ„์  ์—ฐ๊ฒฐ ๋ฐฉ์‹. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๊ฐ€ ์ง๋ ฌํ™”๋˜์–ด ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋Š” ๋Œ€์ƒ [2, 7]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ID, ์œ ํ˜•, ์ž…๋ ฅ๊ฐ’ ๋“ฑ์ด JSON ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ๋งคํ•‘๋˜๋Š”์ง€. +- [[workflow_api.json]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ง€์—ฐ ํ‰๊ฐ€ ๋กœ์ง์ด ์ ์šฉ๋˜๋Š” ์ตœ์ข… ์‹คํ–‰์šฉ ํŒŒ์ผ ํฌ๋งท [4, 13]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์ˆ˜ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์˜ ๊ตฌ์กฐ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI ๋ฐฑ์—”๋“œ์—์„œ ์—ญ๋ฐฉํ–ฅ ํšก๋‹จ ์‹œ ์บ์‹ฑ(Caching)์€ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•˜๋Š”๊ฐ€? [6] +- `DynamicPrompt`๊ฐ€ `ExecutionList`๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์—์„œ ๋…ธ๋“œ์˜ ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„(Order)๋Š” ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •๋˜๋Š”๊ฐ€? [3, 14] +- ๋…ธ๋“œ๊ฐ€ 'Bypass' ์ƒํƒœ์ผ ๋•Œ ๊ทธ๋ž˜ํ”„ ์ด๋ก  ์ธก๋ฉด์—์„œ ๋งํฌ ์—ฐ๊ฒฐ์„ฑ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? [15] +- ํŠน์ • ๋…ธ๋“œ์—๋งŒ ์‹คํ–‰์„ ์ œํ•œํ•˜๋Š” 'Partial Execution' ๊ธฐ๋Šฅ์€ ์ง€์—ฐ ํ‰๊ฐ€ ๋ชจ๋ธ๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๊ฐ€? [16, 17] +- LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ์—์„œ ๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ(Logical Synthesis) ๊ฒฐ๊ณผ๊ฐ€ ๊ทธ๋ž˜ํ”„ ์ด๋ก ์˜ ์œ ํšจ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [12, 18] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ `WorkflowExecutor`๋ฅผ ํ™œ์šฉํ•˜์—ฌ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค [3]. +- **System Design:** API ํ˜ธ์ถœ ์‹œ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ํฌํ•จ๋œ `workflow_api.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํŽ˜์ด๋กœ๋“œ์™€ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค [4, 5]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ˜์ • ์‹œ ๋ฏธ์‚ฌ์šฉ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋‚จ๊ฒจ๋‘๋”๋ผ๋„ ์‹ค์ œ ์‹คํ–‰ ์„ฑ๋Šฅ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค [1]. +- **Learning Path:** ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‹œ๊ฐ์  ๋กœ์ง์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ณง ์‹œ์Šคํ…œ์˜ ์‹คํ–‰ ๋…ผ๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์ด ๋œ๋‹ค [19]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ ํฌํ„ฐ๋นŒ๋ฆฌํ‹ฐ ํ™•๋ณด๋ฅผ ์œ„ํ•ด ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๋ฅผ ์ด์šฉํ•œ ๋ชจ๋ธ ์‹๋ณ„ ๋ฐฉ๋ฒ• [20]. +- [[Natural Language to Workflow Generation]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: LLM์„ ํ†ตํ•ด ๋Œ€ํ™”ํ˜•์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฏธ๋ž˜ ์ง€ํ–ฅ์  ๋ฐฉ์‹ [11, 21]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine.--- \ No newline at end of file diff --git a/10_Wiki/Comfyui/Litegraph Standard.md b/10_Wiki/Comfyui/Litegraph Standard.md new file mode 100644 index 00000000..2bcf7987 --- /dev/null +++ b/10_Wiki/Comfyui/Litegraph Standard.md @@ -0,0 +1,97 @@ +--- +id: litegraph-standard +title: "Litegraph Standard" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Litegraph Format", "Frontend JSON Format"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Litegraph", "Frontend"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-frontend-package/src/scripts/metadata", "ComfyUI Settings/Lite Graph"] +github_commit: "" +--- + +# [[Litegraph Standard]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Litegraph Standard๋Š” ComfyUI์˜ ์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ์˜ ๋ฐฐ์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ง๋ ฌํ™” ๊ทœ๊ฒฉ**์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Frontend JSON (workflow.json):** ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํฌ๋งท์œผ๋กœ, Litegraph ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ขŒํ‘œ์™€ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ๋ณด์กดํ•œ๋‹ค [1, 3]. +- **Visual Metadata:** ๋…ธ๋“œ์˜ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์ƒ‰์ƒ, ๊ทธ๋ฃน ๊ตฌ์กฐ, ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์ƒํƒœ์™€ ๊ฐ™์€ ์‹œ๊ฐ์  ์†์„ฑ์„ ํฌํ•จํ•œ๋‹ค [1, 4]. +- **Explicit Link Objects:** ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณ„๋„์˜ ๋ฐฐ์—ด ๋‚ด์—์„œ ๋ช…์‹œ์ ์ธ ์—ฐ๊ฒฐ ๊ฐ์ฒด(link ID)๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค [1, 3, 5]. +- **Node-Based Interface Compatibility:** Maya, Blender, Unreal Engine ๋“ฑ ํƒ€ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ๋ฐ ์กฐ์ž‘ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ œ๊ณตํ•œ๋‹ค [6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํ˜•์‹์˜ ์ด๋ถ„ํ™” (Serialization Bifurcation):** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ Litegraph ๊ธฐ๋ฐ˜ 'ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท'๊ณผ ์‹คํ–‰ ํšจ์œจ์„ ์œ„ํ•œ 'API ํฌ๋งท'์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [1]. +- **์Šคํ‚ค๋งˆ ์ œ์•ฝ ์กฐ๊ฑด (Schema Constraints):** JSON v1.0 ๊ทœ๊ฒฉ์— ๋”ฐ๋ผ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ๊ณ ์œ  ID, ํด๋ž˜์Šค ํƒ€์ž…, ์ขŒํ‘œ, ํฌ๊ธฐ, ์‹คํ–‰ ์ˆœ์„œ(order), ๋ชจ๋“œ ๋“ฑ์„ ๋ฐ˜๋“œ์‹œ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค [4]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ์— Litegraph ํ˜•์‹์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ๋ฐฑ์—… ๋ฐ ๊ณต์œ  ์ˆ˜๋‹จ์ด ๋˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค [7, 8]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Litegraph ํ‘œ์ค€์€ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ **'์†Œ์Šค ์ฝ”๋“œ' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ JSON ํฌ๋งท**์˜ ๊ธฐ์ˆ ์  ๊ทผ๊ฐ„์ด๋‹ค [1, 9]. ์ด ํ‘œ์ค€์€ ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑํ•œ ์บ”๋ฒ„์Šค ์ƒ์˜ ์‹œ๊ฐ์  ์งˆ์„œ๋ฅผ ๋ณด์กดํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘”๋‹ค [1, 10]. + +์ฃผ์š” ๊ธฐ์ˆ ์  ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: +- **๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:** ๋ฃจํŠธ ๋ ˆ๋ฒจ์—์„œ `nodes` ๋ฐฐ์—ด๊ณผ `links` ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ์บ”๋ฒ„์Šค ์ƒ์˜ X, Y ์ขŒํ‘œ(`pos`)์™€ ๋„ˆ๋น„, ๋†’์ด(`size`) ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ๋‹ค [4, 5]. +- **์—ฐ๊ฒฐ ๋ฐฉ์‹:** ๋…ธ๋“œ ๋‚ด๋ถ€์˜ `inputs`์™€ `outputs`๋Š” ๋‹จ์ˆœํ•œ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ, ์ „์—ญ `links` ๋ฐฐ์—ด์— ์ •์˜๋œ ๊ณ ์œ ํ•œ ๋งํฌ ID๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ๋‹ค [5]. ์ด๋Š” API ํฌ๋งท์—์„œ ์ž…๋ ฅ๊ฐ’์— ์†Œ์Šค ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋‚ด์žฅํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋Œ€์กฐ์ ์ด๋‹ค [1]. +- **์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ง€์›:** ๊ทธ๋ฃนํ™” ๊ธฐ๋Šฅ ๋ฐ ๋…ธ๋“œ ์ƒํƒœ(Active, Bypassed ๋“ฑ)๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ธ๋‹ค [4]. +- **ํ˜ธํ™˜์„ฑ ๋ฐ ํ™•์žฅ:** ComfyUI ์„ค์ • ๋ฉ”๋‰ด์—๋Š” 'Lite Graph' ๊ด€๋ จ ์ „์šฉ ์„ค์ • ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค [11, 12]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์‹คํ–‰ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** Litegraph ํ‘œ์ค€ ๊ธฐ๋ฐ˜์˜ JSON(workflow.json)์€ ๋…ธ๋“œ ์ขŒํ‘œ ๋“ฑ ๋ถˆํ•„์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„ ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ง์ ‘ ํ•ด์„ํ•˜๊ธฐ์— ๋น„ํšจ์œจ์ ์ด๋ฉฐ, ์ข…์ข… `/prompt` ์—”๋“œํฌ์ธํŠธ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค [1, 9, 13]. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” ์ด๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค [14]. +- **๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** PNG ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ Litegraph ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ์••์ถ•/ํŽธ์ง‘ ์‹œ ์‰ฝ๊ฒŒ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์ ๋œ๋‹ค [7, 8]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-frontend-package:** ํ”„๋ก ํŠธ์—”๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ ๋‚ด์˜ `src/scripts/metadata` ๊ฒฝ๋กœ์—์„œ ๊ณต์‹์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์œผ๋กœ ์ ์šฉ๋จ [15]. +- **ComfyUI ์„ค์ • ๋ฉ”๋‰ด:** ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด Settings > Lite Graph ์„น์…˜์„ ํ†ตํ•ด ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ [11]. +- **workflow.json ๋‚ด๋ณด๋‚ด๊ธฐ:** ComfyUI ์ œ์–ดํŒ์˜ 'Export' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋Š” ๋ชจ๋“  ํ‘œ์ค€ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ์˜ ๊ทœ๊ฒฉ์œผ๋กœ ์‚ฌ์šฉ๋จ [16, 17]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„์„ ํ†ตํ•ด ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋ถ„์„ ๊ฒฐ๊ณผ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[ComfyUI Workflow JSON Generation and Serialization]] + - ์—ฐ๊ฒฐ ์ด์œ : Litegraph ํ‘œ์ค€์ด ์ง๋ ฌํ™” ํ”„๋กœ์„ธ์Šค์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ”„๋ก ํŠธ์—”๋“œ์™€ API ํฌ๋งท ๊ฐ„์˜ ๊ธฐ์ˆ ์  ์ฐจ์ด์ . +- [[Visual Programming Environment]] + - ์—ฐ๊ฒฐ ์ด์œ : Litegraph๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํŒจ๋Ÿฌ๋‹ค์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ๋ฒ”์šฉ์  ์„ค๊ณ„ ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : Litegraph JSON์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›Œํฌํ”Œ๋กœ์šฐ ์ข…์†์„ฑ ํ•ด๊ฒฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Litegraph ํ‘œ์ค€์—์„œ ์ •์˜ํ•˜๋Š” `links` ๋ฐฐ์—ด์˜ 6๊ฐ€์ง€ ์ธ๋ฑ์Šค ๊ฐ’์€ ๊ฐ๊ฐ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋Š”๊ฐ€? [5] +- API ํฌ๋งท(workflow_api.json)์œผ๋กœ ๋ณ€ํ™˜ ์‹œ Litegraph์˜ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ํ๊ธฐ๋˜๋Š”๊ฐ€? [1, 3] +- `comfyui-frontend-package`์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์€ Litegraph ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒ€์ฆ(Validation)ํ•˜๋Š”๊ฐ€? [15] +- ๋…ธ๋“œ ์ƒํƒœ(`mode`) ์ค‘ 'Bypassed' ์ฒ˜๋ฆฌ๊ฐ€ Litegraph ์ง๋ ฌํ™” ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [18] +- 0.4 ๋ฒ„์ „์—์„œ 1.0 ๋ฒ„์ „์œผ๋กœ์˜ Litegraph ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? [19, 20] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ์‹œ `INPUT_TYPES`๋ฅผ Litegraph ๊ทœ๊ฒฉ์— ๋งž์ถฐ ์ •์˜ํ•˜์—ฌ UI ์ƒ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋„๋ก ํ•จ [21]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹œ, ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ ๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•จ [1]. +- **Learning Path:** ์ดˆ๋ณด์ž๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด JSON ํŒŒ์ผ์„ ์ง์ ‘ ์—ด์–ด ๋…ธ๋“œ ID์™€ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ถ”์ ํ•˜๋Š” ํ•™์Šต ๋„๊ตฌ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•จ [22]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Directed Acyclic Graph (DAG)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: Litegraph๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ์ˆ˜ํ•™์  ๋ชจ๋ธ. +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ๊ณต์œ  ๊ณผ์ •์—์„œ Litegraph ์ •๋ณด๊ฐ€ ์†Œ์‹ค๋˜๋Š” ๋ณด์•ˆ ๋ฐ ๊ธฐ์ˆ ์  ์ด์œ  ๋ถ„์„. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Litegraph.md b/10_Wiki/Comfyui/Litegraph.md new file mode 100644 index 00000000..3bade50a --- /dev/null +++ b/10_Wiki/Comfyui/Litegraph.md @@ -0,0 +1,58 @@ +--- +id: litegraph +title: "Litegraph" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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 Settings Menu", "workflow.json"] +github_commit: "" +--- + +# [[Litegraph]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ๊ณผ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํ•ต์‹ฌ ์ง๋ ฌํ™” ํ‘œ์ค€ ๊ทœ๊ฒฉ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **ํ”„๋ก ํŠธ์—”๋“œ JSON ํฌ๋งท์˜ ๊ทผ๊ฐ„:** ComfyUI์˜ ์‹œ๊ฐ์  ํŽธ์ง‘ ๋„๊ตฌ์ธ `workflow.json` ํŒŒ์ผ์ด ๋”ฐ๋ฅด๋Š” ํ‘œ์ค€์œผ๋กœ, ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”„์˜ ์‹œ๊ฐํ™” ๋ฐ ์กฐ์ž‘์„ ์œ„ํ•ด ์„ค๊ณ„๋จ [1, 2]. +2. **์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ:** ๋…ธ๋“œ์˜ ์ขŒํ‘œ(`pos`), ํฌ๊ธฐ(`size`), ๊ทธ๋ฃน ๊ตฌ์„ฑ, ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์ƒํƒœ์™€ ๊ฐ™์€ UI ์ „์šฉ ์ •๋ณด๋ฅผ ํฌํ•จํ•จ [1, 3]. +3. **๋ช…์‹œ์  ๋งํฌ ์‹œ์Šคํ…œ (Explicit Links):** ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋Š” ๋ฐฑ์—”๋“œ ์‹คํ–‰์šฉ API ํฌ๋งท๊ณผ ์ฐจ๋ณ„ํ™”๋˜๋Š” ์ง€์ ์ž„ [1, 4, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ด๋ถ„๋ฒ•์  ์ง๋ ฌํ™” ๊ตฌ์กฐ:** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ Litegraph ๊ธฐ๋ฐ˜์˜ 'ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•œ 'API ํฌ๋งท'์„ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์šด์˜ํ•จ [1, 4, 6]. +- **์บ”๋ฒ„์Šค ์ƒํƒœ ๋ณต์› ํŒจํ„ด:** Litegraph ๊ทœ๊ฒฉ์„ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์—…ํ–ˆ๋˜ ์ขŒํ‘œ์™€ ๋…ธ๋“œ ๋ฐฐ์น˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์žฌ์ƒ์„ฑํ•จ [7, 8]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +- **๊ธฐ์ˆ ์  ๊ตฌ์„ฑ ์š”์†Œ:** Litegraph ํ‘œ์ค€์— ๋”ฐ๋ผ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” `id`(๊ณ ์œ  ๋ฒˆํ˜ธ), `type`(๋…ธ๋“œ ํด๋ž˜์Šค๋ช…), `pos`(์บ”๋ฒ„์Šค ๋‚ด x, y ์ขŒํ‘œ), `size`(๋„ˆ๋น„ ๋ฐ ๋†’์ด), `order`(์‹คํ–‰/๋ Œ๋”๋ง ์ˆœ์„œ) ๋“ฑ ํ•„์ˆ˜ ์†์„ฑ์„ ๊ฐ€์ง [3, 9]. +- **๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ •์˜:** ์—ฐ๊ฒฐ์„ฑ์€ `inputs`์™€ `outputs` ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ, ๊ฐ ์ž…๋ ฅ์€ ๊ณ ์œ ํ•œ ๋งํฌ ID๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์›(origin_id)๊ณผ ์Šฌ๋กฏ(origin_slot)์„ ์‹๋ณ„ํ•จ [5]. +- **๋น„์ฃผ์–ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ:** Maya, Blender, Unreal Engine ๋“ฑ ์ „๋ฌธ์ ์ธ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์†Œํ”„ํŠธ์›จ์–ด์™€ ์œ ์‚ฌํ•œ '์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ'๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์žกํ•œ ์ˆ˜ํ•™์ด๋‚˜ ์ฝ”๋“œ ์ดํ•ด ์—†์ด๋„ AI ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ [10, 11]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ:** ComfyUI๋Š” Litegraph ๊ทœ๊ฒฉ์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)์— ์‚ฝ์ž…ํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค๋กœ ๋“œ๋ž˜๊ทธํ–ˆ์„ ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ฆ‰์‹œ ๋ณต๊ตฌ๋˜๋„๋ก ์ง€์›ํ•จ [12, 13]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ๊ฐ„ ํ˜ธํ™˜์„ฑ ์ œ์•ฝ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ด์ „ ๋ฒ„์ „์˜ Litegraph ๊ธฐ๋ฐ˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์œ„์ ฏ์ด ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ [14, 15]. +- **์‹คํ–‰ ์—”์ง„๊ณผ์˜ ๊ดด๋ฆฌ:** Litegraph ํฌ๋งท์€ ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ๋น„๋Œ€ํ•˜์—ฌ ๋ฐฑ์—”๋“œ API ์š”์ฒญ ์‹œ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ 'Dev mode'๋ฅผ ํ†ตํ•œ API ํฌ๋งท ๋ณ€ํ™˜ ๊ณผ์ •์ด ํ•„์š”ํ•จ [8, 16]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI ์„ค์ •(Settings) ๋ฉ”๋‰ด:** ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด ์„ค์ • ์ฐฝ์— 'Lite Graph' ์„น์…˜์ด ๋ณ„๋„๋กœ ์กด์žฌํ•˜์—ฌ ๊ด€๋ จ ์‹œ๊ฐ ์˜ต์…˜์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ [17, 18]. +- **์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด๋ณด๋‚ด๊ธฐ(Export):** ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”๋‰ด์—์„œ 'Export'๋ฅผ ์„ ํƒํ•  ๋•Œ ์ƒ์„ฑ๋˜๋Š” `workflow.json` ํŒŒ์ผ์ด ์ด ๊ทœ๊ฒฉ์„ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•จ [7, 9]. +- **MetaData Parsing Logic:** ComfyUI ํ”„๋ก ํŠธ์—”๋“œ ํŒจํ‚ค์ง€ ๋‚ด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ(`src/scripts/metadata`)์—์„œ Litegraph ๊ธฐ๋ฐ˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ์ด ๊ณต์‹์ ์œผ๋กœ ์ˆ˜ํ–‰๋จ [19]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (ComfyUI ๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ์ˆ  ์‚ฌ์–‘์„ ํ†ตํ•ด ๊ทœ๊ฒฉ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Technical Architecture Review via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Metadata Forensics.md b/10_Wiki/Comfyui/Metadata Forensics.md new file mode 100644 index 00000000..4417162c --- /dev/null +++ b/10_Wiki/Comfyui/Metadata Forensics.md @@ -0,0 +1,61 @@ +--- +id: metadata-forensics +title: "Metadata Forensics" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Workflow Extraction", "Metadata Extraction"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Metadata", "Forensics"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-frontend-package/src/scripts/metadata", "exiftool -b -workflow input.png > workflow.json"] +github_commit: "" +--- + +# [[Metadata Forensics]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Metadata Forensics๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด๋ถ€์— ์€๋‹‰๋œ ์ƒ์„ฑํ˜• AI์˜ ์‹คํ–‰ ๋กœ์ง(JSON)์„ ์—ญ๊ณตํ•™์ ์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ ์ƒ์„ฑ ๊ธฐ์›์˜ ํˆฌ๋ช…์„ฑ๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ ์žฌํ˜„์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **Metadata Injection (๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฃผ์ž…):** ComfyUI์˜ `Save Image` ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ตœ์ข… ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ํ—ค๋”์— ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ๋ ˆ์ด์•„์›ƒ, ์„ค์ • ๋ฐ ํ”„๋กฌํ”„ํŠธ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค [4, 5]. +2. **tEXt/zTXt Chunks:** PNG ํŒŒ์ผ ํ˜•์‹ ๋‚ด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ(Frontend ํ˜•์‹)์™€ ํ”„๋กฌํ”„ํŠธ(API ํ˜•์‹)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ƒ์ดํ•œ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํŠน์ˆ˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์ด๋‹ค [3]. +3. **Data Fragility (๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ):** ๋‚ด์žฅ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ, ๋˜๋Š” ํŒŒ์ผ ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์˜ํ•ด ์ œ๊ฑฐ๋˜๊ธฐ ์‰ฌ์šด "๋น„ํ•„์ˆ˜์ " ์ •๋ณด๋กœ ์ทจ๊ธ‰๋˜์–ด ์†Œ์‹ค๋  ์œ„ํ—˜์ด ๋†’๋‹ค [3, 6]. +4. **Algorithmic Extraction (์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”์ถœ):** ์ „์šฉ ๋„๊ตฌ๋‚˜ CLI ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ์ง๋ ฌํ™”๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ๊ธฐ์ˆ ์  ์ ˆ์ฐจ์ด๋‹ค [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ด์ค‘ ํ˜•์‹ ์ €์žฅ ํŒจํ„ด:** ComfyUI๋Š” ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend JSON'๊ณผ ์‹คํ–‰์„ ์œ„ํ•œ 'API JSON'์„ ์ด๋ฏธ์ง€ ๋‚ด์— ๋™์‹œ์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ๊ณผ ํ”„๋กœ๊ทธ๋žจ์  ์žฌ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ๋ชจ๋‘ ์ถฉ์กฑ์‹œํ‚จ๋‹ค [3]. +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ณต๊ตฌ ์ „๋žต:** ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ComfyUI ์บ”๋ฒ„์Šค์— ์ง์ ‘ ๋Œ์–ด๋‹ค ๋†“์œผ๋ฉด ๋‚ด์žฅ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ํŒŒ์‹ฑํ•˜์—ฌ ์›๋ž˜์˜ ๋…ธ๋“œ ๊ตฌ์„ฑ์„ ๋ณต์›ํ•˜๋Š” ์ง๊ด€์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ๋ฐฉ์‹์ด๋‹ค [1, 4]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์—์„œ ์ƒ์„ฑ๋œ ๋ฏธ๋””์–ด ํŒŒ์ผ(PNG, WebP ๋“ฑ)์€ ๋‹จ์ˆœํ•œ ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ ์ด์ƒ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค [4, 9]. ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” `Save Image` ๋…ธ๋“œ๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ์ ์˜ **์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„์™€ ์„ค์ •์„ ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…**ํ•œ๋‹ค [4, 5]. ๊ตฌ์ฒด์ ์œผ๋กœ PNG ํŒŒ์ผ์˜ ๊ฒฝ์šฐ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ๋‹ด์€ Frontend ํ˜•์‹์˜ JSON๊ณผ ์‹ค์ œ ๋ฐฑ์—”๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ API ํ˜•์‹์˜ JSON(Prompt)์„ ์ €์žฅํ•œ๋‹ค [3]. + +์ด๋Ÿฌํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ฐฑ์—… ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์ƒ์„ฑ ๊ธฐ๋ฒ•์„ ๊ณต์œ ํ•˜๋Š” ํšจ์œจ์ ์ธ ์ˆ˜๋‹จ์ด ๋œ๋‹ค [1, 9]. ๊ทธ๋Ÿฌ๋‚˜ **๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ ์ธก๋ฉด์—์„œ ์ทจ์•ฝ์ **์ด ์กด์žฌํ•œ๋‹ค. ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ํŒŒ์ผ ์••์ถ• ๊ณผ์ •์—์„œ ํŒŒ์ผ ํฌ๊ธฐ ์ ˆ๊ฐ์„ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฉฐ, GIMP์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋กœ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ์—๋„ ์›๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค [3, 6, 8]. + +์‹ค๋ฌด์ ์ธ ํฌ๋ Œ์‹ ๋ฐ ์ถ”์ถœ์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. `exiftool`๊ณผ ๊ฐ™์€ ๋ฒ”์šฉ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํƒœ๊ทธ(`-workflow`)๋ฅผ ์ง€์ •ํ•ด JSON์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `ComfyUI Workflow Extractor`์™€ ๊ฐ™์€ ์›น ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋‚˜ `comfyui_extractor.py`์™€ ๊ฐ™์€ ์ „๋ฌธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ์„ ํ†ตํ•ด ์ˆ˜์ฒœ ๊ฐœ์˜ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค [2, 7, 10]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ณต์œ  ํŽธ์˜์„ฑ vs. ๋ฐ์ดํ„ฐ ๋ณด์กด:** ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ ๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์ถ”์ฒœ๋˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ ์ „์†ก์ด๋‚˜ ์••์ถ• ๊ณผ์ •์—์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ **์ค‘์š”ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ณ„๋„์˜ JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ**๋œ๋‹ค [3, 5, 6]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ์ถ”์ถœํ•œ ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฆฌ์Šคํฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค [6]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ํŒŒ์ผ ๊ฒฝ๋กœ:** `comfyui-frontend-package/src/scripts/metadata` (๊ณต์‹ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์ด ๊ตฌํ˜„๋œ ์œ„์น˜) [11]. +- **CLI ๋ช…๋ น:** `exiftool -b -workflow input.png > workflow.json` (PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์—์„œ ์ง๋ ฌํ™”๋œ JSON์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ํ‘œ์ค€ ๋ช…๋ น) [7]. +- **์ „๋ฌธ ๋„๊ตฌ:** `Comfy_UI_prompt_extractor`, `comfyui_extractor.py`, `comfyui-workflow-extractor` (AI ์•„ํŠธ์˜ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๋ฐ ๊ธฐ์ˆ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ ์ง€๋ฅผ ์œ„ํ•œ ์ถ”์ถœ ๋„๊ตฌ๋“ค) [7, 10]. +- **์„ค๊ณ„ ๊ฒฐ์ •:** PNG ํŒŒ์ผ ๋‚ด์— `workflow`(Frontend)์™€ `prompt`(API) ์ •๋ณด๋ฅผ ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ์ž๋™ํ™” ์‹คํ–‰์„ ๋™์‹œ์— ์ง€์›ํ•จ [3]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Metadata Stripping.md b/10_Wiki/Comfyui/Metadata Stripping.md new file mode 100644 index 00000000..e7db7d6c --- /dev/null +++ b/10_Wiki/Comfyui/Metadata Stripping.md @@ -0,0 +1,98 @@ +--- +id: metadata-stripping +title: "Metadata Stripping" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ", "Metadata Loss"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["GIMP", "Social Media Platforms", "File Compression Utilities"] +github_commit: "" +--- + +# [[Metadata Stripping]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌํ•‘์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ๋‚ด์žฅ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ํ™˜๊ฒฝ(์†Œ์…œ ๋ฏธ๋””์–ด, ํŽธ์ง‘๊ธฐ ๋“ฑ)์ด ๋ฐ์ดํ„ฐ ์ตœ์ ํ™”๋‚˜ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฌผ์˜ ์žฌํ˜„์„ฑ์„ ํŒŒ๊ดดํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค. [1, 2] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ (Data Fragility):** ์ด๋ฏธ์ง€ ๋‚ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)๋Š” ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด์— ์˜ํ•ด ์‰ฝ๊ฒŒ ์†์‹ค๋  ์ˆ˜ ์žˆ๋Š” ๋น„ํ•„์ˆ˜์  ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผ๋จ. [2] +- **์ฒญํฌ ๊ธฐ๋ฐ˜ ์ €์žฅ (Chunk-based Storage):** ComfyUI๋Š” PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ(Frontend)์™€ ํ”„๋กฌํ”„ํŠธ(API) JSON ๋ฌธ์ž์—ด์„ ์ €์žฅํ•จ. [2] +- **์ตœ์ ํ™” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ:** ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ์ „์†ก ๋„คํŠธ์›Œํฌ๊ฐ€ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋น„์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•จ. [2, 3] +- **์ถ”์ถœ ๋ฐ ๋ณต๊ตฌ (Extraction & Recovery):** ์†์‹ค๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ JSON ํŒŒ์ผ์„ ๋ณด์กดํ•˜๊ฑฐ๋‚˜, ํŠนํ™”๋œ ์ถ”์ถœ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž”์กด ๋ฐ์ดํ„ฐ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ํ–‰์œ„. [1, 4] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํ”Œ๋žซํผ ๊ธฐ๋ฐ˜ ์†์‹ค ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ํฌํ•จ๋œ PNG๋ฅผ ์†Œ์…œ ๋ฏธ๋””์–ด์— ๊ฒŒ์‹œํ•  ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋žซํผ์€ ์šฉ๋Ÿ‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‚ด์žฅ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌํ•‘ํ•จ. [1, 2] +- **๋„๊ตฌ ๊ธฐ๋ฐ˜ ์ œ๊ฑฐ ํŒจํ„ด:** GIMP์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋กœ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•  ๋•Œ, ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜์ง€ ์•Š๊ณ  ์‚ญ์ œ๋จ. [4] +- **์ „์†ก ๋งค์ฒด ์ข…์†์„ฑ:** ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ. [3] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„์™€ ์„ค์ •์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ์ทจํ•˜์ง€๋งŒ, ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋งค์šฐ **๋ถˆ์•ˆ์ •(fragile)**ํ•œ ์ƒํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. [2] + +- **์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๋Š” ์ฃผ๋กœ `Save Image` ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…๋œ๋‹ค. [5, 6] ๊ตฌ์ฒด์ ์œผ๋กœ PNG ํŒŒ์ผ ๊ตฌ์กฐ ๋‚ด์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ(Frontend format)๊ณผ ์‹คํ–‰ ๋กœ์ง(API format)์„ ๋™์‹œ์— ์ €์žฅํ•œ๋‹ค. [2] +- **์ŠคํŠธ๋ฆฌํ•‘์˜ ์ฃผ์š” ์›์ธ:** + - **์†Œ์…œ ๋ฏธ๋””์–ด ๋ฐ ์›น ํ”Œ๋žซํผ:** ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ์‹œ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ์—…๋กœ๋”์˜ ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค. [1, 2] + - **์ด๋ฏธ์ง€ ํŽธ์ง‘ ์†Œํ”„ํŠธ์›จ์–ด:** GIMP ๋“ฑ์˜ ๋„๊ตฌ๋กœ ์ด๋ฏธ์ง€๋ฅผ ํŽธ์ง‘ํ•˜๋ฉด ์›๋ณธ์— ํฌํ•จ๋˜์–ด ์žˆ๋˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ฒญํฌ ์ •๋ณด๊ฐ€ ์œ ์‹ค๋œ๋‹ค. [4] + - **ํŒŒ์ผ ์••์ถ• ๋ฐ ์ „์†ก:** ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ๋‚˜ ํŠน์ • ๋„คํŠธ์›Œํฌ ์ „์†ก ํ”„๋กœํ† ์ฝœ์€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์™ธ์˜ ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. [2, 3] +- **์˜ํ–ฅ ๋ฐ ๋Œ€์•ˆ:** ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ŠคํŠธ๋ฆฌํ•‘๋œ ์ด๋ฏธ์ง€๋Š” ComfyUI ์บ”๋ฒ„์Šค๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋‹ค. [3, 6] ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ **JSON ํŒŒ์ผ** ํ˜•ํƒœ๋กœ ๋ณ„๋„ ์ €์žฅ ๋ฐ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. [6] ์ด๋ฏธ ์ŠคํŠธ๋ฆฌํ•‘์ด ์šฐ๋ ค๋˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” `exiftool`์ด๋‚˜ ์ „๋ฌธ ์ถ”์ถœ๊ธฐ(Workflow Extractor)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ฆฌ ์ถ”์ถœํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค. [1, 7] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ด๋ฏธ์ง€ vs JSON ์ €์žฅ์˜ ์‹ ๋ขฐ์„ฑ:** ์ดˆ๊ธฐ์—๋Š” ์ด๋ฏธ์ง€ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์ด ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์†Œ๊ฐœ๋˜์ง€๋งŒ, ์†Œ์Šค์—์„œ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜ ๋•Œ๋ฌธ์— **JSON ํŒŒ์ผ ์ €์žฅ**์„ ์ตœ์ข…์ ์œผ๋กœ ๋” ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•œ๋‹ค. [6] +- **์žฌ์‚ฝ์ž… ์š”๊ตฌ์‚ฌํ•ญ:** ๋‹จ์ˆœ ์ถ”์ถœ์„ ๋„˜์–ด ์œ ์‹ค๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…(Insert)ํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌ(Copy)ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์š”๊ตฌ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ง€์†์ ์œผ๋กœ ์ œ๊ธฐ๋˜๊ณ  ์žˆ๋‹ค. [4] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **GIMP ํŽธ์ง‘ ํ™˜๊ฒฝ:** ์‚ฌ์šฉ์ž๊ฐ€ pythongosssss ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฏธ์ง€๋ฅผ ์ œ์ž‘ํ•œ ํ›„ GIMP์—์„œ ์ˆ˜์ • ์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์–ด ์žฌ์‚ฝ์ž… ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด์ง„ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋จ. [4] +- **์†Œ์…œ ๋ฏธ๋””์–ด ๊ฒŒ์‹œ๋ฌผ:** ์˜จ๋ผ์ธ์— ๊ฒŒ์‹œ๋œ PNG ํŒŒ์ผ๋“ค์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ JSON ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์žˆ์–ด, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ `Weird Wonderful AI Art` ๋“ฑ์˜ ์ „์šฉ ์ถ”์ถœ ๋„๊ตฌ๊ฐ€ ๊ฐœ๋ฐœ๋จ. [1] +- **Comfy-CLI ๋„๊ตฌ:** ์ด๋ฏธ์ง€, webp, mp4 ๋“ฑ ์ง€์›๋˜๋Š” ๋ฏธ๋””์–ด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ `comfy-cli`์— ํฌํ•จ์‹œํ‚ค๋ ค๋Š” ๊ฐœ์„  ์ œ์•ˆ(Issue #341)์ด ์ง„ํ–‰ ์ค‘์ž„. [4, 8] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์œ ์‹ค ์‚ฌ๋ก€ ๋ฐ ๋Œ€์‘ ๋„๊ตฌ ์กด์žฌ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด์Šˆ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ŠคํŠธ๋ฆฌํ•‘๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์‹ค์ฒด์ด์ž ํ‘œ์ค€ ๊ทœ๊ฒฉ์ž„. [9, 10] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON์˜ ๊ตฌ์กฐ์  ํŠน์„ฑ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์— ์–ด๋–ป๊ฒŒ ์ธ์ฝ”๋”ฉ๋˜๋Š”์ง€ ์ดํ•ด ๊ฐ€๋Šฅ. +- [[PNG Metadata Chunks]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” tEXt/zTXt ์œ„์น˜๋ฅผ ์ •์˜ํ•จ. [2] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Workflow Extractor]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ŠคํŠธ๋ฆฌํ•‘๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ์ง€์—์„œ ํšŒ์ˆ˜ํ•˜๋Š” ๋„๊ตฌ์ž„. [1] +- [[exiftool]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ช…๋ น์ค„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ํ‘œ์ค€ ๋„๊ตฌ์ž„. [7, 11] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- PNG ์™ธ์— WebP๋‚˜ MP4 ํฌ๋งท์—์„œ๋„ ๋™์ผํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌํ•‘ ํŒจํ„ด์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? [4] +- ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ ์ด๋ฏธ์ง€๋ฅผ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์†์‹ค ์ „์†ก ๊ทœ๊ฒฉ์ด ์กด์žฌํ•˜๋Š”๊ฐ€? [2, 3] +- ์ŠคํŠธ๋ฆฌํ•‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด AI ๊ฐ€ ์ด๋ฏธ์ง€์˜ ํŠน์„ฑ์„ ๋ถ„์„ํ•˜์—ฌ ์—ญ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€? +- ํŠน์ • ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ ์ค‘ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋Š” ์˜ˆ์™ธ์ ์ธ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”๊ฐ€? [1] +- `exiftool`์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋˜์ง€ ์•Š์€(unregistered) ํƒœ๊ทธ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ•์ œ๋กœ ์‚ฝ์ž…ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [11] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋งŒ ์ „๋‹ฌํ•˜์ง€ ๋ง๊ณ  JSON ํŒŒ์ผ์„ ๋ณ‘ํ–‰ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์œ ์‹ค์— ๋Œ€๋น„ํ•ด์•ผ ํ•จ. [3, 6] +- **System Design:** API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ์™ธ๋ถ€์—์„œ ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•จ. [12] +- **Operation / Maintenance:** ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐฐํฌ์šฉ ์ด๋ฏธ์ง€๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ „์šฉ ํˆด(์˜ˆ: pythongosssss workflow image)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•จ. [4] +- **Learning Path:** ์›Œํฌํ”Œ๋กœ์šฐ ์ €์žฅ ๋ฐฉ์‹์„ ์ตํž ๋•Œ ๋‹จ์ˆœ 'Save'์™€ 'Export'์˜ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€ ๋‚ด์žฅ ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•ด์•ผ ํ•จ. [6, 13] + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์œ ์‹ค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ณด์™„ ๊ธฐ์ˆ ์ž„. [14] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [Source 3, 14, 18, 32, 170] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Model Hashing (SHA-256).md b/10_Wiki/Comfyui/Model Hashing (SHA-256).md new file mode 100644 index 00000000..489f3956 --- /dev/null +++ b/10_Wiki/Comfyui/Model Hashing (SHA-256).md @@ -0,0 +1,96 @@ +--- +id: model-hashing-(sha-256) +title: "Model Hashing (SHA-256)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["SHA-256 Model Verification", "Content-based Model Identification"] +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: ["comfy-pack", ".cpack.zip"] +github_commit: "" +--- + +# [[Model Hashing (SHA-256)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋ชจ๋ธ ํ•ด์‹ฑ์€ ๊ฐ€๋ณ€์ ์ธ ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  ๊ณ ์œ ํ•œ SHA-256 ์ง€๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ์‹๋ณ„ํ•จ์œผ๋กœ์จ, ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ ๊ฐ„์˜ ์›Œํฌํ”Œ๋กœ ์ด์‹์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **SHA-256 ์•Œ๊ณ ๋ฆฌ์ฆ˜:** ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๊ณ ์œ ํ•œ ๊ณ ์ • ๊ธธ์ด ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์‹๋ณ„ํ•˜๋Š” ํ‘œ์ค€ ํ•ด์‹œ ํ•จ์ˆ˜์ด๋‹ค [1]. +2. **์ด์‹์„ฑ ๋ฐ ์žฌํ˜„์„ฑ (Portability):** ์ œ์ž‘์ž์™€ ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ ํŒŒ์ผ ์ด๋ฆ„(์˜ˆ: `sd_xl_base.safetensors` vs `sdxl_v10.safetensors`)์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋™์ผํ•œ ๋ชจ๋ธ์ž„์„ ์ธ์‹ํ•˜๊ฒŒ ํ•œ๋‹ค [1, 2]. +3. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ†ตํ•ฉ:** ์›Œํฌํ”Œ๋กœ JSON ๋˜๋Š” ๊ด€๋ จ ์•„์นด์ด๋ธŒ ํŒŒ์ผ ๋‚ด์— ํ•ด์‹œ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œ์ผœ ์‹œ์Šคํ…œ์ด ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ์ฐพ๋„๋ก ์ง€์›ํ•œ๋‹ค [1, 2]. +4. **์˜์กด์„ฑ ํ•ด๊ฒฐ (Dependency Resolution):** ComfyUI Manager์™€ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ๋ˆ„๋ฝ๋œ ๋ชจ๋ธ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒด ๋ชจ๋ธ์„ ์ œ์•ˆํ•  ๋•Œ ๊ธฐ์ค€์ ์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค [2]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ฝ˜ํ…์ธ  ๊ธฐ๋ฐ˜ ์‹๋ณ„ (Content-Addressable Identification):** ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์›์„ ์‹๋ณ„ํ•˜์—ฌ "Model Not Found" ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์„ค๊ณ„ ํŒจํ„ด์ด๋‹ค [1]. +- **์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง• (Workspace Packaging):** ๋‹จ์ˆœ JSON ๋ฐฐํฌ์—์„œ ๋ฒ—์–ด๋‚˜ JSON, ๋ชจ๋ธ ํ•ด์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์„ `.cpack.zip`๊ณผ ๊ฐ™์€ ๋‹จ์ผ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๋Š” ์ถ”์„ธ๊ฐ€ ๋ฐœ๊ฒฌ๋œ๋‹ค [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +๋ชจ๋ธ ํ•ด์‹ฑ์€ ComfyUI ์›Œํฌํ”Œ๋กœ์˜ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ธ **๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฐ ์ด๋ฆ„ ๋ถˆ์ผ์น˜**๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๊ธ‰ ์ง๋ ฌํ™” ๊ธฐ๋ฒ•์ด๋‹ค [1]. ์ผ๋ฐ˜์ ์œผ๋กœ ์›Œํฌํ”Œ๋กœ๋Š” ์ œ์ž‘์ž์˜ ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ์ฐธ์กฐํ•˜์ง€๋งŒ, ํƒ€์ธ์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ผ ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค [1]. + +์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **comfy-pack**๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ **SHA-256 ํ•ด์‹œ**๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค [1, 2]. ์‹œ์Šคํ…œ์€ ์‹คํ–‰ ์‹œ ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  ์ด ํ•ด์‹œ๊ฐ’์„ ๋Œ€์กฐํ•˜์—ฌ, ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๊ฐ€์ค‘์น˜๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋กœ์ปฌ ํŒŒ์ผ์„ ์ฐพ์•„ ์—ฐ๊ฒฐํ•œ๋‹ค [1]. + +์ตœ๊ทผ์—๋Š” ์›Œํฌํ”Œ๋กœ JSON ์™ธ์—๋„ ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” **์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ**๊ฐ€ ๋„์ž…๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ–ฅํ›„ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ํŠน์ • ๋…ธ๋“œ๊ฐ€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋”๋ผ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์  ํ† ๋Œ€๊ฐ€ ๋œ๋‹ค [2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ตœ์‹  ํŠธ๋ Œ๋“œ:** ๊ธฐ์กด์˜ ์›์‹œ(raw) JSON ์˜์กด ๋ฐฉ์‹์—์„œ ๋ชจ๋ธ ํ•ด์‹œ์™€ ๋…ธ๋“œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ **.cpack.zip** ๊ธฐ๋ฐ˜์˜ ํŒจํ‚ค์ง• ๋ฐฉ์‹์œผ๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ๋‹ค [2]. +- **์ˆ˜๋™ ํ•ด๊ฒฐ์˜ ํ•œ๊ณ„:** ์ˆ˜๋™์œผ๋กœ ๋ชจ๋ธ์„ ๋‹ค์‹œ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์€ ๋Œ€๊ทœ๋ชจ ์ž๋™ํ™”๋‚˜ API ํ™˜๊ฒฝ์—์„œ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ํ•ด์‹ฑ์„ ํ†ตํ•œ ์ž๋™ ๊ฒ€์ƒ‰(Comfy Manager search)์ด ๊ถŒ์žฅ๋˜๋Š” ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ œ์‹œ๋œ๋‹ค [2]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfy-pack:** ์›Œํฌํ”Œ๋กœ ์ง๋ ฌํ™” ์‹œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋„๊ตฌ๋กœ ๋ช…์‹œ๋จ [1, 2]. +- **.cpack.zip (Workspace Packaging):** ์›Œํฌํ”Œ๋กœ JSON๊ณผ ํ•จ๊ป˜ ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ํŒจํ‚ค์ง€ ํ˜•์‹์— ์ ์šฉ๋จ [2]. +- **ComfyUI Manager:** ๋ชจ๋ธ ๊ฒฝ๋กœ๊ฐ€ ๊นจ์กŒ์„ ๋•Œ ํ•ด์‹œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋ธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์— ํ™œ์šฉ๋จ [2]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๋„๊ตฌ์ธ comfy-pack๊ณผ ์—ฐ๊ณ„๋œ ๊ฐœ๋…์œผ๋กœ applied ์ˆ˜์ค€์— ๊ทผ์ ‘ํ•จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ๊ธฐ์ˆ  ๋ถ„์„ ์ž๋ฃŒ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[ComfyUI Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด ๋ชจ๋ธ ์ฐธ์กฐ ๋ฐฉ์‹์˜ ๋ณ€ํ™”. +- [[Serialization Formats (Frontend vs API)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์ž๋™ํ™” ์‹œ ๋ชจ๋ธ ํ•ด์‹ฑ์„ ํ†ตํ•œ ๊ฒฝ๋กœ ํ•ด๊ฒฐ์ด ํ•„์ˆ˜์ ์ž„. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ˆ„๋ฝ๋œ ๋ชจ๋ธ์„ ํ•ด์‹œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฐพ๊ณ  ์„ค์น˜ํ•˜๋Š” ์ฃผ์ฒด์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค๋ฌด์ ์ธ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ „๋žต. +- [[Workspace Packaging]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ•ด์‹œ๋ฅผ ํฌํ•จํ•œ ์•„์นด์ด๋ธŒ ๋ฐฐํฌ์˜ ์ตœ์ƒ์œ„ ๊ฐœ๋…์ž„. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- SHA-256 ํ•ด์‹œ ๊ณ„์‚ฐ์ด ์ˆ˜ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ(GB) ๊ทœ๋ชจ์˜ ๋ชจ๋ธ ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? +- ๋ชจ๋ธ ํŒŒ์ผ์˜ ์ผ๋ถ€(์˜ˆ: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ ํ•ด์‹œ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ์œ„์–‘์„ฑ(False Negative) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? +- ์„œ๋กœ ๋‹ค๋ฅธ ์ฒดํฌํฌ์ธํŠธ ๋ณ‘ํ•ฉ(Merging) ๋ชจ๋ธ์— ๋Œ€ํ•ด SHA-256 ํ•ด์‹ฑ์ด ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ  ์‹๋ณ„์˜ ์‹ ๋ขฐ๋„๋Š” ์–ด๋– ํ•œ๊ฐ€? +- ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ API ํ™˜๊ฒฝ(Replicate, Mystic ๋“ฑ)์—์„œ ๋กœ์ปฌ ๋ชจ๋ธ ํ•ด์‹œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์ค‘์น˜๋ฅผ ๋™์  ๋กœ๋”ฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹ฑ ์ •๋ณด๋ฅผ JSON ์Šคํ‚ค๋งˆ v1.0 ๋‚ด์— ๊ณต์‹์ ์œผ๋กœ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” RFC ๋…ผ์˜๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfy-pack`์„ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ ์ž๋™์œผ๋กœ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•จ [1]. +- **System Design:** ์›Œํฌํ”Œ๋กœ ๋ฐฐํฌ ์‹œ ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ฒคํ† ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ• [2]. +- **Operation / Maintenance:** ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ์‹œ์—๋„ API ํ˜ธ์ถœ์ด ๋Š๊ธฐ์ง€ ์•Š๋„๋ก ํ•ด์‹œ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋ธ ๋งคํ•‘ ๋ ˆ์ด์–ด ์šด์˜ [2]. +- **Learning Path:** ์ดˆ๋ณด์ž๊ฐ€ ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” "Model Not Found" ์˜ค๋ฅ˜์˜ ์›์ธ๊ณผ ํ•ด์‹œ๋ฅผ ํ†ตํ•œ ํ•ด๊ฒฐ ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•จ [1, 2]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Node Dependency Management]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ชจ๋ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•์žฅ. + + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on Source [1, 2]) \ No newline at end of file diff --git a/10_Wiki/Comfyui/Model Hashing.md b/10_Wiki/Comfyui/Model Hashing.md new file mode 100644 index 00000000..e5054c59 --- /dev/null +++ b/10_Wiki/Comfyui/Model Hashing.md @@ -0,0 +1,91 @@ +--- +id: model-hashing +title: "Model Hashing" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["SHA-256 Model Identification"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "portability", "serialization"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfy-pack", ".cpack.zip"] +github_commit: "" +--- + +# [[Model Hashing]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ๊ณ ์œ ํ•œ ๋””์ง€ํ„ธ ์ง€๋ฌธ(SHA-256)์„ ์ƒ์„ฑํ•˜์—ฌ ํŒŒ์ผ๋ช…์ด๋‚˜ ๊ฒฝ๋กœ์˜ ๋ถˆ์ผ์น˜์— ๊ด€๊ณ„์—†์ด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด์‹์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ  [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **SHA-256 ๊ธฐ๋ฐ˜ ์‹๋ณ„:** ๋ชจ๋ธ ํŒŒ์ผ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋ถ€์—ฌํ•จ [1]. +2. **ํŒŒ์ผ๋ช… ๋…๋ฆฝ์„ฑ (Filename Independence):** ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋ธ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„(์˜ˆ: `sd_xl_base_v10` vs `sdxl_base`) ๋™์ผ ๋ชจ๋ธ์ž„์„ ์ธ์‹ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ [1]. +3. **๊ณ ๊ธ‰ ์ง๋ ฌํ™” (Advanced Serialization):** ํ‘œ์ค€ JSON ํฌ๋งท์„ ๋„˜์–ด ๋ชจ๋ธ ํ•ด์‹œ๋ฅผ ํฌํ•จํ•œ ์•„ํ‹ฐํŒฉํŠธ ์ค‘์‹ฌ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ํŒจํ‚ค์ง•์„ ์ง€ํ–ฅํ•จ [1, 2]. +4. **์˜์กด์„ฑ ๋ฌด๊ฒฐ์„ฑ:** ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ์ •ํ™•ํ•œ ๋ชจ๋ธ ๋ฒ„์ „์„ ํ™•์ธํ•˜์—ฌ "Model Not Found" ์˜ค๋ฅ˜๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•จ [1, 2]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ฝ˜ํ…์ธ  ์ค‘์‹ฌ ์ฐธ์กฐ ํŒจํ„ด:** ํ•˜๋“œ์ฝ”๋”ฉ๋œ 'ํŒŒ์ผ ๊ฒฝ๋กœ' ๋Œ€์‹  ํŒŒ์ผ์˜ '๋‚ด์šฉ(Hash)'์„ ๊ธฐ์ค€์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฐธ์กฐ ์ „๋žต [1]. +- **์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง• ํŒจํ„ด:** JSON ์›Œํฌํ”Œ๋กœ์šฐ, ๋ชจ๋ธ ํ•ด์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์„ ํ•˜๋‚˜์˜ ์•„์นด์ด๋ธŒ(`.cpack.zip`)๋กœ ๋ฌถ์–ด ๋ฐฐํฌํ•˜๋Š” ํ‘œ์ค€ํ™” ํŒจํ„ด [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด์‹์„ฑ์—์„œ ๊ฐ€์žฅ ํฐ ์žฅ์• ๋ฌผ ์ค‘ ํ•˜๋‚˜๋Š” **๋ชจ๋ธ ํŒŒ์ผ์˜ ๋ช…๋ช… ๊ทœ์น™๊ณผ ๊ฒฝ๋กœ์˜ ๋ถˆ์ผ์น˜**์ด๋‹ค [1]. ์ œ์ž‘์ž์˜ ์ปดํ“จํ„ฐ์—์„œ๋Š” `sd_xl_base_v10.safetensors`๋กœ ์ €์žฅ๋œ ํŒŒ์ผ์ด ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์—์„œ๋Š” `sdxl_base.safetensors`๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ํ‘œ์ค€ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•ด๋‹น ๋ชจ๋ธ์„ ์ฐพ์ง€ ๋ชปํ•ด ์‹คํ–‰์— ์‹คํŒจํ•œ๋‹ค [1, 2]. + +์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `comfy-pack`๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ์ง๋ ฌํ™” ๋„๊ตฌ๋Š” **SHA-256 ํ•ด์‹œ**๋ฅผ ํ™œ์šฉํ•œ๋‹ค [1]. ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ์‹œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ์‹œํ‚ค๋ฉด, ์‹œ์Šคํ…œ์€ ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋ธ์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค [1]. + +์ด ๊ธฐ์ˆ ์€ ๋‹จ์ˆœํ•œ ์˜ค๋ฅ˜ ์ˆ˜์ •์„ ๋„˜์–ด, ํ–ฅํ›„ **์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง•**์˜ ํ•ต์‹ฌ ์š”์†Œ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ๋‹ค [2]. `.cpack.zip` ํฌ๋งท์€ ์›Œํฌํ”Œ๋กœ์šฐ JSON๊ณผ ํ•จ๊ป˜ ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๋ฅผ ๋‹ด์•„, ๊ฐœ๋ณ„ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋”๋ผ๋„ ์ƒ์„ฑ ์‹œ์ ์˜ ๋…ผ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” '์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ'๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํ‘œ์ค€ vs ํ™•์žฅ:** ๊ธฐ๋ณธ ComfyUI์˜ "Save" ๋˜๋Š” "Save (API)" ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๋ชจ๋ธ ํ•ด์‹ฑ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋Š” `comfy-pack`๊ณผ ๊ฐ™์€ ๋ณ„๋„์˜ ๊ณ ๊ธ‰ ๋„๊ตฌ๋‚˜ ํ–ฅํ›„ ๋„์ž…๋  ํ‘œ์ค€ ํฌ๋งท์—์„œ ์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค [1, 2]. +- **์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ:** ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ํŒŒ์ผ์— ๋Œ€ํ•œ SHA-256 ๊ณ„์‚ฐ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์†Œ์Šค์—์„œ๋Š” ์ด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ ์•ˆ์ •์„ฑ์„ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๋น„์šฉ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfy-pack:** ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ ๋ฐ ํŒŒ์ผ๋ช… ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ง๋ ฌํ™” ๋„๊ตฌ๋กœ ๋ช…์‹œ๋จ [1]. +- **.cpack.zip (์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง•):** ์›Œํฌํ”Œ๋กœ์šฐ JSON, ๋ชจ๋ธ ํ•ด์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์„ ํ†ตํ•ฉํ•˜์—ฌ ๋ฏธ๋ž˜์—๋„ ์ž‘๋™ ๊ฐ€๋Šฅํ•œ ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํฌ๋งท์— ์ ์šฉ๋จ [2]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (comfy-pack ๋“ฑ ์‹ค์ œ ๋„๊ตฌ์—์„œ ์‚ฌ์šฉ ์ค‘์ž„์„ ํ™•์ธ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (์ „๋ฌธ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ์ˆ  ๋ฌธ์„œ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ•ด์‹œ ์ •๋ณด๊ฐ€ ์‚ฝ์ž…๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๋˜๋Š” ๊ธฐ๋ณธ ์‹คํ–‰ ๊ตฌ์กฐ์ฒด [3]. +- [[Serialization Formats]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ํฌ๋งท์„ ๋„˜์–ด์„  ๋ฐ์ดํ„ฐ ๋ณด์กด ์ „๋žต์˜ ์ผ๋ถ€ [1, 4]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋ธ ๊ฒ€์ƒ‰ ๋ฐ ๋ˆ„๋ฝ๋œ ์˜์กด์„ฑ ํ•ด๊ฒฐ ์‹œ ํ•ด์‹œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ [2]. +- [[Workspace Packaging]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋ธ ํ•ด์‹ฑ์ด ์‹ค์ œ ๊ตฌํ˜„๋˜๋Š” ์ตœ์ƒ์œ„ ๋ฐฐํฌ ๋‹จ์œ„ [2]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- `comfy-pack`์—์„œ SHA-256 ํ•ด์‹œ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ(์˜ˆ: 10GB+)์— ๋Œ€ํ•œ ๊ณ„์‚ฐ ์†๋„ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹œ๊ฐ€ ์ผ์น˜ํ•˜์ง€๋งŒ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅผ ๋•Œ, ComfyUI ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ์„ ๋งคํ•‘ํ•˜๋Š” ๋กœ์ง์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”๊ฐ€? +- ํ–ฅํ›„ `.cpack.zip` ํ‘œ์ค€์ด ํ™•์ •๋  ๋•Œ, ๋ชจ๋ธ ํ•ด์‹œ ์™ธ์— ํ™˜๊ฒฝ(Python ๋ฒ„์ „ ๋“ฑ)์— ๋Œ€ํ•œ ํ•ด์‹ฑ๋„ ํฌํ•จ๋  ๊ณ„ํš์ด ์žˆ๋Š”๊ฐ€? +- ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ์ผ๋ถ€๊ฐ€ ๋ณ€๊ฒฝ(Fine-tuning ๋“ฑ)๋˜์—ˆ์„ ๋•Œ, ํ•ด์‹œ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์™ธ๋ถ€ API ์„œ๋น„์Šค(Replicate, Mystic ๋“ฑ)์—์„œ ๋ชจ๋ธ ํ•ด์‹ฑ์„ ํ†ตํ•œ ํ”„๋ฆฌ๋กœ๋“œ(Pre-load) ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfy-pack` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์˜์กด์„ฑ์ด ํฌํ•จ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด์‹ฑ ๋กœ์ง์„ ํ˜ธ์ถœํ•จ [1]. +- **System Design:** ๋‹ค์ˆ˜์˜ ๋จธ์‹ ์—์„œ ๋™์ผํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•จ [2]. +- **Operation / Maintenance:** ๋ชจ๋ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒŒ์ผ๋ช…์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ž‘๋™ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฌด๊ฒฐ์„ฑ ์ฒดํฌ์šฉ์œผ๋กœ ํ™œ์šฉํ•จ [1]. +- **Learning Path:** ๋‹จ์ˆœํ•œ UI ์ €์žฅ์„ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ๋ฐ ๋ฐฐํฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ํ•™์Šตํ•จ [5]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ๋ฐฐํฌ ์‹œ ํ•ด์‹œ ์ •๋ณด ๋“ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๋Š” ๋ฌธ์ œ์™€ ๊ทธ ๋ฐฉ์ง€์ฑ… [6]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Natural Language to Workflow Generation.md b/10_Wiki/Comfyui/Natural Language to Workflow Generation.md new file mode 100644 index 00000000..0bb5054e --- /dev/null +++ b/10_Wiki/Comfyui/Natural Language to Workflow Generation.md @@ -0,0 +1,69 @@ +--- +id: natural-language-to-workflow-generation +title: "Natural Language to Workflow Generation" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Natural Language to Workflow", "LLM-based Workflow Generation"] +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: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "ComfyGPT research"] +github_commit: "82df278" +--- + +# [[Natural Language to Workflow Generation]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ž์—ฐ์–ด ์„ค๋ช…์„ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ ํ†ตํ•ด ComfyUI์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(JSON)๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๋ฅผ ํ˜์‹ ์ ์œผ๋กœ ๋†’์ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ (Multi-stage Pipeline):** ๋…ผ๋ฆฌ ์ƒ์„ฑ(Generator), ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator), ๊ทธ๋ž˜ํ”„ ๊ตฌ์ถ•(Builder)์˜ ์ˆœ์ฐจ์  ๊ณผ์ •์„ ํ†ตํ•ด ์ž์—ฐ์–ด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [3, 4]. +- **๋…ธ๋“œ ์นดํƒˆ๋กœ๊น… (Node Cataloging):** ๋กœ์ปฌ์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์ƒ‰์ธํ™”ํ•˜์—ฌ LLM์ด ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค [5, 6]. +- **ํŠนํ™” LLM ๋ฏธ์„ธ์กฐ์ • (Fine-tuned LLMs):** Qwen2.5์™€ ๊ฐ™์€ ๋ชจ๋ธ์„ ComfyUI ์Šคํ‚ค๋งˆ ๋ฐ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ๋ฏธ์„ธ ์กฐ์ •ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ์— ์ตœ์ ํ™”๋œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•œ๋‹ค [1, 7]. +- **์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ (Semantic Embedding):** ์ž์—ฐ์–ด ์„ค๋ช…๊ณผ ์‹ค์ œ ๋…ธ๋“œ ํด๋ž˜์Šค ๋ช…์นญ ์‚ฌ์ด์˜ ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ •ํ™•ํ•œ ๋…ธ๋“œ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํ•ฉ์„ฑ-๊ฒ€์ฆ-์ปดํŒŒ์ผ ๋ฃจํ”„:** LLM์ด ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์„ค๊ณ„(Logical Synthesis)ํ•˜๊ณ , ์ด๋ฅผ ๋กœ์ปฌ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐ(Semantic Validation)ํ•œ ๋’ค, ์ตœ์ข… JSON์œผ๋กœ ๋ณ€ํ™˜(Graph Compilation)ํ•˜๋Š” ๊ตฌ์กฐ์  ์„ค๊ณ„ ํŒจํ„ด์ด ๊ด€์ฐฐ๋œ๋‹ค [3]. +- **๋กœ์ปฌ ํ™˜๊ฒฝ ์ ‘์ง€(Local Grounding):** ๋ชจ๋ธ์˜ ์ง€์‹์ด ํ›ˆ๋ จ ์‹œ์ ์— ๊ณ ์ •๋˜๋Š” ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ์‹คํ–‰ ์ „ "Update Node Catalog" ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค [5, 9]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ง€์‹œ์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” JSON ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [2]. + +**1. ์ƒ์„ฑ ๋‹จ๊ณ„ (Generator):** +์ด ๋‹จ๊ณ„์—์„œ๋Š” fine-tuned๋œ ๋ชจ๋ธ(์˜ˆ: Qwen2.5-14B)์ด ์ง€์‹œ์–ด์˜ ์˜๋„๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [3, 7]. ๋ชจ๋ธ์€ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„(์˜ˆ: CLIP Text Encode์—์„œ KSampler๋กœ์˜ ์—ฐ๊ฒฐ)์„ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ์ถ”์ƒ์ ์ธ JSON ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•œ๋‹ค [8]. + +**2. ๊ฒ€์ฆ ๋‹จ๊ณ„ (Validator):** +์ƒ์„ฑ๋œ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์˜ ๋…ธ๋“œ ๋ช…์นญ์ด ์‹ค์ œ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค [3, 4]. `sentence-transformers`์™€ ๊ฐ™์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜๋ฏธ์ ์œผ๋กœ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์‹ค์ œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ด ๊ณผ์ •์„ ํ†ตํ•ด LLM์˜ ํ™˜๊ฐ(Hallucination) ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค [7, 8]. + +**3. ๊ตฌ์ถ• ๋‹จ๊ณ„ (Builder):** +๊ฒ€์ฆ๋œ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ข… .json ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [3, 10]. ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ์˜ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์œ„์ ฏ ๊ฐ’(widgets_values) ๋“ฑ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ์ˆœ์„œ(order)๊ฐ€ ํ• ๋‹น๋œ๋‹ค [10, 11]. + +**์ฃผ์š” ๊ธฐ์ˆ ์  ์‚ฌ์–‘:** +- **๋ชจ๋ธ ๊ตฌ์กฐ:** GGUF ํฌ๋งท์œผ๋กœ ์–‘์žํ™”๋œ Qwen2.5 ๋ชจ๋ธ๊ตฐ์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํšจ์œจ์ ์ธ ์ถ”๋ก ์„ ์œ„ํ•ด llama-cpp-python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์š”๊ตฌ๋œ๋‹ค [7, 12]. +- **๋ฐ์ดํ„ฐ ํ•œ๊ณ„:** ์ •์  ๋ฏธ์„ธ ์กฐ์ •์„ ๊ฑฐ์นœ ๋ชจ๋ธ์€ ํ›ˆ๋ จ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€์†์ ์ธ ์นดํƒˆ๋กœ๊ทธ ์—…๋ฐ์ดํŠธ์™€ ์‚ฌ์šฉ์ž์˜ ๊ฐ๋…์ด ๊ถŒ์žฅ๋œ๋‹ค [9, 13]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +๊ณผ๊ฑฐ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋ฐฉ์‹์ด ์ˆ˜๋™์ ์ธ ๋…ธ๋“œ ์—ฐ๊ฒฐ๊ณผ JSON ํŽธ์ง‘์— ์˜์กดํ–ˆ๋‹ค๋ฉด, ์ตœ์‹  ๊ธฐ์ˆ ์ธ **ComfyGPT** ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฅผ '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค [3]. ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด, ์ •์  ๋ชจ๋ธ์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์ƒํƒœ๊ณ„๋ฅผ ๋”ฐ๋ผ์žก๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์ œ๊ธฐ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ–ฅํ›„์—๋Š” ์ •์  ๋ฏธ์„ธ ์กฐ์ •์„ ๋„˜์–ด์„  ๋™์  ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ง„ํ™”๊ฐ€ ํ•„์š”ํ•จ์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [9]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **DanielPFlorian/ComfyUI-WorkflowGenerator:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹ค์ œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ตฌํ˜„์ฒด์ด๋‹ค [2, 14]. +- **ํ•ต์‹ฌ ๋…ธ๋“œ ๊ตฌ์„ฑ:** `Workflow Generator Pipeline`, `WorkflowGenerator`, `NodeValidator`, `WorkflowBuilder`, `UpdateNodeCatalog` ๋“ฑ์˜ ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๊ตฌ์กฐ(`nodes/`, `generators/`) ๋‚ด์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [6, 8, 10, 14, 15]. +- **์ˆ˜์ • ์ด๋ ฅ:** Git ์ปค๋ฐ‹ `82df278`์—์„œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ธฐ๋ก์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [14]. +- **์—ฐ๊ตฌ ๊ธฐ๋ฐ˜:** ์ด ๊ธฐ์ˆ ์€ "ComfyGPT: A Self-Optimizing Multi-Agent System..." ์—ฐ๊ตฌ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋กœ์ปฌ ComfyUI ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค [2, 4]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๊ตฌํ˜„์ฒด์ธ ComfyUI-WorkflowGenerator ํ”„๋กœ์ ํŠธ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ GitHub ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/PNG Metadata Chunks.md b/10_Wiki/Comfyui/PNG Metadata Chunks.md new file mode 100644 index 00000000..af2e142f --- /dev/null +++ b/10_Wiki/Comfyui/PNG Metadata Chunks.md @@ -0,0 +1,72 @@ +--- +id: png-metadata-chunks +title: "PNG Metadata Chunks" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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-frontend-package/src/scripts/metadata", "exiftool -b -workflow"] +github_commit: "" +--- + +# [[PNG Metadata Chunks]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +PNG ์ด๋ฏธ์ง€์˜ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹œ๊ฐ์  ๊ตฌ์กฐ์™€ ์‹คํ–‰ ๋กœ์ง์„ ๋™์‹œ์— ๋‚ด์žฅํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ž์ฒด๋ฅผ **ํœด๋Œ€ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์  ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ**๋กœ ๋ณ€๋ชจ์‹œํ‚ค๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **tEXt ๋ฐ zTXt ์ฒญํฌ (Chunks):** ComfyUI๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•˜๋Š” PNG ํ‘œ์ค€์˜ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋ณด๊ด€ ์˜์—ญ์ด๋‹ค [2]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฃผ์ž… (Metadata Injection):** `Save Image` ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ตœ์ข… ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ๋ ˆ์ด์•„์›ƒ ์„ค์ •, ํ”„๋กฌํ”„ํŠธ๋ฅผ ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ์˜์—ญ์— ์ฃผ์ž…ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋‹ค [1, 4]. +- **๋ฐ์ดํ„ฐ ์ด์›ํ™” (Bifurcation):** ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€ ๋‚ด์— ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend ํฌ๋งท(workflow)'๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์‹คํ–‰์„ ์œ„ํ•œ 'API ํฌ๋งท(prompt)' ์ •๋ณด๋ฅผ ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค [2]. +- **๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ (Data Fragility):** ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ, ๋˜๋Š” ํŒŒ์ผ ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ ๋น„ํ•„์ˆ˜์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ์œ ์‹ค๋  ์œ„ํ—˜์ด ํฌ๋‹ค [2, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ข…๋‹จ ๋…ธ๋“œ ์ž๋™ ๊ธฐ๋ก ํŒจํ„ด:** ๊ฑฐ์˜ ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ `Save Image` ๋…ธ๋“œ์—์„œ ์ข…๋ฃŒ๋˜๋ฉฐ, ์ด ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„ ํ˜„์žฌ ์บ”๋ฒ„์Šค์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•œ๋‹ค [1]. +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ณต๊ตฌ ํŒจํ„ด:** ์‚ฌ์šฉ์ž๊ฐ€ PNG ํŒŒ์ผ์„ ComfyUI ์บ”๋ฒ„์Šค๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด, ์‹œ์Šคํ…œ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ฆ‰์‹œ ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ๊ณผ ์„ค์ •์„ ์žฌํ˜„ํ•œ๋‹ค [1, 5, 6]. +- **CLI ๊ธฐ๋ฐ˜ ๋ฒŒํฌ ์ถ”์ถœ ํŒจํ„ด:** ๋‹ค์ˆ˜์˜ ์ด๋ฏธ์ง€์—์„œ ์ˆ˜๋™ ์กฐ์ž‘ ์—†์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ํšŒ์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด `exiftool`๊ณผ ๊ฐ™์€ ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ์ฒญํฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค [7, 8]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ „ํ˜•์ ์ธ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ, ์ด๋ฅผ PNG ํŒŒ์ผ์˜ **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ**์— ์ €์žฅํ•จ์œผ๋กœ์จ ์ด๋™์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1, 9]. + +- **์ฒญํฌ์˜ ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ:** + - ์ฃผ๋กœ **tEXt** ๋˜๋Š” ์••์ถ•๋œ ํ˜•ํƒœ์ธ **zTXt** ์ฒญํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฌธ์ž์—ด์„ ์ €์žฅํ•œ๋‹ค [2]. + - ํ•˜๋‚˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ์ƒ์˜ ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ์ •๋ณด๋ฅผ ํฌํ•จํ•œ **Frontend JSON** ๋ฐ์ดํ„ฐ๋‹ค [2, 10]. + - ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ์—์„œ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์ธ **API JSON(Prompt)** ๋ฐ์ดํ„ฐ๋กœ, ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ ์••์ถ•๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„๋‹ค [2, 10, 11]. + +- **์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ ๋ฐ ๋ถ„์„:** + - ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ ์›น ๋„๊ตฌ๋‚˜ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค [8, 12]. + - ๋ช…๋ น์ค„ ๋„๊ตฌ์ธ `exiftool`์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, `-workflow` ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค [7, 8]. + - ๊ณต์‹์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์€ ComfyUI ํ”„๋ก ํŠธ์—”๋“œ ํŒจํ‚ค์ง€์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค [13]. + +- **์žฅ์  ๋ฐ ํ•œ๊ณ„:** + - ๋ณ„๋„์˜ JSON ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ์ƒ์„ฑ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋‹ค [14]. + - ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ผ์ด ์˜จ๋ผ์ธ์— ๊ฒŒ์‹œ๋˜๊ฑฐ๋‚˜ ์žฌ๊ฐ€๊ณต๋  ๋•Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ(Stripped)๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฉฐ, ๋งค์šฐ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ฐ„ํ˜น ์ผ๋ถ€ ๋…ธ๋“œ ์ •๋ณด๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ธฐ์ˆ ์  ํ•œ๊ณ„๊ฐ€ ๋ณด๊ณ ๋˜์—ˆ๋‹ค [2, 4, 12]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ €์žฅ ์•ˆ์ •์„ฑ ๋…ผ๋ž€:** ์ฒซ ๋ฒˆ์งธ ์ €์žฅ ๋ฐฉ์‹์ธ '์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ' ๋ฐฉ์‹์€ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ๋ณต์žกํ•œ ๋…ธ๋“œ๋‚˜ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๋ˆ„๋ฝํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด, ๋ณด๋‹ค ํ™•์‹คํ•œ ๋ฐฑ์—…์„ ์œ„ํ•ด์„œ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์ธ **์ˆ˜๋™ JSON ํŒŒ์ผ ์ €์žฅ**์ด ๊ถŒ์žฅ๋œ๋‹ค [4]. +- **ํฌ๋งท ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด, ๊ณผ๊ฑฐ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋‚ด์žฅ๋œ ๊ตฌ๋ฒ„์ „ JSON ํ˜•์‹์ด ์ตœ์‹  ๋ฒ„์ „์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์ ๋˜์—ˆ๋‹ค [5]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Exiftool ์ถ”์ถœ ๋ช…๋ น:** `exiftool -b -workflow input.png > workflow.json` ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด PNG์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ํ™•์ธ๋œ๋‹ค [7, 8]. +- **Frontend ํŒŒ์‹ฑ ์œ„์น˜:** ๊ณต์‹์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์€ `comfyui-frontend-package` ๋‚ด๋ถ€์˜ `src/scripts/metadata` ๊ฒฝ๋กœ์—์„œ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค [13]. +- **์ปค์Šคํ…€ ๋…ธ๋“œ ์—ฐ๋™:** `pythongosssss`์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋…ธ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ `workflow_templates`๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด JSON์„ ์ถ”์ถœํ•˜๋Š” ์ž‘์—… ํ๋ฆ„์ด ์กด์žฌํ•œ๋‹ค [15]. +- **์˜จ๋ผ์ธ ์ถ”์ถœ ๋„๊ตฌ:** `weirdwonderfulai.art` ๋“ฑ์—์„œ ์ œ๊ณตํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ๊ธฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋“œ๋กญํ•œ PNG์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ JSON ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [12, 16]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Serialization Formats (Frontend vs API).md b/10_Wiki/Comfyui/Serialization Formats (Frontend vs API).md new file mode 100644 index 00000000..08877a47 --- /dev/null +++ b/10_Wiki/Comfyui/Serialization Formats (Frontend vs API).md @@ -0,0 +1,113 @@ +--- +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) \ No newline at end of file diff --git a/10_Wiki/Comfyui/Serverless Deployment.md b/10_Wiki/Comfyui/Serverless Deployment.md new file mode 100644 index 00000000..3ea7d637 --- /dev/null +++ b/10_Wiki/Comfyui/Serverless Deployment.md @@ -0,0 +1,67 @@ +--- +id: serverless-deployment +title: "Serverless Deployment" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ", "API ๋ฐฐํฌ"] +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: ["new_pipeline.py", "pipeline.yaml", "fofr/any-comfyui-workflow"] +github_commit: "bc85382" +--- + +# [[Serverless Deployment]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ๋Š” ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ๋กœ์ง๋งŒ ๋‚จ๊ธด **API ํฌ๋งท JSON(Backend Format)**์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [1-4]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **API ํฌ๋งท JSON (workflow_api.json):** ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์‹คํ–‰์— ์ตœ์ ํ™”๋œ ์ŠคํŠธ๋ฆผ๋ผ์ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ, ๋…ธ๋“œ ์œ„์น˜๋‚˜ ํฌ๊ธฐ ๊ฐ™์€ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์˜ค์ง ๋…ธ๋“œ ํƒ€์ž…, ์ž…๋ ฅ๊ฐ’, ์—ฐ๊ฒฐ ์ •๋ณด๋งŒ์„ ํฌํ•จํ•œ๋‹ค [1, 4]. +2. **์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ (Serverless Endpoint):** GPU ๊ด€๋ฆฌ, ์˜คํ† ์Šค์ผ€์ผ๋ง, ํ”Œ๋žซํผ ์ตœ์ ํ™”๊ฐ€ ํฌํ•จ๋œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ์ง€์ ์œผ๋กœ, ์‚ฌ์šฉ์ž๋Š” ์ธํ”„๋ผ ๊ด€๋ฆฌ ์—†์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค [3]. +3. **์ž…๋ ฅ ์˜ค๋ฒ„๋ผ์ด๋“œ (Input Overrides):** ๋ฐฐํฌ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ”„๋กฌํ”„ํŠธ, ์‹œ๋“œ, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ๋“ฑ ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [5, 6]. +4. **์ข…์†์„ฑ ํŒจํ‚ค์ง• (Dependency Packaging):** ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜, Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ปค ์ด๋ฏธ์ง€๋‚˜ YAML ์„ค์ •์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Bifurcation(์ด๋ถ„ํ™”) ํŒจํ„ด:** ์‚ฌ์šฉ์ž ํŽธ์ง‘์šฉ 'Frontend JSON'๊ณผ ์‹คํ–‰ ์ „์šฉ 'API JSON'์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋ฉฐ, API ์š”์ฒญ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ›„์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [1, 9, 10]. +- **Pipeline-as-Code:** ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๋กœ์ง์„ Python ์Šคํฌ๋ฆฝํŠธ(`new_pipeline.py`)๋กœ, ํ™˜๊ฒฝ ์„ค์ •์„ YAML(`pipeline.yaml`)๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค [7]. +- **Remote Asset Referencing:** ๋กœ์ปฌ ํŒŒ์ผ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  URL ์ฐธ์กฐ๋‚˜ ZIP/TAR ์••์ถ• ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•œ๋‹ค [11, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +* **API ํฌ๋งท ํš๋“ ํ”„๋กœํ† ์ฝœ:** ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ JSON์„ ์–ป์œผ๋ ค๋ฉด ComfyUI ์„ค์ •(Settings) ๋ฉ”๋‰ด์—์„œ **'Enable Dev mode Options'**๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค [2, 11, 13, 14]. ์ดํ›„ ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” **'Save (API format)'** ๋˜๋Š” **'Export (API)'** ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค [2, 15]. +* **ํ”Œ๋žซํผ๋ณ„ ๋ฐฐํฌ ๋ฐฉ์‹:** + * **Mystic:** `pipeline.yaml`์— CUDA ๋ฐ Python ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๊ณ , `new_pipeline.py`์—์„œ ComfyUI ์„œ๋ฒ„ ์‹œ์ž‘ ๋ฐ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค [7, 8]. ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์—ฌ Mystic ๊ณ„์ •์— ํ‘ธ์‹œํ•˜๋ฉด ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค [8, 16]. + * **Replicate:** `fofr/any-comfyui-workflow`์™€ ๊ฐ™์€ ๋ฒ”์šฉ ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ์ „์šฉ API ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ Python/JavaScript ํด๋ผ์ด์–ธํŠธ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์ „์†กํ•œ๋‹ค [17-19]. + * **RunComfy:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ 'Serverless API (ComfyUI)'๋กœ ๋ฐฐํฌํ•˜๋ฉฐ, ํ”Œ๋žซํผ์ด ๋‚ด๋ถ€์ ์œผ๋กœ `workflow_api.json`์„ ์ €์žฅํ•˜๊ณ  API ํ˜ธ์ถœ ์‹œ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ’๋งŒ ์ ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค [4, 6, 20]. +* **๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ํ†ต์‹ :** + * **์ž…๋ ฅ:** ์ด๋ฏธ์ง€ ์ž…๋ ฅ ์‹œ `Load Image (Base64)` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๊ฑฐ๋‚˜, URL์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์˜ ์ž์›์„ ์ฐธ์กฐํ•œ๋‹ค [11, 21]. + * **์ถœ๋ ฅ:** ๊ฒฐ๊ณผ๋ฌผ ํ™•์ธ์„ ์œ„ํ•ด `SaveImageWebsocket` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น์†Œ์ผ“ ํ†ต์‹ ์œผ๋กœ ์ด๋ฏธ์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ˆ˜์‹ ํ•˜๊ฑฐ๋‚˜, ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์˜ ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค [21, 22]. +* **์ž๋™ํ™” ๋ฐ ๋ณ€ํ™˜ ๋„๊ตฌ:** `comfyui-workflow-to-api-converter-endpoint`๋ฅผ ์„ค์น˜ํ•˜๋ฉด `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ์ผ๋ฐ˜ `workflow.json`์„ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค [10, 23, 24]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +* **ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ํ‘œ์ค€ `workflow.json`์„ API ์—”๋“œํฌ์ธํŠธ(`prompt`)์— ์ง์ ‘ ์ „์†กํ•˜๋ฉด ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•˜์ง€ ๋ชปํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [10, 13]. +* **๊ฐ€๋…์„ฑ ์†์‹ค:** API JSON์€ ๋…ธ๋“œ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๋‹ค์‹œ ComfyUI UI๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ์ง„ '๋ผˆ๋Œ€๋งŒ ๋‚จ์€' ์ƒํƒœ๊ฐ€ ๋˜์–ด ํŽธ์ง‘์ด ๊ทน๋„๋กœ ์–ด๋ ต๋‹ค [25]. ๋”ฐ๋ผ์„œ ์›๋ณธ 'Full Workflow' JSON์„ ๋ฐ˜๋“œ์‹œ ๋ณ„๋„๋กœ ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค [25]. +* **์ข…์†์„ฑ ์ทจ์•ฝ์ :** ๋ฐฐํฌ๋œ ํ™˜๊ฒฝ์— ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜๋ฉด 'Red Boxes' ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `ComfyUI-Manager`๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ํ•ด๊ฒฐ์ด๋‚˜ ๋„์ปค ๊ธฐ๋ฐ˜์˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์ด ํ•„์ˆ˜์ ์ด๋‹ค [8, 26, 27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +* **`new_pipeline.py`**: Mystic ํ”Œ๋žซํผ์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ํ•ต์‹ฌ ํŒŒ์ด์ฌ ํŒŒ์ผ๋กœ, ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ JSON ์›Œํฌํ”Œ๋กœ์šฐ์— ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—ญํ• ์„ ํ•œ๋‹ค [7, 22]. +* **`pipeline.yaml`**: Mystic ๋ฐฐํฌ ์‹œ CUDA ๋ฒ„์ „, Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ, ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •์„ ํฌํ•จํ•˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‹ค [7, 8]. +* **`fofr/any-comfyui-workflow`**: Replicate์—์„œ ์–ด๋–ค API ํฌ๋งท JSON์ด๋“  ์ˆ˜์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ฒ”์šฉ ์„œ๋ฒ„๋ฆฌ์Šค ๋ชจ๋ธ์ด๋‹ค [17, 19]. +* **GitHub Commit `bc85382`**: `comfyui-workflow-to-api-converter-endpoint`์—์„œ ์ฝค๋ณด ์œ„์ ฏ์˜ ๋Œ€์†Œ๋ฌธ์ž ํ‘œ๊ธฐ ์˜ค๋ฅ˜(์˜ˆ: True vs true)๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹คํŒจ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ธฐ๋ก์ด ํ™•์ธ๋œ๋‹ค [28, 29]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Steganography in Generative AI.md b/10_Wiki/Comfyui/Steganography in Generative AI.md new file mode 100644 index 00000000..b8fa0a74 --- /dev/null +++ b/10_Wiki/Comfyui/Steganography in Generative AI.md @@ -0,0 +1,62 @@ +--- +id: steganography-in-generative-ai +title: "Steganography in Generative AI" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์€๋‹‰", "Metadata Embedding"] +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-to-Python-Extension", "Comfy_UI_prompt_extractor", "comfyui_extractor.py", "exiftool"] +github_commit: "" +--- + +# [[Steganography in Generative AI]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ƒ์„ฑํ˜• AI์˜ ๊ฒฐ๊ณผ๋ฌผ(์ด๋ฏธ์ง€) ๋‚ด๋ถ€์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ์ง(JSON)์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋กœ ์€๋‹‰ํ•จ์œผ๋กœ์จ, ์‹œ๊ฐ์  ์ž์‚ฐ๊ณผ ๊ทธ ์ œ์ž‘ ์ ˆ์ฐจ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์™„๋ฒฝํ•œ ์žฌํ˜„์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ธฐ์ˆ  [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฃผ์ž… (Metadata Injection):** ComfyUI์˜ 'Save Image' ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ตœ์ข… ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ์„ค์ • ๋ฐ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚ค๋Š” ํ”„๋กœ์„ธ์Šค [2, 4]. +- **PNG ์ฒญํฌ ๊ตฌ์กฐ (tEXt/zTXt Chunks):** PNG ํŒŒ์ผ ๊ทœ๊ฒฉ ๋‚ด์—์„œ ํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜๋œ ํŠน์ • ์˜์—ญ์œผ๋กœ, ComfyUI๋Š” ์ด๊ณณ์— 'workflow'(ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท)์™€ 'prompt'(API ํฌ๋งท)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ €์žฅํ•จ [5]. +- **๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ ˆ๋ฆฌํ‹ฐ (Metadata Fragility):** ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ์ผ๋ฐ˜ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(์˜ˆ: GIMP)๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ, ํŒŒ์ผ ์ตœ์ ํ™”๋‚˜ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ธ ์›Œํฌํ”Œ๋กœ์šฐ JSON์ด ์ œ๊ฑฐ๋˜์–ด ์žฌํ˜„์„ฑ์ด ์†Œ์‹ค๋˜๋Š” ํŠน์„ฑ [4-6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ณต๊ตฌ ํŒจํ„ด:** ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ComfyUI ์บ”๋ฒ„์Šค์— ์ง์ ‘ ๋Œ์–ด๋‹ค ๋†“์œผ๋ฉด ๋‚ด์žฅ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์ฆ‰๊ฐ์ ์œผ๋กœ ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ๋ณต๊ตฌํ•˜๋Š” ์ง๊ด€์  ์ธํ„ฐํŽ˜์ด์Šค ํŒจํ„ด [2, 7]. +- **์ด์ค‘ ์ง๋ ฌํ™” ์ €์žฅ ์ „๋žต:** PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋‚ด์— ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท'๊ณผ ์‹ค์ œ ์‹คํ–‰์„ ์œ„ํ•œ 'API/๋ฐฑ์—”๋“œ ํฌ๋งท'์„ ๋™์‹œ์— ์ €์žฅํ•˜์—ฌ ํ˜ธํ™˜์„ฑ์„ ๋†’์ž„ [5, 8]. +- **์‚ฌํ›„ ์ถ”์ถœ ๋ฐ ์ฃผ์ž… ํŒจํ„ด:** ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜์—ˆ๊ฑฐ๋‚˜ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€์—์„œ ๋กœ์ง์„ ์ถ”์ถœํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, `exiftool`์ด๋‚˜ ์ „์šฉ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ง„ ํƒœ๊ทธ์—์„œ JSON์„ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ํŒจํ„ด [9, 10]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์ƒํƒœ๊ณ„์—์„œ ์Šคํ…Œ๊ฐ€๋…ธ๊ทธ๋ž˜ํ”ผ๋Š” ์ฃผ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€(PNG, WebP ๋“ฑ) ๋‚ด๋ถ€์— ์›Œํฌํ”Œ๋กœ์šฐ์˜ "์†Œ์Šค ์ฝ”๋“œ"์— ํ•ด๋‹นํ•˜๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค [1, 2]. + +- **์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ๋Œ€๋ถ€๋ถ„์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” `Save Image` ๋…ธ๋“œ์—์„œ ์ข…๋ฃŒ๋˜๋ฉฐ, ์ด ๋…ธ๋“œ๊ฐ€ ๊ตฌ๋™๋  ๋•Œ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์˜ ๋น„๊ฐ€์‹œ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ „์ฒด ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ, ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ, ์ž…๋ ฅ๊ฐ’, ๋ชจ๋ธ ์„ค์ • ๋“ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค [2, 4]. ์ด๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ ์—†์ด ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ฐฑ์—… ๋˜๋Š” ๊ณต์œ  ๋งค์ฒด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [4]. +- **๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์„ธ๋ถ„ํ™”:** PNG ํŒŒ์ผ ๋‚ด์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ, ์—ฌ๊ธฐ์— ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋œ๋‹ค. ํ•˜๋‚˜๋Š” UI ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ **Frontend Format(workflow.json)**์ด๋ฉฐ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์ œ๋œ **API Format(prompt/workflow_api.json)**์ด๋‹ค [5]. +- **์ถ”์ถœ ๊ธฐ์ˆ :** ์ด๋ฏธ์ง€์—์„œ ์€๋‹‰๋œ ๋กœ์ง์„ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด `exiftool -b -workflow input.png > workflow.json`๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์—์„œ JSON ์ŠคํŠธ๋ง์„ ๋ถ„๋ฆฌํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค [9]. ๋˜ํ•œ `ComfyUI-to-Python-Extension`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ €์žฅํ•˜๋Š” ์ด๋ฏธ์ง€์— ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œ์ผœ ๋‹ค์‹œ UI๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค [11]. +- **ํ•œ๊ณ„์ :** ์ด๋Ÿฌํ•œ ์Šคํ…Œ๊ฐ€๋…ธ๊ทธ๋ž˜ํ”ผ ๋ฐฉ์‹์€ ๋งค์šฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์ด๋ฏธ์ง€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์˜จ๋ผ์ธ ํ”Œ๋žซํผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ์ •์ฑ…์— ์ทจ์•ฝํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ์œ„ํ—˜์ด ์ƒ์กดํ•œ๋‹ค [5, 7]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •๋ณด์˜ ๋ถˆ์™„์ „์„ฑ:** ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ ๋ฐฉ์‹(์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•)์€ ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ๋•Œ๋•Œ๋กœ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ณด๊ณ ๋˜์–ด, ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ JSON ํŒŒ์ผ ์ €์žฅ(๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•)์ด ๊ถŒ์žฅ๋œ๋‹ค [4]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด, ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ์ €์žฅ๋œ ๊ตฌ๋ฒ„์ „์˜ JSON ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์˜ ComfyUI์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [7]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **exiftool ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ:** `exiftool -b -workflow input.png` ๋ช…๋ น์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๋‚ด์˜ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ์ €์žฅ๋œ JSON์„ ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•จ [9, 10]. +- **ComfyUI-to-Python-Extension:** ์ƒ์„ฑ๋œ .py ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ์ €์žฅ๋˜๋Š” ์ด๋ฏธ์ง€์— ํ”„๋ŸฐํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด, ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ UI๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜์—ฌ ์žฌํŽธ์ง‘ ๊ฐ€๋Šฅ [11]. +- **Weird Wonderful AI Art (์ถ”์ถœ๊ธฐ):** ์›น ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜์œผ๋กœ PNG ํŒŒ์ผ์—์„œ JSON ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ถ”์ถœํ•ด์ฃผ๋Š” ์ „์šฉ ์„œ๋น„์Šค ๋„๊ตฌ [12, 13]. +- **Comfy_UI_prompt_extractor:** ์ด๋ฏธ์ง€์—์„œ ๊ธ์ • ํ”„๋กฌํ”„ํŠธ, API ๊ทธ๋ž˜ํ”„, UI ๋ ˆ์ด์•„์›ƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ JSON ํŒŒ์ผ๋กœ ์ผ๊ด„ ์ƒ์„ฑํ•˜๋Š” CLI ๋„๊ตฌ [9, 10]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Subgraph.md b/10_Wiki/Comfyui/Subgraph.md new file mode 100644 index 00000000..a222cac9 --- /dev/null +++ b/10_Wiki/Comfyui/Subgraph.md @@ -0,0 +1,62 @@ +--- +id: subgraph +title: "Subgraph" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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"] +github_commit: "bc85382" +--- + +# [[Subgraph]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Subgraph๋Š” ๋ณต์žกํ•œ ComfyUI ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์บก์Аํ™”ํ•˜๊ณ  ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๊ด€๋ฆฌ ๋ฐ ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ณต์‹ ๊ธฐ๋Šฅ์ด๋‹ค. [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๊ทธ๋ž˜ํ”„ ์บก์Аํ™” (Encapsulation):** ๋ณต์žกํ•œ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์˜ ์ƒ์œ„ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ๋ฌถ์–ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๊ด€๋ฆฌ ์ง€์ ์„ ๋‹จ์ˆœํ™”ํ•œ๋‹ค. [2, 3] +2. **์ค‘์ฒฉ ๊ตฌ์กฐ ์ง€์› (Nested Support):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€์— ๋˜ ๋‹ค๋ฅธ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋ฅผ ํฌํ•จํ•˜๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. [3] +3. **์ž…๋ ฅ ์Šฌ๋กฏ ๋งคํ•‘ (Slot Mapping):** ์ƒ์œ„ ๋…ธ๋“œ์˜ ์ž…๋ ฅ ์œ„์น˜์™€ ๋‚ด๋ถ€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ •์˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •ํ™•ํžˆ ์ผ์น˜์‹œํ‚ค๋Š” ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํฌํ•จํ•œ๋‹ค. [4] +4. **์‹คํ–‰ ๋ชจ๋ธ ํ†ตํ•ฉ:** ๋…ธ๋“œ ์‹คํ–‰ ์‹œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ ์ „์ฒด ์‹คํ–‰ ๋ฆฌ์ŠคํŠธ(Execution List)์˜ ์ผ๋ถ€๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. [5] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋งํฌ ID ์ถฉ๋Œ ๋ฐฉ์ง€ ํŒจํ„ด:** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€์˜ ๋งํฌ ID๊ฐ€ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋งํฌ ID์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์ ์ธ ID ํ• ๋‹น ์ฒด๊ณ„๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. [4] +- **API ๋ณ€ํ™˜ ์ตœ์ ํ™”:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ์ „์šฉ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ์„œ๋ธŒ๊ทธ๋ž˜ํ”„์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ๋…ธ๋“œ ์ž…๋ ฅ ์ฐธ์กฐ ๋ฐฉ์‹์œผ๋กœ ์ŠคํŠธ๋ฆผ๋ผ์ด๋‹ํ•œ๋‹ค. [3, 4] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +- **๊ณต์‹ ๋ฆด๋ฆฌ์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค:** Subgraph๋Š” ComfyUI์˜ ๊ณต์‹ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ€์ด๋“œ์˜ "Interface Guide" ์„น์…˜์—์„œ ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ ๋‹ค๋ฃจ์–ด์ง„๋‹ค. [1, 2] +- **์‹คํ–‰ ์—”์ง„๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ:** ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์—”์ง„์€ `get_output_data` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ UI ๊ด€๋ จ ์ถœ๋ ฅ๊ณผ ํ•จ๊ป˜ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. [5] +- **์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ํ™œ์šฉ:** ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž๋Š” "Subgraph blueprints" ๊ทœ๊ฒฉ์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. [6] +- **JSON ๋ณ€ํ™˜ ์‹œ์˜ ๊ธฐ์ˆ ์  ์ฒ˜๋ฆฌ:** + - ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€์˜ ๋งํฌ ID๊ฐ€ ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ ์—ฐ๊ฒฐ์ด ์†Œ์‹ค๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ์ด๋ฅผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์ด ํ•„์ˆ˜์ ์ด๋‹ค. [4] + - ์™ธ๋ถ€ ๋…ธ๋“œ์˜ ์Šฌ๋กฏ ์œ„์น˜์™€ ์‹ค์ œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ •์˜ ๋‚ด์˜ ์ž…๋ ฅ ์Šฌ๋กฏ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์ด๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋œ๋‹ค. [4] + - ์ค‘์ฒฉ๋œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์žฌ๊ท€์ ์ธ ๋ณ€ํ™˜ ๊นŠ์ด ์ œํ•œ(์˜ˆ: 100ํšŒ)์„ ๋‘์–ด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. [3] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **API ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ์ดˆ๊ธฐ์—๋Š” ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๊ฐ€ ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋‚ด๋ถ€ ๋งํฌ ID ์ถฉ๋Œ์ด๋‚˜ ์Šฌ๋กฏ ๋งคํ•‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋‚˜, ์ดํ›„ `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ํˆด์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์  ๊ฒฐํ•จ๋“ค์ด ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. [4, 7] +- **๋ฒ„์ „๋ณ„ ๊ธฐ๋Šฅ ์ฐจ์ด:** V2.09 ๋ฒ„์ „์—์„œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ž…๋ ฅ ์Šฌ๋กฏ ๋งคํ•‘ ๋ฐฉ์‹์ด ๊ฐœ์„ ๋˜๋Š” ๋“ฑ ์ง€์†์ ์ธ ์ŠคํŽ™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋‹ค. [4] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint (V2.09):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ •์˜์™€ ์™ธ๋ถ€ ๋…ธ๋“œ ๊ฐ„์˜ ์ž…๋ ฅ ์Šฌ๋กฏ ๋งคํ•‘ ์œ„์น˜๊ฐ€ ๋ถˆ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. [4] +- **comfyui-workflow-to-api-converter-endpoint (V2.07):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€ ๋งํฌ ID์™€ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ ๋งํฌ ID ๊ฐ„์˜ ์ถฉ๋Œ๋กœ ์ธํ•œ ์ž…๋ ฅ ์—ฐ๊ฒฐ ์†Œ์‹ค ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค. [4] +- **comfyui-workflow-to-api-converter-endpoint (V2.02):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ผ๋ฐ˜์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค. [7] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Visual Programming Environment.md b/10_Wiki/Comfyui/Visual Programming Environment.md new file mode 100644 index 00000000..a0b0ae12 --- /dev/null +++ b/10_Wiki/Comfyui/Visual Programming Environment.md @@ -0,0 +1,114 @@ +--- +id: visual-programming-environment +title: "Visual Programming Environment" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ", "Node-based Interface"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Visual Programming"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "ComfyUI/custom_nodes/ComfyUI-Manager" + - "ComfyUI-WorkflowGenerator (Commit: 82df278)" + - "comfyui-workflow-to-api-converter-endpoint (Commit: bc85382)" + - "comfyui_to_python.py" + - "/workflow/convert" + - "workflow_api.json" +github_commit: "82df278, bc85382" +--- + +# [[Visual Programming Environment]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI๋Š” ์ƒ์„ฑํ˜• AI์˜ ๋ณต์žกํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ, ์ฝ”๋“œ ์—†์ด ๋กœ์ง์„ ์„ค๊ณ„ํ•˜๊ณ  ์ด๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ ์‹คํ–‰ ๋ฐ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (DAG):** ๋ชจ๋ธ ๋กœ๋”, ์ƒ˜ํ”Œ๋Ÿฌ, ์ธ์ฝ”๋” ๋“ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ธ๋“œ๋“ค์ด ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๊ตฌ์กฐ์  ํ† ๋Œ€์ด๋‹ค [1, 4]. +2. **์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ (Procedural Framework):** ์ •์ ์ธ ๋ฉ”๋‰ด ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ด ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ '์†Œ์Šค ์ฝ”๋“œ' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [3, 5]. +3. **ํฌ๋งท์˜ ์ด์›ํ™” (Bifurcation of Formats):** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ **Frontend JSON**๊ณผ ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐ API ํ˜ธ์ถœ์— ์ตœ์ ํ™”๋œ **API JSON**์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์šด์˜๋œ๋‹ค [6-8]. +4. **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ๊ฑฐ๊พธ๋กœ ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค [9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ ํŒจํ„ด:** ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ ๋‚ด์— ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์‚ฝ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค [10, 11]. +- **API ์ตœ์ ํ™” ํŒจํ„ด:** ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์‹œ ๋ถˆํ•„์š”ํ•œ ์ขŒํ‘œ(pos), ํฌ๊ธฐ(size), ๊ทธ๋ฃน ๋“ฑ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์ฐธ์กฐ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‹จ์ˆœํ™”ํ•œ๋‹ค [6, 8, 12]. +- **์˜์กด์„ฑ ํ•ด๊ฒฐ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ JSON ๋‚ด `class_type`์„ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ž๋™์œผ๋กœ ์„ค์น˜๋ฅผ ์œ ๋„ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [13, 14]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์œผ๋กœ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์žกํ•œ ์ˆ˜ํ•™์  ์ดํ•ด๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด๋„ ์ •๊ตํ•œ ์ƒ์„ฑ AI ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค [2]. ์ด ํ™˜๊ฒฝ์˜ ํ•ต์‹ฌ์€ ๋ชจ๋“  ์ž‘์—… ๋‹จ์œ„๊ฐ€ **๋…ธ๋“œ(Node)**๋กœ ์ •์˜๋œ๋‹ค๋Š” ์ ์ด๋ฉฐ, ์ด ๋…ธ๋“œ๋“ค์€ ํŠน์ • ์Šฌ๋กฏ(Slot)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค [4, 15]. + +**JSON ์ง๋ ฌํ™” ์•„ํ‚คํ…์ฒ˜** +- **์Šคํ‚ค๋งˆ ๊ทœ๊ฒฉ:** ComfyUI JSON Schema v1.0(Draft-07 ์‚ฌ์–‘)์„ ๋”ฐ๋ฅด๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” `id`, `type`, `pos`, `size`, `widgets_values`, `inputs`, `outputs` ๋“ฑ์˜ ์†์„ฑ์„ ํ•„์ˆ˜์ ์œผ๋กœ ํฌํ•จํ•œ๋‹ค [16]. +- **์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๊ฒฝ๋กœ:** + - **์ˆ˜๋™ ์ƒ์„ฑ:** ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ `Ctrl + S`๋ฅผ ํ†ตํ•ด ์ง๋ ฌํ™”๋œ JSON ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค [17]. + - **์ž๋™ ์ถ”์ถœ:** ์ „์šฉ ๋„๊ตฌ(exiftool ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ JSON์„ ๋ณต์›ํ•œ๋‹ค [18, 19]. + - **ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ƒ์„ฑ:** Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ LLM์„ ํ†ตํ•ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [20, 21]. + +**์‹คํ–‰ ํ™˜๊ฒฝ์˜ ๋ถ„๋ฆฌ** +ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹(Litegraph ํ‘œ์ค€ ๊ธฐ๋ฐ˜)์€ ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์ธ๊ฐ„์˜ ํ˜‘์—…๊ณผ ์‹œ๊ฐ์  ํŽธ์ง‘์— ์ ํ•ฉํ•˜๋ฉฐ, API ํ˜•์‹์€ `/prompt` ์—”๋“œํฌ์ธํŠธ์— ์ฆ‰์‹œ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ ์••์ถ•๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋ฅผ ๋ค๋‹ค [6, 12, 22, 23]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ทจ์•ฝ์„ฑ:** ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์†Œ์…œ ๋ฏธ๋””์–ด๋‚˜ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ(Stripped)๋  ์œ„ํ—˜์ด ํฌ๋‹ค [11, 24]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [25]. +- **API ํ˜ธํ™˜์„ฑ ์˜ค๋ฅ˜:** ํ‘œ์ค€ 'Save'๋กœ ์ƒ์„ฑ๋œ JSON์„ API๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ 'Dev mode'๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ 'Save (API Format)'์œผ๋กœ ์ถ”์ถœํ•ด์•ผ ํ•œ๋‹ค [26]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI/custom_nodes/ComfyUI-Manager:** ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์‹ค์ œ ๊ตฌํ˜„์ฒด์ด๋‹ค [27, 28]. +- **ComfyUI-WorkflowGenerator (Commit: 82df278):** Qwen2.5 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด๋ฅผ ComfyUI JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [29, 30]. +- **comfyui-workflow-to-api-converter-endpoint (Commit: bc85382):** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ JS ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ์ผ๋ฐ˜ JSON์„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [26, 31]. +- **comfyui_to_python.py:** ์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์ ์ธ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค [32]. +- **workflow_api.json:** RunComfy ๋“ฑ์˜ ํ”Œ๋žซํผ์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค API ํ˜ธ์ถœ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ง๋ ฌํ™” ํŒŒ์ผ์ด๋‹ค [7]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ถ„์„ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•จ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐ ์˜์กด์„ฑ ๊ด€๊ณ„. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํฌ๋งท์˜ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์„ ๊ฒฐ์ •ํ•จ [6, 23]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ ๋ฐ ๊ทธ๋ฃน ๊ด€๋ฆฌ ๋ฐฉ์‹. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ๊ฐ์  ํ™˜๊ฒฝ์˜ ์„ค๊ณ„๋ฅผ ์ €์žฅํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š” ์ค‘๊ฐ„ ๋งค๊ฐœ์ฒด์ž„ [1, 33]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ˆ˜๋™/์ž๋™ ์ƒ์„ฑ ๋ฐฉ๋ฒ• ๋ฐ ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : ๊ทธ๋ž˜ํ”„๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ๊ธฐ์ˆ ์ž„ [9]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ ์‹คํ–‰ ๋ฐฉ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- JSON v1.0 ์Šคํ‚ค๋งˆ์—์„œ `widgets_values` ๋ฐฐ์—ด์˜ ์ˆœ์„œ๊ฐ€ ๋…ธ๋“œ ์‹คํ–‰ ์•ˆ์ •์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [16] +- ์ด๋ฏธ์ง€์˜ tEXt ์ฒญํฌ ์™ธ์— SVG ํฌ๋งท์„ ํ™œ์šฉํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹œ๊ฐํ™” ๋ฐ ๋ณด์กด ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”๊ฐ€? [34, 35] +- `object_info.json`์„ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ๋™์ ์œผ๋กœ ๋…ธ๋“œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [36] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์‹œ 'Semantic Validation' ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰์˜ ์ •ํ™•๋„ ํ•œ๊ณ„๋Š”? [37, 38] +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ด์‹์„ฑ(Portability) ํ•ด๊ฒฐ ๋ฐฉ์‹์˜ ์ƒ์„ธ ์•„ํ‚คํ…์ฒ˜๋Š”? [39] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹ค์‹œ๊ฐ„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ [26]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ์ ์ธ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(Headless) ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ [40, 41]. +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ(Red boxes)๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ณต๊ตฌ [13, 14]. +- **Learning Path:** ๊ธฐ๋ณธ ์˜ˆ์ œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ๋ถ„์„ํ•˜์—ฌ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›๋ฆฌ๋ฅผ ์Šต๋“ [4, 42]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Generative AI Pipeline]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์‹ค์ œ AI ๋ชจ๋ธ ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ์ „ํ™˜๋˜๋Š” ์ „์ฒด ์ฃผ๊ธฐ. +- [[Metadata Forensics]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: AI ์ƒ์„ฑ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๊ธฐ์ˆ  [18]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. Drawing on sources [1-186]. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Workflow API JSON (Backend Format).md b/10_Wiki/Comfyui/Workflow API JSON (Backend Format).md new file mode 100644 index 00000000..025c2af9 --- /dev/null +++ b/10_Wiki/Comfyui/Workflow API JSON (Backend Format).md @@ -0,0 +1,98 @@ +--- +id: workflow-api-json-(backend-format) +title: "Workflow API JSON (Backend Format)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API JSON", "Backend Format JSON"] +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-WorkflowGenerator", "ComfyUI-to-Python-Extension", "comfyui-workflow-to-api-converter-endpoint", "comfy_api_simplified"] +github_commit: "" +--- + +# [[Workflow API JSON (Backend Format)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ์‹คํ–‰ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋งŒ์„ ์ •์ œํ•˜์—ฌ, ComfyUI ๋ฐฑ์—”๋“œ ์—”์ง„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ์—์„œ ์ฆ‰๊ฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ตœ์ ํ™”๋œ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๋ฐ•๋ฆฌ (Stripping UI Metadata):** ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ์ •๋ณด, ์ƒ‰์ƒ ๋“ฑ ์บ”๋ฒ„์Šค ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ถ•์†Œํ•˜๊ณ  ์ฒ˜๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค [1-4]. +- **์ž„๋ฒ ๋””๋“œ ๋งํฌ ๊ตฌ์กฐ (Embedded Link Representation):** ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ , ๋…ธ๋“œ ์ž…๋ ฅ ํ•„๋“œ ๋‚ด์— ์†Œ์Šค ๋…ธ๋“œ ID์™€ ์ถœ๋ ฅ ์Šฌ๋กฏ ๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ฐธ์กฐ(์˜ˆ: `[5, 6]`)ํ•˜์—ฌ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ๋‹ค [1, 2, 7, 8]. +- **๊ธฐ๋Šฅ์  ํ‚ค ๋งคํ•‘ (Functional Key Mapping):** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด ํ‚ค(ID)๋กœ ์‹๋ณ„๋˜๋ฉฐ, `class_type`๊ณผ `inputs`๋ฅผ ํ•ต์‹ฌ ์†์„ฑ์œผ๋กœ ๋ณด์œ ํ•˜์—ฌ ๋ฐฑ์—”๋“œ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ์ง์ ‘ ๋งคํ•‘๋œ๋‹ค [2, 9-11]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์ „ํ™˜ ํŒจํ„ด:** ์ˆ˜๋™ ์ƒ์„ฑ ์‹œ ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Enable Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ 'Save (API Format)' ๋ฒ„ํŠผ์„ ๋…ธ์ถœ์‹œํ‚ค๋Š” ๊ฒƒ์ด ํ•„์ˆ˜ ์ ˆ์ฐจ์ด๋‹ค [3, 12-15]. +- **๋™์  ํŒŒ๋ผ๋ฏธํ„ฐ ์ฃผ์ž… ํŒจํ„ด:** ์ƒ์„ฑ๋œ JSON ํ…œํ”Œ๋ฆฟ์„ ๋กœ๋“œํ•œ ํ›„, ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ๋”•์…”๋„ˆ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ์‹œ๋“œ(Seed), ํ”„๋กฌํ”„ํŠธ, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ๋“ฑ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์žฌ์ „์†กํ•œ๋‹ค [9, 11, 16-18]. +- **๋ฐ์ดํ„ฐ ์ธ๋ผ์ธํ™” (Self-containment):** ์™ธ๋ถ€ ํŒŒ์ผ ์ฐธ์กฐ ๋Œ€์‹  "Load Image (Base64)" ๋…ธ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ Base64 ๋ฌธ์ž์—ด๋กœ JSON ๋‚ด๋ถ€์— ์ง์ ‘ ํฌํ•จ์‹œ์ผœ ์ž๊ฐ€ ํฌํ•จ๋œ ์š”์ฒญ์„ ๊ตฌ์„ฑํ•œ๋‹ค [19, 20]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Workflow API JSON์€ ComfyUI์˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์ง๋ ฌํ™” ํ˜•์‹ ์ค‘ ํ•˜๋‚˜๋กœ, ์ฃผ๋กœ **ํ”„๋กœ๊ทธ๋žจ ๋ฐฉ์‹์˜ ์‹คํ–‰ ๋ฐ API ํ˜ธ์ถœ**์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค [1, 2]. ์ด ํ˜•์‹์€ Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ ํ˜•์‹(`workflow.json`)๊ณผ ๋‹ฌ๋ฆฌ ๋ฐฑ์—”๋“œ ์—”์ง„์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ƒํ•˜๋Š” ํ‰๋ฉดํ™”๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„(Flattened execution graph)๋ฅผ ์ œ๊ณตํ•œ๋‹ค [1, 12]. + +๊ธฐ์ˆ ์ ์œผ๋กœ API JSON์€ ๋ฃจํŠธ ํ‚ค๊ฐ€ ๋…ธ๋“œ ID์ด๊ณ  ๊ฐ’์ด ๋…ธ๋“œ ์ •์˜์ธ ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค [10]. ๊ฐ ๋…ธ๋“œ ์ •์˜์—๋Š” `class_type`, `inputs`, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์ ์ธ `_meta` ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค [10]. ์—ฐ๊ฒฐ(Link)์€ ์ž…๋ ฅ ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ `[์†Œ์Šค_๋…ธ๋“œ_ID, ์†Œ์Šค_์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์ด๋Š” ํŠน์ • ์Šฌ๋กฏ(์˜ˆ: VAE Loader์˜ VAE ์ถœ๋ ฅ ์Šฌ๋กฏ)์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๋‹ค [7, 8]. + +์‹คํ–‰ ์‹œ ComfyUI ๋ฐฑ์—”๋“œ๋Š” ์ด JSON์„ ์ˆ˜์‹ ํ•˜์—ฌ '์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „(Execution Model Inversion)' ๋ฐฉ์‹์„ ์ ์šฉํ•œ๋‹ค [21]. ์ฆ‰, 'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ถ”์ ํ•˜๋ฉฐ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค [21]. ์ด ๊ณผ์ • ๋•๋ถ„์— JSON ๋‚ด์— ์‹คํ–‰๊ณผ ๋ฌด๊ด€ํ•œ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค [21]. ๋˜ํ•œ, API JSON์€ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ์ž‘์•„ ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ์•„์นด์ด๋น™์— ์œ ๋ฆฌํ•˜๋‹ค [22, 23]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ฐ€๋…์„ฑ ๋ฐ ํŽธ์ง‘์„ฑ:** API JSON์€ ์‹คํ–‰์—๋Š” ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋‚˜, ComfyUI UI๋กœ ๋‹ค์‹œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•  ๊ฒฝ์šฐ ๋…ธ๋“œ ์œ„์น˜ ์ •๋ณด ๋“ฑ์ด ์—†์–ด ๋กœ์ง๋งŒ ๋‚จ์€ '๋ผˆ๋Œ€' ์ƒํƒœ๋กœ ๋กœ๋“œ๋˜์–ด ์‹œ๊ฐ์  ํŽธ์ง‘์ด ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์ง€์ ๋œ๋‹ค [24, 25]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ ์ด์ „ ๋ฒ„์ „์˜ API JSON ํ˜•์‹์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋ฐฑ์—”๋“œ ์—”์ง„์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค [26]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** PNG ์ด๋ฏธ์ง€์— ์ž„๋ฒ ๋“œ๋œ API JSON ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด์„œ ์†์‹ค๋˜๊ธฐ ์‰ฝ๋‹ค [27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท์„ ๋ฐฑ์—”๋“œ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [28, 29]. +- **ComfyUI-to-Python-Extension:** API ํฌ๋งท์˜ JSON์„ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค [30, 31]. +- **comfy_api_simplified:** ๋…ธ๋“œ ํƒ€์ดํ‹€์„ ๊ธฐ์ค€์œผ๋กœ API JSON์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ํ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” Python ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค [16, 18]. +- **Replicate ๋ฐ RunComfy ํ”Œ๋žซํผ:** ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ API JSON์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค [4, 32, 33]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Primary Source via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋ฐ์ดํ„ฐ ํ‘œ์ค€] +- [[Workflow JSON (Frontend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์˜ ์›ํ˜•์ด ๋˜๋Š” ์‹œ๊ฐ์  ์ž‘์—… ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค [1, 34]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ๋ฐ์ดํ„ฐ ์œ ๋ฌด์— ๋”ฐ๋ฅธ ๋‘ ํฌ๋งท ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์™€ ๋ณ€ํ™˜ ํ•„์š”์„ฑ [2]. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ํ”„๋ŸฐํŠธ์—”๋“œ๊ฐ€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ํ‘œ์ค€์ด๋‹ค [1, 34]. + +#### [๊ตฌํ˜„ ๋ฐ ์ž๋™ํ™” ๋„๊ตฌ] +- [[ComfyUI API Integration]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์ด ์‹ค์ œ๋กœ ํ™œ์šฉ๋˜๋Š” ์ตœ์ข… ๋ชฉ์ ์ง€์ด๋‹ค [12, 35]. +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ด๋‹ค [36, 37]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ์ด ์—†๋Š” API JSON์„ ๋‹ค์‹œ UI์šฉ ํ”„๋ŸฐํŠธ์—”๋“œ JSON์œผ๋กœ ๋ณต์›ํ•  ๋•Œ, ๋…ธ๋“œ ๋ฐฐ์น˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€? +- ๋…ธ๋“œ ID๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ, ํŠน์ • ๋…ธ๋“œ๋ฅผ ํƒ€์ดํ‹€(Title) ๊ธฐ๋ฐ˜์œผ๋กœ ์•ˆ์ •์ ์œผ๋กœ ์‹๋ณ„ํ•˜์—ฌ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ์ตœ์ ์˜ ํœด๋ฆฌ์Šคํ‹ฑ์€ ๋ฌด์—‡์ธ๊ฐ€? [16, 18] +- Execution Model Inversion ๊ฐ€์ด๋“œ์— ๋ช…์‹œ๋œ ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ๋…ธ๋“œ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•˜๋Š”๊ฐ€? [21] +- ์ด๋ฏธ์ง€ ๋‚ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ๋œ API JSON์ด ์†์‹ค๋˜์—ˆ์„ ๋•Œ, ํ”ฝ์…€ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ถ”๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๋Š”๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํ™˜๊ฒฝ์—์„œ API JSON์˜ `_meta` ํ•„๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹คํ–‰ ๋กœ๊ทธ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [10] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ์‹œ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด API JSON์˜ ํŠน์ • ๋…ธ๋“œ `inputs` ๊ฐ’์„ ๋ฎ์–ด์”Œ์›Œ ์„œ๋ฒ„์— POST ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค [9, 20]. +- **System Design:** ์„œ๋ฒ„๋ฆฌ์Šค AI ์„œ๋น„์Šค ๊ตฌ์ถ• ์‹œ, ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ LLM์œผ๋กœ ํ•ด์„ํ•˜์—ฌ API JSON ๊ตฌ์กฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•œ๋‹ค [38-40]. +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด JSON ๋‚ด์— ์ •์˜๋œ `class_type`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ž๋™ ์„ค์น˜ํ•˜์—ฌ ํ™˜๊ฒฝ์„ ๋™๊ธฐํ™”ํ•œ๋‹ค [36, 41]. +- **Learning Path:** ๊ธฐ๋ณธ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ๋ฅผ API ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ , Python์—์„œ ์‹œ๋“œ๊ฐ’์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์‹คํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค [20, 42]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด ๋ชจ๋ธ ํŒŒ์ผ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ ๊ณ ์œ  ์‹๋ณ„ ๊ธฐ์ˆ  [43]. +- [[Base64 Image Encoding]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ์š”์ฒญ ์‹œ ํŒŒ์ผ ์—…๋กœ๋“œ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ JSON์— ์ง๋ ฌํ™”ํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹ [19, 20]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source references 29, 30, 32, 37, 38, 42, 43, 44, 45, 46, 71, 85, 86, 116, 124, 143, 144, 151, 152, 161, 162, 174, 192, 196 ๋“ฑ ํ™œ์šฉ) [1-4, 7-16, 18-21, 24, 28, 30, 31, 36, 43] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Workflow API JSON.md b/10_Wiki/Comfyui/Workflow API JSON.md new file mode 100644 index 00000000..e0154463 --- /dev/null +++ b/10_Wiki/Comfyui/Workflow API JSON.md @@ -0,0 +1,103 @@ +--- +id: workflow-api-json +title: "Workflow API JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["workflow_api.json", "Backend Format"] +duplicate_of: "" +source_trust_level: "B" +confidence_score: 0.95 +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: ["SethRobinson/comfyui-workflow-to-api-converter-endpoint", "pydn/ComfyUI-to-Python-Extension", "DanielPFlorian/ComfyUI-WorkflowGenerator", "deimos-deimos/comfy_api_simplified"] +github_commit: "" +--- + +# [[Workflow API JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Workflow API JSON์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ์ˆœ์ˆ˜ ์‹คํ–‰ ๋กœ์ง๊ณผ ์—ฐ๊ฒฐ์„ฑ๋งŒ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ComfyUI์˜ ์„œ๋ฒ„ ์ธก ์‹คํ–‰ ์ธํ„ฐํŽ˜์ด์Šค์šฉ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฐฑ์—”๋“œ ์‹คํ–‰ ์ตœ์ ํ™” (Backend Optimization):** ํ”„๋ก ํŠธ์—”๋“œ์šฉ ์‹œ๊ฐ์  ์ •๋ณด(์œ„์น˜, ํฌ๊ธฐ, ์ƒ‰์ƒ)๋ฅผ ์ œ์™ธํ•˜๊ณ  ์˜ค์ง `/prompt` ์—”๋“œํฌ์ธํŠธ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํฌํ•จํ•œ๋‹ค [1-3]. +- **๋…ธ๋“œ-์Šฌ๋กฏ ์—ฐ๊ฒฐ์„ฑ (Node-Slot Connectivity):** ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด ๋Œ€์‹  ๋…ธ๋“œ ์ž…๋ ฅ(inputs) ๋‚ด์— ์ง์ ‘ [์›๋ณธ ๋…ธ๋“œ ID, ์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค] ํ˜•์‹์œผ๋กœ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ž„๋ฒ ๋”ฉํ•œ๋‹ค [1, 4, 5]. +- **๊ณ ์œ  ์‹๋ณ„์ž ์ฒด๊ณ„ (Unique ID System):** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ ์ˆซ์žํ˜• ๋ฌธ์ž์—ด ํ‚ค(์˜ˆ: "5", "6")๋กœ ์‹๋ณ„๋˜๋ฉฐ, ์ด๋Š” ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ถ”์ ํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค [1, 3, 6]. +- **์ง๋ ฌํ™” ์œ ์—ฐ์„ฑ (Serialization Flexibility):** ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON ํ˜•์‹์„ ์ทจํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๋ณ„๊ฐœ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ์ง์˜ ๋ฐฐํฌ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [7-9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌํ•‘ (Metadata Stripping):** ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ `workflow.json`์—์„œ API ํ˜ธ์ถœ์šฉ `workflow_api.json`์œผ๋กœ ์ „ํ™˜ ์‹œ `pos`, `size`, `groups`์™€ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ถ•์†Œํ•˜๊ณ  ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๋†’์ธ๋‹ค [1, 2, 5]. +- **์‹คํ–‰ ๋ชจ๋ธ ์ธ๋ฒ„์ „ (Execution Model Inversion):** ์—”์ง„์ด 'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ํ•„์ˆ˜ ์ข…์†์„ฑ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ๋Š” ๋ฌด์‹œํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ทจํ•œ๋‹ค [10]. +- **์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ธ์ ์…˜ (Input Injection):** ์ž๋™ํ™” ์‹œ JSON ๋‚ด์˜ ํŠน์ • ๋…ธ๋“œ ID๋ฅผ ์ฐพ์•„ ์‹œ๋“œ(seed), ํ”„๋กฌํ”„ํŠธ(prompt), ๋˜๋Š” Base64 ์ธ์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค [6, 11-13]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ง๋ ฌํ™” ํ˜•์‹์€ ํฌ๊ฒŒ **ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท**๊ณผ **๋ฐฑ์—”๋“œ(API) ํฌ๋งท**์œผ๋กœ ์ด๋ถ„ํ™”๋œ๋‹ค [1, 2, 14]. API JSON์€ ์„œ๋ฒ„ ์ธก ์—”์ง„์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋…ผ๋ฆฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, `Litegraph` ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท๊ณผ ๋‹ฌ๋ฆฌ ๋งค์šฐ ๊ฐ„๊ฒฐํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค [1, 3, 15]. + +- **์ƒ์„ฑ ๋ฐฉ๋ฒ•:** ์‚ฌ์šฉ์ž๋Š” ์„ค์ • ๋ฉ”๋‰ด์—์„œ "Dev mode Options"๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ์ดํ›„ ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” "Save (API Format)" ๋˜๋Š” "Export (API)" ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ด ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [16-20]. +- **๊ตฌ์กฐ์  ํŠน์ง•:** ๋ฃจํŠธ ํ‚ค๋Š” ๋…ธ๋“œ ID์ด๋ฉฐ, ๊ฐ ๊ฐ’์€ `class_type`๊ณผ `inputs`๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค [6, 20]. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ๋…ธ๋“œ์˜ ์ž…๋ ฅ ํ•„๋“œ์— `[ "20", 1 ]`๊ณผ ๊ฐ™์€ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด ์ด๋Š” 20๋ฒˆ ๋…ธ๋“œ์˜ 2๋ฒˆ ์Šฌ๋กฏ(์ธ๋ฑ์Šค 1) ์ถœ๋ ฅ์ด ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค [4]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ:** ComfyUI์—์„œ ์ƒ์„ฑ๋œ PNG ๋˜๋Š” WebP ์ด๋ฏธ์ง€์—๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ API ํ”„๋กฌํ”„ํŠธ(JSON ํ˜•์‹)๊ฐ€ ๋ชจ๋‘ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt ๋˜๋Š” zTXt ์ฒญํฌ)๋กœ ์ €์žฅ๋˜์–ด ์žˆ์–ด, ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋กœ์ง์„ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค [21-24]. +- **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์กฐ์ž‘:** ํŒŒ์ด์ฌ์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, `comfy_api_simplified`์™€ ๊ฐ™์€ ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ ์ œ๋ชฉ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€๋ฅผ ์ž๋™ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [6, 25-27]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ฐ€๋…์„ฑ vs ํŽธ์ง‘์„ฑ:** API ํฌ๋งท์€ ์‹คํ–‰์—๋Š” ํšจ์œจ์ ์ด๋‚˜, ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ๊ฒฐ์—ฌ๋˜์–ด ์žˆ์–ด ๋‹ค์‹œ ComfyUI ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ ๋ณด์ด๊ฑฐ๋‚˜ ๊ตฌ์กฐ ํŒŒ์•…์ด ์–ด๋ ค์šด '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๊ฐ€ ๋œ๋‹ค [28-30]. +- **ํŒŒ์ผ ํฌ๋งท ํ˜ธํ™˜์„ฑ:** ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ ๊ตฌ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค [31, 32]. +- **์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ:** JSON ์ž์ฒด์—๋Š” ๋กœ์ง๋งŒ ํฌํ•จ๋˜๋ฏ€๋กœ, ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์ž๊ฐ€ ์‚ฌ์šฉํ•œ ๋™์ผํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด 'Red Box' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค [33, 34]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ JS ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ์ผ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [28, 35]. +- **ComfyUI-to-Python-Extension:** `.json` ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(headless) ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [25, 36]. +- **ComfyUI-WorkflowGenerator:** LLM(Qwen2.5 ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ API JSON ๊ทธ๋ž˜ํ”„๋กœ ํ•ฉ์„ฑํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•œ๋‹ค [37-39]. +- **fofr/any-comfyui-workflow (Replicate):** ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ JSON ๋ธ”๋กญ(blob)์„ ์ž…๋ ฅ๋ฐ›์•„ API๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค [40, 41]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ ๋ฐ ์ƒ์„ฑ ๋ฐฉ์‹ ํ™•์ธ๋จ) [42, 43] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository / Expert Tutorial) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ํ”„๋ก ํŠธ์—”๋“œ JSON์ด ์‹œ๊ฐ์  ํ‘œํ˜„์„ ์œ„ํ•ด ์ฑ„ํƒํ•œ ๊ธฐ๋ฐ˜ ํ‘œ์ค€์ž„ [1, 15]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: API ํฌ๋งท์œผ๋กœ ์ „ํ™˜ ์‹œ ์ œ๊ฑฐ๋˜๋Š” UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๊ทผ๊ฑฐ [1, 2]. +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ทผ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ตฌ์กฐ์ž„ [7, 44]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ์„ฑ๊ณผ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋…ผ๋ฆฌ์  ์›๋ฆฌ [7, 10]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ž„ [33, 34, 45]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฐํฌ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ „๋žต [34, 46]. +- [[/prompt endpoint]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท JSON์ด ์ตœ์ข…์ ์œผ๋กœ ์ „์†ก๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ชฉ์ ์ง€์ž„ [2, 16, 28]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„์˜ ์‹ค์ œ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜ [12, 13]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API JSON ๋‚ด์—์„œ ๋งํฌ ์ •๋ณด๋ฅผ ๋ณ„๋„ ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋…ธ๋“œ ์ž…๋ ฅ(inputs) ๋‚ด์— ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ด ์‹คํ–‰ ํšจ์œจ์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 4] +- LLM ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋ชจ๋ธ์€ ํ•™์Šต ๋ฐ์ดํ„ฐ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ I/O ์Šคํ‚ค๋งˆ๋ฅผ ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ํ•™์Šตํ•˜๊ณ  ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [44, 47, 48] +- `object_info.json`์„ ํ™œ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ API JSON์˜ ์œ ํšจ์„ฑ์„ ๋Ÿฐํƒ€์ž„์— ๊ฒ€์ฆํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜๋Š”๊ฐ€? [20, 49] +- ์‹คํ–‰ ๋ชจ๋ธ ์ธ๋ฒ„์ „(Execution Model Inversion) ๊ณผ์ •์—์„œ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ๋‚˜ ๋ฐ˜๋ณต ๋ฃจํ”„๊ฐ€ ํฌํ•จ๋œ ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”„์˜ ์ข…์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ถ”์ ํ•˜๋Š”๊ฐ€? [10] +- ๋ชจ๋ธ ํ•ด์‹ฑ(Model Hashing)์„ ํ†ตํ•ด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ, ์„œ๋กœ ๋‹ค๋ฅธ ๋จธ์‹  ๊ฐ„์˜ ๋ชจ๋ธ ๋ฒ„์ „ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [32, 46] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ๋ฐฐ๋„ˆ ๊ด‘๊ณ  ์ž๋™ ์ƒ์„ฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์‹œ, ํ…œํ”Œ๋ฆฟ JSON์˜ ํŠน์ • ๋…ธ๋“œ(์˜ˆ: CLIPTextEncode)๋ฅผ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Œ [12, 50]. +- **System Design:** ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ(Mystic, Replicate ๋“ฑ)์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ UI ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•œ ์ตœ์ ํ™”๋œ API JSON์„ ๊ธฐ๋ณธ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์„ค์ •ํ•จ [5, 19, 51]. +- **Operation / Maintenance:** `comfyui-workflow-to-api-converter-endpoint`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋งŒ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ ์ง์ „์— API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ๊ด€๋ฆฌ ํฌ์ธํŠธ์˜ ์ด์›ํ™”๋ฅผ ๋ฐฉ์ง€ํ•จ [29, 35]. +- **Learning Path:** ์ดˆ๋ณด์ž๋Š” ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ๋กœ์ง์„ ์ดํ•ดํ•˜๊ณ , ์ˆ™๋ จ์ž๋Š” ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ถ”์ถœ๋œ JSON์˜ ๋…ธ๋“œ ID์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ฝ”๋”ฉ ๋ฐฉ์‹์˜ ์ œ์–ด๋กœ ์ „์ดํ•จ [52-54]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Base64 Image Encoding]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ์š”์ฒญ ์‹œ ๋กœ์ปฌ ํŒŒ์ผ ๊ฒฝ๋กœ ๋Œ€์‹  ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ JSON์— ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๊ธฐ์ˆ ์  ๊ตฌํ˜„ ๋ฐฉ๋ฒ• [11, 13]. +- [[RAG (Retrieval-Augmented Generation)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ •์  ๋ชจ๋ธ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์‹œ๊ฐ„ ๋…ธ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฐจ์„ธ๋Œ€ AI ์—์ด์ „ํŠธ ์„ค๊ณ„ [44]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) [1-200] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Workflow JSON v1.0 Schema.md b/10_Wiki/Comfyui/Workflow JSON v1.0 Schema.md new file mode 100644 index 00000000..3598132b --- /dev/null +++ b/10_Wiki/Comfyui/Workflow JSON v1.0 Schema.md @@ -0,0 +1,117 @@ +--- +id: workflow-json-v1.0-schema +title: "Workflow JSON v1.0 Schema" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI JSON Schema", "Workflow v1.0 Specification"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Schema", "JSON"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "/specs/workflow_json" + - "/src/scripts/metadata" + - "comfyui-workflow-to-api-converter-endpoint" + - "ComfyUI-to-Python-Extension" +github_commit: "bc85382" +--- + +# [[Workflow JSON v1.0 Schema]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์ƒ์„ฑ ๋กœ์ง์„ **์œ ๋„ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)**๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์‹คํ–‰ ์—”์ง„ ์‚ฌ์ด์˜ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ด์›์  ์ง๋ ฌํ™” ํฌ๋งท (Bifurcation of Formats):** ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ๋ ˆ์ด์•„์›ƒ ๋ณด์กด์„ ์œ„ํ•œ **Frontend Format**(workflow.json)๊ณผ ์„œ๋ฒ„ ์ธก ์‹คํ–‰์— ์ตœ์ ํ™”๋œ **Backend/API Format**(workflow_api.json)์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค [3-5]. +- **Litegraph ํ‘œ์ค€ ๊ธฐ๋ฐ˜:** ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์€ ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ๋“ฑ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค [3, 6]. +- **์Šฌ๋กฏ ๊ธฐ๋ฐ˜ ์—ฐ๊ฒฐ์„ฑ (Slot-based Connectivity):** ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๊ณ ์œ ํ•œ ์ž…๋ ฅ/์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ, API ํฌ๋งท์—์„œ๋Š” ์ด๋ฅผ ๋…ธ๋“œ ๋‚ด๋ถ€์— ์ธ๋ผ์ธ ์ฐธ์กฐ๋กœ ๋‚ด์žฅํ•œ๋‹ค [3, 7, 8]. +- **JSON Schema v1.0 (Draft-07):** ๊ธฐ์ˆ ์  ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜ ์†์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ทœ์ •ํ•˜๋Š” ์ตœ์‹  ๊ณต์‹ ์‚ฌ์–‘์ด๋‹ค [9-11]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Metadata Redundancy ํŒจํ„ด:** PNG ํŒŒ์ผ ๋‚ด์— ์‹œ๊ฐ์  ํฌ๋งท(workflow)๊ณผ ์‹คํ–‰ ํฌ๋งท(prompt)์„ ๋™์‹œ์— ๋‚ด์žฅํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํ•œ ์žฅ๋งŒ์œผ๋กœ ํŽธ์ง‘๊ณผ ์žฌ์‹คํ–‰์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [12, 13]. +- **Execution Model Inversion:** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์‹คํ–‰์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ๋ฐฐ์ œํ•œ๋‹ค [14]. +- **Node Functional Mapping:** API ํฌ๋งท์—์„œ ๋งํฌ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  `[๋…ธ๋“œID, ์Šฌ๋กฏ๋ฒˆํ˜ธ]` ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ๊ฐ„์†Œํ™”ํ•˜์—ฌ ์ „์†ก ํšจ์œจ๊ณผ ํŒŒ์‹ฑ ์†๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [3, 15, 16]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +### 1. ๋…ธ๋“œ ๊ฐ์ฒด ์†์„ฑ (Node Object Properties) +v1.0 ์Šคํ‚ค๋งˆ์— ์ •์˜๋œ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค [8, 9]: +- **id:** ๊ทธ๋ž˜ํ”„ ๋‚ด ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ  ์ •์ˆ˜ ๋˜๋Š” ๋ฌธ์ž์—ด [9]. +- **type (๋˜๋Š” class_type):** ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋œ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋งคํ•‘๋˜๋Š” ์‹๋ณ„์ž [9, 16]. +- **pos & size:** ์บ”๋ฒ„์Šค์ƒ์˜ ์ขŒํ‘œ ๋ฐ ํฌ๊ธฐ ์ •๋ณด๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด (API ํฌ๋งท์—์„œ๋Š” ์ œ๊ฑฐ๋จ) [9, 16]. +- **widgets_values:** ํ…์ŠคํŠธ ๋ฐ•์Šค, ์Šฌ๋ผ์ด๋” ๋“ฑ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด [9, 15]. +- **order & mode:** ์‹คํ–‰/๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„ ๋ฐ ๋…ธ๋“œ์˜ ํ™œ์„ฑ ์ƒํƒœ(์˜ˆ: bypass)๋ฅผ ์ •์˜ํ•œ๋‹ค [8, 9]. + +### 2. ๊ทธ๋ž˜ํ”„ ์—ฐ๊ฒฐ ๊ตฌ์กฐ (Link and Slot Connectivity) +- **์—ฐ๊ฒฐ ์ •์˜:** ๋…ธ๋“œ์˜ `inputs` ๋ฐฐ์—ด์€ ์œ ์ž…๋˜๋Š” ์„ ์˜ ID๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ, `outputs` ๋ฐฐ์—ด์€ ์—ฌ๋Ÿฌ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๋งํฌ ID๋“ค์˜ ๋ฐฐ์—ด์„ ํฌํ•จํ•œ๋‹ค [7]. +- **์Šฌ๋กฏ ์ธ๋ฑ์‹ฑ:** ํŠน์ • ๋…ธ๋“œ์˜ ์ถœ๋ ฅ(์˜ˆ: VAE Loader์˜ VAE ์ถœ๋ ฅ)์ด ์ •ํ™•ํžˆ ์–ด๋–ค ์Šฌ๋กฏ์—์„œ ์ƒ์„ฑ๋˜์–ด ์†Œ๋น„๋˜๋Š”์ง€ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค [7]. +- **API ํฌ๋งท์˜ ํŠน์ˆ˜์„ฑ:** `workflow_api.json`์€ ์‹œ๊ฐ์  ๋งํฌ ๋ฐฐ์—ด์„ ์ œ๊ฑฐํ•˜๊ณ , ๋…ธ๋“œ ์ž…๋ ฅ ํ•„๋“œ ๋‚ด์— ์ง์ ‘ `["๋…ธ๋“œID", ์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‰ํƒ„ํ™”(Flattening)ํ•œ๋‹ค [3, 15]. + +### 3. ๋ณด์กฐ ์Šคํ‚ค๋งˆ (object_info.json) +- ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ ์นดํƒˆ๋กœ๊ทธ์ด๋‹ค [5, 17]. +- ๊ฐ ๋…ธ๋“œ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์ž…๋ ฅ ์œ ํ˜•, ๋ฒ”์œ„, ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฐ ํˆดํŒ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์™ธ๋ถ€ ๋„๊ตฌ์—์„œ JSON์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค [17-19]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ํ˜„์žฌ v1.0์ด ์ตœ์‹ ์ด์ง€๋งŒ, ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด 0.4 ๋ฒ„์ „ ๋“ฑ ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์ด ์ง€์ ๋œ๋‹ค [10, 11, 20]. +- **๋ฐ์ดํ„ฐ ํŒŒํŽธํ™”:** ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ์ถ”์ถœํ•œ JSON์€ ์ข…์ข… ์ปค์Šคํ…€ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ์บ”๋ฒ„์Šค์— 'Red Boxes' ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [21-23]. +- **API ํฌ๋งท์˜ ๊ฐ€๋…์„ฑ:** ์‹คํ–‰ ์ตœ์ ํ™”๋œ API JSON์€ ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์ œ๊ฑฐ๋œ 'Skeleton' ํ˜•ํƒœ์ด๋ฏ€๋กœ, ์ด๋ฅผ ๋‹ค์‹œ ComfyUI ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํŽธ์ง‘ํ•˜๊ธฐ์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค [24, 25]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI ๊ณต์‹ ์‚ฌ์–‘:** `/specs/workflow_json` ๊ฒฝ๋กœ์—์„œ v1.0 ๊ทœ๊ฒฉ์„ ๊ณต์‹ ๊ด€๋ฆฌํ•œ๋‹ค [10]. +- **ํ”„๋ก ํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ:** `ComfyUI_frontend/src/scripts/metadata`์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค [26]. +- **comfyui-workflow-to-api-converter-endpoint:** ์„œ๋ฒ„ ์ธก ํŒŒ์ด์ฌ ๋กœ์ง์„ ํ†ตํ•ด Frontend JSON์„ API JSON ๊ทœ๊ฒฉ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™˜ํ•˜๋ฉฐ, `bc85382` ์ปค๋ฐ‹์—์„œ ์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์˜ ์ •๊ทœํ™” ์ด์Šˆ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค [24, 27-29]. +- **ComfyUI-to-Python-Extension:** JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋™์ผํ•œ ๋กœ์ง์˜ `.py` ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ v1.0 ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค [30, 31]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์˜ ์ŠคํŽ™ ์ •์˜ ์™„๋ฃŒ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ณธ ์Šคํ‚ค๋งˆ๊ฐ€ ์ƒ์„ฑ ๋ฐฉ๋ฒ•๋ก ์˜ ๊ธฐ์ˆ ์  ๊ธฐ๋ฐ˜์ด ๋จ. +- [[Dev mode Options]] + - ์—ฐ๊ฒฐ ์ด์œ : ์Šคํ‚ค๋งˆ์˜ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ(Frontend/API) ์ค‘ API ํฌ๋งท์„ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์ „์ œ ์กฐ๊ฑด์ž„. + +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ๊ทœ์ •ํ•จ. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๊ทธ๋ž˜ํ”„๋ฅผ ํ•ด์„ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ์›๋ฆฌ์ž„. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ์Šคํ‚ค๋งˆ ๋‚ด์˜ `class_type`์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๋ณต๊ตฌํ•จ. +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ์ด์‹ํ•˜๋Š” ์‹ค์ œ ์‚ฌ๋ก€์ž„. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API ํฌ๋งท์—์„œ ๋งํฌ๋ฅผ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ธ๋ผ์ธํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ์ˆœํ™˜ ์ฐธ์กฐ(Circular Reference) ๋ฐฉ์ง€์— ์–ด๋–ค ๊ธฐ์—ฌ๋ฅผ ํ•˜๋Š”๊ฐ€? +- `object_info.json`์˜ ์Šคํ‚ค๋งˆ ๋ฐ์ดํ„ฐ์™€ ์‹ค์ œ ๋…ธ๋“œ์˜ `INPUT_TYPES` ๋ฉ”์„œ๋“œ ์‚ฌ์ด์˜ ๋™๊ธฐํ™” ์‹คํŒจ ์‹œ ์–ด๋–ค ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? +- v1.0 ์Šคํ‚ค๋งˆ์—์„œ `widgets_values` ๋ฐฐ์—ด์˜ ์ˆœ์„œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•œ ์œ„์ ฏ ์ถ”๊ฐ€ ์‹œ ์–ด๋–ค ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š”๊ฐ€? +- PNG ํŒŒ์ผ์˜ `tEXt` ์ฒญํฌ ์šฉ๋Ÿ‰ ์ œํ•œ์ด ๋งค์šฐ ๊ฑฐ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ JSON(์˜ˆ: ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋…ธ๋“œ) ์ €์žฅ์— ํ•œ๊ณ„๋กœ ์ž‘์šฉํ•˜๋Š”๊ฐ€? +- `comfy-pack`๊ณผ ๊ฐ™์€ ๋„๊ตฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ ํ•ด์‹ฑ ๊ธฐ์ˆ ์ด JSON ์Šคํ‚ค๋งˆ ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ํ‘œ์ค€ํ™”๋  ์ˆ˜ ์žˆ๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Unity, Web App ๋“ฑ)์—์„œ ComfyUI ์„œ๋ฒ„์— ์ž‘์—…์„ ์š”์ฒญํ•  ๋•Œ API JSON์„ ์ƒ์„ฑํ•˜๊ณ  ์ „์†กํ•ด์•ผ ํ•œ๋‹ค [28, 32]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด JSON ๋‚ด์˜ ํŠน์ • ๋…ธ๋“œ ID์™€ ์ž…๋ ฅ ํ•„๋“œ(์˜ˆ: ํ”„๋กฌํ”„ํŠธ, ์‹œ๋“œ)๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ๋กœ์ง์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค [33, 34]. +- **Operation / Maintenance:** ์ปค์Šคํ…€ ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ ์‹œ JSON ๋‚ด `class_type` ๋ช…์นญ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ํŒŒ์†๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค [20, 35]. +- **Learning Path:** ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋ฉด ์‹œ๊ฐ์  ํˆด ์—†์ด๋„ ์ˆœ์ˆ˜ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ AI ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [30, 36]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ์Šคํ‚ค๋งˆ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ ํƒ€์ž…์„ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์—ฐ๊ตฌ. +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์†Œ์…œ ๋ฏธ๋””์–ด ๋ฐฐํฌ ์‹œ ์ด๋ฏธ์ง€ ๋‚ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ๋Œ€์‘ ๋ฐฉ์•ˆ ๋ฐ ์™ธ๋ถ€ JSON ์ €์žฅ ์ „๋žต. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Workflow JSON.md b/10_Wiki/Comfyui/Workflow JSON.md new file mode 100644 index 00000000..0d8c3df6 --- /dev/null +++ b/10_Wiki/Comfyui/Workflow JSON.md @@ -0,0 +1,111 @@ +--- +id: workflow-json +title: "Workflow JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Workflow API JSON", "Frontend 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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes/ComfyUI-Manager", "ComfyUI/custom_nodes/ComfyUI-WorkflowGenerator", "ComfyUI/models/LLM/", "workflow_api.py"] +github_commit: "82df278, bc85382" +--- + +# [[Workflow JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ Workflow JSON์€ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๋น„์ˆœํ™˜ ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ณต์žกํ•œ ์ƒ์„ฑํ˜• AI ํŒŒ์ดํ”„๋ผ์ธ์„ ํœด๋Œ€ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ž๋™ํ™”๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋งค๊ฐœ์ฒด์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ด๋ถ„ํ™”๋œ ์ง๋ ฌํ™” ํฌ๋งท:** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ **Frontend ํฌ๋งท(workflow.json)**๊ณผ ์„œ๋ฒ„ ์ธก ์‹คํ–‰์— ์ตœ์ ํ™”๋œ **API ํฌ๋งท(workflow_api.json)**์œผ๋กœ ๋‚˜๋‰œ๋‹ค [4-6]. +- **Litegraph ๊ธฐ๋ฐ˜ ์Šคํ‚ค๋งˆ (v1.0):** ๋…ธ๋“œ ID, ์œ ํ˜•, ์œ„์น˜, ํฌ๊ธฐ, ์œ„์ ฏ ๊ฐ’ ๋ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๊ธฐ์ˆ  ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค [7-9]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ ๊ธฐ์ˆ :** ์ƒ์„ฑ๋œ PNG๋‚˜ WebP ์ด๋ฏธ์ง€์˜ tEXt/zTXt ์ฒญํฌ ๋‚ด์— JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฑ์—… ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค [10, 11]. +- **์‹คํ–‰ ๋ชจ๋ธ ๋ฐ˜์ „ (Execution Model Inversion):** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)๋กœ๋ถ€ํ„ฐ ์—ญ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [12]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **UI-to-API ์ •์ œ ํŒจํ„ด:** ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ขŒํ‘œ, ๊ทธ๋ฃน, ์ƒ‰์ƒ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ์ž…๋ ฅ์„ ์ง์ ‘์ ์ธ ๋…ธ๋“œ ์ฐธ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์‹คํ–‰ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [4, 13]. +- **LLM ๊ธฐ๋ฐ˜ 3๋‹จ๊ณ„ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ:** ์ž์—ฐ์–ด ์„ค๋ช… ํ•ด์„(Logical Synthesis) โ†’ ๋…ธ๋“œ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ(Semantic Validation) โ†’ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JSON ์ปดํŒŒ์ผ(Graph Compilation) ๊ณผ์ •์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [14-16]. +- **์˜์กด์„ฑ ๋ณต๊ตฌ ํœด๋ฆฌ์Šคํ‹ฑ:** JSON ๋‚ด `class_type`์„ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ComfyUI Manager๋ฅผ ํ†ตํ•ด ์ผ๊ด„ ์„ค์น˜๋ฅผ ์ œ์•ˆํ•œ๋‹ค [17, 18]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์ƒ์„ฑ์  AI ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ถ”์ƒํ™”ํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค [1, 19]. ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ด๋ฉฐ, ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ณต์œ  ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค [2]. + +**1. ์ฃผ์š” ํฌ๋งท ์ƒ์„ธ ๋น„๊ต** [4, 5, 13, 20-22]: +- **Frontend JSON:** Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ๋…ธ๋“œ์˜ ์บ”๋ฒ„์Šค ์ขŒํ‘œ(`pos`), ํฌ๊ธฐ(`size`), ๊ทธ๋ฃน ์ •๋ณด ๋“ฑ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณด์กดํ•œ๋‹ค. ์ฃผ๋กœ ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ๊ณต์œ ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. +- **API JSON:** `/prompt` ์—”๋“œํฌ์ธํŠธ ํ˜ธ์ถœ์„ ์œ„ํ•œ ์ •์ œ๋œ ํ˜•ํƒœ์ด๋‹ค. ์‹œ๊ฐ์  ์ •๋ณด๋Š” ์‚ญ์ œ๋˜๋ฉฐ, ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ์€ ๋ณ„๋„์˜ ๋งํฌ ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฐ ๋…ธ๋“œ ์ž…๋ ฅ๋ถ€์— `[๋…ธ๋“œ_ID, ์ถœ๋ ฅ_์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ํ˜•ํƒœ๋กœ ์ง์ ‘ ์ž„๋ฒ ๋”ฉ๋œ๋‹ค. + +**2. ์ƒ์„ฑ ๋ฐ ํš๋“ ๋ฐฉ๋ฒ•** [23-27]: +- **์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ:** GUI์˜ ์ œ์–ดํŒ์—์„œ `Ctrl + S`(Frontend)๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜, ์„ค์ •์—์„œ 'Dev mode' ํ™œ์„ฑํ™” ํ›„ 'Save (API format)' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. +- **์ด๋ฏธ์ง€์—์„œ ์ถ”์ถœ:** ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๋ฉด ๋‚ด์žฅ๋œ JSON์ด ๋กœ๋“œ๋œ๋‹ค. ๋Œ€๋Ÿ‰ ์ถ”์ถœ ์‹œ `exiftool`์ด๋‚˜ `ComfyUI-Workflow-Extractor` ๊ฐ™์€ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์—์„œ ์ง์ ‘ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋‹ค. +- **LLM ์ƒ์„ฑ:** `Qwen2.5-14B` ๋“ฑ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ "SDXL์šฉ ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JSON ๊ทธ๋ž˜ํ”„๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [14, 28]. + +**3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์กฐ์ž‘ ๋ฐ ์ž๋™ํ™”** [29-33]: +- ๊ฐœ๋ฐœ์ž๋Š” Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กฌํ”„ํŠธ(`CLIPTextEncode`), ์‹œ๋“œ๊ฐ’, ์ฒดํฌํฌ์ธํŠธ ์ด๋ฆ„ ๋“ฑ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. +- `Comfy API Simplified`์™€ ๊ฐ™์€ ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ˆซ์ž ID ๋Œ€์‹  ๋…ธ๋“œ ์ œ๋ชฉ(Title)์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค. +- ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๋ฅผ ์ˆœ์ˆ˜ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์ด๋‚˜ ๋‹จ๋… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค [34]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [35]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ ๋“ฑ์—์„œ ํŒŒ์ผ ์ตœ์ ํ™” ๊ณผ์ • ์ค‘ ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ JSON ๊ณต์œ  ์‹œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค [10]. +- **๋…ธ๋“œ ๋ช…์นญ ์ถฉ๋Œ:** ์„œ๋กœ ๋‹ค๋ฅธ ์ œ์ž‘์ž๊ฐ€ ๋งŒ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ์ œ๋ชฉ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ ‘๊ทผ ์‹œ ์ˆซ์ž ID๋‚˜ ๊ณ ์œ  ํด๋ž˜์Šค ํƒ€์ž… ํ™•์ธ์ด ํ•„์ˆ˜์ ์ด๋‹ค [33]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **DanielPFlorian/ComfyUI-WorkflowGenerator:** LLM์„ ์ด์šฉํ•ด ์ž์—ฐ์–ด๋กœ JSON์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋กœ, ์ปค๋ฐ‹ `82df278`์—์„œ ๋ชจ๋ธ ๊ฒฝ๋กœ ํ•ด๊ฒฐ ๋ฐ ์ค‘๋ณต ๋“œ๋กญ๋‹ค์šด ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์กŒ๋‹ค [36, 37]. +- **SethRobinson/comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก JS ๋กœ์ง์„ ์„œ๋ฒ„ ์ธก Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Frontend JSON์„ API ํฌ๋งท์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค (์ปค๋ฐ‹ `bc85382`) [38, 39]. +- **ComfyUI Manager:** JSON ๋‚ด๋ถ€์˜ ๋…ธ๋“œ ์ •์˜๋ฅผ ๋ถ„์„ํ•˜์—ฌ `ComfyUI/custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ž๋™ ์„ค์น˜ํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค [17, 40]. +- **Standalone Execution Scripts:** `sdxl_workflow_api.json`์„ ๋กœ๋“œํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ Python ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” `WorkflowExecutor` ์‚ฌ๋ก€๊ฐ€ ํ™•์ธ๋˜์—ˆ๋‹ค [41, 42]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์™€ ๊ณต์‹ ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๊ฐ€ ์ผ์น˜ํ•จ์„ ํ™•์ธ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์‹ค์ œ ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ GitHub ์ €์žฅ์†Œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ˆ˜ํ•™์  ๊ธฐ๋ฐ˜์ž„ [1]. + - ์ดํ•ด ์ฆ์ง„: ์‹คํ–‰ ์ˆœ์„œ ๊ฒฐ์ • ๋ฐ ์˜์กด์„ฑ ํ•ด๊ฒฐ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํฌ๋งท์˜ ์‹œ๊ฐ์  ์ง๋ ฌํ™” ๊ทœ๊ฒฉ์ž„ [4, 20]. + - ์ดํ•ด ์ฆ์ง„: ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ ๋ฐ ์‹œ๊ฐ์  ํ”Œ๋ž˜๊ทธ ์ €์žฅ ๋ฐฉ์‹์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋‚ด ์ •์˜๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž„ [17]. + - ์ดํ•ด ์ฆ์ง„: ๊ณต์œ ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. +- [[Large Language Models (LLM)]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ž์—ฐ์–ด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ตœ์‹  ์ž๋™ํ™” ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์ž„ [14, 37]. + - ์ดํ•ด ์ฆ์ง„: '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์œผ๋กœ์˜ ์ง„ํ™” ๋ฐฉํ–ฅ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Frontend JSON๊ณผ API JSON ์‚ฌ์ด์˜ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ์†์‹ค๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‹คํ–‰ ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [4, 39] +- ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt) ์™ธ์— ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ๋” ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฌด์—‡์ธ๊ฐ€? [10, 43] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ 'ํ›ˆ๋ จ ์‹œ์  ์ดํ›„ ์ถœ์‹œ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ'์— ๋Œ€ํ•œ ํ™˜๊ฐ(Hallucination) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•˜๋Š”๊ฐ€? [44, 45] +- Execution Model Inversion์ด ๋Œ€๊ทœ๋ชจ ๋ณตํ•ฉ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์ž์› ํšจ์œจ์„ฑ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ๊ฐœ์„ ํ•˜๋Š”๊ฐ€? [12] +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ JSON ๋‚ด์— ํฌํ•จ์‹œ์ผœ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€? [46] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** Python์˜ `urllib`๊ณผ `websocket`์„ ์‚ฌ์šฉํ•˜์—ฌ `/prompt` ์—”๋“œํฌ์ธํŠธ์— JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์‹ ํ•จ [32]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ JSON์œผ๋กœ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•œ ์ž๋™ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง [47]. +- **Operation / Maintenance:** ๋ชจ๋ธ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ์ด์ „ ์‹œ JSON ๋‚ด๋ถ€์˜ ํŒŒ์ผ๋ช…์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋งž์ถฐ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ComfyUI Manager์˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•จ [43]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ ๋กœ๋“œ โ†’ ์‹œ๊ฐ์  ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ณ€๊ฒฝ โ†’ JSON ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ตฌ์กฐ ๋ถ„์„ ์ˆœ์„œ๋กœ ํ•™์Šต ๊ถŒ์žฅ [48]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ํŒŒ์ผ์˜ ๊ธฐ๊ธฐ ๊ฐ„ ์ด๋™ ์‹œ ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ ์  ๋Œ€์•ˆ [46]. +- [[Workspace Packaging (.cpack.zip)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‹จ์ผ ํŒŒ์ผ์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋ชจ๋ธ ํ•ด์‹œ์™€ ๋…ธ๋“œ ๋ฒ„์ „๊นŒ์ง€ ํŒจํ‚ค์ง•ํ•˜๋Š” ๋ฏธ๋ž˜ ํ‘œ์ค€ [43]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [1, 6, 14, 24, 25, 29, 30, 32, 37, 41, 43, 49-52] \ No newline at end of file diff --git a/10_Wiki/Comfyui/Workflow.json (Frontend Format).md b/10_Wiki/Comfyui/Workflow.json (Frontend Format).md new file mode 100644 index 00000000..90ff47f5 --- /dev/null +++ b/10_Wiki/Comfyui/Workflow.json (Frontend Format).md @@ -0,0 +1,109 @@ +--- +id: workflow.json-(frontend-format) +title: "Workflow.json (Frontend Format)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Frontend JSON", "Full Workflow Export"] +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", "ComfyUI-to-Python-Extension", "ComfyUI-WorkflowGenerator"] +github_commit: "" +--- + +# [[Workflow.json (Frontend Format)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ ์‹œ๊ฐ์  ํŽธ์ง‘ ์ƒํƒœ์™€ ๋…ธ๋“œ ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ **Litegraph ํ‘œ์ค€**์— ๋”ฐ๋ผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณด์กดํ•˜์—ฌ, ์ธ๊ฐ„์˜ ์žฌํŽธ์ง‘๊ณผ ๊ธฐ๊ณ„์  ์‹คํ–‰ ์‚ฌ์ด์˜ ๊ฐ€๊ต ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ „์ œ ์ƒํƒœ(Full State) ์Šค๋ƒ…์ƒท [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **Litegraph ํ‘œ์ค€ ์ค€์ˆ˜:** ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Litegraph ํ˜•์‹์„ ๋”ฐ๋ฅด๋ฉฐ, ์‹œ๊ฐ์  ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค [1, 2]. +2. **์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(Visual Metadata):** ๋…ธ๋“œ์˜ ์ขŒํ‘œ(pos), ํฌ๊ธฐ(size), ๊ทธ๋ฃน ๊ตฌ์„ฑ, ์ƒ‰์ƒ, ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์ƒํƒœ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•œ๋‹ค [1, 3, 4]. +3. **๋ช…์‹œ์  ๋งํฌ ๊ตฌ์กฐ(Explicit Links):** ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ณ ์œ  ID๋ฅผ ๊ฐ€์ง„ ๋ช…์‹œ์  ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์˜ ์‹œ๊ฐ์  ์—ฐ๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค [2, 3, 5]. +4. **๋…ธ๋“œ ์‹๋ณ„์ž(Node Identification):** ๊ฐ ๋…ธ๋“œ๋Š” ์ฃผ๋กœ ์ˆซ์ž ํ˜•ํƒœ์˜ ๊ณ ์œ  ๋ฌธ์ž์—ด ID(์˜ˆ: "1", "2")๋กœ ์‹๋ณ„๋˜๋ฉฐ, ์ด๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐ UI ๋ Œ๋”๋ง์˜ ๊ธฐ์ค€์ด ๋œ๋‹ค [1, 2, 6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Full UI Export ํŒจํ„ด:** ๋‹จ์ˆœํžˆ ์‹คํ–‰ ๋กœ์ง๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…ํ•˜๋˜ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์บ”๋ฒ„์Šค์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [7, 8]. +- **Metadata Embedding ํŒจํ„ด:** ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— Frontend JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฑ์—… ํŒŒ์ผ ์—ญํ• ์„ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [9-11]. +- **์—ญ๋ฐฉํ–ฅ ์‹คํ–‰ ๋ชจ๋ธ(Execution Model Inversion):** JSON ๋‚ด์— ์ˆ˜๋งŽ์€ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์‹คํ–‰ ์—”์ง„์€ ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)๋ถ€ํ„ฐ ์—ญ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋ฉฐ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ณด์กด๋œ๋‹ค [12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Frontend Format์ธ `workflow.json`์€ ComfyUI์˜ ๊ธฐ๋ณธ ์ €์žฅ ํ˜•์‹์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [1, 2, 13]. + +### 1. ์ฃผ์š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ +- **nodes:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„ ๋…ธ๋“œ๋“ค์˜ ๋ฐฐ์—ด์ด๋‹ค. ๊ฐ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค ํƒ€์ž…(`type`), ์ขŒํ‘œ(`pos`), ํฌ๊ธฐ(`size`), ์‹คํ–‰ ์ˆœ์„œ(`order`), ๋ชจ๋“œ(`mode`, ํ™œ์„ฑ/์šฐํšŒ ๋“ฑ), ๊ทธ๋ฆฌ๊ณ  ์œ„์ ฏ ์„ค์ •๊ฐ’(`widgets_values`)์„ ํฌํ•จํ•œ๋‹ค [4, 14]. +- **links:** ๋…ธ๋“œ ์‚ฌ์ด์˜ ์™€์ด์–ด(Wire) ์—ฐ๊ฒฐ์„ ์ •์˜ํ•˜๋Š” ์ตœ์ƒ์œ„ ๋ฐฐ์—ด์ด๋‹ค. ๊ฐ ๋งํฌ๋Š” ๋ณดํ†ต 6๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ, ์†Œ์Šค ๋…ธ๋“œ ID, ์†Œ์Šค ์Šฌ๋กฏ, ํƒ€๊ฒŸ ๋…ธ๋“œ ID, ํƒ€๊ฒŸ ์Šฌ๋กฏ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค [5]. +- **groups:** ์บ”๋ฒ„์Šค ์ƒ์—์„œ ๋…ธ๋“œ๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์‹œ๊ฐ์  ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค [4]. + +### 2. API Format(Backend)๊ณผ์˜ ์ฐจ์ด์  +Frontend Format์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๋ฉฐ, ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์—”์ง„์ด ์ง์ ‘ ํ•ด์„ํ•˜๊ธฐ์—๋Š” ๋ถ€์ ์ ˆํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค [1, 3, 15]. ๋ฐ˜๋ฉด API Format์€ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด์— ๋งํฌ ์ •๋ณด๋ฅผ ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ์‹คํ–‰ ์ตœ์ ํ™”์— ์ง‘์ค‘ํ•œ๋‹ค [1, 16, 17]. + +### 3. ์ƒํ˜ธ ์šด์šฉ์„ฑ ๋ฐ ํ•œ๊ณ„ +- **์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ๋กœ๋”ฉ:** PNG ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์œ„ํ—˜์ด ์žˆ๋‹ค [9, 11, 18]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๋Š” ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ, ๊ตฌ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค [18]. +- **์ข…์†์„ฑ ๋ฌธ์ œ:** JSON ํŒŒ์ผ ์ž์ฒด์—๋Š” ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ•ด๋‹น ๋…ธ๋“œ๋‚˜ ๋ชจ๋ธ์ด ์—†์„ ๊ฒฝ์šฐ 'Red Box' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [19, 20]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํŒŒ์ผ ํ™•์žฅ์ž ํ˜ผ์šฉ:** ์†Œ์Šค์— ๋”ฐ๋ผ API ์ „์šฉ ํฌ๋งท์„ `workflow_api.json`์œผ๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์„ `workflow.json`์œผ๋กœ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ๋Œ€ํ™”์—์„œ๋Š” ๋ชจ๋‘ '์›Œํฌํ”Œ๋กœ์šฐ JSON'์œผ๋กœ ํ†ต์นญ๋˜๊ธฐ๋„ ํ•œ๋‹ค [1, 21]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** PNG์— ์ž„๋ฒ ๋”ฉ๋œ JSON์€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ „์†ก ์‹œ ์†Œ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์†์ ์œผ๋กœ ์ง€์ ๋œ๋‹ค [11, 18]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ, ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹์˜ JSON์„ API ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค (์ปค๋ฐ‹ bc85382 ์ฐธ์กฐ) [15, 22, 23]. +- **ComfyUI-to-Python-Extension:** ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์ €์žฅ๋œ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์žฌ์ž„ํฌํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค [24, 25]. +- **ComfyUI-WorkflowGenerator:** LLM์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Frontend JSON ๋˜๋Š” API JSON ํฌ๋งท์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” `WorkflowBuilder` ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค [26, 27]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๋‹ค์ˆ˜์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ํ•ต์‹ฌ ๊ทœ๊ฒฉ์œผ๋กœ ์‚ฌ์šฉ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ, GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•œ ๊ต์ฐจ ๊ฒ€์ฆ ์™„๋ฃŒ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํฌ๋งท์˜ ๊ตฌ์กฐ์  ๊ทผ๊ฐ„์ด ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ทœ๊ฒฉ์ž„ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๋ฐฐ์น˜ ๋ฐ ๋งํฌ ๋ Œ๋”๋ง ์›๋ฆฌ. +- [[Workflow.api.json (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON์—์„œ UI ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ ๋Œ€์‘ ํฌ๋งท์ž„ [1, 3]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ํ‘œํ˜„๊ณผ ๋…ผ๋ฆฌ์  ์‹คํ–‰ ๊ตฌ์กฐ์˜ ๋ถ„๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋‚ด์˜ `class_type`์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•ด์ฃผ๋Š” ํ•„์ˆ˜ ๊ด€๋ฆฌ ๋„๊ตฌ์ž„ [20]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฐ ํ™˜๊ฒฝ ๋ณต๊ตฌ ํ”„๋กœ์„ธ์Šค. +- [[Workflow Extractor]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ˆจ๊ฒจ์ง„ Frontend JSON์„ ์ถ”์ถœํ•˜๋Š” ์ „๋ฌธ ๋„๊ตฌ์ž„ [28, 29]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด์กด ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ธฐ์ˆ . + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Frontend JSON์˜ `order` ํ•„๋“œ๊ฐ€ ์‹ค์ œ ๋ฐฑ์—”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ์™€ ํ•ญ์ƒ ์ผ์น˜ํ•˜๋Š”๊ฐ€? [14] +- PNG ์ด๋ฏธ์ง€์˜ `tEXt` ์ฒญํฌ์™€ `zTXt` ์ฒญํฌ ์ค‘ ์–ด๋А ๋ฐฉ์‹์ด ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ ์ €์žฅ์— ๋” ์œ ๋ฆฌํ•œ๊ฐ€? [11] +- `comfyui-workflow-to-api-converter-endpoint`๋Š” ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๊ฐ€ ํฌํ•จ๋œ ๋ณต์žกํ•œ ํ”„๋ก ํŠธ์—”๋“œ JSON์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? [23, 30] +- ๋…ธ๋“œ ID๊ฐ€ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ๋  ๋•Œ์™€ ์ˆซ์ž๋กœ ์ €์žฅ๋  ๋•Œ์˜ ์‹œ์Šคํ…œ ์ฒ˜๋ฆฌ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€? [4, 6] +- ๋ชจ๋ธ ํ•ด์‹ฑ(Model Hashing) ๊ธฐ์ˆ ์ด JSON์˜ ํฌํ„ฐ๋นŒ๋ฆฌํ‹ฐ(Portability) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? [31] +- LLM์ด ์ƒ์„ฑํ•œ ๋…ผ๋ฆฌ์  ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ‘œ์ค€ V1.0 ์Šคํ‚ค๋งˆ์— ๋งž๊ฒŒ ๊ฒ€์ฆํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [26, 32] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ์•ฑ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ•  ๋•Œ, ์šฐ์„  Frontend ํฌ๋งท์œผ๋กœ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ค€ ๋’ค ์‹คํ–‰ ์‹œ์ ์—๋งŒ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์š”์ฒญํ•œ๋‹ค [33]. +- **System Design:** ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Git)์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•  ๋•Œ, ์‹œ๊ฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Frontend ํฌ๋งท์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค [34]. +- **Operation / Maintenance:** ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต์œ ํ•œ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, `exiftool` ๋“ฑ์„ ์‚ฌ์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์„ ์ œ์ ์œผ๋กœ ํ™•์ธํ•œ๋‹ค [29, 35]. +- **Learning Path:** ์ดˆ๋ณด์ž๋Š” ์‹œ๊ฐ์  ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋…ผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ตํžˆ๊ณ , ์ˆ™๋ จ์ž๋Š” JSON์˜ `widgets_values`๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์—ฌ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค [13, 36]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด์˜ `type` ํ•„๋“œ๊ฐ€ ์‹ค์ œ ํŒŒ์ด์ฌ ํด๋ž˜์Šค์™€ ๋งคํ•‘๋˜๋Š” ๋ฐฉ์‹ ์—ฐ๊ตฌ. +- [[JSON Schema v1.0]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ์ˆ ์  ๋ช…์„ธ ํ™•์ธ [14]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine based on 18 sources. \ No newline at end of file diff --git a/10_Wiki/Comfyui/WorkflowExecutor.md b/10_Wiki/Comfyui/WorkflowExecutor.md new file mode 100644 index 00000000..5161709f --- /dev/null +++ b/10_Wiki/Comfyui/WorkflowExecutor.md @@ -0,0 +1,94 @@ +--- +id: workflowexecutor +title: "WorkflowExecutor" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "applied" +canonical_id: "" +aliases: ["์›Œํฌํ”Œ๋กœ ์‹คํ–‰๊ธฐ"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["GitHub Gist: Standalone execution script", "Quasilinear Musings: Executing ComfyUI Workflows as Standalone Scripts"] +github_commit: "" +--- + +# [[WorkflowExecutor]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +**[[WorkflowExecutor]]**๋Š” ComfyUI์˜ ์›น UI ๋ฐ ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋…๋ฆฝ์ ์ธ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์—”์ง„์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋…๋ฆฝ์  ์‹คํ–‰ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜**: ์›น ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด๋„ ์›Œํฌํ”Œ๋กœ์˜ ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”, ์บ์‹œ ๊ด€๋ฆฌ, ๋…ธ๋“œ ์‹คํ–‰์„ ์ด๊ด„ํ•œ๋‹ค [2]. +- **์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐํ™”**: JSON ํ˜•์‹์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฒ€์ฆํ•œ ํ›„ `DynamicPrompt`๋ฅผ ๊ฑฐ์ณ ์ˆœ์ฐจ์  ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [2]. +- **๋…ธ๋“œ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ**: ๊ฐœ๋ณ„ ๋…ธ๋“œ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ(`get_input_data`)ํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ(`get_output_data`)ํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„๋ฅผ ์ œ์–ดํ•œ๋‹ค [3]. +- **์บ์‹œ ํ†ตํ•ฉ ๊ด€๋ฆฌ**: `ExecutionCache`์™€ ์—ฐ๋™ํ•˜์—ฌ ๋…ธ๋“œ ์ถœ๋ ฅ ๋ฐ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค [3, 4]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Backend-Only Execution Pattern**: ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ Frontend JSON ๋Œ€์‹ , ๋…ธ๋“œ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์ž…๋ ฅ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•˜๋Š” [[Workflow API JSON (Backend Format)]]๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [5, 6]. +- **Validation-to-Execution Pipeline**: ์‹คํ–‰ ์ „ `validate_prompt`๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์„ ์ œ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ , ์ด๋ฅผ ๋™์  ๋ฆฌ์ŠคํŠธ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์  ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +**[[WorkflowExecutor]]**๋Š” ComfyUI ์›Œํฌํ”Œ๋กœ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์ด๋‚˜ ๋…๋ฆฝํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค [1, 7]. ๊ธฐ๋ณธ์ ์œผ๋กœ ComfyUI๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์œผ๋‚˜, ์ด ์—”์ง„์€ ํ•ด๋‹น ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(Headless) ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [1]. + +์‹คํ–‰ ๊ณผ์ •์€ ํฌ๊ฒŒ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค. ์ฒซ์งธ, ์ž…๋ ฅ๋ฐ›์€ API ํ˜•์‹์˜ JSON ์›Œํฌํ”Œ๋กœ๋ฅผ ComfyUI ๋‚ด๋ถ€์˜ `validate_prompt` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ฆํ•œ๋‹ค [2]. ๋‘˜์งธ, ๊ฒ€์ฆ๋œ ๋ฐ์ดํ„ฐ๋ฅผ `DynamicPrompt` ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ •์˜๋œ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [2]. ์…‹์งธ, ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐœ๋ณ„ ๋…ธ๋“œ๋ฅผ `_execute_node` ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•œ๋‹ค [3]. + +๋…ธ๋“œ ์‹คํ–‰ ์‹œ์—๋Š” `get_input_data`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด์ „ ๋…ธ๋“œ์˜ ์ถœ๋ ฅ๊ฐ’์ด๋‚˜ ์œ„์ ฏ ๊ฐ’์„ ์ˆ˜์ง‘ํ•˜๊ณ , ์ด๋ฅผ `get_output_data` ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์—ฌ ์‹ค์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [3]. ์ด ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ์‹คํ–‰ ์ƒํƒœ๋Š” **[[ExecutionCache]]**์— ์ €์žฅ๋˜์–ด, ๋™์ผํ•œ ์—ฐ์‚ฐ์˜ ๋ฐ˜๋ณต์„ ํ”ผํ•˜๊ณ  ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•œ๋‹ค [3, 4]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ข…์†์„ฑ ๋ชจ์ˆœ**: ComfyUI์˜ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜๋Š” ์„œ๋ฒ„์™€ UI๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์–ด ๋…๋ฆฝ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์—ฌ๊ฒจ์กŒ์œผ๋‚˜, **[[WorkflowExecutor]]**๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด ์ œ์•ฝ์„ ๊ทน๋ณตํ–ˆ๋‹ค [1, 4]. +- **ํ˜•์‹ ์š”๊ตฌ์‚ฌํ•ญ**: ์ผ๋ฐ˜์ ์ธ `workflow.json`์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ **[[WorkflowExecutor]]**์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ 'Dev mode'์—์„œ ๋‚ด๋ณด๋‚ธ [[Workflow API JSON (Backend Format)]]์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [5, 6]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Quasilinear Musings ํ”„๋กœ์ ํŠธ**: Timothy Lin์ด ์ œ์•ˆํ•œ "Executing ComfyUI Workflows as Standalone Scripts"์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค [7, 8]. +- **๋…๋ฆฝ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ**: GitHub Gist์— ๊ณต๊ฐœ๋œ ์†Œ์Šค ์ฝ”๋“œ์—์„œ `WorkflowExecutor` ํด๋ž˜์Šค๊ฐ€ ์‹ค์ œ๋กœ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, SDXL Turbo ์›Œํฌํ”Œ๋กœ๋ฅผ ๋…๋ฆฝ์ ์ธ `.py` ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉ๋˜์—ˆ๋‹ค [2, 4, 6]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** applied (GitHub Gist ๋ฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ํ™•์ธ๋จ [2, 8]) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (์ „๋ฌธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋ฐ ์˜คํ”ˆ ์†Œ์Šค ๊ตฌํ˜„ ์‚ฌ๋ก€ ๊ธฐ๋ฐ˜ [2, 7]) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (๊ธฐ์กด ์†Œ์Šค ๋‚ด ๋…๋ฆฝ ์‹คํ–‰ ์—”์ง„ ๊ฐœ๋… ์ •์˜) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ณธ ์ฃผ์ œ์˜ ๋ฃจํŠธ ์ฃผ์ œ์ด๋ฉฐ ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ ๊ธฐ์›์„ ์ •์˜ํ•จ. +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : **[[WorkflowExecutor]]**๊ฐ€ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ž„ [5]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ExecutionCache]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด **[[WorkflowExecutor]]**์™€ ํ•จ๊ป˜ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์บ์‹œ ์‹œ์Šคํ…œ์ž„ [3]. +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋ชฉ์ ์„ ๊ณต์œ ํ•˜๋Š” ๋Œ€์•ˆ์  ๋„๊ตฌ์ž„ [1]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- WorkflowExecutor๊ฐ€ `validate_prompt`๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•˜๋Š”๊ฐ€? [2] +- `ExecutionList` ์ƒ์„ฑ ์‹œ ์ˆœํ™˜ ์ฐธ์กฐ(Circular Reference)๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ๋ฐฉ์–ด ๋กœ์ง์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€? [2] +- **[[ExecutionCache]]**๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ์˜ ๋ฐ์ดํ„ฐ ์ถ•์ถœ ์ •์ฑ…์€ ์–ด๋–ป๊ฒŒ ์ •์˜๋˜์–ด ์žˆ๋Š”๊ฐ€? [3] +- ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ `SaveImage` ๋…ธ๋“œ์™€ ๊ฐ™์€ ํŒŒ์ผ ์ถœ๋ ฅ ๋…ธ๋“œ์˜ ๊ฒฝ๋กœ ์ง€์ • ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? [6] +- WorkflowExecutor๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ๋•Œ์™€ ํ‘œ์ค€ ComfyUI ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ๋•Œ์˜ VRAM ์ ์œ  ํšจ์œจ ์ฐจ์ด๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ WorkflowExecutor์˜ ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์—์„œ ComfyUI ์„œ๋ฒ„๋ฅผ ๋„์šฐ์ง€ ์•Š๊ณ  AI ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค [6]. +- **System Design:** ๋„์ปค(Docker) ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ตœ์†Œํ•œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ํŠน์ • ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ์ ํ•ฉํ•˜๋‹ค [1]. +- **Operation / Maintenance:** ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ์—…๋ฐ์ดํŠธ ์—†์ด ํŠน์ • ์‹คํ–‰ ๋กœ์ง๋งŒ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค [1]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์ข…์†์„ฑ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ๋ชจ๋ธ์— ๋Œ€ํ•œ ์‹ฌ์ธต ์ดํ•ด [9]. +- [[ComfyUI Manager]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก  ์กฐ์‚ฌ [10]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/Workspace Packaging.md b/10_Wiki/Comfyui/Workspace Packaging.md new file mode 100644 index 00000000..17258612 --- /dev/null +++ b/10_Wiki/Comfyui/Workspace Packaging.md @@ -0,0 +1,97 @@ +--- +id: workspace-packaging +title: "Workspace Packaging" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [".cpack.zip", "Artifact-based Deployment"] +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: ["comfy-pack", ".cpack.zip"] +github_commit: "" +--- + +# [[Workspace Packaging]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋‹จ์ˆœํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ์ง๋ ฌํ™”๋ฅผ ๋„˜์–ด, ๋ชจ๋ธ ํ•ด์‹œ์™€ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ๋“ฑ ์‹คํ–‰ ์˜์กด์„ฑ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ฌถ์–ด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์˜๊ตฌ์  ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ฐจ์„ธ๋Œ€ ๋ฐฐํฌ ํ‘œ์ค€ [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ (Artifact-based Deployment):** ์›์‹œ JSON ํŒŒ์ผ ๋Œ€์‹  ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ปจํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ํŒจํ‚ค์ง€ ๋‹จ์œ„์˜ ๋ฐฐํฌ ๋ฐฉ์‹ [1]. +2. **๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ํ•ด์‹ฑ (Model Weight Hashing):** ํŒŒ์ผ๋ช…์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผํ•œ ๋ชจ๋ธ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ๋งคํ•‘ [1, 2]. +3. **๋ฒ„์ „ ๊ณ ์ • (Version Locking):** ์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„ ๋‹น์‹œ ์‚ฌ์šฉ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ํŠน์ • ๋ฒ„์ „์„ ๊ธฐ๋กํ•˜์—ฌ, ํ–ฅํ›„ ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ๋‚˜ ๊ธฐ๋Šฅ ์ค‘๋‹จ(deprecation)์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ [1]. +4. **.cpack.zip ๊ทœ๊ฒฉ:** ์›Œํฌํ”Œ๋กœ์šฐ JSON, ๋ชจ๋ธ ํ•ด์‹œ ๋ฆฌ์ŠคํŠธ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋„๋ก ์ œ์•ˆ๋œ ํ†ตํ•ฉ ํŒจํ‚ค์ง€ ํ˜•์‹ [1]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ถˆ๋ณ€์„ฑ ํ™•๋ณด ํŒจํ„ด (Immutability Pattern):** JSON + SHA-256 Hash + Node Versioning์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ๋ณด์žฅํ•˜๋Š” '์ •์  ์‹คํ–‰ ํ™˜๊ฒฝ'์„ ๊ตฌ์ถ•ํ•จ [1]. +- **ํ™˜๊ฒฝ ๋…๋ฆฝ์  ์‹๋ณ„ ํŒจํ„ด (Environment-Agnostic Identification):** ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ฒฝ๋กœ(sd_xl_base.safetensors)๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ์˜ ์ง€๋ฌธ(Hash)์„ ํ†ตํ•ด ์ž์›์„ ๊ฒ€์ƒ‰ํ•จ์œผ๋กœ์จ ์ด์‹์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ [1, 2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๊ธฐ์กด์— PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋‚˜ ๋‹จ์ˆœ JSON ํŒŒ์ผ๋กœ ๊ณต์œ ๋˜์—ˆ์œผ๋‚˜, ์ด๋Š” ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ์ฐจ์ด๋กœ ์ธํ•œ 'Red Nodes' ์˜ค๋ฅ˜์— ์ทจ์•ฝํ•œ(fragile) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง [1, 3, 4]. **Workspace Packaging**์€ ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณ ๋ฆฝ๋œ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰ํ•จ [1]. + +์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ: +- **์›Œํฌํ”Œ๋กœ์šฐ ์ง๋ ฌํ™”:** ํ‘œ์ค€ JSON v1.0 ๊ทœ๊ฒฉ์— ๋”ฐ๋ฅธ ๋…ธ๋“œ ๋ฐ ๋งํฌ ๋ฐ์ดํ„ฐ ํฌํ•จ [1, 5]. +- **์˜์กด์„ฑ ์ฒดํฌ์„ฌ:** `comfy-pack`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„ ์˜ฌ๋ฐ”๋ฅธ ๋ชจ๋ธ์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Œ [1, 2]. +- **๋…ธ๋“œ ์ปจํ…์ŠคํŠธ:** ํŠน์ • ์‹œ์ ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ์ฝ”๋“œ ์ƒํƒœ๋ฅผ ๊ณ ์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•จ [1]. + +์ด ๋ฐฉ์‹์€ ํŠนํžˆ ๊ณ ๋„ํ™”๋œ ์ƒ์„ฑํ˜• AI ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฏธ๋ž˜์—๋„ ์ •์ƒ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” '๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์•„์นด์ด๋น™'์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ์Œ [1, 6]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ชจ์ˆœ:** ํ˜„์žฌ ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ฐฉ์‹์€ Metadata๊ฐ€ ํฌํ•จ๋œ PNG์ด๋‚˜, ์ด๋Š” ๋ณด์•ˆ ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๊ธฐ ์‰ฌ์›Œ(stripped) ์‹ ๋ขฐ๋„๊ฐ€ ๋‚ฎ์Œ [3]. +- **์—…๋ฐ์ดํŠธ:** ๋‹จ์ˆœ JSON ์ €์žฅ ๋ฐฉ์‹์—์„œ ์‹œ์Šคํ…œ ์ „์ฒด ์ƒํƒœ๋ฅผ ํŒจํ‚ค์ง•ํ•˜๋Š” `.cpack.zip` ๊ธฐ๋ฐ˜์˜ ์•„ํ‹ฐํŒฉํŠธ ๋ฐฐํฌ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ „ํ™˜๋˜๊ณ  ์žˆ์Œ [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfy-pack:** ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ๋ฆฌ์  ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ๋…ผ๋ฆฌ์  ์‹๋ณ„์ž๋กœ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋จ [1, 2]. +- **.cpack.zip:** ์›Œํฌํ”Œ๋กœ์šฐ JSON, ๋ชจ๋ธ ํ•ด์‹œ, ๋…ธ๋“œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํ†ตํ•ฉ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฏธ๋ž˜ํ˜• ์•„ํ‹ฐํŒฉํŠธ ํŒŒ์ผ ๊ทœ๊ฒฉ์œผ๋กœ ์ œ์•ˆ๋จ [1]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋ฏธ๋ž˜ ์ง€ํ–ฅ์  ๊ธฐ์ˆ ๋กœ ์ œ์•ˆ๋˜์—ˆ์œผ๋ฉฐ comfy-pack ๋“ฑ ์ผ๋ถ€ ๋„๊ตฌ์—์„œ ๊ตฌํ˜„ ์‹œ์ž‘) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[ComfyUI Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ํŒจํ‚ค์ง•์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” ์ง๋ ฌํ™” ๋ฐ์ดํ„ฐ ํ˜•์‹. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ‘œ์ค€ํ™”๋œ ์ €์žฅ ๋ฐฉ์‹. +- [[Model Hashing]] + - ์—ฐ๊ฒฐ ์ด์œ : ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ์ž์›์„ ์‹๋ณ„ํ•˜๋Š” ์œ ์ผํ•œ ๊ธฐ์ˆ ์  ์ˆ˜๋‹จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” SHA-256 ๊ธฐ๋ฐ˜ ๋งคํ•‘ ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ํŒจํ‚ค์ง€ ๋‚ด ๋ช…์‹œ๋œ ๋ˆ„๋ฝ ๋…ธ๋“œ๋ฅผ ํƒ์ง€ํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์˜์กด์„ฑ ์ž๋™ ํ•ด๊ฒฐ ๋ฐ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- `.cpack.zip` ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ๋ชจ๋ธ ํŒŒ์ผ ์ž์ฒด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ํ•ด์‹œ๋งŒ์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ€์ค‘์น˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™•๋ณดํ•˜๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๋™ ํ”„๋กœํ† ์ฝœ์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ๊ณ ์ •์ด Git ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์‹œ๋งจํ‹ฑ ๋ฒ„์ €๋‹(Semantic Versioning)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ์–ด๋А ๊ฒƒ์ด ๋” ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? +- Workspace Packaging ๊ธฐ์ˆ ์ด Replicate๋‚˜ Mystic๊ณผ ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค API ํ™˜๊ฒฝ์—์„œ ์ฝœ๋“œ ์Šคํƒ€ํŠธ(Cold Start) ์‹œ๊ฐ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์–ด๋– ํ•œ๊ฐ€? +- ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์–ฝํžŒ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ๋ˆ„๋ฝ ์—†์ด ํŒจํ‚ค์ง•ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒ€์ฆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜๋Š”๊ฐ€? +- ํŒจํ‚ค์ง•๋œ ์•„ํ‹ฐํŒฉํŠธ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด SHA-256 ์™ธ์— ๋””์ง€ํ„ธ ์„œ๋ช…(Digital Signature)์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ณด์•ˆ ๋ชจ๋ธ์˜ ๊ฐ€๋Šฅ์„ฑ์€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfy-pack` ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ณ„ ๋ชจ๋ธ ํ•ด์‹œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•จ [2]. +- **System Design:** CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค `.cpack.zip` ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐํฌํ•จ [1]. +- **Operation / Maintenance:** ํŠน์ • ์‹œ์ ์— ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ์žฌํ˜„ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œํ•˜์—ฌ ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ์˜ ํ™˜๊ฒฝ์„ ์ฆ‰๊ฐ ๋ณต์›ํ•จ [1]. +- **Learning Path:** ๋‹จ์ˆœ JSON ์ €์žฅ์„ ๋„˜์–ด ๋ชจ๋ธ ํ•ด์‹œ์˜ ์ค‘์š”์„ฑ๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณ ๋„ํ™” ๋‹จ๊ณ„์ž„ [6]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Retrieval-Augmented Generation (RAG) for Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ •์ ์œผ๋กœ ๊ณ ์ •๋œ ํŒจํ‚ค์ง€๋ฅผ ๋„˜์–ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ตœ์‹  ๋…ธ๋“œ ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๋Š” ๊ธฐ์ˆ . +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ํŒจํ‚ค์ง•๋œ ๊ฑฐ๋Œ€ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ์‹ค์ œ ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. ๊ธฐ์ดˆ ์•„ํ‚คํ…์ฒ˜ ๋ฐ .cpack.zip ๊ทœ๊ฒฉ ์ •์˜ ํฌํ•จ. \ No newline at end of file diff --git a/10_Wiki/Comfyui/exiftool.md b/10_Wiki/Comfyui/exiftool.md new file mode 100644 index 00000000..ad920491 --- /dev/null +++ b/10_Wiki/Comfyui/exiftool.md @@ -0,0 +1,58 @@ +--- +id: exiftool +title: "exiftool" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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.config"] +github_commit: "" +--- + +# [[exiftool]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +`exiftool`์€ ๋ฏธ๋””์–ด ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ ๋‚ด์— ์ž„๋ฒ ๋”ฉ๋œ ComfyUI ์›Œํฌํ”Œ๋กœ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž… ๋ฐ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ด๋‹ค. [1], [2] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ (Metadata Extraction):** PNG ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์™€ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ์—์„œ ์ง๋ ฌํ™”๋œ ์›Œํฌํ”Œ๋กœ JSON์„ ๋…๋ฆฝ๋œ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. [3], [1] +2. **์›Œํฌํ”Œ๋กœ ๋ณต๊ตฌ (Workflow Recovery):** ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(์˜ˆ: GIMP) ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์‚ญ์ œ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์›๋ณธ ํŒŒ์ผ์—์„œ ์ถ”์ถœํ•˜์—ฌ ์žฌ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ์›Œํฌํ”Œ๋กœ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. [4], [2] +3. **๋น„ํ‘œ์ค€ ํƒœ๊ทธ ์ •์˜ (Non-standard Tag Definition):** ComfyUI ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋Š” ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ์ €์žฅ๋˜๋ฏ€๋กœ, ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค. [2] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฐ”์ด๋„ˆ๋ฆฌ ์ถœ๋ ฅ ํŒจํ„ด:** `-b` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํƒœ๊ทธ(`-workflow`)์˜ ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ๋ฆฌ๋‹ค์ด๋ ‰์…˜(`>`)์„ ํ†ตํ•ด JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ์ „๋žต์„ ์‚ฌ์šฉํ•œ๋‹ค. [1], [2] +- **์„ค์ • ๊ธฐ๋ฐ˜ ์‚ฝ์ž… ํŒจํ„ด:** `exiftool`์ด ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ํƒœ๊ทธ ์“ฐ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `%unreg` ์ง€์‹œ์–ด๋ฅผ ํฌํ•จํ•œ ์„ค์ • ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค. [2] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +`exiftool`์€ ComfyUI ์›Œํฌํ”Œ๋กœ ๊ด€๋ฆฌ ๋ฐ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค. [1] ComfyUI๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ `Save Image` ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ(Frontend ํฌ๋งท)์™€ ํ”„๋กฌํ”„ํŠธ(API ํฌ๋งท) ์ •๋ณด๋ฅผ PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…ํ•˜๋Š”๋ฐ, `exiftool`์€ ์ด๋Ÿฌํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค. [5], [3], [1] + +๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ ์  ์ƒ์„ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: +- **์ถ”์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ๋Œ€๊ทœ๋ชจ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹์˜ ์ˆ˜๋™ ์ถ”์ถœ์ด ๋น„ํšจ์œจ์ ์ผ ๋•Œ, `exiftool -b -workflow input.png > workflow.json` ๋ช…๋ น์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. [1] ์ด๋Š” ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์˜ ์ง๋ ฌํ™”๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ธ์ถœํ•˜๋Š” ํ‘œ์ค€์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. [1] +- **์‚ฝ์ž… ๋ฐ ๋ณต์‚ฌ:** ๋‹จ์ˆœํ•œ ์ถ”์ถœ์„ ๋„˜์–ด, ํ•œ ์ด๋ฏธ์ง€์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด(PNG, WebP, MP4 ๋“ฑ)๋กœ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. [4] ๋‹จ, ์›Œํฌํ”Œ๋กœ ํƒœ๊ทธ๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ, `exiftool`์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š” ํƒœ๊ทธ๋ฅผ ๋ฏธ๋“ฑ๋ก(`%unreg`) ์ƒํƒœ๋กœ ์ •์˜ํ•˜๋Š” ๋ณ„๋„์˜ ์„ค์ • ํŒŒ์ผ์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. [2] +- **๋Œ€์•ˆ ๋„๊ตฌ์™€์˜ ๊ด€๊ณ„:** `Comfy_UI_prompt_extractor`๋‚˜ `comfymeta` ๋“ฑ ํŠน์ • ๋ชฉ์ ์„ ๊ฐ€์ง„ CLI ๋ฐ UI ๋„๊ตฌ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ, `exiftool`์€ ๊ฐ€์žฅ ์›ํ˜•์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ์„œ ์›Œํฌํ”Œ๋กœ ์‚ฝ์ž… ๋ฐ ๋ณต์‚ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ ์–ธ๊ธ‰๋œ๋‹ค. [2] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฐ์ดํ„ฐ ํœ˜๋ฐœ์„ฑ:** `exiftool`์˜ ์„ฑ๋Šฅ๊ณผ ๊ด€๊ณ„์—†์ด, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์ทจ์•ฝํ•˜๋‹ค๋Š” ์ ์ด ์ง€์ ๋œ๋‹ค. ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ํŒŒ์ผ ํฌ๊ธฐ ์ ˆ๊ฐ ๋ฐ ํ”„๋ผ์ด๋ฒ„์‹œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ JSON์ด ํฌํ•จ๋œ ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ, ์›๋ณธ ํŒŒ์ผ์ด ์•„๋‹ ๊ฒฝ์šฐ `exiftool`์„ ํ†ตํ•œ ์ถ”์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค. [6], [7], [3] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI.config ํ™œ์šฉ:** ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด `exiftool` ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ `%unreg`๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋˜์—ˆ๋‹ค. [2] +- **CLI ์›Œํฌํ”Œ๋กœ ์ถ”์ถœ:** `exiftool -b -workflow input.png > workflow.json` ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด PNG ํŒŒ์ผ์—์„œ ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”์ถœํ•˜์—ฌ JSON ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. [1], [2] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๋ช…๋ น์–ด์™€ ์„ค์ • ํŒŒ์ผ ์ ์šฉ ๋ฐฉ์‹์ด ์†Œ์Šค ๋‚ด์— ๊ธฐ์ˆ ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ GitHub Issue ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ๋ช…์„ธ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Comfyui/workflow_api.json.md b/10_Wiki/Comfyui/workflow_api.json.md new file mode 100644 index 00000000..10aa6530 --- /dev/null +++ b/10_Wiki/Comfyui/workflow_api.json.md @@ -0,0 +1,67 @@ +--- +id: workflow_api.json +title: "workflow_api.json" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API Format JSON", "Backend Format JSON", "Prompt JSON"] +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: ["/workflow/convert", "comfyui-workflow-to-api-converter-endpoint", "fofr/any-comfyui-workflow", "ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[workflow_api.json]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +`workflow_api.json`์€ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ๊ธฐ๋Šฅ์  ์—ฐ๊ฒฐ์„ฑ๋งŒ์„ ์ถ”์ถœํ•˜์—ฌ ComfyUI ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ์ง๋ ฌํ™”๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฐฑ์—”๋“œ/API ํฌ๋งท (Backend/API Format):** ์‹œ๊ฐ์  ์š”์†Œ(์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ)๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ฒ˜๋ฆฌ ๋ฐ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ฐ˜ ์ž๋™ํ™”์— ์ตœ์ ํ™”๋œ ํฌ๋งท์ด๋‹ค [1, 3]. +- **ํ‰ํƒ„ํ™”๋œ ๊ทธ๋ž˜ํ”„ (Flattened Execution Graph):** ๋งํฌ๊ฐ€ ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ง์ ‘ ์ฐธ์กฐ(Origin Node ID ๋ฐ Output Slot) ํ˜•ํƒœ๋กœ ํฌํ•จ๋œ ๊ตฌ์กฐ์ด๋‹ค [1, 3, 4]. +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์ข…์†์„ฑ (Dev Mode Dependency):** ํ‘œ์ค€ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ๊ณผ ๋‹ฌ๋ฆฌ, ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ๋งŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•œ ํŠน์ˆ˜ ํฌ๋งท์ด๋‹ค [5-7]. +- **/prompt ์—”๋“œํฌ์ธํŠธ ํ˜ธํ™˜์„ฑ:** ComfyUI ์„œ๋ฒ„์˜ API ์—”๋“œํฌ์ธํŠธ์— ์ง์ ‘ ์ „๋‹ฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [2, 8, 9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํฌ๋งท ๋ถ„ํ™” (Schema Bifurcation):** ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ 'Frontend JSON(workflow.json)'๊ณผ ์‹คํ–‰์„ ์œ„ํ•œ 'API JSON(workflow_api.json)'์„ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1, 2, 10]. +- **๋…ธ๋“œ ์‹๋ณ„ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ:** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ ์ˆซ์žํ˜• ํ‚ค(String ID)๋กœ ์‹๋ณ„๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํŠน์ • ๋…ธ๋“œ์˜ ์ž…๋ ฅ์„ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค [11, 12]. +- **์—ญ๋ฐฉํ–ฅ ์˜์กด์„ฑ ํƒ์ƒ‰ (Execution Model Inversion):** ์—”์ง„์ด ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)๋กœ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค [13]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +**๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์†์„ฑ** +`workflow_api.json`์€ ๋ฃจํŠธ ๋ ˆ๋ฒจ์˜ ํ‚ค๊ฐ€ ๋…ธ๋“œ ID(๋ฌธ์ž์—ด)์ธ ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [14]. ๊ฐ ๋…ธ๋“œ ์ •์˜์—๋Š” `class_type`(๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„)๊ณผ `inputs`(์œ„์ ฏ ๊ฐ’ ๋ฐ ํƒ€ ๋…ธ๋“œ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด)๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ `_meta` ํ•„๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค [11, 14]. ๋งํฌ ํ‘œํ˜„ ๋ฐฉ์‹์€ `[node_id, output_slot_index]` ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ ํ•„๋“œ์— ์ง์ ‘ ์‚ฝ์ž…๋œ๋‹ค [3, 15]. + +**์ƒ์„ฑ ๋ฐ ์ถ”์ถœ ํ”„๋กœ์„ธ์Šค** +1. **GUI ๋‚ด๋ณด๋‚ด๊ธฐ:** ์„ค์ • ๋ฉ”๋‰ด์˜ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์•„์ด์ฝ˜์„ ํ†ตํ•ด 'Enable Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•œ ํ›„, ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” 'Save (API Format)' ๋˜๋Š” 'Export (API)' ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค [6, 7, 14, 16]. +2. **์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ:** ComfyUI์—์„œ ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์—๋Š” ์›Œํฌํ”Œ๋กœ์šฐ(Frontend)์™€ ํ”„๋กฌํ”„ํŠธ(API) ๋ฐ์ดํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ๋˜๋ฉฐ, `exiftool`์ด๋‚˜ ์ „๋ฌธ ์ถ”์ถœ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค [17-20]. +3. **์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ณ€ํ™˜:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ํฌ๋งท์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [9, 21]. + +**ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ํ™œ์šฉ** +์ด ํฌ๋งท์€ Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋กœ๋“œ๋˜์–ด ์”จ๋“œ(seed), ํ”„๋กฌํ”„ํŠธ ํ…์ŠคํŠธ, ๋…ธ์ด์ฆˆ ๊ฐ•๋„ ๋“ฑ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค [11, 22]. `Replicate`, `Mystic`, `RunComfy` ๋“ฑ ํด๋ผ์šฐ๋“œ API ์„œ๋น„์Šค๋Š” ์ด ํฌ๋งท์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋‚˜ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์„œ๋น„์Šค๋กœ ๋ฐฐํฌํ•œ๋‹ค [3, 23, 24]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •๋ณด ์†์‹ค์˜ ๋น„๊ฐ€์—ญ์„ฑ:** API ํฌ๋งท์„ ๋‹ค์‹œ ComfyUI ์บ”๋ฒ„์Šค๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ, UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ ๋ณด์ด๊ฑฐ๋‚˜ ๊ทธ๋ฃน ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„ '๋ผˆ๋Œ€(skeleton)' ์ƒํƒœ๋กœ ๋ณต์›๋˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค [9, 25]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ํƒ€์ž… ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•˜๋‹ค [26, 27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜ ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•จ [9, 28]. (Git Commit: `bc85382`) +- **ComfyUI-to-Python-Extension:** `workflow_api.json` ์ž…๋ ฅ์„ ๋ฐ›์•„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•จ [29, 30]. +- **Mystic Pipeline Deployment:** `new_pipeline.py` ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ API ํฌ๋งท JSON์„ ๋กœ๋“œํ•˜์—ฌ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ์— ์ ์šฉ๋จ [31, 32]. +- **Replicate fofr/any-comfyui-workflow:** API JSON ๋ธ”๋กญ์„ ์ž…๋ ฅ๋ฐ›์•„ ์ด๋ฏธ์ง€/๋น„๋””์˜ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฒ”์šฉ ์›Œํฌํ”Œ๋กœ์šฐ ๋ชจ๋ธ์˜ ํ•ต์‹ฌ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ํ™œ์šฉ๋จ [23, 33]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ์œผ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/API Format (workflow_api.json).md b/10_Wiki/Topics/Comfyui/API Format (workflow_api.json).md new file mode 100644 index 00000000..b4c26dd8 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/API Format (workflow_api.json).md @@ -0,0 +1,107 @@ +--- +id: api-format-(workflow_api.json) +title: "API Format (workflow_api.json)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Backend Format", "API JSON"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "API"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-workflow-to-api-converter-endpoint/README.md", "comfy_api_simplified", "ComfyUI-to-Python-Extension", "Mystic pipeline code", "Replicate any-comfyui-workflow"] +github_commit: "" +--- + +# [[API Format (workflow_api.json)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์ˆ˜์ ์ธ ๋…ธ๋“œ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋งŒ์„ ์••์ถ•ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ `/prompt` ์—”๋“œํฌ์ธํŠธ ์‹คํ–‰์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์‹คํ–‰ ์ตœ์ ํ™” (Execution-centric):** ์‹œ๊ฐ์  ๋ฐฐ์น˜ ์ •๋ณด๊ฐ€ ์•„๋‹Œ ๋ฐฑ์—”๋“œ ์—”์ง„์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋…ผ๋ฆฌ ๊ทธ๋ž˜ํ”„๋งŒ ํฌํ•จํ•จ [1, 3]. +- **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ (Metadata Stripping):** ๋…ธ๋“œ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ๊ทธ๋ฃน, ์ƒ‰์ƒ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์‚ญ์ œํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ๊ฒฝ๋Ÿ‰ํ™”ํ•จ [1, 2, 4]. +- **๋‚ด์žฅํ˜• ๋งํฌ ์ฐธ์กฐ (Embedded Linkage):** ๋ณ„๋„์˜ ๋งํฌ ๊ฐ์ฒด ๋ฐฐ์—ด ๋Œ€์‹  ๋…ธ๋“œ ์ž…๋ ฅ(inputs) ๋‚ด์— ์†Œ์Šค ๋…ธ๋“œ ID์™€ ์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง [1, 5]. +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์˜์กด์„ฑ (Dev Mode Dependency):** ํ‘œ์ค€ ํ™˜๊ฒฝ์—์„œ๋Š” ์ˆจ๊ฒจ์ ธ ์žˆ์œผ๋ฉฐ, ์„ค์ •์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ๋งŒ ์ƒ์„ฑ ๋ฐ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•จ [6-8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋…ธ๋“œ ์‹๋ณ„ ํŒจํ„ด:** ๊ฐ ๋…ธ๋“œ๋Š” ์ˆซ์ž ๋ฌธ์ž์—ด(์˜ˆ: "5", "6") ํ˜•ํƒœ์˜ ๊ณ ์œ  ํ‚ค๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ด๋Š” ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ๊ธฐ๋Šฅ์  ๋งคํ•‘์„ ์œ„ํ•œ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉ๋จ [3, 9, 10]. +- **๋ฐ์ดํ„ฐ ์—ฐ๊ฒฐ ํŒจํ„ด:** ํŠน์ • ๋…ธ๋“œ์˜ ์ž…๋ ฅ ํ•„๋“œ์— `[๋…ธ๋“œID, ์ถœ๋ ฅ์Šฌ๋กฏ๋ฒˆํ˜ธ]` ํ˜•ํƒœ์˜ ๋ฆฌ์ŠคํŠธ(์˜ˆ: `[11, 12]`)๋ฅผ ํ• ๋‹นํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •์˜ํ•จ [5]. +- **์ง๋ ฌํ™” ๊ตฌ์กฐ:** ๋ฃจํŠธ ๋ ˆ๋ฒจ์—์„œ ๋…ธ๋“œ ID๋ฅผ ํ‚ค๋กœ ํ•˜๊ณ , ๊ทธ ๊ฐ’์œผ๋กœ `class_type`๊ณผ `inputs`๋ฅผ ํฌํ•จํ•˜๋Š” ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•จ [10, 13]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +### 1. ํฌ๋งท์˜ ์ •์˜์™€ ๋ชฉ์  +API ํฌ๋งท(`workflow_api.json`)์€ ComfyUI ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ง์ ‘ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋Š” **ํ‰ํƒ„ํ™”๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„(flattened execution graph)**์ž…๋‹ˆ๋‹ค [6]. ์ฃผ๋กœ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ†ตํ•ฉ, ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰, ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ(queue)์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 9]. + +### 2. ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ ์š”์†Œ +- **๊ตฌ์กฐ์  ์ฐจ์ด:** ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท(`workflow.json`)์ด Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ์‹œ๊ฐ์  ๊ฐ€๋…์„ฑ์„ ์ค‘์‹œํ•˜๋Š” ๋ฐ˜๋ฉด, API ํฌ๋งท์€ ๋ฐฑ์—”๋“œ ์—”์ง„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ ์‚ฌ์–‘์— ๋งž์ถฐ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค [1, 9]. +- **๋…ธ๋“œ ์ •์˜:** ๊ฐ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ํ•ด๋‹น ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” `class_type`๊ณผ ์‹ค์ œ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋‹ด์€ `inputs` ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค [2, 10]. +- **์—ฐ๊ฒฐ ๋ฐฉ์‹:** ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์˜ `links` ๋ฐฐ์—ด์ด ์ œ๊ฑฐ๋˜๊ณ , ๋ชจ๋“  ์—ฐ๊ฒฐ ์ •๋ณด๊ฐ€ `inputs` ๋‚ด์— ์ง์ ‘ ์ฃผ์ž…๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด CLIP ํ…์ŠคํŠธ ์ธ์ฝ”๋”ฉ ๋…ธ๋“œ์˜ `clip` ์ž…๋ ฅ๊ฐ’์€ ์—ฐ๊ฒฐ๋œ ์†Œ์Šค ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋ณด์œ ํ•ฉ๋‹ˆ๋‹ค [5]. + +### 3. ์ƒ์„ฑ ๋ฐ ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค +- **์ˆ˜๋™ ์ƒ์„ฑ:** ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Enable Dev mode Options'๋ฅผ ์ฒดํฌํ•œ ํ›„, ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” **'Save (API Format)'** ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค [7, 8, 14]. +- **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ๋ณ€ํ™˜:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ ์ธก ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง ์—†์ด ์„œ๋ฒ„ ์ธก์—์„œ ์ง์ ‘ ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹์„ API ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [15, 16]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ฐ€์—ญ์„ฑ ๋ฌธ์ œ (Fragility):** API ํฌ๋งท์€ ์‹คํ–‰์—๋Š” ์™„๋ฒฝํ•˜์ง€๋งŒ ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ์—†์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๋‹ค์‹œ UI๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋กœ๋“œํ•˜๋ฉด ๋…ธ๋“œ ๋ฐฐ์น˜๊ฐ€ ๊นจ์ง€๊ฑฐ๋‚˜ ๊ทธ๋ฃน ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„ '์Šค์ผˆ๋ ˆํ†ค(skeleton)' ์ƒํƒœ๋กœ ๋‚˜ํƒ€๋‚˜ ํŽธ์ง‘์ด ๋งค์šฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค [17, 18]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹คํ–‰ ์‹คํŒจ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค [19, 20]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„ ์ธก์—์„œ API ํฌ๋งท์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [15, 21]. +- **deimos-deimos/comfy_api_simplified:** API ํฌ๋งท ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ•˜์—ฌ ํŒŒ์ด์ฌ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋‹ค๋ฃจ๊ณ , ๋…ธ๋“œ ์ œ๋ชฉ(title)์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ํ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค [22, 23]. +- **Mystic & Replicate:** ์‚ฌ์šฉ์ž ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค API๋กœ ๋ฐฐํฌํ•  ๋•Œ, ์‹คํ–‰์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ `workflow_api.json`์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ๋‚ด๋ถ€์ ์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [14, 24, 25]. +- **ComfyUI-to-Python-Extension:** API ํฌ๋งท์˜ JSON์„ ์ž…๋ ฅ๋ฐ›์•„ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ(`.py`)๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [26, 27]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฐ ํ”Œ๋žซํผ์—์„œ ํ•ต์‹ฌ ๊ทœ๊ฒฉ์œผ๋กœ ํ™œ์šฉ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository README ๋ฐ ์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Frontend Format (workflow.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท๊ณผ ๋Œ€์นญ๋˜๋Š” ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ์ง๋ ฌํ™” ์‹œ UI ์ •๋ณด์™€ ์‹คํ–‰ ์ •๋ณด์˜ ๋ถ„๋ฆฌ ์„ค๊ณ„ ๋ฐฉ์‹. +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท์€ ๋…ธ๋“œ์™€ ๋งํฌ๋กœ ๊ตฌ์„ฑ๋œ ์ถ”์ƒํ™”๋œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ‘œํ˜„ํ•จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ์˜์กด์„ฑ ๋ฐ ์‹คํ–‰ ์ˆœ์„œ ๊ฒฐ์ • ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI API]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท์€ `/prompt` ์—”๋“œํฌ์ธํŠธ ํ˜ธ์ถœ ์‹œ ์ „๋‹ฌ๋˜๋Š” ํŽ˜์ด๋กœ๋“œ์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค์ œ ์„œ๋ฒ„ ํ†ต์‹  ๋ฐ ์ž‘์—… ํ์ž‰ ํ”„๋กœ์„ธ์Šค. +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์„ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ ์‹คํ–‰ ์ฝ”๋“œ๋กœ ์น˜ํ™˜๋˜๋Š” ๋งคํ•‘ ์›๋ฆฌ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์™œ ComfyUI๋Š” ์‹œ๊ฐ์  ์ •๋ณด์™€ ์‹คํ–‰ ์ •๋ณด๋ฅผ ํ•˜๋‚˜์˜ JSON์— ํ†ตํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋‘ ๊ฐ€์ง€ ํฌ๋งท์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? [1] +- API ํฌ๋งท์—์„œ ๋…ธ๋“œ ID๊ฐ€ ๋ฌธ์ž์—ด ํ˜•ํƒœ์˜ ์ˆซ์ž๋กœ ๊ณ ์ •๋  ๋•Œ, ์›Œํฌํ”Œ๋กœ์šฐ ํŽธ์ง‘ ์‹œ ID ์ถฉ๋Œ์ด๋‚˜ ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [3, 28] +- `comfyui-workflow-to-api-converter-endpoint`๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜ ๋กœ์ง์„ ์–ด๋–ป๊ฒŒ ํŒŒ์ด์ฌ ์„œ๋ฒ„ ์ธก ๋กœ์ง์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ด์‹ํ–ˆ๋Š”๊ฐ€? [15] +- ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ(์˜ˆ: 200KB ์ด์ƒ)๋ฅผ API ํฌ๋งท์œผ๋กœ ํ˜ธ์ถœํ•  ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ๋ฐ์ดํ„ฐ ๋ˆ„๋ฝ์ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋Š”๊ฐ€? [16] +- `object_info.json`์— ์ •์˜๋œ ๋…ธ๋“œ ์Šคํ‚ค๋งˆ์™€ API ํฌ๋งท์˜ `inputs` ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์ด์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ง€๋Š”๊ฐ€? [13] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API JSON์„ ๋กœ๋“œํ•˜๊ณ , ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋™์  ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ [10, 29]. +- **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ์ˆ˜์ •์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๋ฐฑ์—”๋“œ ์ž๋™ํ™”๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์บ์‹ฑ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•  ์ˆ˜ ์žˆ์Œ [17]. +- **Operation / Maintenance:** ์ปค์Šคํ…€ ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ ์‹œ API ํฌ๋งท ๋‚ด์˜ `class_type` ๋ช…์นญ์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ์„œ๋น„์Šค ์ค‘๋‹จ์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•จ [19]. +- **Learning Path:** ๋…ธ๋“œ ๊ธฐ๋ฐ˜ UI์— ์ต์ˆ™ํ•ด์ง„ ํ›„, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ถ”์ถœ๋œ API JSON์˜ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ์ง„์ž…ํ•จ [6]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API JSON ๋‚ด์˜ ๋ชจ๋ธ ํŒŒ์ผ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ์œ  ์‹๋ณ„ ๊ธฐ์ˆ  ์กฐ์‚ฌ [30]. +- [[Serverless Deployment]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ํฌ๋งท์„ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ(Replicate, Mystic)์— ๋ฐฐํฌํ•˜์—ฌ ํ™•์žฅ์„ฑ ์žˆ๋Š” AI ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ• [14, 31]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/API Format.md b/10_Wiki/Topics/Comfyui/API Format.md new file mode 100644 index 00000000..50e05a63 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/API Format.md @@ -0,0 +1,103 @@ +--- +id: api-format +title: "API Format" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API JSON", "workflow_api.json", "Backend Format"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "API", "JSON", "Automation"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-workflow-to-api-converter-endpoint", "deimos-deimos/comfy_api_simplified", "pydn/ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[API Format]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +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]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์„œ๋ฒ„์ธก `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค [19]. + - **Git ์ปค๋ฐ‹:** `bc85382` (์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์˜ ๋Œ€์†Œ๋ฌธ์ž ์ •๊ทœํ™” ์ˆ˜์ • ํฌํ•จ) [23, 24]. +- **deimos-deimos/comfy_api_simplified:** ๋…ธ๋“œ ์ œ๋ชฉ(Title)์„ ๊ธฐ์ค€์œผ๋กœ API ํฌ๋งท์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ํ์— ๋“ฑ๋กํ•˜๋Š” ํŒŒ์ด์ฌ ๋ž˜ํผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [25-27]. +- **pydn/ComfyUI-to-Python-Extension:** ์ €์žฅ๋œ API ํฌ๋งท JSON์„ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” CLI ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค [28-30]. +- **Mystic (Pipeline AI):** ์‚ฌ์šฉ์ž์˜ API JSON์„ ํŒŒ์ด์ฌ ์—”๋“œํฌ์ธํŠธ ๋‚ด์— ์ฃผ์ž…ํ•˜์—ฌ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ œ๊ณตํ•œ๋‹ค [14, 31]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ๊ธฐ๋ฐ˜) [23, 32] +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Frontend Format]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท๊ณผ ๋Œ€์กฐ๋˜๋Š” ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž„. [1, 2] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ ์ „๋žต ๋ฐ Litegraph ํ‘œ์ค€์˜ ํ•œ๊ณ„. [1, 33] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ง๋ ฌํ™”๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์ž„. [34] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ์‹คํ–‰ ์ˆœ์„œ์™€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ œ์–ด ์›๋ฆฌ. [34, 35] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์„ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ง์ ‘์ ์ธ ๋„๊ตฌ์ž„. [28] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ ํŒŒ์ด์ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋กœ ๋งคํ•‘๋˜๋Š” ๊ณผ์ •. [29, 36] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ž„. [37, 38] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฐ `class_type` ๊ธฐ๋ฐ˜์˜ ๋…ธ๋“œ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. [37, 39] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API ํฌ๋งท์—์„œ ๋…ธ๋“œ ID๊ฐ€ ๋‹จ์ˆœํ•œ ์ˆซ์ž ๋ฌธ์ž์—ด์„ ๋„˜์–ด ๊ธฐ๋Šฅ์  ํ‚ค(Functional Key)๋กœ ์ž‘๋™ํ•  ๋•Œ, ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์—์„œ ID ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋‚ด๋ถ€ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 2] +- `workflow_api.json`์— ํฌํ•จ๋œ `_meta` ํ•„๋“œ๋Š” ์‹คํ–‰ ์—”์ง„์—์„œ ์–ด๋–ค ๊ตฌ์ฒด์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ํ•„์ˆ˜ ์š”์†Œ์ธ๊ฐ€? [9] +- ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๊ฐ€ ์ค‘์ฒฉ๋œ ์›Œํฌํ”Œ๋กœ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋‚ด๋ณด๋‚ผ ๋•Œ, ๋‚ด๋ถ€ ๋งํฌ ID์™€ ์™ธ๋ถ€ ๋งํฌ ID์˜ ์ถฉ๋Œ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๊ฐ€? [40] +- API ํฌ๋งท ๋‚ด์˜ `inputs` ํ•„๋“œ์—์„œ ์œ„์ ฏ ๊ฐ’(`widgets_values`)๊ณผ ๋™์  ๋งํฌ ์—ฐ๊ฒฐ์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ๋ฌธ ๋ถ„์„ ๋กœ์ง์€ ๋ฌด์—‡์ธ๊ฐ€? [7, 41] +- `exiftool`๊ณผ ๊ฐ™์€ ์™ธ๋ถ€ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PNG์—์„œ API JSON์„ ์ถ”์ถœํ•  ๋•Œ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ์„ ๋ณต๊ตฌํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ ์Šคํ‚ค๋งˆ๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€? [42, 43] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API JSON ํŒŒ์ผ์„ ๋กœ๋“œํ•˜๊ณ , ํŠน์ • ๋…ธ๋“œ ID์˜ ์ž…๋ ฅ๊ฐ’์„ ์ˆ˜์ •ํ•œ ๋’ค ์„œ๋ฒ„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ด ์ž๋™ํ™”๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค [8, 10, 18]. +- **System Design:** ํ”„๋ก ํŠธ์—”๋“œ ํŽธ์ง‘ ๋„๊ตฌ์™€ ๋ฐฑ์—”๋“œ ์‹คํ–‰๊ธฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ, ์‚ฌ์šฉ์ž๋Š” ์›น UI์—์„œ ํŽธ์ง‘ํ•˜๊ณ  ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๊ฒฝ๋Ÿ‰ํ™”๋œ API JSON๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [1, 44]. +- **Operation / Maintenance:** API JSON์—๋Š” ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ์˜ ์ด๋ฆ„์ด ํ•˜๋“œ์ฝ”๋”ฉ๋˜๋ฏ€๋กœ, ์„œ๋ฒ„ ๊ฐ„ ๋ชจ๋ธ ๊ณต์œ  ์‹œ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256) ๊ธฐ์ˆ ๊ณผ ํ•จ๊ป˜ ์šด์šฉํ•œ๋‹ค [45, 46]. +- **Learning Path:** ๋จผ์ € GUI์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์™„์„ฑํ•œ ํ›„, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด API ํฌ๋งท์„ ๋‚ด๋ณด๋‚ด๊ณ  ๊ทธ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ œ์–ด ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด ํ‘œ์ค€ ํ•™์Šต ๊ฒฝ๋กœ์ด๋‹ค [14, 47]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Node Definitions]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ํฌ๋งท ๋‚ด `class_type`์ด ์ฐธ์กฐํ•˜๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ํƒ€์ž… ์ •์˜ ์—ฐ๊ตฌ. [43] +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API JSON ์ „์ฒด ์ค‘ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ์›๋ฆฌ ์ดํ•ด. [32, 48] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. ๊ธฐ๋ฐ˜ ์†Œ์Šค 18๊ฐœ ์ข…ํ•ฉ ๋ถ„์„ ์™„๋ฃŒ. [1-186] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/API JSON.md b/10_Wiki/Topics/Comfyui/API JSON.md new file mode 100644 index 00000000..16f5ffd1 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/API JSON.md @@ -0,0 +1,67 @@ +--- +id: api-json +title: "API JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["workflow_api.json", "Backend Format", "API Format"] +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-WorkflowGenerator", "comfyui-workflow-to-api-converter-endpoint", "ComfyUI-to-Python-Extension", "comfy_api_simplified"] +github_commit: "" +--- + +# [[API JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +API JSON์€ ComfyUI์˜ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์ˆœ์ˆ˜ ์‹คํ–‰ ๋กœ์ง๋งŒ์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ œ์–ด์™€ ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๋ฐฑ์—”๋“œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ (Backend Execution Graph):** ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ UI ๊ด€๋ จ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ๋…ธ๋“œ ํƒ€์ž…๊ณผ ์ž…๋ ฅ๊ฐ’, ์—ฐ๊ฒฐ ๊ด€๊ณ„๋งŒ์„ ๋‚จ๊ธด ์ฝคํŒฉํŠธํ•œ ํ˜•์‹์ด๋‹ค [1, 3]. +2. **์ž„๋ฒ ๋”ฉ๋œ ์ฐธ์กฐ ๊ตฌ์กฐ (Reference-based Linking):** ๋ณ„๋„์˜ ๋งํฌ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹๊ณผ ๋‹ฌ๋ฆฌ, ๋…ธ๋“œ ์ž…๋ ฅ ํ•„๋“œ ๋‚ด์— ์ง์ ‘ ์†Œ์Šค ๋…ธ๋“œ ID์™€ ์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๊ธฐ์ˆ ํ•œ๋‹ค [1, 3, 4]. +3. **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ (Dev Mode) ํ™œ์„ฑํ™”:** ํ‘œ์ค€ ComfyUI ํ™˜๊ฒฝ์—์„œ API JSON์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์„ค์ •(Settings) ๋ฉ”๋‰ด์—์„œ ๋ฐ˜๋“œ์‹œ ์„ ํ–‰ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค [5-7]. +4. **ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์—”๋“œํฌ์ธํŠธ ํ˜ธํ™˜์„ฑ:** `/prompt` ์—”๋“œํฌ์ธํŠธ์— ํŽ˜์ด๋กœ๋“œ๋กœ ์ง์ ‘ ์ „๋‹ฌ๋˜์–ด ์„œ๋ฒ„ ์ธก์—์„œ ์ฆ‰์‹œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [8-10]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Bifurcation (์ด์›ํ™”) ์ €์žฅ ํŒจํ„ด:** ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ `workflow.json`๊ณผ ๊ธฐ๊ณ„์  ์‹คํ–‰์„ ์œ„ํ•œ `workflow_api.json`์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ ์šฉ๋„์— ์ตœ์ ํ™”๋œ ์„ฑ๋Šฅ๊ณผ ๊ด€๋ฆฌ ํŽธ์˜์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค [1, 8, 11]. +- **Metadata Chunk ์ค‘๋ณต ์ €์žฅ:** ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ์— ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ API ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋ชจ๋‘ ์ €์žฅํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋กœ ์‹œ๊ฐ์  ๋ณต์›๊ณผ API ์‹คํ–‰์„ ๋™์‹œ์— ๋ณด์žฅํ•œ๋‹ค [12, 13]. +- **Execution Model Inversion:** ์—”์ง„์ด ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฒฐ๊ณผ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ๋ณ„ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [14]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +### 1. ๊ธฐ์ˆ ์  ๊ตฌ์กฐ ๋ฐ ์‚ฌ์–‘ +API JSON์€ ๋ฃจํŠธ ํ‚ค๊ฐ€ **๋…ธ๋“œ ID(๋ฌธ์ž์—ด)**๋กœ ๊ตฌ์„ฑ๋œ ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์ทจํ•œ๋‹ค [15, 16]. ๊ฐ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค ์ด๋ฆ„์ธ `class_type`๊ณผ ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” `inputs` ๋”•์…”๋„ˆ๋ฆฌ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค [3, 17]. ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์€ `inputs` ๋‚ด์— `[๋…ธ๋“œ_ID, ์ถœ๋ ฅ_์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ํ˜•์‹์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜์–ด ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค [4, 18]. ์ด๋Š” Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท๋ณด๋‹ค ํ›จ์”ฌ ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ž‘๊ณ  ์ฒ˜๋ฆฌ๊ฐ€ ๋น ๋ฅด๋‹ค [8]. + +### 2. ์ˆ˜๋™ ์ƒ์„ฑ ๋ฐ ์ถ”์ถœ ๋ฐฉ๋ฒ• +๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ƒ์„ฑ ๋ฐฉ๋ฒ•์€ ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์„ค์ • ๋ฉ”๋‰ด์—์„œ **"Enable Dev mode Options"**๋ฅผ ์ฒดํฌํ•˜๋ฉด ์ปจํŠธ๋กค ํŒจ๋„์— **"Save (API Format)"** ๋ฒ„ํŠผ์ด ๋…ธ์ถœ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ฆ‰์‹œ ๋‹ค์šด๋กœ๋“œ ๊ฐ€๋Šฅํ•˜๋‹ค [5, 6, 19, 20]. ๋˜ํ•œ, ์ด๋ฏธ ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์—์„œ `exiftool`๊ณผ ๊ฐ™์€ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ˆจ๊ฒจ์ง„ API JSON(Prompt) ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค [21, 22]. + +### 3. ์ž๋™ํ™” ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ƒ์„ฑ +- **LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ:** `ComfyUI-WorkflowGenerator`๋Š” ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ, ์˜๋ฏธ๋ก ์  ๊ฒ€์ฆ, ๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ API JSON์„ ์ž๋™์œผ๋กœ ๊ตฌ์ถ•ํ•œ๋‹ค [23-25]. +- **๋™์  ๋ณ€ํ™˜:** `comfyui-workflow-to-api-converter-endpoint` ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ์„œ๋ฒ„์ธก์—์„œ `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ, ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ํ‘œ์ค€ JSON์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค [10, 26, 27]. +- **Python ๋ž˜ํผ ๋ฐ ํ™•์žฅ:** `comfy_api_simplified`๋‚˜ `ComfyUI-to-Python-Extension`์€ API JSON์„ ๋กœ๋“œํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ(์‹œ๋“œ, ํ”„๋กฌํ”„ํŠธ ๋“ฑ)๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•œ ํ›„ ํ์ž‰ํ•˜๊ฑฐ๋‚˜, ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ํ˜• Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [28-30]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์ œํ•œ:** ComfyUI๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ๋งค์šฐ ์žฆ์•„ ์ด์ „ ๋ฒ„์ „์—์„œ ์ƒ์„ฑ๋œ API JSON์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋‚˜ ์Šคํ‚ค๋งˆ์™€ ์ถฉ๋Œํ•˜์—ฌ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์ƒ์กดํ•œ๋‹ค [31]. +- **๋ฐ์ดํ„ฐ ํŒŒ๊ดด ์œ„ํ—˜:** ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๊ณต์œ ํ•  ๊ฒฝ์šฐ, API JSON์ด ํฌํ•จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ์˜๊ตฌ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค [12, 31]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Mystic Python SDK ์—ฐ๋™:** `workflow_api.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ-ํˆฌ-๋น„๋””์˜ค ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ๋กœ ๋ฐฐํฌํ•˜๋ฉฐ, Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์ฃผ์ž…ํ•œ๋‹ค [32, 33]. +- **Replicate API ํ˜ธ์ถœ:** `fofr/any-comfyui-workflow` ๋ชจ๋ธ์„ ํ†ตํ•ด API JSON์„ ์ง์ ‘ ์ž…๋ ฅ๋ฐ›์•„ ์›๊ฒฉ GPU์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค [7, 34]. +- **ComfyUI-to-Python-Extension:** CLI๋ฅผ ํ†ตํ•ด `workflow_api.json`์„ ์ž…๋ ฅ ํŒŒ์ผ๋กœ ๋ฐ›์•„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด๋•Œ `--input_file` ํ”Œ๋ž˜๊ทธ๋กœ API JSON ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•œ๋‹ค [35, 36]. +- **Lou@blog Python ์ฝ”๋“œ:** `urllib`์™€ `websocket`์„ ์‚ฌ์šฉํ•˜์—ฌ API JSON์˜ ํŠน์ • ๋…ธ๋“œ ID(์˜ˆ: #37 TextInput)์˜ `inputs.text` ๊ฐ’์„ ๊ต์ฒดํ•œ ํ›„ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€๋‹ค [16, 37]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ์— ๋”ฐ๋ผ ์ถ”ํ›„ applied/validated ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ README/๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•จ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Comfy CLI.md b/10_Wiki/Topics/Comfyui/Comfy CLI.md new file mode 100644 index 00000000..ebe6a3ae --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Comfy CLI.md @@ -0,0 +1,91 @@ +--- +id: comfy-cli +title: "Comfy CLI" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["comfy-cli"] +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: ["Comfy-Org/comfy-cli Issue #341"] +github_commit: "" +--- + +# [[Comfy CLI]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +GUI์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ํ„ฐ๋ฏธ๋„ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋Œ€๋Ÿ‰ ๊ด€๋ฆฌ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๋ฐ ์ž๋™ํ™”๋œ ์‹คํ–‰์„ ์ง€์›ํ•˜๋Š” ComfyUI ์ƒํƒœ๊ณ„์˜ ํ†ตํ•ฉ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค ๋„๊ตฌ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **ํ—ค๋“œ๋ฆฌ์Šค ์ž๋™ํ™” (Headless Automation):** ์›น ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด ๋ช…๋ น์ค„์—์„œ ์ง์ ‘ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์ œ๊ณตํ•œ๋‹ค [3, 4]. +2. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ€๊ณต ๋ฐ ๋ณต๊ตฌ:** ์ด๋ฏธ์ง€ ํŒŒ์ผ(PNG, WebP)์ด๋‚˜ ์˜์ƒ ํŒŒ์ผ(MP4)์— ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค [2]. +3. **๋ฐฐ์น˜ ์ฒ˜๋ฆฌ (Batch Processing):** ๋Œ€๊ทœ๋ชจ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํšจ์œจ์ ์ธ ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•œ๋‹ค [1, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ถ„๋ฆฌ ์ „๋žต:** `exiftool`๊ณผ ๊ฐ™์€ ํ•˜์œ„ ์ˆ˜์ค€ ๋„๊ตฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ „์šฉ CLI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์—์„œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค [1, 5, 6]. +- **ํ†ตํ•ฉ ์ง€์› ๊ตฌ์กฐ:** ๊ฐœ๋ณ„์ ์œผ๋กœ ํฉ์–ด์ง„ `Workflow Extractor`, `Python API Converter` ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ํ†ตํ•ฉ๋œ CLI(comfy-cli)๋กœ ์ˆ˜๋ ดํ•˜์—ฌ ๊ด€๋ฆฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Comfy CLI๋Š” ComfyUI์˜ ๊ฐ•๋ ฅํ•œ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ํ„ฐ๋ฏธ๋„ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์œผ๋กœ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + +- **์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ ๋ฐ ๊ด€๋ฆฌ:** CLI ๋„๊ตฌ๋Š” ํŠนํžˆ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” `exiftool -b -workflow input.png > workflow.json`๊ณผ ๊ฐ™์€ ๋ช…๋ น์„ ํ†ตํ•ด ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ JSON ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `Comfy_UI_prompt_extractor`์™€ ๊ฐ™์€ ์ „๋ฌธ CLI ๋„๊ตฌ๋Š” ๊ธ์ •์  ํ”„๋กฌํ”„ํŠธ, API ๊ทธ๋ž˜ํ”„, UI ๋ ˆ์ด์•„์›ƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [1, 5]. +- **์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณต์› ๊ธฐ๋Šฅ:** GIMP์™€ ๊ฐ™์€ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์€ ํŒŒ์ผ ํฌ๊ธฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. CLI๋Š” ์œ ์‹ค๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…(Insert)ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋กœ ๋ณต์‚ฌ(Copy)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด๋™์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2, 5, 6]. +- **์›Œํฌํ”Œ๋กœ์šฐ ์ „ํ™˜ ์ง€์›:** CLI ํ™˜๊ฒฝ์—์„œ [[Workflow JSON (Frontend Format)]]์„ [[Workflow API JSON (Backend Format)]]์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ์•„์˜ˆ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋‚ด๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ์—ฐ๋™์„ ์šฉ์ดํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค [7, 8]. +- **์„ค์น˜ ๋ฐ ์‹œ์Šคํ…œ ๊ด€๋ฆฌ:** Comfy CLI๋Š” ComfyUI ์„ค์น˜ ๊ฐ€์ด๋“œ์˜ ์ฃผ์š” ํ•ญ๋ชฉ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์‹œ์Šคํ…œ ์ƒํƒœ ํ™•์ธ(GPU VRAM, Python ๋ฒ„์ „ ๋“ฑ) ๋ฐ ๋…ธ๋“œ ์นดํƒˆ๋กœ๊ทธ ์—…๋ฐ์ดํŠธ๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๋กœ๋„ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [9-11]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์ƒ ์ฃผ์˜:** ์ˆ˜๋™ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ CLI ๋„๊ตฌ๋Š” ๋Œ€๋Ÿ‰ ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•˜์ง€๋งŒ, ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ „์†ก ๊ณผ์ •์—์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์˜๊ตฌ์ ์œผ๋กœ ์ œ๊ฑฐ๋œ ๊ฒฝ์šฐ์—๋Š” CLI๋กœ๋„ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ํ•œ๊ณ„๊ฐ€ ์†Œ์Šค์—์„œ ์ง€์ ๋ฉ๋‹ˆ๋‹ค [6, 12]. +- **๊ธฐ๋Šฅ ํ†ตํ•ฉ ์ง„ํ–‰ํ˜•:** ํ˜„์žฌ `comfy-cli`๋Š” ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•˜๋„๋ก ๊ฐœ๋ฐœ ๋ฐ ์ œ์•ˆ ๋‹จ๊ณ„์— ์žˆ์œผ๋ฉฐ, ์ด๋Š” ๊ธฐ์กด์˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ณ„ CLI ๋„๊ตฌ๋“ค์„ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ํ†ตํ•ฉํ•˜๋ ค๋Š” ์‹œ๋„๋กœ ๋ถ„์„๋ฉ๋‹ˆ๋‹ค [2, 5]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Comfy-Org/comfy-cli Issue #341:** ์ด๋ฏธ์ง€, WebP, MP4 ๋“ฑ ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋งค์ฒด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ `comfy-cli`์— ํฌํ•จ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ ์ œ์•ˆ ๋ฐ ๋…ผ์˜๊ฐ€ ์ง„ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค [2, 13]. +- **๋ฐฐ์น˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋ณต๊ตฌ:** ๋Œ€๊ทœ๋ชจ AI ์•„ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ ๊ธฐ์ˆ ์„ ์œ ์ง€ํ•˜๊ณ  ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค [1]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ธฐ๋Šฅ ์ œ์•ˆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Issue Discussion) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI๋ฅผ ํ†ตํ•ด JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ์ƒ์œ„ ์ฃผ์ œ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: GUI ์ด์™ธ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ํš๋“ ๊ฒฝ๋กœ. +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI ๋„๊ตฌ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰์„ ์œ„ํ•ด ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ถ”์ถœํ•ด์•ผ ํ•˜๋Š” ํƒ€๊ฒŸ ํ˜•์‹์ž„. + +#### [๊ตฌํ˜„ ๋ฐ ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI ๋ช…๋ น์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ Python ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์œ ์‚ฌํ•œ ํ„ฐ๋ฏธ๋„ ๊ธฐ๋ฐ˜ ๋„๊ตฌ์ž„. +- [[ComfyUI-Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : CLI์—์„œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์ข…์†์„ฑ์„ ํ•ด๊ฒฐํ•  ๋•Œ ์ƒํ˜ธ ๋ณด์™„์ ์œผ๋กœ ์ž‘๋™ํ•จ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- `comfy-cli`๊ฐ€ ์ด๋ฏธ์ง€ ์™ธ์— ์˜์ƒ(MP4) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ํƒœ๊ทธ ๊ตฌ์กฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€? +- `exiftool`์„ ์ด์šฉํ•œ ์ˆ˜๋™ ์ถ”์ถœ ๋ฐฉ์‹๊ณผ `comfy-cli` ์ „์šฉ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•œ ์ถ”์ถœ ๋ฐฉ์‹ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ์ฐจ์ด๋Š” ์กด์žฌํ•˜๋Š”๊ฐ€? +- CLI ํ™˜๊ฒฝ์—์„œ [[Workflow JSON (Frontend Format)]]์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ง์ ‘ API ์ „์šฉ JSON์„ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์‹œ ๋…ธ๋“œ ID์˜ ์ถฉ๋Œ์ด๋‚˜ ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ CLI์—์„œ ์–ด๋–ป๊ฒŒ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? +- CLI ๋„๊ตฌ๊ฐ€ ์™ธ๋ถ€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(GIMP ๋“ฑ)์— ์˜ํ•ด ์‚ญ์ œ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ 'Shadow Backup' ์ „๋žต์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfyui-to-python` CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋ณต์ ์ธ ์ƒ์„ฑ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ [8]. +- **System Design:** ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์—…๋กœ๋“œ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ถ”์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคํ™”ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ์„ค๊ณ„ [1, 2]. +- **Operation / Maintenance:** ComfyUI ์—…๋ฐ์ดํŠธ ์‹œ `UpdateNodeCatalog` CLI ๋ช…๋ น์„ ํ†ตํ•ด ๋…ธ๋“œ ํ˜ธํ™˜์„ฑ์„ ์ผ๊ด„ ์ ๊ฒ€ [10]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Metadata Extraction]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: AI ์ƒ์„ฑ ์ด๋ฏธ์ง€ ๋‚ด์— ์ˆจ๊ฒจ์ง„ ํ”„๋กฌํ”„ํŠธ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ์ดํ„ฐ ๋ณดํ˜ธ ๋ฐ ๋ถ„์„ ๊ธฐ์ˆ . + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source references 6, 33, 136, 170, 171, 182) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Comfy GPT.md b/10_Wiki/Topics/Comfyui/Comfy GPT.md new file mode 100644 index 00000000..58de13e2 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Comfy GPT.md @@ -0,0 +1,102 @@ +--- +id: comfy-gpt +title: "Comfy GPT" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyGPT", "ComfyUI-WorkflowGenerator"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "LLM", "Automation"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "xiatianzs/resources", "ComfyUI/models/LLM/"] +github_commit: "82df278" +--- + +# [[Comfy GPT]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Comfy GPT๋Š” ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ComfyUI ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(JSON)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ '๋น„์ฃผ์–ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์„ '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์œผ๋กœ ๊ฒฉ์ƒ์‹œํ‚ค๋Š” ๋‹ค๋‹จ๊ณ„ AI ํ•ฉ์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ (Natural Language Generation):** ์‚ฌ์šฉ์ž์˜ ์˜๋„(์˜ˆ: "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ")๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋ณต์žกํ•œ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [2]. +2. **3๋‹จ๊ณ„ ํ•ฉ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ (Three-stage Pipeline):** ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ ์ƒ์„ฑ(Generator), ๋…ธ๋“œ ์ด๋ฆ„ ๋ฐ ํ˜ธํ™˜์„ฑ ๊ฒ€์ฆ(Validator), ์ตœ์ข… ์‹คํ–‰ ํŒŒ์ผ ์ปดํŒŒ์ผ(Builder)์˜ ๋‹จ๊ณ„์  ๊ณต์ •์„ ๊ฑฐ์นœ๋‹ค [3, 4]. +3. **์˜๋ฏธ๋ก ์  ๋…ธ๋“œ ๊ฒ€์ฆ (Semantic Node Validation):** ์ƒ์„ฑ๋œ ๋…ธ๋“œ๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ํ†ตํ•ด ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์‹ค์ œ ๋…ธ๋“œ๋กœ ์ž๋™ ๊ต์ •ํ•œ๋‹ค [4-6]. +4. **๋„๋ฉ”์ธ ํŠนํ™” ๋ฏธ์„ธ ์กฐ์ • ๋ชจ๋ธ (Fine-tuned Models):** ComfyUI์˜ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ์Šคํ‚ค๋งˆ ์‚ฌ์–‘์— ์ตœ์ ํ™”๋œ LLM(์˜ˆ: Qwen2.5-14B)์„ ์ค‘์ถ”๋กœ ํ™œ์šฉํ•œ๋‹ค [1, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๊ตฌ์กฐ์  ๋…ผ๋ฆฌ ํ•ฉ์„ฑ ํŒจํ„ด:** ์ž์—ฐ์–ด ์ž…๋ ฅ์„ ๋ฐ”๋กœ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ค‘๊ฐ„ ๋‹จ๊ณ„์˜ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ํ˜•์„ฑํ•œ ํ›„ ์ปดํŒŒ์ผํ•œ๋‹ค [4, 6]. +- **๋กœ์ปฌ ํ™˜๊ฒฝ ๋™๊ธฐํ™” ํŒจํ„ด:** `UpdateNodeCatalog` ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ComfyUI์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๊ฒ€์ฆ ๊ธฐ์ค€(Catalog)์„ ์ตœ์‹ ํ™”ํ•œ๋‹ค [7, 8]. +- **ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒ€์ฆ ์ „๋žต:** ์†๋„๋ฅผ ์œ„ํ•œ '์˜๋ฏธ๋ก ์  ๊ฒ€์ƒ‰' ๋ชจ๋“œ์™€ ์ •ํ™•๋„๋ฅผ ์œ„ํ•œ 'LLM ์ •๋ฐ€ ๊ต์ •' ๋ชจ๋“œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํšจ์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค [6]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Comfy GPT๋Š” **"ComfyGPT: A Self-Optimizing Multi-Agent System for Comprehensive ComfyUI Workflow Generation"** ์—ฐ๊ตฌ์— ๊ธฐ๋ฐ˜ํ•œ ๊ธฐ์ˆ ์  ๊ตฌํ˜„์ฒด์ด๋‹ค [4]. ์ด ์‹œ์Šคํ…œ์€ ์ „๋ฌธ์ ์ธ ๋…ธ๋“œ ์ง€์‹์ด ์—†๋Š” ์‚ฌ์šฉ์ž๋„ ๋Œ€ํ™”๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ์ƒ์„ฑ AI ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š”๋‹ค [2]. + +- **์ž‘๋™ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** + - **Generator:** Qwen2.5-14B ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์ด ์ž…๋ ฅ๋œ ์ž์—ฐ์–ด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„(DAG)์„ ์ •์˜ํ•˜๋Š” ๋…ผ๋ฆฌ์  JSON ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค [5, 6]. + - **NodeValidator:** ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์ด ์‹ค์ œ ์„ค์น˜๋œ ๋…ธ๋“œ ํด๋ž˜์Šค ๋ช…์นญ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค [6]. ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ `sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2` ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•œ ์˜๋ฏธ๋ก ์  ๊ฒ€์ƒ‰์œผ๋กœ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๋…ธ๋“œ๋ฅผ ์ œ์•ˆํ•˜๊ฑฐ๋‚˜, LLM์ด ๋ฌธ๋งฅ์„ ํ†ตํ•ด ์ด๋ฆ„์„ ์ˆ˜์ •ํ•œ๋‹ค [5, 6]. + - **WorkflowBuilder:** ์ตœ์ข… ๊ฒ€์ฆ๋œ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œ์ค€ [[Workflow JSON]] v1.0 ๊ทœ๊ฒฉ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํŒŒ์ผ๋กœ ์ €์žฅํ•œ๋‹ค [3, 8, 9]. +- **๊ธฐ์ˆ ์  ํŠน์ง•:** GGUF ์–‘์žํ™” ๋ชจ๋ธ(q8_0)์„ ์ง€์›ํ•˜์—ฌ ํšจ์œจ์ ์ธ VRAM ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, CUDA ๋ฐ Metal ํ™˜๊ฒฝ์—์„œ ๊ฐ€์†ํ™”๋œ ์ถ”๋ก ์„ ์ œ๊ณตํ•œ๋‹ค [5, 10, 11]. ๋˜ํ•œ, JSON ํŒŒ์ผ์€ ์ƒ์„ฑ ์˜๋„์™€ ์‹คํ–‰ ๋กœ์ง ์‚ฌ์ด์˜ '์ค‘๊ฐ„ ๋ฐ”์ดํŠธ์ฝ”๋“œ' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค [3]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •์  ๋ชจ๋ธ์˜ ํ•œ๊ณ„:** ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์€ ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์ปท์˜คํ”„ ์‹œ์  ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋‚˜ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์ง€ ๋ชปํ•˜๋Š” '๋™๊ฒฐ๋œ(Frozen)' ์ƒํƒœ๋ผ๋Š” ์ ์ด ํ•œ๊ณ„๋กœ ์ง€์ ๋œ๋‹ค [12, 13]. +- **ํ• ๋ฃจ์‹œ๋„ค์ด์…˜ ๊ด€๋ฆฌ:** ๋ชจ๋ธ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•  ์œ„ํ—˜์ด ์žˆ์œผ๋ฏ€๋กœ, ํ–ฅํ›„์—๋Š” ์ •์  ๋ฏธ์„ธ ์กฐ์„ฑ์„ ๋„˜์–ด์„  ์‹ค์‹œ๊ฐ„ ์ ์‘ํ˜• ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ง„ํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [13, 14]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **GitHub ํ”„๋กœ์ ํŠธ:** `DanielPFlorian/ComfyUI-WorkflowGenerator`๊ฐ€ ComfyGPT ์—ฐ๊ตฌ๋ฅผ ๋กœ์ปฌ ๋…ธ๋“œ ์ˆ˜ํŠธ๋กœ ๊ตฌํ˜„ํ•œ ๋…๋ฆฝ์  ์‚ฌ๋ก€๋กœ ํ™•์ธ๋œ๋‹ค [2, 15]. +- **Git ์ปค๋ฐ‹ ๊ธฐ๋ก:** `82df278` ์ปค๋ฐ‹์—์„œ ๋“œ๋กญ๋‹ค์šด์˜ ์ค‘๋ณต ๋ชจ๋ธ ๋…ธ์ถœ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ, `config`, `generators`, `nodes` ๋“ฑ์˜ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌ๋œ๋‹ค [15]. +- **๋ชจ๋ธ ๊ฒฝ๋กœ ์‚ฌ์–‘:** ์‚ฌ์šฉ์ž๋Š” GGUF ๋ชจ๋ธ๊ณผ ํ† ํฌ๋‚˜์ด์ €๋ฅผ `ComfyUI/models/LLM/` ๊ฒฝ๋กœ์— ๋ฐฐ์น˜ํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ๊ตฌ๋™ํ•œ๋‹ค [7]. +- **์ €์žฅ ๋กœ์ง:** ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ๊ธฐ๋ณธ์ ์œผ๋กœ `comfyUI/output` ํด๋”์— ์ €์žฅ๋˜์–ด ์ฆ‰์‹œ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค [16]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ GitHub ํ”„๋กœ์ ํŠธ์™€ ์—ฐ๊ตฌ ๋…ผ๋ฌธ์ด ์กด์žฌํ•˜๋ฉฐ ๊ตฌํ˜„ ๊ฐ€์ด๋“œ๊ฐ€ ์†Œ์Šค์— ํฌํ•จ๋จ) [2, 4] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository README via NotebookLM) [2] +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : Comfy GPT๊ฐ€ ํ•ด๊ฒฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฃจํŠธ ์ฃผ์ œ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ˆ˜๋™ ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ ์ž๋™ ์ƒ์„ฑ ๋ฐฉ์‹์˜ ์ฐจ์ด์ . +- [[Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : Comfy GPT ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ตœ์ข… ์ถœ๋ ฅ๋ฌผ ๊ทœ๊ฒฉ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: v1.0 ์Šคํ‚ค๋งˆ ์ œ์•ฝ ์‚ฌํ•ญ ์ค€์ˆ˜์˜ ์ค‘์š”์„ฑ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON์ด API ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋  ๋•Œ์˜ ์ŠคํŠธ๋ฆผ๋ผ์ธ ํฌ๋งท. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ ์‹คํ–‰ ์ „์šฉ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ. +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: 'Red Nodes' ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ์˜ ๋ณต๊ตฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ํ›ˆ๋ จ ๋ฐ์ดํ„ฐ ์ปท์˜คํ”„ ์ดํ›„ ์ถœ์‹œ๋œ ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ `NodeValidator`๊ฐ€ ์–ด๋А ์ •๋„ ์ˆ˜์ค€๊นŒ์ง€ ๊ต์ •ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [12] +- `UpdateNodeCatalog` ๋…ธ๋“œ๊ฐ€ ๋กœ์ปฌ์˜ `INPUT_TYPES`๋ฅผ ์Šค์บ”ํ•˜์—ฌ LLM์—๊ฒŒ ์ „๋‹ฌํ•˜๋Š” ์ปจํ…์ŠคํŠธ ์ฃผ์ž… ๋ฐฉ์‹์€ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๊ฐ€? [8] +- GGUF ์–‘์žํ™” ๋ชจ๋ธ ์‚ฌ์šฉ ์‹œ, q8_0์™€ q4_0 ๊ฐ„์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋…ผ๋ฆฌ ํ•ฉ์„ฑ ์ •ํ™•๋„ ์ฐจ์ด๊ฐ€ ์œ ์˜๋ฏธํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? [10] +- 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ ์ค‘ `Generator`๊ฐ€ ์ƒ์„ฑํ•œ '๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„'์™€ ์ตœ์ข… '์‹คํ–‰์šฉ JSON' ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋Š”๊ฐ€? [6, 8] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์‹œ ๋ณต์žกํ•œ `ControlNet`์˜ ๋‹ค์ค‘ ๋ ˆ์ด์–ด ์—ฐ๊ฒฐ์ด๋‚˜ `IPAdapter` ์„ค์ •์˜ ์„ธ๋ฐ€ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? [2, 16] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `Workflow Generator Pipeline` ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์ž์—ฐ์–ด ์ง€์นจ์„ ์ž…๋ ฅํ•˜์—ฌ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•จ [7, 16]. +- **System Design:** ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋งž์ถฐ์ง„ `Node Catalog`๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งž์ถคํ˜• ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฃจํ”„๋ฅผ ๊ตฌ์ถ•ํ•จ [8]. +- **Operation / Maintenance:** ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ ์„ค์น˜ ํ›„ ๋ฐ˜๋“œ์‹œ `Update Node Catalog`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ง€์‹ ๋ฒ ์ด์Šค๋ฅผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•จ [17]. +- **Learning Path:** ๋ณต์žกํ•œ ๋…ธ๋“œ ์ด๋ฆ„์„ ์™ธ์šฐ๋Š” ๋Œ€์‹ , ์ž์—ฐ์–ด๋กœ ๊ธฐ๋Šฅ์„ ์„ค๋ช…ํ•˜๋ฉฐ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ• ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๋Š” ๋„๊ตฌ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ [2, 18]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[ComfyUI Custom Scripts]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ž๋™ ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์  ์ด๋ฏธ์ง€(PNG/SVG)๋กœ ๋‚ด๋ณด๋‚ด์–ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์—ฐ๊ตฌ [19, 20]. +- [[Executing ComfyUI Workflows as Standalone Scripts]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: LLM์ด ์ƒ์„ฑํ•œ JSON์„ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์ฆ‰์‹œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹คํ–‰ํ•˜๋Š” ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• [21, 22]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [23] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI API.md b/10_Wiki/Topics/Comfyui/ComfyUI API.md new file mode 100644 index 00000000..3beb658f --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI API.md @@ -0,0 +1,112 @@ +--- +id: comfyui-api +title: "ComfyUI API" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API Format", "workflow_api.json"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "automation", "API"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "comfyui-workflow-to-api-converter-endpoint (bc85382)" + - "ComfyUI-WorkflowGenerator (82df278)" + - "ComfyUI-to-Python-Extension (6cdcc23)" +github_commit: "" +--- + +# [[ComfyUI API]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI API๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ๋น„์ฃผ์–ผ ์›Œํฌํ”Œ๋กœ๋ฅผ **์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ(JSON)**๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ, ์ฐฝ์˜์  ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋™ํ™”๋œ ํ”„๋กœ๋•์…˜ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **API Format (workflow_api.json):** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์˜ค์ง ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋…ธ๋“œ ์œ ํ˜•๊ณผ ์ž…๋ ฅ ์—ฐ๊ฒฐ ์ •๋ณด๋งŒ์„ ํฌํ•จํ•˜๋Š” ๊ฐ„์†Œํ™”๋œ ๊ทธ๋ž˜ํ”„ ํฌ๋งท์ด๋‹ค [3-5]. +- **Dev Mode Options:** API ํฌ๋งท์œผ๋กœ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋Š” ์„ค์ •์œผ๋กœ, ํ™œ์„ฑํ™” ์‹œ 'Save (API format)' ๋ฒ„ํŠผ์ด ๋…ธ์ถœ๋œ๋‹ค [6-8]. +- **Serialization & Mapping:** ๋…ธ๋“œ๋ง์„ JSON ํ˜•์‹์˜ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ numeric ID(์˜ˆ: "37")๋ฅผ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜์—ฌ `class_type`๊ณผ `inputs` ๊ฐ’์„ ์ •์˜ํ•œ๋‹ค [9-11]. +- **Prompt Endpoint (/prompt):** ์ƒ์„ฑ๋œ API JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ComfyUI ์„œ๋ฒ„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ๋กœ POST ์š”์ฒญ์„ ๋ณด๋‚ด ์‹ค์ œ ์‹คํ–‰์„ ํŠธ๋ฆฌ๊ฑฐํ•œ๋‹ค [10, 12]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Execution Model Inversion:** ์—”์ง„์ด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•˜๊ณ  ์‹คํ–‰ํ•œ๋‹ค [13]. +- **Bifurcation of Formats:** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ Frontend ํฌ๋งท(`workflow.json`)๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์‹คํ–‰์„ ์œ„ํ•œ Backend ํฌ๋งท(`workflow_api.json`)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [3, 14]. +- **Metadata Recovery:** PNG ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— ์ˆจ๊ฒจ์ง„ ์›Œํฌํ”Œ๋กœ JSON ๋ฐ์ดํ„ฐ๋ฅผ `exiftool`์ด๋‚˜ ์ „์šฉ ์ถ”์ถœ๊ธฐ๋ฅผ ํ†ตํ•ด ๋ณต๊ตฌํ•˜์—ฌ ๊ณต์œ  ๋ฐ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [15-17]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) + +### 1. API JSON ์ƒ์„ฑ ๋ฐ ๊ตฌ์กฐ์  ํŠน์ง• +API ํฌ๋งท JSON์€ ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค. +- **๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:** ๋ฃจํŠธ ํ‚ค๋Š” ๋…ธ๋“œ ID(๋ฌธ์ž์—ด)์ด๋ฉฐ, ๊ฐ ๊ฐ’์€ `class_type`๊ณผ `inputs` ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ํฌํ•จํ•œ๋‹ค [10, 18]. +- **์—ฐ๊ฒฐ ํ‘œํ˜„:** ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ๋Š” ๋ณ„๋„์˜ ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด์—์„œ `[origin_node_id, output_slot_index]` ํ˜•ํƒœ์˜ ์ฐธ์กฐ๋กœ ์ง์ ‘ ์ž„๋ฒ ๋”ฉ๋œ๋‹ค [3, 19]. +- **์œ„์ ฏ ๊ฐ’ ์ „ํ™˜:** GUI์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์œ„์ ฏ ๊ฐ’(์‹œ๋“œ, ํ…์ŠคํŠธ ๋“ฑ)์€ API JSON์˜ `inputs` ํ•„๋“œ๋กœ ์ง์ ‘ ๋งคํ•‘๋˜์–ด ๊ณ ์ •๋œ ๊ฐ’์ด ๋œ๋‹ค [19]. + +### 2. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์กฐ์ž‘ ๋ฐ ์ž๋™ํ™” +๊ฐœ๋ฐœ์ž๋Š” ํ…œํ”Œ๋ฆฟํ™”๋œ API JSON์„ Python ๋“ฑ์„ ํ†ตํ•ด ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋Œ€๋Ÿ‰ ์ƒ์„ฑ์„ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. +- **์ž…๋ ฅ๊ฐ’ ๊ต์ฒด:** `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ํ•„๋“œ(์˜ˆ: ํ”„๋กฌํ”„ํŠธ ํ…์ŠคํŠธ, ์‹œ๋“œ ๊ฐ’)๋ฅผ ๋Ÿฐํƒ€์ž„์— ๋ณ€๊ฒฝํ•œ๋‹ค [10, 20]. +- **์ด๋ฏธ์ง€ ์ฃผ์ž…:** ์™ธ๋ถ€ ์ด๋ฏธ์ง€๋ฅผ API๋กœ ์ „๋‹ฌํ•  ๋•Œ๋Š” `Load Image (Base64)` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„์˜ `input` ๋””๋ ‰ํ† ๋ฆฌ์— ์—…๋กœ๋“œํ•œ ํ›„ ํŒŒ์ผ๋ช…์œผ๋กœ ์ฐธ์กฐํ•œ๋‹ค [21, 22]. +- **๊ฒฐ๊ณผ ์ˆ˜์‹ :** ์ƒ์„ฑ ์ง„ํ–‰ ์ƒํ™ฉ๊ณผ ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋Š” WebSocket ํ†ต์‹ ์„ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ฉฐ, `SaveImageWebsocket` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค [22]. + +### 3. ๊ณ ๋„ํ™”๋œ ์ƒ์„ฑ ๋„๊ตฌ +- **ComfyUI-to-Python-Extension:** JSON ์›Œํฌํ”Œ๋กœ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์—†์ด๋„ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [23, 24]. +- **Comfy API Simplified:** ๋…ธ๋“œ ID ๋Œ€์‹  ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ๋…ธ๋“œ ์ œ๋ชฉ(title)์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ ์ˆ˜์ • ์‹œ ์ฝ”๋“œ์˜ ํŒŒ์†์„ ๋ฐฉ์ง€ํ•œ๋‹ค [23, 25]. +- **LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ์ž…๋ ฅํ•˜๋ฉด Qwen2.5์™€ ๊ฐ™์€ ๋ชจ๋ธ์ด ์ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ์œ ํšจํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๋นŒ๋“œํ•œ๋‹ค [26, 27]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [28]. +- **ํฌ๋งท์˜ ๋น„๊ฐ€์—ญ์„ฑ:** API ํฌ๋งท JSON์€ ์‹คํ–‰ ํšจ์œจ์€ ๋†’์œผ๋‚˜, ์ด๋ฅผ ๋‹ค์‹œ GUI๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋กœ๋“œํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ(๋…ธ๋“œ ์œ„์น˜ ๋“ฑ)์ด ์œ ์‹ค๋œ '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๋กœ ๋‚˜ํƒ€๋‚˜ ํŽธ์ง‘์ด ์–ด๋ ต๋‹ค [12, 29]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์˜ JS ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ์ผ๋ฐ˜ JSON์„ API JSON์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•จ (์ปค๋ฐ‹: bc85382) [12, 30]. +- **ComfyUI-WorkflowGenerator:** ์ž์—ฐ์–ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ(์ƒ์„ฑ-๊ฒ€์ฆ-๋นŒ๋“œ)์„ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹œ์Šคํ…œ (์ปค๋ฐ‹: 82df278) [27, 31]. +- **ComfyUI-to-Python-Extension:** ์›Œํฌํ”Œ๋กœ๋ฅผ Python ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์ž๋™ํ™” ๋ฐ ๋ฐ˜๋ณต ์ƒ์„ฑ์— ์ตœ์ ํ™”๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ œ๊ณตํ•จ (์ปค๋ฐ‹: 6cdcc23) [24, 32]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋‹ค์ˆ˜์˜ GitHub ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์‹ค์šฉ์„ฑ ์ž…์ฆ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ README ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : API ๋ฐ์ดํ„ฐ์˜ ๊ทผ๊ฐ„์ด ๋˜๋Š” ์Šคํ‚ค๋งˆ ๊ทœ๊ฒฉ + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ์†์„ฑ ๋ฐ ๋งํฌ ์Šคํ‚ค๋งˆ v1.0์˜ ๊ธฐ์ˆ ์  ์ œ์•ฝ ์‚ฌํ•ญ [33]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[API Format]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์„œ๋ฒ„ ํ†ต์‹ ์„ ์œ„ํ•œ ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ ํฌ๋งท + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๋ฐ ์‹คํ–‰ ์ตœ์ ํ™” ๋กœ์ง [5]. +- [[ComfyUI-Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์‹คํ–‰ ์‹œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋„๊ตฌ + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด `class_type`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ž๋™ ๋…ธ๋“œ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค [34]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API JSON์˜ `inputs` ํ•„๋“œ์—์„œ ๋…ธ๋“œ ์ฐธ์กฐ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ์Šฌ๋กฏ ์ธ๋ฑ์Šค์˜ ์ •ํ™•ํ•œ ๋งคํ•‘ ๊ทœ์น™์€ ๋ฌด์—‡์ธ๊ฐ€? [35] +- `Execution Model Inversion`์ด ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์—์„œ ์‹ค์ œ ์„ฑ๋Šฅ(VRAM/์—ฐ์‚ฐ)์— ๋ฏธ์น˜๋Š” ์ •๋Ÿ‰์  ์˜ํ–ฅ์€ ์–ด๋А ์ •๋„์ธ๊ฐ€? [13] +- LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ์‹œ `NodeValidator`๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ ๋ฐฉ์‹์€ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ •ํ™•๋„๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณด์žฅํ•˜๋Š”๊ฐ€? [36, 37] +- PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์ƒ๋œ ๊ฒฝ์šฐ, `exiftool` ์™ธ์— ๋ฐ”์ด๋„ˆ๋ฆฌ ์ˆ˜์ค€์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์•ˆ์  ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๊ฐ€? [17, 38] +- `comfyui-workflow-to-api-converter`๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” 1MB ์š”์ฒญ ์ œํ•œ์˜ ๊ธฐ์ˆ ์  ๊ทผ๊ฑฐ์™€ ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ(Flux ๋“ฑ) ๋Œ€์‘ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? [39, 40] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/prompt` ์—”๋“œํฌ์ธํŠธ์— ์ „์†กํ•  JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด GUI์˜ 'Dev mode'๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ…œํ”Œ๋ฆฟ์„ ํ™•๋ณดํ•œ๋‹ค [8]. +- **System Design:** ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ˆ˜์‹ ํ•˜๋Š” ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ํ…œํ”Œ๋ฆฟ JSON์˜ ํŠน์ • ๋…ธ๋“œ ID ๊ฐ’์„ ๋™์ ์œผ๋กœ ์น˜ํ™˜ํ•˜์—ฌ ComfyUI ์ธ์Šคํ„ด์Šค์— ์ „๋‹ฌํ•œ๋‹ค [22, 41]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ ๋ณ€๊ฒฝ ์‹œ ๋…ธ๋“œ ID๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•ด `comfy_api_simplified`์™€ ๊ฐ™์ด ๋…ธ๋“œ ์ œ๋ชฉ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ž˜ํผ ์‚ฌ์šฉ์„ ๊ถŒ์žฅํ•œ๋‹ค [23, 25]. +- **Learning Path:** ๊ธฐ๋ณธ UI ์‚ฌ์šฉ๋ฒ• ์ˆ™์ง€ โ†’ Dev mode ํ™œ์„ฑํ™” ๋ฐ API JSON ๊ตฌ์กฐ ๋ถ„์„ โ†’ Python `requests` ๋ฐ `websocket`์„ ์ด์šฉํ•œ ์›๊ฒฉ ์ œ์–ด ์ˆœ์œผ๋กœ ํ•™์Šตํ•œ๋‹ค [42, 43]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Comfy GPT]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: AI ์—์ด์ „ํŠธ๊ฐ€ ์ง์ ‘ ๋…ธ๋“œ๋ฅผ ์กฐ๋ฆฝํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•˜๋Š” ์ž๊ฐ€ ์ตœ์ ํ™” ์‹œ์Šคํ…œ ์—ฐ๊ตฌ [27, 44]. +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ API ํ˜ธ์ถœ ์‹œ ๋ชจ๋ธ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ  [45]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI Backend Engine.md b/10_Wiki/Topics/Comfyui/ComfyUI Backend Engine.md new file mode 100644 index 00000000..58667332 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI Backend Engine.md @@ -0,0 +1,100 @@ +--- +id: comfyui-backend-engine +title: "ComfyUI Backend Engine" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI API Engine", "ComfyUI Execution Layer"] +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/custom_nodes/comfyui-workflow-to-api-converter-endpoint", "ComfyUI-to-Python-Extension", "WorkflowExecutor", "ExecutionCache"] +github_commit: "bc85382" +--- + +# [[ComfyUI Backend Engine]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI Backend Engine์€ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ [[API ํฌ๋งท]]์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๊ณ , ์—ญ๋ฐฉํ–ฅ ์˜์กด์„ฑ ์ถ”์ ์„ ํ†ตํ•ด ์ตœ์ ํ™”๋œ ์ƒํƒœ๋กœ ๋จธ์‹ ๋Ÿฌ๋‹ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ์‹คํ–‰ ๊ณ„์ธต์ด๋‹ค. [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **API JSON (Backend Format):** UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ขŒํ‘œ, ํฌ๊ธฐ ๋“ฑ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ํด๋ž˜์Šค(class_type)์™€ ์ž…๋ ฅ(inputs) ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ๋งŒ ํฌํ•จ๋œ ์ •์ œ๋œ ์‹คํ–‰ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค. [2, 4, 5] +2. **Execution Model Inversion:** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ(์˜ˆ: Save Image)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•ด ์‹คํ–‰ํ•จ์œผ๋กœ์จ ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ ์—ฐ์‚ฐ์„ ๋ฐฐ์ œํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•์ด๋‹ค. [3] +3. **Standalone Script Execution:** ์›น ์„œ๋ฒ„์™€ UI ๊ณ„์ธต์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ์ ์ธ Python ์Šคํฌ๋ฆฝํŠธ๋‚˜ ํ—ค๋“œ๋ฆฌ์Šค(Headless) ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ๊ตฌ๋™ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค. [6-8] +4. **Dynamic Prompting:** API ์—”๋“œํฌ์ธํŠธ(/prompt)์— JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•  ๋•Œ ๋…ธ๋“œ ID๋‚˜ ํƒ€์ดํ‹€์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋™์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. [9-11] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Serialization Bifurcation (์ง๋ ฌํ™” ์ด์›ํ™”):** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend ํฌ๋งท'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•œ 'Backend API ํฌ๋งท'์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•œ๋‹ค. [2, 12] +- **Backward Dependency Traversal:** ๊ทธ๋ž˜ํ”„ ์ „์ฒด๋ฅผ ์ˆœ์ฐจ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , ๊ฒฐ๊ณผ๊ฐ’ ๋„์ถœ์— ํ•„์ˆ˜์ ์ธ ๋…ธ๋“œ๋“ค๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. [3] +- **Target Node Overriding:** JSON ๋‚ด๋ถ€์˜ ํŠน์ • ๋…ธ๋“œ ID๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์‹œ๋“œ(Seed), ํ”„๋กฌํ”„ํŠธ, ๋ชจ๋ธ ๊ฒฝ๋กœ ๋“ฑ์˜ ๊ฐ’์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ต์ฒดํ•œ๋‹ค. [10, 13, 14] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) + +ComfyUI์˜ ๋ฐฑ์—”๋“œ ์—”์ง„์€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ **์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)**๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ์ง๋ ฌํ™”(Serialization)ํ•˜์—ฌ ๊ธฐ๊ธฐ ๊ฐ„ ์ด์‹์„ฑ๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž๋™ํ™”๋ฅผ ์ง€์›ํ•œ๋‹ค. [1] ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ‘œ์ค€ JSON ํฌ๋งท์ด ์•„๋‹Œ 'API ์ „์šฉ ํฌ๋งท'์ด ํ•„์ˆ˜์ ์ด๋ฉฐ, ์ด๋Š” ComfyUI ์„ค์ • ๋ฉ”๋‰ด์—์„œ **"Dev mode Options"**๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. [15-17] + +### 1. JSON ํฌ๋งท์˜ ๊ตฌ์กฐ์  ์ฐจ์ด +- **Frontend JSON (workflow.json):** `nodes` ๋ฐฐ์—ด ์•ˆ์— ์œ„์น˜ ์ •๋ณด(`pos`), ํฌ๊ธฐ(`size`), ๊ทธ๋ฃน ์ •๋ณด ๋“ฑ UI ๋ ˆ์ด์•„์›ƒ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค. ์—ฐ๊ฒฐ์€ ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค. [18-20] +- **API JSON (workflow_api.json):** ๋…ธ๋“œ ID๊ฐ€ ๋ฃจํŠธ ํ‚ค์ธ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ์ด๋ฉฐ, UI ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์ œ๊ฑฐ๋œ๋‹ค. ๋งํฌ ์ •๋ณด๋Š” ๋…ธ๋“œ ์ž…๋ ฅ๊ฐ’ ๋‚ด์— ์ง์ ‘ ์ฐธ์กฐ(์˜ˆ: `[node_id, output_slot]`) ํ˜•ํƒœ๋กœ ํฌํ•จ๋˜์–ด ํ›จ์”ฌ ์ปดํŒฉํŠธํ•˜๋‹ค. [4, 18, 21, 22] + +### 2. ์‹คํ–‰ ๋ฐ ์ตœ์ ํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜ +๋ฐฑ์—”๋“œ ์—”์ง„์€ **/prompt ์—”๋“œํฌ์ธํŠธ**๋ฅผ ํ†ตํ•ด ์ˆ˜์‹ ๋œ JSON์„ ๋ถ„์„ํ•œ๋‹ค. [13, 18] ์—”์ง„์˜ **Execution Model Inversion** ์•„ํ‚คํ…์ฒ˜๋Š” ๊ทธ๋ž˜ํ”„์— ์ˆ˜์‹ญ ๊ฐœ์˜ ๋…ธ๋“œ๊ฐ€ ์žˆ๋”๋ผ๋„ ์ตœ์ข… ๊ฒฐ๊ณผ ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ ๋…ธ๋“œ๋Š” ์™„์ „ํžˆ ๋ฌด์‹œํ•˜์—ฌ ์ž์›์„ ์ตœ์ ํ™”ํ•œ๋‹ค. [3] ๋˜ํ•œ, `WorkflowExecutor`์™€ `ExecutionCache` ๊ฐ™์€ ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์„œ๋ฒ„ ํ™˜๊ฒฝ ์—†์ด๋„ ๋…๋ฆฝ์ ์ธ Python ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. [9, 23] + +### 3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ํ™•์žฅ์„ฑ +๊ฐœ๋ฐœ์ž๋Š” Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ์ฒด์˜ ํŠน์ • ๋…ธ๋“œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ ๋’ค API ์„œ๋ฒ„๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. [13, 24] ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ ID๊ฐ€ ๊ณ ์ •๋˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•˜๋Š” ์œ ์ง€๋ณด์ˆ˜ ๋ฌธ์ œ๋Š” **Comfy API Simplified**์™€ ๊ฐ™์€ ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ œ๋ชฉ(Title)์œผ๋กœ ์ ‘๊ทผํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. [11, 25] ์ตœ๊ทผ์—๋Š” LLM์„ ํ™œ์šฉํ•ด ์ž์—ฐ์–ด๋ฅผ ์ด API ํ˜•์‹์˜ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” **ComfyUI-WorkflowGenerator** ๊ธฐ์ˆ ๋„ ๋„์ž…๋˜๊ณ  ์žˆ๋‹ค. [26, 27] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํฌ๋งท ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ํ‘œ์ค€ JSON ํŒŒ์ผ์„ API ์—”๋“œํฌ์ธํŠธ๋กœ ์ง์ ‘ ๋ณด๋‚ด๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค. [28] +- **API ํฌ๋งท์˜ ์—ญ๋ณ€ํ™˜ ํ•œ๊ณ„:** API ํฌ๋งท JSON์„ UI๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋…ธ๋“œ์˜ ์‹œ๊ฐ์  ์ •๋ณด(์œ„์น˜, ํฌ๊ธฐ ๋“ฑ)๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ๋ถ„์„ ๋ฐ ํŽธ์ง‘์ด ์–ด๋ ค์šด '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๋กœ ๋กœ๋“œ๋œ๋‹ค. [29] +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ๋งค์šฐ ๋นˆ๋ฒˆํ•˜์—ฌ, ๊ตฌ๋ฒ„์ „ JSON์ด ์ตœ์‹  ๋ฒ„์ „ ๋ฐฑ์—”๋“œ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค. [30] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ non-API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ์—”๋“œํฌ์ธํŠธ(/workflow/convert)๋ฅผ ์ œ๊ณตํ•œ๋‹ค. [28, 31] +- **ComfyUI-to-Python-Extension:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. [7, 8] +- **WorkflowExecutor & ExecutionCache:** ์†Œ์Šค ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰๊ณผ ๊ฒฐ๊ณผ ์บ์‹ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ํด๋ž˜์Šค ๊ตฌํ˜„์ฒด์ด๋‹ค. [9, 23] +- **P-Reinforce ๊ด€๋ จ:** LLM ๊ธฐ๋ฐ˜ ์ž๋™ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ(Generator -> Validator -> Builder)์—์„œ ์ตœ์ข… ์‹คํ–‰ ๊ฐ์ฒด๋กœ ํ™œ์šฉ๋œ๋‹ค. [32, 33] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ GitHub ๊ธฐ์ˆ  ๋ฌธ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ์„ฑ๋จ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ง์ ‘์ ์œผ๋กœ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค. [4] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ์‹ค์ œ ์ง๋ ฌํ™” ๋ฐฉ์‹. [2, 21] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐฑ์—”๋“œ ์—”์ง„ ์‹คํ–‰ ์‹œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ด๋‹ค. [34, 35] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด๋ถ€์˜ class_type ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜. [34] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Execution Model Inversion์ด ๋ณต์žกํ•œ ์ˆœํ™˜ ๊ตฌ์กฐ(์‹ค์ œ๋กœ๋Š” DAG์ง€๋งŒ ๋ณต์žกํ•œ ๊ฒฝ์šฐ)์—์„œ ์–ด๋–ป๊ฒŒ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š”๊ฐ€? +- API ํฌ๋งท JSON์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ๋…ธ๋“œ(Custom Nodes)์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์ •๋ณด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [36] +- Standalone ์‹คํ–‰ ์‹œ `ExecutionCache`๊ฐ€ GPU VRAM ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ํ•ด์ œํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋กœ์ง์€ ๋ฌด์—‡์ธ๊ฐ€? [23] +- `workflow_api.json` ๋‚ด์˜ ๋…ธ๋“œ ID๋ฅผ ์ˆ˜๋™ ์กฐ์ž‘ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ๋งคํ•‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [25] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ `NodeValidator`๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ธ์‹ํ•˜๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [37] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์›น ์„œ๋น„์Šค ๋ฐฑ์—”๋“œ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ”„๋กฌํ”„ํŠธ๋ฅผ JSON์— ์ฃผ์ž…ํ•˜๊ณ  ComfyUI API๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฐ ํ™œ์šฉ๋œ๋‹ค. [24, 38] +- **System Design:** ํ—ค๋“œ๋ฆฌ์Šค ๋ Œ๋”๋ง ์„œ๋ฒ„๋‚˜ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ƒ์„ฑ AI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ํ…Œ์ŠคํŠธํ•˜๋Š” ์šฉ๋„๋กœ ์„ค๊ณ„๋œ๋‹ค. [7, 8] +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ์—์„œ ํ•„์š”ํ•œ ๋ชจ๋ธ๊ณผ ๋…ธ๋“œ๋ฅผ ์ž๋™ ์„ค์น˜ํ•˜์—ฌ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ„์†Œํ™”ํ•œ๋‹ค. [34] +- **Learning Path:** GUI๋ฅผ ํ†ตํ•œ ์‹คํ—˜ ๋‹จ๊ณ„์—์„œ JSON ์Šคํ‚ค๋งˆ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ดํ›„ Python API๋ฅผ ํ†ตํ•œ ๋Œ€๋Ÿ‰ ์ƒ์„ฑ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ํ•ต์‹ฌ ๊ด€๋ฌธ์ด๋‹ค. [10, 39] + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฐฑ์—”๋“œ์—์„œ ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๊ฐ’์„ ํ†ตํ•ด ์ •ํ™•ํ•œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ๋กœ๋“œํ•˜๋Š” ์•ˆ์ •์„ฑ ํ™•๋ณด ๋ฐฉ์•ˆ ์—ฐ๊ตฌ. [40] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Ref: [1-4, 9, 28]) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI Manager.md b/10_Wiki/Topics/Comfyui/ComfyUI Manager.md new file mode 100644 index 00000000..f8e37eea --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI Manager.md @@ -0,0 +1,94 @@ +--- +id: comfyui-manager +title: "ComfyUI Manager" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI-Manager"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes/ComfyUI-Manager"] +github_commit: "" +--- + +# [[ComfyUI Manager]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ **์˜์กด์„ฑ ์ž๋™ ํ•ด๊ฒฐ** ๋ฐ **์ค‘์•™ ์ง‘์ค‘์‹ ์ž์› ๊ด€๋ฆฌ**๋ฅผ ํ†ตํ•ด JSON ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด์‹์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ํ™•์žฅ ๋„๊ตฌ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์˜์กด์„ฑ ํ•ด๊ฒฐ (Dependency Resolution):** ์™ธ๋ถ€์—์„œ ๋กœ๋“œ๋œ JSON ํŒŒ์ผ์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์„ค์น˜๋ฅผ ์ง€์›ํ•จ [1]. +- **์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ ๊ด€๋ฆฌ (Nodes & Models Management):** ์ˆ˜์ฒœ ๊ฐœ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ์™€ ์ฒดํฌํฌ์ธํŠธ, LoRA, VAE ๋“ฑ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ GUI ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์›ํด๋ฆญ์œผ๋กœ ์„ค์น˜ ๋ฐ ์—…๋ฐ์ดํŠธํ•จ [2, 3]. +- **์›Œํฌํ”Œ๋กœ์šฐ ๋ฐœ๊ฒฌ (Workflow Discovery):** ๊ด€๋ฆฌ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ComfyWorkflows, OpenArt ๋“ฑ์˜ ํ”Œ๋žซํผ๊ณผ ์—ฐ๋™ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•จ [4]. +- **๋ณด์•ˆ ๋ฐ ํ™˜๊ฒฝ ์„ค์ • (Security & Config):** ์„œ๋ฒ„ ๋ณด์•ˆ ์ˆ˜์ค€์— ๋”ฐ๋ฅธ ์‹คํ–‰ ์ œํ•œ ๊ด€๋ฆฌ ๋ฐ ํ„ฐ๋ฏธ๋„ ๋กœ๊ทธ ํ™•์ธ ๋“ฑ ์‹œ์Šคํ…œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ [5, 6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ˆ„๋ฝ ๋…ธ๋“œ ๋ณต๊ตฌ ํŒจํ„ด (Red Box Recovery):** ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ์šฐ(JSON/PNG) ๋กœ๋“œ ์‹œ ๋นจ๊ฐ„์ƒ‰ ์ƒ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋…ธ๋“œ๋ฅผ ์ผ๊ด„ ์„ค์น˜ํ•œ ํ›„ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์—ฌ ๋ณต๊ตฌํ•จ [1, 7]. +- **์˜์กด์„ฑ ๋ช…์‹œ ํŒจํ„ด (Dependency Marking):** ํŠน์ • ๋…ธ๋“œ(์˜ˆ: Workflow to API Converter)๋Š” '๋งˆ์ปค ๋…ธ๋“œ'๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ์— ํฌํ•จ์‹œ์ผœ ComfyUI Manager๊ฐ€ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์˜์กด์„ฑ์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜๋„๋ก ์œ ๋„ํ•จ [8, 9]. +- **๋ชจ๋ธ ๊ฒ€์ƒ‰ ๋ฐ ํ•ด์‹ฑ ํŒจํ„ด:** ํŒŒ์ผ๋ช… ๋Œ€์‹  ๋ชจ๋ธ์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ ๊ฐ„์˜ ๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฐ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ [10]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI Manager๋Š” `ltdrdata`๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋กœ, ComfyUI ์ƒํƒœ๊ณ„์˜ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ๊ณผ ๋ชจ๋ธ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ์ค‘์ถ”์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [2]. + +- **์„ค์น˜ ๋ฐ ๊ตฌ์กฐ:** ์‚ฌ์šฉ์ž๋Š” `ComfyUI/custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ์— ํ•ด๋‹น ์ €์žฅ์†Œ๋ฅผ `git clone` ํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ค์น˜ ํ›„ UI์— ๊ด€๋ฆฌ ๋ฉ”๋‰ด๊ฐ€ ํ†ตํ•ฉ๋ฉ๋‹ˆ๋‹ค [2]. +- **JSON ์›Œํฌํ”Œ๋กœ์šฐ์™€์˜ ๊ด€๊ณ„:** ComfyUI๋Š” ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ๋น„์ˆœํ™˜ ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ ๊ณต์œ ํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ œ์ž‘์ž์™€ ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด Manager์˜ ์ฃผ๋œ ์ž„๋ฌด์ž…๋‹ˆ๋‹ค [1, 11]. +- **๊ธฐ๋Šฅ ์ธํ„ฐํŽ˜์ด์Šค:** + - **Install Custom Nodes:** ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ชฉ๋ก์„ ์กฐํšŒํ•˜๊ณ  ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค [2]. + - **Install Models:** ๋ชจ๋ธ ์ฒดํฌํฌ์ธํŠธ, ControlNet, LoRA ๋“ฑ์„ ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„๋กœ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค [3]. + - **Update/Fetch:** ComfyUI ์ž์ฒด ๋ฐ ์„ค์น˜๋œ ๋…ธ๋“œ๋“ค์˜ ์ตœ์‹  ๋ฒ„์ „์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2]. +- **๊ณ ๊ธ‰ ์œ ํ‹ธ๋ฆฌํ‹ฐ:** ์‚ฌ์šฉ์ž ์„ค์ • ๋ฉ”๋‰ด์—์„œ "Enable Dev mode Options"๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด API ํฌ๋งท์˜ JSON ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง€๋ฉฐ, Manager๋Š” ์ด ๊ณผ์ •์—์„œ ์˜์กด์„ฑ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ์š”์†Œ๋ฅผ ์ง„๋‹จํ•˜๋Š” ๋ณด์กฐ ๋„๊ตฌ๋กœ ํ™œ์šฉ๋ฉ๋‹ˆ๋‹ค [12, 13]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ณด์•ˆ ์˜ค๋ฅ˜:** ComfyUI Manager ์‚ฌ์šฉ ์‹œ ๋ณด์•ˆ ์„ค์ • ์ˆ˜์ค€์— ๋”ฐ๋ผ 'This action is not allowed' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •์„ ํ†ตํ•œ ํ•ด๊ฒฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค [5, 6]. +- **๋…ธ๋“œ ๊ด€๋ฆฌ ๋ฐฉ์‹์˜ ๋ณ€ํ™”:** ์ƒˆ๋กœ์šด ๋…ธ๋“œ ๋งค๋‹ˆ์ €(๊ธฐ๋ณธ Windows ๋นŒ๋“œ ํฌํ•จ)์—์„œ๋Š” ์ผ๋ถ€ ๋ ˆ๊ฑฐ์‹œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋งค๋‹ˆ์ €๊ฐ€ ๋ณด์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•„์š”์‹œ ๋ ˆ๊ฑฐ์‹œ ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค [14]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **์‹ค์ œ ํŒŒ์ผ ๊ฒฝ๋กœ:** `ComfyUI/custom_nodes/ComfyUI-Manager` ๊ฒฝ๋กœ์— ์œ„์น˜ํ•˜๋ฉฐ ์‹œ์Šคํ…œ์ด ์‹œ์ž‘๋  ๋•Œ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค [2]. +- **์›Œํฌํ”Œ๋กœ์šฐ ์ง„๋‹จ:** ์™ธ๋ถ€ ํ”Œ๋žซํผ(Civitai, MimicPC ๋“ฑ)์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์—†๋Š” ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณผ์ •์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค [1, 12]. +- **์˜์กด์„ฑ ๋ณด์ฆ:** `comfyui-workflow-to-api-converter-endpoint` ํ”„๋กœ์ ํŠธ์—์„œ Manager๊ฐ€ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์˜์กด์„ฑ์„ ํƒ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก "Workflow to API Converter (Marker)" ๋…ธ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค [8, 9]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / ComfyUI-Wiki / Primary YouTube Tutorials) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +- [[Workflow.json (Frontend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : Manager๊ฐ€ ๋ถ„์„ํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์š”์†Œ๋ฅผ ์ฑ„์›Œ ๋„ฃ๋Š” ์ฃผ๋œ ๋Œ€์ƒ ํŒŒ์ผ ํฌ๋งท์ž…๋‹ˆ๋‹ค [1, 15]. +- [[Custom Nodes]] + - ์—ฐ๊ฒฐ ์ด์œ : Manager๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๊ฐ์ฒด์ด๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜๋Š” ๋‹จ์œ„์ž…๋‹ˆ๋‹ค [2, 16]. +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์‹คํ–‰์„ ์œ„ํ•ด UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ ์ตœ์ ํ™”๋œ JSON ํ˜•ํƒœ์ด๋ฉฐ, Manager๋Š” ์ด ๊ณผ์ •์—์„œ์˜ ์˜์กด์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค [1, 17]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI Manager๊ฐ€ JSON ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ์˜ GitHub ์ €์žฅ์†Œ ์ฃผ์†Œ๋ฅผ ์ •ํ™•ํžˆ ์ฐพ์•„๋‚ด๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ํ†ตํ•œ ๋ชจ๋ธ ๊ด€๋ฆฌ ๋ฐฉ์‹์€ ํŒŒ์ผ๋ช… ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ์™€ ๋น„๊ตํ–ˆ์„ ๋•Œ ์ด์‹์„ฑ ์ธก๋ฉด์—์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? [10] +- 'Terminal Log (Manager)' ๋…ธ๋“œ๋Š” ์‹ค์‹œ๊ฐ„ ๋””๋ฒ„๊น… ๋ฐ JSON ์‹คํ–‰ ์˜ค๋ฅ˜ ๋ถ„์„์—์„œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š”๊ฐ€? [6] +- Manager์˜ ๋ณด์•ˆ ์ˆ˜์ค€(Security Level)์ด 'This action is not allowed' ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ž„๊ณ„ ์กฐ๊ฑด์€ ๋ฌด์—‡์ธ๊ฐ€? [6] +- ์›Œํฌํ”Œ๋กœ์šฐ ํŒจํ‚ค์ง• ๊ธฐ๋Šฅ(`comfy-pack`)๊ณผ Manager์˜ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๊ธฐ๋Šฅ์€ ์ƒํ˜ธ ๋ณด์™„์ ์ธ๊ฐ€ ์•„๋‹ˆ๋ฉด ๋…๋ฆฝ์ ์ธ ๋Œ€์•ˆ์ธ๊ฐ€? [10, 18] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `git clone`์„ ํ†ตํ•ด `custom_nodes` ํด๋”์— ์„ค์น˜ ํ›„, UI์˜ "Manager" ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋ชจ๋“  ์กฐ์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค [2]. +- **System Design:** ์™ธ๋ถ€ API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ํ•„์š”ํ•œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ์™€ ๋ชจ๋ธ์ด ์‚ฌ์ „์— ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒ€์ฆ ๋„๊ตฌ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค [1, 19]. +- **Operation / Maintenance:** ComfyUI ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋“ค์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌํ•˜์—ฌ ํ™˜๊ฒฝ์˜ ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค [2]. +- **Learning Path:** ์ดˆ๋ณด์ž๊ฐ€ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „, ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค [7]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[ComfyUI Workspace Manager]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์กฐ์งํ•˜๊ณ  ๋ฐฑ์—…ํ•˜๋Š” ํŠนํ™”๋œ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค [20]. +- [[Comfy CLI]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค [21]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine.--- \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI Workflow Extractor.md b/10_Wiki/Topics/Comfyui/ComfyUI Workflow Extractor.md new file mode 100644 index 00000000..2210ef68 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI Workflow Extractor.md @@ -0,0 +1,66 @@ +--- +id: comfyui-workflow-extractor +title: "ComfyUI Workflow Extractor" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["SethRobinson/comfyui-workflow-to-api-converter-endpoint (bc85382)", "Comfy-Org/comfy-cli issue #341", "exiftool CLI implementation"] +github_commit: "bc85382" +--- + +# [[ComfyUI Workflow Extractor]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์ƒ์„ฑ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(PNG Chunks)์— ๋‚ด์žฅ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋…ผ๋ฆฌ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ์œ ์‹ค๋œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณต๊ตฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•„์ˆ˜ ๊ธฐ์ˆ . [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** ComfyUI์˜ 'Save Image' ๋…ธ๋“œ๋Š” ์‹คํ–‰ ์‹œ ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ๋ ˆ์ด์•„์›ƒ, ์„ค์ • ๋ฐ ํ”„๋กฌํ”„ํŠธ๋ฅผ PNG ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…ํ•จ. [4, 5] +- **PNG ์ฒญํฌ ๋ถ„์„ (PNG Chunk Analysis):** ์ฃผ๋กœ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ(Frontend ํ˜•์‹)์™€ ํ”„๋กฌํ”„ํŠธ(API ํ˜•์‹)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด์„ ์ €์žฅํ•จ. [2] +- **๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๋ฐ ๋ณ€ํ™˜ (Data Recovery & Conversion):** ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์— ์˜ํ•ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋…๋ฆฝ์ ์ธ JSON ํŒŒ์ผ๋กœ ์ถ”์ถœํ•˜์—ฌ ๊ณต์œ  ๋ฐ ๋ฐฑ์—… ๊ฐ€๋Šฅ์„ฑ์„ ํ™•๋ณดํ•จ. [1, 2] +- **์ถ”์ถœ ๋„๊ตฌ ์ƒํƒœ๊ณ„ (Extraction Tool Ecosystem):** ์›น ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค๋ถ€ํ„ฐ ๋ช…๋ น์ค„ ๋„๊ตฌ(CLI), Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ•˜์ด ๋ ˆ๋ฒจ ์Šคํฌ๋ฆฝํŠธ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ๋ณต๊ตฌ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•จ. [3, 6] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ ๊ฒฉ๋ฆฌ ํŒจํ„ด:** `exiftool`๊ณผ ๊ฐ™์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋””์–ด ํŒŒ์ผ ๋‚ด์˜ ํŠน์ • ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ(`-workflow`)๋งŒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ‘œ์ค€ JSON ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ „๋žต์„ ์ทจํ•จ. [3, 6] +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋กœ๋”ฉ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ์ถ”์ถœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹ , ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ด๋ฏธ์ง€๋ฅผ ComfyUI ์บ”๋ฒ„์Šค์— ์ง์ ‘ ๋“œ๋กญํ•˜์—ฌ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ์žฌ๊ตฌ์„ฑํ•จ. [4, 7, 8] +- **์ž๋™ํ™”๋œ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ:** ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋Œ€๊ทœ๋ชจ๋กœ ์ˆ˜์ง‘ํ•˜๊ธฐ ์œ„ํ•ด ๋””๋ ‰ํ† ๋ฆฌ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜๊ณ  API ๊ทธ๋ž˜ํ”„์™€ UI ๋ ˆ์ด์•„์›ƒ์„ ๋ณ„๋„์˜ JSON์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋จ. [3] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI Workflow Extractor๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด์— ์ง๋ ฌํ™”๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ํŒŒ์‹ฑํ•˜๋Š” ์ „๋ฌธํ™”๋œ ๋„๊ตฌ ๋ชจ์Œ์„ ์˜๋ฏธํ•จ. ComfyUI์—์„œ ์ƒ์„ฑ๋œ ๊ฑฐ์˜ ๋ชจ๋“  PNG ํŒŒ์ผ์€ ๊ทธ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์šด๋ฐ˜์ฒด ์—ญํ• ์„ ํ•˜๋ฉฐ, ์ด๋Š” 'Save Image' ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ตœ์ข… ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ธ์ ์…˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž„. [4, 5] + +์ด ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์€ PNG ๊ทœ๊ฒฉ ๋‚ด์˜ ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์„ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ž„. ๊ตฌ์ฒด์ ์œผ๋กœ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— ๋‘ ๊ฐ€์ง€ ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ, ํ•˜๋‚˜๋Š” ์‹œ๊ฐ์  ๋ฐฐ์น˜๋ฅผ ํฌํ•จํ•œ **Frontend ์›Œํฌํ”Œ๋กœ์šฐ**์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์‹คํ–‰์„ ์œ„ํ•œ ์ตœ์ ํ™”๋œ **Backend API ํ”„๋กฌํ”„ํŠธ**์ž„. [2] ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋Š” ๋งค์šฐ ์ทจ์•ฝํ•˜์—ฌ ์ด๋ฏธ์ง€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์†Œ์…œ ๋„คํŠธ์›Œํฌ ์„œ๋น„์Šค๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ ์œ ์‹ค๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฏ€๋กœ, ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ๊ธฐ๋Š” ์ด๋Ÿฌํ•œ ์œ ์‹ค์ด ๋ฐœ์ƒํ•˜๊ธฐ ์ „ ํ˜น์€ ์ €์žฅ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์ง€์‹์„ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•จ. [1, 2, 7] + +์ „๋ฌธ์ ์ธ ์ถ”์ถœ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์กด์žฌํ•จ: +- **CLI ๊ธฐ๋ฐ˜ ๋„๊ตฌ:** `exiftool -b -workflow input.png > workflow.json`๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜, `ComfyUI_prompt_extractor`์™€ ๊ฐ™์€ ์ „์šฉ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธ์ •์  ํ”„๋กฌํ”„ํŠธ์™€ API ๊ทธ๋ž˜ํ”„๋ฅผ ๋ถ„๋ฆฌํ•จ. [3, 6] +- **์›น ์ธํ„ฐํŽ˜์ด์Šค ๋„๊ตฌ:** 'Weird Wonderful AI Art'์—์„œ ์ œ๊ณตํ•˜๋Š” ์ถ”์ถœ๊ธฐ์™€ ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋ฉด ์„œ๋ฒ„ ์ธก ์ฒ˜๋ฆฌ ์—†์ด(๋˜๋Š” ๋ณด์•ˆ ์ฒ˜๋ฆฌ ํ›„) ์ฆ‰์‹œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ž„. [1, 9] +- **ํ†ตํ•ฉ ํ™•์žฅ ๋„๊ตฌ:** `ComfyUI-to-Python-Extension`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์ถ”์ถœ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ. [10, 11] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฌธ์ œ:** PNG ์ด๋ฏธ์ง€ ๋“œ๋ž˜๊ทธ ๋ฐฉ์‹์€ ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋‚˜ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํฌํ•จ๋˜์ง€ ์•Š์•„ ๋ณต๊ตฌ ์‹œ ์ผ๋ถ€ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์†Œ์Šค์—์„œ ํ™•์ธ๋จ. [5] +- **ํ˜•์‹ ๊ฐ„ ์ถฉ๋Œ:** ์ถ”์ถœ ๋„๊ตฌ๋Š” 'Frontend JSON'๊ณผ 'API JSON'์„ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•จ. API ํฌ๋งท์€ ์‹œ๊ฐ์  ์ •๋ณด(๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ ๋“ฑ)๊ฐ€ ์ œ๊ฑฐ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ์ด๋ฅผ ๋‹ค์‹œ ComfyUI UI๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ์‹œ๊ฐ์ ์œผ๋กœ ๋ถˆ์™„์ „ํ•œ ์ƒํƒœ๋กœ ๋กœ๋“œ๋  ์ˆ˜ ์žˆ์Œ. [12, 13] +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ๊ดด์„ฑ:** ๋งŽ์€ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(GIMP ๋“ฑ)๋Š” ์ด๋ฏธ์ง€ ์ €์žฅ ์‹œ ๋น„ํ‘œ์ค€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ, ์›๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ „์šฉ ์‚ฝ์ž…/๋ณต์‚ฌ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•จ์ด ์ œ๊ธฐ๋จ. [14] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **SethRobinson/comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋…ผ๋ฆฌ๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ๋น„-API ์›Œํฌํ”Œ๋กœ์šฐ ํ˜•์‹์„ API ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ•จ (Commit: `bc85382`). [15, 16] +- **Comfy-Org/comfy-cli Issue #341:** ์ด๋ฏธ์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ webp, mp4 ๋“ฑ ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋ฏธ๋””์–ด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ `comfy-cli`์— ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๋…ผ์˜์™€ `exiftool` ํ™œ์šฉ ์‚ฌ๋ก€๊ฐ€ ๊ธฐ๋ก๋จ. [6, 14, 17] +- **WeirdWonderfulAI.Art:** ์•ฝ 21,460๊ฐœ ์ด์ƒ์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•œ ํ†ต๊ณ„๋ฅผ ๋ณด์œ ํ•œ ์›น ๊ธฐ๋ฐ˜ ์ถ”์ถœ ๋„๊ตฌ ์„œ๋น„์Šค๋ฅผ ์šด์˜ ์ค‘์ž„. [9] +- **exiftool CLI:** `exiftool -b -workflow` ๋ช…๋ น์„ ํ†ตํ•ด PNG์—์„œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฉ๋ฆฌํ•˜๋Š” ํ‘œ์ค€์ ์ธ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๊ธฐ๋ฒ•์œผ๋กœ ํ™œ์šฉ๋จ. [3, 6] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ์œผ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Issue / Technical Guides) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI Workflow JSON Generation and Serialization.md b/10_Wiki/Topics/Comfyui/ComfyUI Workflow JSON Generation and Serialization.md new file mode 100644 index 00000000..c3d80749 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI Workflow JSON Generation and Serialization.md @@ -0,0 +1,102 @@ +--- +id: comfyui-workflow-json-generation-and-serialization +title: "ComfyUI Workflow JSON Generation and Serialization" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI Workflow JSON ์ƒ์„ฑ ๋ฐ ์ง๋ ฌํ™”"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "ComfyUI API", "Serialization"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-workflow-to-api-converter-endpoint", "comfyui_to_python.py", "WorkflowGenerator Pipeline", "/workflow/convert endpoint", "comfy_api_simplified"] +github_commit: "bc85382" +--- + +# [[ComfyUI Workflow JSON Generation and Serialization]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ ์ง๋ ฌํ™”๋Š” ์‹œ๊ฐ์  ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ณ„์ธต์  JSON ๊ตฌ์กฐ(Frontend vs. API)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ƒ์„ฑ AI ํŒŒ์ดํ”„๋ผ์ธ์˜ ์ด์‹์„ฑ, ์ž๋™ํ™” ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ œ์–ด๋ฅผ ๊ฐ€๋Šฅ์ผ€ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **JSON ํฌ๋งท์˜ ์ด๋ถ„ํ™” (Frontend vs. API)**: ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” 'ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท(workflow.json)'๊ณผ ์‹คํ–‰ ์—”์ง„์— ์ตœ์ ํ™”๋˜์–ด UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ '๋ฐฑ์—”๋“œ/API ํฌ๋งท(workflow_api.json)'์œผ๋กœ ๋‚˜๋‰œ๋‹ค [2, 3]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Steganography)**: ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ PNG, WebP ๋“ฑ์˜ ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด๋ถ€ ํ…์ŠคํŠธ ์ฒญํฌ(tEXt/zTXt)์— ์ˆจ๊ฒจ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ์†Œ์Šค ์ฝ”๋“œ ์—ญํ• ์„ ํ•˜๊ฒŒ ํ•œ๋‹ค [4-6]. +- **JSON v1.0 ์Šคํ‚ค๋งˆ ํ‘œ์ค€**: ๋…ธ๋“œ ID, ํด๋ž˜์Šค ํƒ€์ž…, ์œ„์ ฏ ๊ฐ’, ์Šฌ๋กฏ ๊ธฐ๋ฐ˜ ๋งํฌ ์—ฐ๊ฒฐ ๋“ฑ์„ ์ •์˜ํ•˜๋Š” ๊ธฐ์ˆ ์  ์ œ์•ฝ ์กฐ๊ฑด ๋ชจ์Œ์ด๋‹ค [7, 8]. +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion)**: ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•จ์œผ๋กœ์จ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰์„ ์ตœ์ ํ™”ํ•œ๋‹ค [9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ ํ”„๋กœํ† ์ฝœ**: ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ API ์ „์šฉ JSON์„ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜, ํ‘œ์ค€ ์ €์žฅ์„ ํ†ตํ•ด UI ํฌํ•จ JSON์„ ์ƒ์„ฑํ•œ๋‹ค [10-12]. +- **ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ณ€์กฐ**: JSON์„ ๋”•์…”๋„ˆ๋ฆฌ ๊ฐ์ฒด๋กœ ๋กœ๋“œํ•œ ํ›„ ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ๊ฐ’์„ ์ˆ˜์ •ํ•˜์—ฌ ์‹œ๋“œ(seed)๋‚˜ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค [13, 14]. +- **3๋‹จ๊ณ„ LLM ํŒŒ์ดํ”„๋ผ์ธ**: ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ๋ฐ›์•„ '๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ(Generator) -> ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator) -> ๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ(Builder)' ๊ณผ์ •์„ ๊ฑฐ์ณ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [15-17]. +- **์„œ๋ฒ„์ธก ํฌ๋งท ๋ณ€ํ™˜**: ํด๋ผ์ด์–ธํŠธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—†์ด ์„œ๋ฒ„ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋น„ API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ ํŒจํ„ด์ด๋‹ค [18, 19]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ **์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)**๋กœ ์ทจ๊ธ‰ํ•˜๋ฉฐ, ์ด๋ฅผ JSON์œผ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ๊ณผ์ •์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€ ๊ฒฝ๋กœ๋กœ ์ง„ํ–‰๋œ๋‹ค [1]. + +์ฒซ์งธ, **ํ”„๋ก ํŠธ์—”๋“œ JSON(workflow.json)**์€ Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ๋…ธ๋“œ์˜ ์ขŒํ‘œ, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ์ •๋ณด์™€ ๊ฐ™์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค [2, 20]. ์ด๋Š” ์ฃผ๋กœ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ์˜ ํŽธ์ง‘๊ณผ ๊ณต์œ ๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•œ๋‹ค [3]. + +๋‘˜์งธ, **API JSON(workflow_api.json)**์€ ์‹ค์ œ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋…ผ๋ฆฌ๋งŒ์„ ๋‚จ๊ธด ์ŠคํŠธ๋ฆผ๋ผ์ธํ™”๋œ ๊ทธ๋ž˜ํ”„์ด๋‹ค [2]. ์—ฌ๊ธฐ์„œ๋Š” ๋งํฌ๊ฐ€ ๋ณ„๋„์˜ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ง์ ‘ ์‚ฝ์ž…๋œ ์ฐธ์กฐ ํ˜•ํƒœ(`[origin_node_id, output_slot_index]`)๋กœ ํ‘œํ˜„๋œ๋‹ค [2, 21]. + +๊ธฐ์ˆ ์ ์œผ๋กœ **JSON v1.0 ์Šคํ‚ค๋งˆ**๋Š” `nodes` ๋ฐฐ์—ด ๋‚ด์˜ ๊ฐ ๊ฐ์ฒด๊ฐ€ `id`, `type`, `pos`, `size`, `widgets_values`, `mode` ๋“ฑ์˜ ์†์„ฑ์„ ๊ฐ€์งˆ ๊ฒƒ์„ ์š”๊ตฌํ•œ๋‹ค [7]. ํŠนํžˆ ์—ฐ๊ฒฐ(Connectivity)์€ ์ž…๋ ฅ ์Šฌ๋กฏ๊ณผ ์ถœ๋ ฅ ์Šฌ๋กฏ์˜ ๊ณ ์œ  ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ, ์ด๋Š” VAE Loader์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ์ถœ๋ ฅ์„ ๊ฐ€์ง„ ๋…ธ๋“œ์—์„œ ์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ด๋‹ค [22]. + +์ตœ๊ทผ์—๋Š” **ComfyGPT** ์—ฐ๊ตฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ LLM ์ค‘์‹ฌ ์ƒ์„ฑ ๋ฐฉ์‹์ด ๋„์ž…๋˜์–ด, Qwen2.5-14B์™€ ๊ฐ™์€ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ๋ฒˆ์—ญํ•œ๋‹ค [15, 23]. ๋˜ํ•œ **ComfyUI-to-Python-Extension**๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(headless) ํ™˜๊ฒฝ์—์„œ์˜ ๋…๋ฆฝ์  ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค [24, 25]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ**: ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [26]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜**: ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ์ด๋ฏธ์ง€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด์— ์˜ํ•ด ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ JSON ์ถ”์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค [6, 26]. +- **API ํฌ๋งท์˜ ๊ฐ€๋…์„ฑ**: API ํฌ๋งท์€ ์‹คํ–‰์—๋Š” ํšจ์œจ์ ์ด์ง€๋งŒ ์ธ๊ฐ„์ด ์ฝ๊ธฐ ์–ด๋ ต๊ณ  ๋…ธ๋“œ ์ขŒํ‘œ๊ฐ€ ์—†์–ด UI๋กœ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ ๋ณด์ด๊ฑฐ๋‚˜ ๋ผˆ๋Œ€๋งŒ ๋‚จ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [18, 27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint**: `bc85382` ์ปค๋ฐ‹์—์„œ ๋Œ€์†Œ๋ฌธ์ž๊ฐ€ ํ‹€๋ฆฐ ์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์„ ์ •๊ทœํ™”ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ˆ˜์ •๋˜์—ˆ์œผ๋ฉฐ, `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๋น„ API ํฌ๋งท์„ ๋ณ€ํ™˜ํ•œ๋‹ค [28-30]. +- **ComfyUI-to-Python-Extension**: `comfyui_to_python.py` ๋ฐ `comfyui_to_python_utils.py` ํŒŒ์ผ์„ ํ†ตํ•ด JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [31]. +- **DanielPFlorian/ComfyUI-WorkflowGenerator**: ์ž์—ฐ์–ด๋ฅผ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์„ ์œ„ํ•ด `Workflow Generator Pipeline` ๋…ธ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ๋‚ด๋ถ€์ ์œผ๋กœ `UpdateNodeCatalog`๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์นดํƒˆ๋กœ๊ทธํ™”ํ•œ๋‹ค [32-34]. +- **Mystic Pipeline**: `pipeline.yaml`๊ณผ `new_pipeline.py`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ๋กœ ๋ฐฐํฌํ•  ๋•Œ API JSON ํฌ๋งท์ด ์‚ฌ์šฉ๋œ๋‹ค [35, 36]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์™€ ๊ณต์‹ ๋ฌธ์„œ์˜ ํฌ๋งท ๋ช…์„ธ๋ฅผ ํ†ตํ•ด ๊ธฐ์ˆ ์  ๊ตฌ์กฐ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์‹ค์ œ ๊ตฌํ˜„์ฒด GitHub ์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ ์ž์ฒด๊ฐ€ DAG๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋จ [1]. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ก ํŠธ์—”๋“œ JSON ํฌ๋งท์ด ๋”ฐ๋ฅด๋Š” ์‹œ๊ฐ์  ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ‘œ์ค€ [2, 20]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” 'Missing Custom Node' ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋„๊ตฌ [37]. +- [[ComfyUI API]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON(API format)์ด ์‹ค์ œ๋กœ ์†Œ๋ชจ๋˜๋Š” ์ตœ์ข… ์ธํ„ฐํŽ˜์ด์Šค [38, 39]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI์˜ 'Execution Model Inversion'์€ ์ˆœ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐฉ์‹๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์–ด๋А ์ •๋„์˜ ๋ฆฌ์†Œ์Šค ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๋Š”๊ฐ€? [9] +- ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt) ์™ธ์— WebP๋‚˜ MP4์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด ํฌ๋งท์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€? [40] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ ๋ฐœ์ƒํ•˜๋Š” 'ํ• ๋ฃจ์‹œ๋„ค์ด์…˜(๋…ธ๋“œ ์˜ค์—ฐ๊ฒฐ)'์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ Semantic Validator์˜ ๊ตฌ์ฒด์ ์ธ ์ž„๋ฒ ๋”ฉ ๋น„๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [23, 41] +- `object_info.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋…ธ๋“œ ์Šคํ‚ค๋งˆ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒƒ๊ณผ ์ •์  ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์˜ ์„ฑ๋Šฅ ์ฐจ์ด๋Š” ์–ด๋– ํ•œ๊ฐ€? [42, 43] +- ๋ณตํ•ฉ์ ์ธ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๊ฐ€ ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ์ง๋ ฌํ™”ํ•  ๋•Œ ๋…ธ๋“œ ID ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋‚ด๋ถ€ ์Šฌ๋กฏ ๋งคํ•‘ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? [44] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋”•์…”๋„ˆ๋ฆฌ์˜ `inputs` ํ‚ค๋ฅผ ์กฐ์ž‘ํ•จ์œผ๋กœ์จ ์ž๋™ํ™”๋œ ๋ฐฐ์น˜ ์ƒ์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค [13, 45]. +- **System Design:** API ์ „์šฉ ํฌ๋งท์„ ์‚ฌ์šฉํ•˜์—ฌ UI ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ ์„œ๋ฒ„๋ฆฌ์Šค ์ถ”๋ก  ์—”๋“œํฌ์ธํŠธ(Mystic, Replicate)๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค [39, 46]. +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์—์„œ ๊ณต์œ ๋œ JSON์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ์ž๋™ ์ง„๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•œ๋‹ค [37, 47]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ(Default workflow)๋ฅผ JSON์œผ๋กœ ๋‚ด๋ณด๋‚ด ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•œ ํ›„, ์ ์ง„์ ์œผ๋กœ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉฐ ์Šคํ‚ค๋งˆ ๋ณ€ํ™”๋ฅผ ๊ด€์ฐฐํ•˜๋Š” ํ•™์Šต์ด ๊ถŒ์žฅ๋œ๋‹ค [48, 49]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์ด์‹์„ฑ์„ ์œ„ํ•ด ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  ๋ชจ๋ธ์˜ ํ•ด์‹œ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ  [50]. +- [[Steganography in Generative AI]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ์ƒ์„ฑ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ฐฉ์‹์˜ ๋ณด์•ˆ ๋ฐ ๋ฐ์ดํ„ฐ ๋ณด์กด ๊ด€๋ จ ์—ฐ๊ตฌ [6]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI Workflow JSON.md b/10_Wiki/Topics/Comfyui/ComfyUI Workflow JSON.md new file mode 100644 index 00000000..0f553ae4 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI Workflow JSON.md @@ -0,0 +1,115 @@ +--- +id: comfyui-workflow-json +title: "ComfyUI Workflow JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์›Œํฌํ”Œ๋กœ์šฐ JSON", "workflow_api.json"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "ComfyUI", "JSON"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "DanielPFlorian/ComfyUI-WorkflowGenerator/README.md" + - "comfyui-workflow-to-api-converter-endpoint/README.md" + - "pydn/ComfyUI-to-Python-Extension/README.md" +github_commit: "82df278, bc85382, 6cdcc23" +--- + +# [[ComfyUI Workflow JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI Workflow JSON์€ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ƒ์„ฑ AI ํ”„๋กœ์„ธ์Šค๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ๊ฐ€์‹œ์ ์ธ UI ๋ ˆ์ด์•„์›ƒ๊ณผ ํ”„๋กœ๊ทธ๋žจ์  ์‹คํ–‰ ๋กœ์ง ๊ฐ„์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ์ฒญ์‚ฌ์ง„์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **ํฌ๋งท์˜ ์ด๋ถ„ํ™” (Bifurcation):** ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท(workflow.json)'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์— ์ตœ์ ํ™”๋œ '๋ฐฑ์—”๋“œ/API ํฌ๋งท(workflow_api.json)'์œผ๋กœ ๋‚˜๋‰œ๋‹ค [3-6]. +2. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์˜ tEXt/zTXt ์ฒญํฌ ๋‚ด์— ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ฒจ ์ €์žฅํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ๋ฐฑ์—… ๋ฐ ๊ณต์œ  ์ˆ˜๋‹จ์ด ๋œ๋‹ค [7-9]. +3. **๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ธฐ๋ฐ˜ ์Šคํ‚ค๋งˆ:** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ  ID, ํด๋ž˜์Šค ํƒ€์ž…, ์ž…๋ ฅ/์ถœ๋ ฅ ์Šฌ๋กฏ ๋ฐ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” JSON Schema v1.0 ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค [10-12]. +4. **ํ”„๋กœ๊ทธ๋žจ์  ์ œ์–ด (Programmatic Automation):** JSON ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ „์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๋ฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค [13-15]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ์—”์ง„์€ ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค [16]. +- **3๋‹จ๊ณ„ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ (LLM):** ์ž์—ฐ์–ด ์„ค๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ ํ•ฉ์„ฑ(Generator), ๋…ธ๋“œ ์ด๋ฆ„ ๊ฒ€์ฆ(Validator), ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JSON ์ปดํŒŒ์ผ(Builder) ์ˆœ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [17-19]. +- **ํ—ค๋“œ๋ฆฌ์Šค ๋ณ€ํ™˜ ํŒจํ„ด:** ์‹œ๊ฐ์  ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœ์ˆ˜ Python ์Šคํฌ๋ฆฝํŠธ(.py)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ GUI ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [20, 21]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋Š” AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ค๋ช…ํ•˜๋Š” ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ง๋ ฌํ™”ํ•œ ๋ฐ์ดํ„ฐ์ด๋‹ค [22, 23]. ์ฃผ์š” ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. + +**1. ํฌ๋งท๋ณ„ ํŠน์„ฑ ๋ฐ ์ƒ์„ฑ** +* **ํ”„๋ŸฐํŠธ์—”๋“œ JSON:** ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน, ์ƒ‰์ƒ ๋“ฑ ์‹œ๊ฐ์  ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋ฉฐ Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค [3, 5, 24]. ์ผ๋ฐ˜์ ์ธ 'Save' ๋ฒ„ํŠผ์ด๋‚˜ `Ctrl+S`๋กœ ์ƒ์„ฑํ•œ๋‹ค [8, 25]. +* **API JSON:** UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ๋กœ์ง(๋…ธ๋“œ ํƒ€์ž…, ์ž…๋ ฅ๊ฐ’, ์—ฐ๊ฒฐ ๊ด€๊ณ„)๋งŒ ๋‚จ๊ธด ํšจ์œจ์ ์ธ ํฌ๋งท์ด๋‹ค [3, 6, 26]. ์„ค์ •์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•œ ํ›„ 'Save (API Format)'๋ฅผ ํ†ตํ•ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค [27-30]. + +**2. ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ™œ์šฉ ๋ฐ ์ถ”์ถœ** +ComfyUI์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์ด๋ฏธ์ง€๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๋ถ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จํ•œ๋‹ค [31, 32]. ์‚ฌ์šฉ์ž๋Š” PNG ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ๋ณต์›ํ•  ์ˆ˜ ์žˆ๋‹ค [7, 33, 34]. ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€์—์„œ JSON์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด `exiftool`์ด๋‚˜ ์ „์šฉ CLI ๋„๊ตฌ, ์›น ๊ธฐ๋ฐ˜ ์ถ”์ถœ๊ธฐ(`Weird Wonderful AI Art` ๋“ฑ)๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค [35-37]. + +**3. ์ž๋™ํ™” ๋ฐ ๋ณ€ํ™˜ ๋„๊ตฌ** +* **Python API ์—ฐ๋™:** `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋“œ, ํ”„๋กฌํ”„ํŠธ ๋“ฑ ํŠน์ • ๋…ธ๋“œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ณ  `/prompt` ์—”๋“œํฌ์ธํŠธ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค [13, 15]. +* **๋ณ€ํ™˜ ์—”๋“œํฌ์ธํŠธ:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ๋น„-API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค [38, 39]. +* **์ฝ”๋“œ ๋ณ€ํ™˜:** `ComfyUI-to-Python-Extension`์€ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญํ•˜์—ฌ ์ž๋™ํ™” ๋ฐ ์‹คํ—˜์˜ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค [14, 21]. + +**4. LLM ๊ธฐ๋ฐ˜ ๋™์  ์ƒ์„ฑ** +`ComfyUI-WorkflowGenerator`๋Š” Qwen2.5์™€ ๊ฐ™์€ ๊ฑฐ๋Œ€์–ธ์–ด๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ "SDXL์„ ์ด์šฉํ•œ ํ…์ŠคํŠธ ํˆฌ ์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ž์—ฐ์–ด ๋ช…๋ น์„ ์ฆ‰์‹œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ๊ตฌ์ถ•ํ•œ๋‹ค [40-42]. ์ด ๊ณผ์ •์—์„œ ๋กœ์ปฌ ๋…ธ๋“œ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•œ๋‹ค [43, 44]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +* **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [33]. +* **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†Œ์‹ค:** ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์ „์†กํ•  ๊ฒฝ์šฐ ์ž„๋ฒ ๋”ฉ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋‹ค [9, 33]. +* **API ํฌ๋งท์˜ ๋‹จ์ :** API ํฌ๋งท์œผ๋กœ๋งŒ ์ €์žฅ๋œ ํŒŒ์ผ์€ UI ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์•„ ์บ”๋ฒ„์Šค์— ๋กœ๋“œ ์‹œ ๋…ธ๋“œ๊ฐ€ ๊ฒน์น˜๊ฑฐ๋‚˜ ์‹œ๊ฐ์  ๊ตฌ์กฐ๊ฐ€ ๋ฌด๋„ˆ์ง„ '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๋กœ ๋‚˜ํƒ€๋‚œ๋‹ค [45]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +* **DanielPFlorian/ComfyUI-WorkflowGenerator:** LLM์„ ์ด์šฉํ•ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌํ˜„ (์ปค๋ฐ‹: `82df278`) [19, 42, 46]. +* **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ์ด์‹ํ•˜์—ฌ `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด JSON ํฌ๋งท์„ ๋ณ€ํ™˜ (์ปค๋ฐ‹: `bc85382`) [38, 39, 47]. +* **pydn/ComfyUI-to-Python-Extension:** JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ `.py` ํŒŒ์ผ๋กœ ๋‚ด๋ณด๋‚ด์–ด ๋‹จ๋… ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์Šคํฌ๋ฆฝํŠธ ์ƒ์„ฑ ํ™˜๊ฒฝ ๊ตฌ์ถ• (์ปค๋ฐ‹: `6cdcc23`) [48, 49]. +* **Mystic Pipeline:** ์‚ฌ์šฉ์ž์˜ ์ปค์Šคํ…€ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ์— ๋ฐฐํฌํ•˜์—ฌ API ํ˜•ํƒœ๋กœ ์„œ๋น™ [50, 51]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋‹ค์–‘ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ ์šฉ ์‚ฌ๋ก€ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Primary Source via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Nodes]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ๋‹จ์œ„ [22, 52]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ ์—ฐ๊ฒฐ ๋ฐฉ์‹ ๋ฐ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ตฌ์กฐ [23, 53]. +- [[Litegraph]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ”„๋ŸฐํŠธ์—”๋“œ JSON ํฌ๋งท์˜ ์‹œ๊ฐ์  ์ง๋ ฌํ™” ํ‘œ์ค€ [3, 5]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ๊ณผ ๋…ธ๋“œ ์ขŒํ‘œ ๊ด€๋ฆฌ ์›๋ฆฌ [4]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋กœ๋“œ ์‹œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋„๊ตฌ [54-56]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• [55]. +- [[Comfy GPT]] + - ์—ฐ๊ฒฐ ์ด์œ : LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์˜ ์›ํ˜•์ด ๋˜๋Š” ์—ฐ๊ตฌ [19, 40]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ž์—ฐ์–ด-๊ทธ๋ž˜ํ”„ ๋ณ€ํ™˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ฐœ์ „ ๋ฐฉํ–ฅ [57]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ํ”„๋ŸฐํŠธ์—”๋“œ JSON๊ณผ API JSON ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด๊ฐ€ ์‹ค์ œ ์„œ๋ฒ„ ์‹คํ–‰ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์ •๋Ÿ‰์  ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€? [3, 4] +- PNG ์™ธ์— WebP๋‚˜ MP4 ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‚ด์žฅํ•˜๊ณ  ์ถ”์ถœํ•˜๋Š” ๊ธฐ์ˆ ์  ํ‘œ์ค€์€ ์–ด๋–ป๊ฒŒ ์ •์˜๋˜๋Š”๊ฐ€? [58] +- 'Execution Model Inversion'์ด ๋ณต์žกํ•œ ๋ฃจํ”„ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ๋„ ์ผ๊ด€๋œ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š”๊ฐ€? [16] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ ์ถœํ˜„ ์‹œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๋Š” ํšจ์œจ์ ์ธ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? [57, 59] +- `.cpack.zip`๊ณผ ๊ฐ™์€ ์›Œํฌํ”Œ๋กœ์šฐ ํŒจํ‚ค์ง• ๋ฐฉ์‹์ด ๊ธฐ์กด JSON ๋ฐฉ์‹์˜ ๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์™„์ „ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [60] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/prompt` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ API JSON์˜ ํŠน์ • ๋…ธ๋“œ ID ๊ฐ’์„ ๊ฐ€๋กœ์ฑ„์–ด ๋™์ ์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•จ [13, 15]. +- **System Design:** ์‹œ๊ฐ์  ํŽธ์ง‘ ํ™˜๊ฒฝ(ํ”„๋ŸฐํŠธ์—”๋“œ)๊ณผ ๋ฐฐํฌ ํ™˜๊ฒฝ(๋ฐฑ์—”๋“œ)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํšจ์œจ์ ์ธ AI ํ”„๋กœ๋•์…˜ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ• [3, 50, 61]. +- **Operation / Maintenance:** `ComfyUI Manager`๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ๊ณต์œ  ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ˆ„๋ฝ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ํ•ด๊ฒฐ [54, 55]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ ๋กœ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ์„ ํ†ตํ•œ ํƒ€์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๋ถ„์„, ์ตœ์ข…์ ์œผ๋กœ API ๊ธฐ๋ฐ˜ ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ๋ฐœ์ „ [62-64]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด `class_type`์ด ์ฐธ์กฐํ•˜๋Š” ์‹ค์ œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์ฒด ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ [8, 55, 65]. +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ํŒŒ์ผ ๋‚ด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ SHA-256 ํ•ด์‹œ๋ฅผ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ• [66]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source indices: [1-186]) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI Workspace Manager.md b/10_Wiki/Topics/Comfyui/ComfyUI Workspace Manager.md new file mode 100644 index 00000000..d031eef7 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI Workspace Manager.md @@ -0,0 +1,88 @@ +--- +id: comfyui-workspace-manager +title: "ComfyUI Workspace Manager" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Workspace Manager"] +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 ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ"] +github_commit: "" +--- + +# [[ComfyUI Workspace Manager]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์กฐ์งํ™”ํ•˜๊ณ  ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ์•ˆ์ „ํ•œ ์ €์žฅ ๋ฐ ์ž์‚ฐ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํŒŒ์›Œ ์œ ์ €์šฉ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ตœ์ ํ™” ๋„๊ตฌ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ ์กฐ์งํ™” (Visual Organization):** ๋ฒ„ํŠผ ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ๋ จ๋œ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•จ [2]. +2. **๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๋ณดํ˜ธ ์ €์žฅ (Root Directory Storage):** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ComfyUI์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜์—ฌ, ํ–ฅํ›„ ์—…๋ฐ์ดํŠธ ์‹œ ํŒŒ์ผ์ด ์‹ค์ˆ˜๋กœ ๋ฎ์–ด์”Œ์›Œ์ง€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ „ํ•œ ๋ฐฑ์—… ๋ฐ ๊ณต์œ ๋ฅผ ์ง€์›ํ•จ [2]. +3. **ํ†ตํ•ฉ ์ž์‚ฐ ํš๋“ (Integrated Asset Acquisition):** ๊ด€๋ฆฌ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด์—์„œ ์ฒดํฌํฌ์ธํŠธ ๋ชจ๋ธ, LoRA ๋ฐ ๊ธฐํƒ€ ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•จ [3]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์—…๋ฐ์ดํŠธ ๋‚ด์„ฑ ์ €์žฅ ํŒจํ„ด:** ์‹œ์Šคํ…œ ์—…๋ฐ์ดํŠธ์™€ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณ ์ •๋œ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ์— ๋ณด๊ด€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ๋ณด์žฅํ•จ [2]. +- **์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ(JSON) ๊ด€๋ฆฌ์™€ ๋ชจ๋ธ ์ž์‚ฐ(Weights) ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ผ ์‹œ๊ฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์ž‘์—… ํ๋ฆ„์˜ ๋‹จ์ ˆ์„ ์ตœ์†Œํ™”ํ•จ [2, 3]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI Workspace Manager๋Š” ๊ธฐ๋ณธ ComfyUI์˜ ์ €์žฅ ๋ฐ ๋กœ๋“œ ๊ธฐ๋Šฅ์„ ๋„˜์–ด์„  ๊ณ ๋„์˜ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ์ด๋‹ค [1]. ์ด ๋„๊ตฌ๋Š” ๋‹จ์ˆœํžˆ JSON ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด์œ ํ•œ ์ˆ˜๋งŽ์€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ „์šฉ ๋ธŒ๋ผ์šฐ์ € ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [2]. + +ํŠนํžˆ **๋ฐ์ดํ„ฐ ์•ˆ์ „์„ฑ** ์ธก๋ฉด์—์„œ ๊ฐ•๋ ฅํ•œ ์ด์ ์„ ๊ฐ€์ง€๋Š”๋ฐ, ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ComfyUI ์„ค์น˜ ํด๋”์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ฒด๊ณ„์ ์œผ๋กœ ๋ณด๊ด€ํ•จ์œผ๋กœ์จ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํ•ต์‹ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž์˜ ์†Œ์ค‘ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ž์‚ฐ์ด ์†์‹ค๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [2]. ๋˜ํ•œ, ์‚ฌ์šฉ์ž๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ชจ๋ธ์ด๋‚˜ LoRA๋ฅผ ์ฆ‰์‹œ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋‚ด๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ์–ด, ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์„ฑ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋ถ€์กฑ ๋ฌธ์ œ๋ฅผ ๋„๊ตฌ ๋‚ด์—์„œ ์ฆ‰๊ฐ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค [3]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +๊ธฐ์กด์˜ [[ComfyUI Custom Scripts]]๊ฐ€ ์ €์žฅ/๋กœ๋“œ ๋ฒ„ํŠผ ์•„๋ž˜์— ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, Workspace Manager๋Š” ๋ณ„๋„์˜ ๋…๋ฆฝ์ ์ด๊ณ  ์‹œ๊ฐ์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ƒ๊ธ‰ ๋Œ€์•ˆ์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค [1, 2]. ์†Œ์Šค ๋ฐ์ดํ„ฐ ๋‚ด์—์„œ ๊ธฐ๋Šฅ์  ๋ชจ์ˆœ์€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์œผ๋ฉฐ, ํŒŒ์›Œ ์œ ์ €๋ฅผ ์œ„ํ•œ ํŽธ์˜์„ฑ ํ™•์žฅ ๋„๊ตฌ๋กœ์„œ์˜ ์„ฑ๊ฒฉ์ด ๊ฐ•์กฐ๋œ๋‹ค [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **์ €์žฅ ์œ„์น˜:** ์ด ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์šฐ๋Š” **ComfyUI์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ**์— ์ €์žฅ๋˜์–ด ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌ๋œ๋‹ค [2]. +- **๊ธฐ๋Šฅ ํ™œ์šฉ:** ์‚ฌ์šฉ์ž๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ **๋ชจ๋ธ ๋ฐ LoRA ๋‹ค์šด๋กœ๋“œ**๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ž‘์—… ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•œ๋‹ค [3]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Primary Source via NotebookLM / User Guides) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ ์ฒด๊ณ„] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : Workspace Manager๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ ๋Œ€์ƒ์ธ JSON ํŒŒ์ผ์˜ ์ƒ์„ฑ ์›๋ฆฌ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ JSON์˜ ์–ด๋–ค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐํ™”ํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. +- [[ComfyUI Custom Scripts]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ €์žฅ ๋ฐ ๋กœ๋“œ ํŽธ์˜์„ฑ์„ ๊ฐœ์„ ํ•˜๋Š” ์œ ์‚ฌํ•œ ๋ชฉ์ ์˜ ๋„๊ตฌ์ž„ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ฒฝ๋กœ ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌ์™€ ์‹œ๊ฐ์  ๊ด€๋ฆฌ ๋ฐฉ์‹์˜ ์ฐจ์ด์ ์„ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Œ. + +#### [์ž์‚ฐ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ์„ค์น˜ ๋ฐ ๋ชจ๋ธ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํ˜ธ๋ณด์™„์  ๋„๊ตฌ์ž„ [4]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: Workspace Manager์˜ ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ๊ณผ์˜ ํ†ตํ•ฉ ํ™œ์šฉ๋ฒ•์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Workspace Manager๊ฐ€ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ๋‚ด๋ถ€์ ์ธ ํด๋” ๊ตฌ์กฐํ™” ๊ทœ์น™์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ธ๋„ค์ผ์ด๋‚˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•˜์—ฌ ํ‘œ์‹œํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์–ด๋– ํ•œ๊ฐ€? +- ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ Git ๋“ฑ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ๊ณผ ์—ฐ๋™๋  ๋•Œ์˜ ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ์ด ComfyUI Manager์˜ DB์™€ ๋™๊ธฐํ™”๋˜์–ด ์ž‘๋™ํ•˜๋Š”๊ฐ€, ์•„๋‹ˆ๋ฉด ๋…์ž์ ์ธ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ(์˜ˆ: 200KB ์ด์ƒ์˜ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„) ์ฒ˜๋ฆฌ ์‹œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์„ฑ๋Šฅ ํ•œ๊ณ„๋Š” ์กด์žฌํ•˜๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ๋‹ค์ˆ˜์˜ ํ”„๋กœ์ ํŠธ๋ณ„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ œ์ž‘ ํ™˜๊ฒฝ์— ๋„์ž…. +- **System Design:** ์—…๋ฐ์ดํŠธ๊ฐ€ ์žฆ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ์ž์‚ฐ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ์ €์žฅ ์ „๋žต์œผ๋กœ ์ฑ„ํƒ. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ์šฐ์™€ ํ•„์š”ํ•œ ๋ชจ๋ธ(Weights)์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌํ•˜์—ฌ ํŒ€ ๋‚ด ๊ณต์œ  ๋ฐ ์ธ์ˆ˜์ธ๊ณ„ ํšจ์œจํ™”. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Workflow JSON]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ์ œ์–ดํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ˜•์‹์˜ ์ƒ์„ธ ์ŠคํŽ™ ์ดํ•ด [5]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI-Manager.md b/10_Wiki/Topics/Comfyui/ComfyUI-Manager.md new file mode 100644 index 00000000..be2f0464 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI-Manager.md @@ -0,0 +1,89 @@ +--- +id: comfyui-manager +title: "ComfyUI-Manager" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["ltdrdata/ComfyUI-Manager", "Comfy-Org/ComfyUI-Manager/issues/719"] +github_commit: "" +--- + +# [[ComfyUI-Manager]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI-Manager๋Š” ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์ข…์†์„ฑ์„ ๋™์ ์œผ๋กœ ํ•ด์„ํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ์™€ ๋ชจ๋ธ์„ ์ž๋™ ์„ค์น˜ํ•˜์—ฌ, ์ •์ ์ธ ํŒŒ์ผ ์ƒํƒœ์˜ ์ง€์‹์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ๊ด€๋ฆฌ ์—”์ง„์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์ข…์†์„ฑ ์ž๋™ ํ•ด๊ฒฐ (Dependency Resolution):** ์™ธ๋ถ€์—์„œ ๊ฐ€์ ธ์˜จ JSON ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” "Red Box(๋ˆ„๋ฝ๋œ ๋…ธ๋“œ)" ์˜ค๋ฅ˜๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์›ํด๋ฆญ ์„ค์น˜๋ฅผ ์ง€์›ํ•จ [1, 2]. +2. **ํ†ตํ•ฉ ๋ฆฌ์†Œ์Šค ํ—ˆ๋ธŒ (Resource Hub):** ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฒดํฌํฌ์ธํŠธ, LoRA, ControlNet ๋“ฑ ๋‹ค์–‘ํ•œ AI ๋ชจ๋ธ(Weights)์˜ ๊ฒ€์ƒ‰ ๋ฐ ์„ค์น˜๋ฅผ GUI ๋‚ด์—์„œ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•จ [3, 4]. +3. **์›Œํฌํ”Œ๋กœ์šฐ ๋ธŒ๋ผ์šฐ์ง•:** Comfy Workflows ๋ฐ OpenArt์™€ ๊ฐ™์€ ํ”Œ๋žซํผ๊ณผ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๋ณด๊ณ  ์ฆ‰์‹œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํ†ต๋กœ ์—ญํ• ์„ ํ•จ [5]. +4. **๋ณด์•ˆ ๋ฐ ์ƒํƒœ ๊ด€๋ฆฌ:** ๋…ธ๋“œ ์„ค์น˜ ์‹œ์˜ ๋ณด์•ˆ ์ˆ˜์ค€(Security Level) ์„ค์ • ๋ฐ ์„œ๋ฒ„ ์—…๋ฐ์ดํŠธ, ํ„ฐ๋ฏธ๋„ ๋กœ๊ทธ ํ™•์ธ ๋“ฑ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์œ ์ง€๋ณด์ˆ˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•จ [6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Scan-Parse-Install ํŒจํ„ด:** ์‚ฌ์šฉ์ž๊ฐ€ JSON์„ ๋กœ๋“œํ•˜๋ฉด ์‹œ์Šคํ…œ์ด `class_type`์„ ์Šค์บ”ํ•˜๊ณ , ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ํ•ญ๋ชฉ์„ ํŒŒ์‹ฑํ•œ ๋’ค, ํ•ด๋‹น Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ฐพ์•„ ์„ค์น˜๋ฅผ ์ œ์•ˆํ•˜๋Š” ์ผ๋ จ์˜ ํ๋ฆ„ [2]. +- **๋งˆ์ปค ๋…ธ๋“œ ํ™œ์šฉ ํŒจํ„ด:** `Workflow to API Converter (Marker)`์™€ ๊ฐ™์€ ํŠน์ • ๋…ธ๋“œ๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ์— ํฌํ•จ์‹œ์ผœ, Manager๊ฐ€ ํ•ด๋‹น ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํŠน์ • ์ข…์†์„ฑ์„ ๋” ์ •ํ™•ํ•˜๊ฒŒ ๊ฐ์ง€ํ•˜๋„๋ก ์œ ๋„ํ•˜๋Š” ์ „๋žต [7, 8]. +- **์ค‘์•™ ์ง‘์ค‘ํ˜• ์—…๋ฐ์ดํŠธ ์ „๋žต:** ๊ฐœ๋ณ„์ ์œผ๋กœ `git pull`์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹ , Manager๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์—…๋ฐ์ดํŠธ ์ƒํƒœ๋ฅผ ์ผ๊ด„ ํ™•์ธํ•˜๊ณ  ๊ฐฑ์‹ ํ•จ [3, 9]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI-Manager๋Š” **ltdrdata**์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋กœ, ComfyUI ์ƒํƒœ๊ณ„์˜ ๋ณต์žกํ•œ ๋…ธ๋“œ ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค [3]. ์‚ฌ์šฉ์ž๊ฐ€ Civitai๋‚˜ GitHub์—์„œ ๊ณต์œ ๋œ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ–ˆ์„ ๋•Œ, ๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ•ด๋‹น ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ํ™”๋ฉด์— ๋ถ‰์€์ƒ‰ ์ƒ์ž๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค [2]. ์ด๋•Œ Manager๋Š” JSON ๋‚ด์˜ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜์—ฌ "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ˆ„๋ฝ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ž๋™์œผ๋กœ ์ฐพ์•„ ์„ค์น˜ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•จ์œผ๋กœ์จ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ๋ณต๊ตฌํ•œ๋‹ค [1, 2]. + +๋˜ํ•œ, ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์— ํ•„์ˆ˜์ ์ธ **๋ชจ๋ธ ๊ด€๋ฆฌ** ๊ธฐ๋Šฅ๋„ ๊ฐ•๋ ฅํ•˜๋‹ค. "Install Models" ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด SDXL, Realistic Vision ๋“ฑ ์ฃผ์š” ๋ชจ๋ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ์— ํ•„์š”ํ•œ ControlNet ๋ชจ๋ธ๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ ์ ˆํ•œ ํด๋” ๊ฒฝ๋กœ์— ์ž๋™์œผ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค [4, 10, 11]. + +์„ค์น˜ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์—ฌ, ComfyUI์˜ `custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—์„œ `git clone https://github.com/ltdrdata/ComfyUI-Manager` ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ํ™œ์„ฑํ™”๋œ๋‹ค [3]. ์ตœ๊ทผ์—๋Š” ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API์šฉ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ข…์†์„ฑ์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•œ 'Marker' ๋…ธ๋“œ ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณต์œ ํ•  ๋•Œ์˜ ํ˜ธํ™˜์„ฑ์„ ๋†’์ด๋Š” ์—ญํ• ๋„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค [7, 8]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ณด์•ˆ ์ˆ˜์ค€ ๊ฐˆ๋“ฑ:** Manager๋ฅผ ํ†ตํ•œ ์ž๋™ ์„ค์น˜ ์‹œ 'This action is not allowed'์™€ ๊ฐ™์€ ๋ณด์•ˆ ๋ ˆ๋ฒจ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์„ค์ • ๋ฉ”๋‰ด์—์„œ์˜ ๋ณ„๋„ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค [6]. +- **๋ชจ๋ธ ๋ช…์นญ ๋ถˆ์ผ์น˜:** ๋™์ผํ•œ ๋ชจ๋ธ์ž„์—๋„ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ(์˜ˆ: `sd_xl_base_v10.safetensors` vs `sdxl_base.safetensors`) Manager๊ฐ€ ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256) ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ์žˆ๋‹ค [12, 13]. +- **ํŠน์ • ๋…ธ๋“œ ๋ˆ„๋ฝ:** IP-Adapter์™€ ๊ฐ™์€ ์ผ๋ถ€ ๋ณต์žกํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ Manager๋ฅผ ํ†ตํ•ด์„œ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ์ข…์†์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ณด๊ณ ๋˜์–ด ์ง€์†์ ์ธ ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋‹ค [14]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ltdrdata/ComfyUI-Manager ๋ฆฌํฌ์ง€ํ† ๋ฆฌ:** `ComfyUI/custom_nodes/ComfyUI-Manager` ๊ฒฝ๋กœ์— ์„ค์น˜๋˜์–ด ์ „์ฒด ๋…ธ๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ ์ž‘๋™ [3]. +- **Workflow to API Converter (Marker) ๋…ธ๋“œ:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ Manager๊ฐ€ ์ข…์†์„ฑ์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋งˆ์ปค๋กœ ์‹ค์ œ JSON ๊ตฌ์กฐ ๋‚ด์— ํฌํ•จ๋จ [7, 8]. +- **Issue #719 (ComfyUI-Manager):** IP-Adapter ๋ฐ ๋ˆ„๋ฝ๋œ ๋ชจ๋ธ/์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์ฐจ์›์˜ ์ˆ˜์ • ๋ฐ ๊ธฐ์—ฌ ์‹œ๋„๊ฐ€ ๊ธฐ๋ก๋จ [14]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Wiki ๋ฐ ํŠœํ† ๋ฆฌ์–ผ ์†Œ์Šค ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : Manager๋Š” ์ƒ์„ฑ๋œ JSON์„ ํƒ€ ํ™˜๊ฒฝ์—์„œ ๋ณต๊ตฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ํŒŒ์ผ์˜ ์ด์‹์„ฑ(Portability) ํ™•๋ณด ์›๋ฆฌ. +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํ˜•์‹์˜ JSON์—์„œ๋„ ์ข…์†์„ฑ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Manager์˜ ๋งˆ์ปค ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•จ [7]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ์—†๋Š” API ํ™˜๊ฒฝ์—์„œ์˜ ๋…ธ๋“œ ๋ณต๊ตฌ ์ „๋žต. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI-Manager๊ฐ€ JSON์˜ `class_type`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •ํ™•ํ•œ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋‚ด๋ถ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์—…๋ฐ์ดํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256) ๊ธฐ์ˆ ์ด Manager์˜ ๋ชจ๋ธ ๊ฒ€์ƒ‰ ์—”์ง„์— ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉ๋˜์–ด ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? +- ๋ณด์•ˆ ๋ ˆ๋ฒจ ์„ค์ •(`Security Level Error`)์ด ๋…ธ๋“œ ์„ค์น˜ ๊ถŒํ•œ์— ๋ฏธ์น˜๋Š” ๊ตฌ์ฒด์ ์ธ ์˜ํ–ฅ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? +- `Workflow to API Converter (Marker)` ๋…ธ๋“œ๊ฐ€ JSON ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๊ธฐ๋ก๋˜๋Š” ๋ฐฉ์‹๊ณผ Manager๊ฐ€ ์ด๋ฅผ ์ธ์‹ํ•˜๋Š” ๋กœ์ง์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๋‚˜ ์ค‘์ฒฉ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ ๋‚ด์—์„œ Manager์˜ ์ข…์†์„ฑ ๊ฐ์ง€ ์„ฑ๋Šฅ์€ ์–ด๋–ป๊ฒŒ ๋ณด์žฅ๋˜๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ์‹œ `INPUT_TYPES`๋ฅผ ์ •ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ Manager์˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ํ˜ธํ™˜๋˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ [15]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฐํฌ ์‹œ Manager๊ฐ€ ์ธ์‹ ๊ฐ€๋Šฅํ•œ 'Marker' ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•จ [7, 8]. +- **Operation / Maintenance:** ์ •๊ธฐ์ ์œผ๋กœ Manager๋ฅผ ํ†ตํ•ด ์„ค์น˜๋œ ๋ชจ๋“  ํŒจํ‚ค์ง€์˜ ์—…๋ฐ์ดํŠธ ์ƒํƒœ๋ฅผ ์ ๊ฒ€ํ•˜์—ฌ ์ตœ์‹  ๋ชจ๋ธ ์ง€์› ํ™˜๊ฒฝ์„ ์œ ์ง€ํ•จ [3, 9]. +- **Learning Path:** ์ดˆ๋ณด ์‚ฌ์šฉ์ž๊ฐ€ "Red Box" ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ๋‹ค์–‘ํ•œ ๋ชจ๋ธ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์„ค์น˜ํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋กœ ํ•™์Šตํ•จ [1, 3]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[ComfyUI Workspace Manager]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: Manager๊ฐ€ ์„ค์น˜๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด, Workspace Manager๋Š” ์„ค์น˜๋œ ๋…ธ๋“œ๋“ค์„ ํ™œ์šฉํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹œ๊ฐ์  ์กฐ์งํ™”์™€ ๋ฐฑ์—…์— ์ง‘์ค‘ํ•จ [16, 17]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI-WorkflowGenerator.md b/10_Wiki/Topics/Comfyui/ComfyUI-WorkflowGenerator.md new file mode 100644 index 00000000..ac89a087 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI-WorkflowGenerator.md @@ -0,0 +1,106 @@ +--- +id: comfyui-workflowgenerator +title: "ComfyUI-WorkflowGenerator" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "catalog/", "cataloging/", "config/", "generators/", "nodes/", "tests/", "utils/", "wiki/", "workflows/"] +github_commit: "82df278" +--- + +# [[ComfyUI-WorkflowGenerator]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ž์—ฐ์–ด ์„ค๋ช…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณต์žกํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๋…ผ๋ฆฌ๋ฅผ ์ถ”๋ก ํ•˜๊ณ , ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ [[Workflow API JSON]] ํ˜•์‹์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” LLM ๊ธฐ๋ฐ˜์˜ ์ง€๋Šฅํ˜• ์›Œํฌํ”Œ๋กœ์šฐ ํ•ฉ์„ฑ ์—”์ง„ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ž์—ฐ์–ด-๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ๋ณ€ํ™˜ (Natural Language to Node Graph Conversion):** ์‚ฌ์šฉ์ž์˜ ์˜๋„(์˜ˆ: "SDXL ๊ธฐ๋ฐ˜ ํ…์ŠคํŠธ ํˆฌ ์ด๋ฏธ์ง€ ์ƒ์„ฑ")๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ ์ ˆํ•œ ๋…ธ๋“œ ๊ตฌ์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ๋ง์„ ์ƒ์„ฑํ•จ [1-3]. +- **3๋‹จ๊ณ„ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ (Three-stage Pipeline):** ๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ(Generator), ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator), ๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ(Builder) ๊ณผ์ •์„ ๊ฑฐ์ณ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ๋„์ถœํ•˜๋Š” ๊ตฌ์กฐ์  ์•„ํ‚คํ…์ฒ˜ [3-5]. +- **๋ฏธ์„ธ ์กฐ์ •๋œ ์ „๋ฌธ ๋ชจ๋ธ (Fine-tuned Specialist LLM):** ComfyUI์˜ ๋‚ด๋ถ€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ ์Šคํ‚ค๋งˆ ์‚ฌ์–‘์„ ํ•™์Šตํ•œ Qwen2.5-14B ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์„ ํ•ต์‹ฌ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉํ•จ [1, 6]. +- **๋กœ์ปฌ ๋…ธ๋“œ ๋™๊ธฐํ™” (Local Node Synchronization):** 'Update Node Catalog' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ํ˜„์žฌ ํ™˜๊ฒฝ์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๋ชจ๋ธ์˜ ์ง€์‹ ๊ณต๋ฐฑ์„ ๋ณด์™„ํ•จ [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ ๋ฐ ๊ต์ • ํŒจํ„ด (Semantic Validation & Correction):** LLM์ด ์ƒ์„ฑํ•œ ๊ฐ€์ƒ์˜ ๋…ธ๋“œ ์ด๋ฆ„์„ ๋กœ์ปฌ์— ์„ค์น˜๋œ ์‹ค์ œ ๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋Œ€์กฐํ•˜์—ฌ ์ž๋™ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒด ๋…ธ๋“œ๋ฅผ ์ œ์•ˆํ•จ [3, 4, 9]. +- **๋ชจ๋“ˆํ˜• ๋‹จ๊ณ„๋ณ„ ๊ฐœ์ž… (Modular Step-wise Intervention):** ์ƒ์„ฑ-๊ฒ€์ฆ-๊ตฌ์ถ• ๊ณผ์ •์„ ๊ฐœ๋ณ„ ๋…ธ๋“œ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ(๋…ผ๋ฆฌ ๋‹ค์ด์–ด๊ทธ๋žจ ๋“ฑ)์„ ์ง์ ‘ ๊ฒ€ํ† ํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋จ [10, 11]. +- **ํ™˜๊ฒฝ ์ ์‘ํ˜• ์ง€์‹ ํ™•์žฅ (Environment-adaptive Knowledge Expansion):** ํ•™์Šต ๋ฐ์ดํ„ฐ์˜ ์ปท์˜คํ”„(Cutoff) ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ๋…ธ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋™์ ์œผ๋กœ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ๊ฒ€์ฆ์— ํ™œ์šฉํ•˜๋Š” ํœด๋ฆฌ์Šคํ‹ฑ์„ ์ ์šฉํ•จ [7, 8, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI-WorkflowGenerator๋Š” **ComfyGPT ์—ฐ๊ตฌ**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋œ ๋…๋ฆฝ์ ์ธ ์‹œ์Šคํ…œ์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ๋ฐฐ์น˜ํ•˜๋Š” "์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ" ๋‹จ๊ณ„์—์„œ ์–ธ์–ด๋กœ ์˜๋„๋ฅผ ์ „๋‹ฌํ•˜๋Š” "๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์œผ๋กœ์˜ ์ „ํ™˜์„ ๋ชฉํ‘œ๋กœ ํ•œ๋‹ค [2-4]. + +- **์•„ํ‚คํ…์ฒ˜ ๊ตฌ์กฐ:** + 1. **Generator (๋…ผ๋ฆฌ ํ•ฉ์„ฑ):** LLM์ด ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ธ๋“œ ์ข…๋ฅ˜์™€ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ์ถ”์ƒ์  JSON ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [3, 5, 9]. + 2. **Validator (์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ):** 'Semantic search' ์ „์šฉ ๋ชจ๋“œ ๋˜๋Š” 'LLM refinement' ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ๋กœ์ปฌ ํ™˜๊ฒฝ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค [3, 9]. + 3. **Builder (๊ทธ๋ž˜ํ”„ ์ปดํŒŒ์ผ):** ๊ฒ€์ฆ๋œ ์ถ”์ƒ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” **v1.0 ์Šคํ‚ค๋งˆ** ์ค€์ˆ˜ ์›Œํฌํ”Œ๋กœ์šฐ JSON์œผ๋กœ ์ตœ์ข… ๋ณ€ํ™˜ํ•œ๋‹ค [3, 8]. + +- **๋ชจ๋ธ ๋ฐ ์‹คํ–‰ ํ™˜๊ฒฝ:** + - **ํ•ต์‹ฌ ๋ชจ๋ธ:** Qwen2.5-14B๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฏธ์„ธ ์กฐ์ •๋˜์—ˆ์œผ๋ฉฐ, ํšจ์œจ์„ฑ์„ ์œ„ํ•ด **GGUF ์–‘์žํ™”(q8_0)** ํ˜•์‹์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค [6]. + - **ํ•„์ˆ˜ ์˜์กด์„ฑ:** GGUF ๋ชจ๋ธ ๊ตฌ๋™์„ ์œ„ํ•ด `llama-cpp-python` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ, ์‹œ๋งจํ‹ฑ ๊ฒ€์ƒ‰์„ ์œ„ํ•ด ๋ณ„๋„์˜ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ(`paraphrase-multilingual-MiniLM-L12-v2`)์„ ํ™œ์šฉํ•œ๋‹ค [6, 13]. + - **์นดํƒˆ๋กœ๊ทธ ๊ด€๋ฆฌ:** `UpdateNodeCatalog` ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ˜„์žฌ ์„ค์น˜๋œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์ž„๋ฒ ๋”ฉ ๋ฐ ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ์„ ์ตœ์‹ ํ™”ํ•˜๋ฉฐ, ์ด๋Š” ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ •ํ™•๋„๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ด๋‹ค [7, 8]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •์  ํ•™์Šต ๋ฐ์ดํ„ฐ vs ๋™์  ์ƒํƒœ๊ณ„:** ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์€ ํ•™์Šต ์‹œ์  ์ดํ›„์— ์ถœ์‹œ๋œ ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•ด์„œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์ง€์‹์ด ์—†๋Š” "๋™๊ฒฐ(frozen)" ์ƒํƒœ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋กœ์ปฌ ๋…ธ๋“œ ์Šค์บ”(Update Catalog)์„ ํ†ตํ•œ ๋ณด์™„์ฑ…์ด ๊ฐ•์กฐ๋œ๋‹ค [12, 14]. +- **๋…ผ๋ฆฌ์  ์ƒ์„ฑ vs ๋ฌผ๋ฆฌ์  ์‹คํ–‰:** ๋ชจ๋ธ์ด ๋…ผ๋ฆฌ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋…ธ๋“œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋”๋ผ๋„, ๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ•ด๋‹น ์ฒดํฌํฌ์ธํŠธ ๋ชจ๋ธ์ด๋‚˜ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ€์žฌํ•  ๊ฒฝ์šฐ ์ตœ์ข… ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์‹คํ–‰ ์‹คํŒจ(Red Nodes)๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค [3, 14, 15]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **GitHub ํ”„๋กœ์ ํŠธ:** `DanielPFlorian/ComfyUI-WorkflowGenerator` ์ €์žฅ์†Œ์— ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ์™€ ๋…ธ๋“œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ๋‹ค [16]. +- **์ฃผ์š” ํŒŒ์ผ ๊ตฌ์กฐ:** + - `nodes/`: WorkflowGenerator, NodeValidator, WorkflowBuilder ๋“ฑ ํ•ต์‹ฌ ๋…ธ๋“œ ๊ตฌํ˜„์ฒด ํฌํ•จ [11, 16]. + - `catalog/`: ๋กœ์ปฌ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ์นดํƒˆ๋กœ๊ทธ ๊ด€๋ฆฌ ํด๋” [8, 16]. + - `generators/`: LLM์„ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๋…ผ๋ฆฌ ์ƒ์„ฑ ์—”์ง„ ํฌํ•จ [16]. +- **ํŠน์ด ์‚ฌํ•ญ:** 6๊ฐœ์›” ์ „ ์ปค๋ฐ‹(`82df278`)์„ ํ†ตํ•ด ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๊ฐ€ ์ˆ˜์ •๋œ ๊ธฐ๋ก์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [16]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋…ผ๋ฌธ ComfyGPT์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ์‹ค์ œ GitHub ๊ตฌํ˜„์ฒด๊ฐ€ ์กด์žฌํ•จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (GitHub Repository ๋ฐ ๊ธฐ์ˆ  ๋ฌธ์„œ ๊ธฐ๋ฐ˜ ์ •๋ณด) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +--- + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : WorkflowGenerator์˜ ์ตœ์ข… ์ถœ๋ ฅ๋ฌผ์ด์ž ๋ฐฑ์—”๋“œ ์‹คํ–‰์„ ์œ„ํ•œ ํ•„์ˆ˜ ๊ทœ๊ฒฉ์ž„ [8, 17, 18]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฐ์ œ๋œ ์‹คํ–‰ ์ตœ์ ํ™” ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ. +- [[ComfyGPT]] + - ์—ฐ๊ฒฐ ์ด์œ : WorkflowGenerator์˜ ์ด๋ก ์  ํ† ๋Œ€๊ฐ€ ๋œ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ์—ฐ๊ตฌ์ž„ [2, 3]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: LLM์ด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ์›์ฒœ ๋…ผ๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI-Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON์—์„œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ์‚ฌํ›„ ๊ด€๋ฆฌ ๋„๊ตฌ์ž„ [15, 19]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์™ธ๋ถ€ ๊ณต์œ  ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ ํ™•๋ณด ํ”„๋กœ์„ธ์Šค. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- LLM์˜ ํ•™์Šต ๋ฐ์ดํ„ฐ ์ปท์˜คํ”„ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์•„ํ‚คํ…์ฒ˜(์˜ˆ: Wan 2.2)๋ฅผ `UpdateNodeCatalog` ์ •๋ณด๋งŒ์œผ๋กœ ์ •ํ™•ํžˆ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [12] +- Semantic Validation ๋‹จ๊ณ„์—์„œ 'LLM refinement'๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ† ํฐ ์†Œ๋ชจ๋Ÿ‰๊ณผ ์ถ”๋ก  ์‹œ๊ฐ„ ๋Œ€๋น„ ์ •ํ™•๋„ ํ–ฅ์ƒ ๋น„์œจ์€ ์–ด๋А ์ •๋„์ธ๊ฐ€? [9] +- ์ƒ์„ฑ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ `order` ๋ฐ `mode` ์†์„ฑ์„ ๊ฒฐ์ •ํ•  ๋•Œ WorkflowBuilder๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์šฐ์„ ์ˆœ์œ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [8, 20] +- GGUF ์–‘์žํ™” ๊ฐ•๋„(q4_0 vs q8_0)๊ฐ€ ๋…ธ๋“œ ๊ฐ„์˜ ๋ณต์žกํ•œ ์—ฐ๊ฒฐ(Link) ๋…ผ๋ฆฌ ๋ณด์กด๋ ฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ์กด์žฌํ•˜๋Š”๊ฐ€? [21] +- ๋‹ค์ค‘ ControlNet๊ณผ ๊ฐ™์ด ์ค‘์ฒฉ๋œ ์กฐ๊ฑด๋ถ€ ์—ฐ๊ฒฐ์„ ์ž์—ฐ์–ด๋งŒ์œผ๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง ํ‘œ์ค€์€ ๋ฌด์—‡์ธ๊ฐ€? [4, 5] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `llama-cpp-python[cuda]`๋ฅผ ์„ค์น˜ํ•˜์—ฌ ์ €์‚ฌ์–‘ VRAM ํ™˜๊ฒฝ์—์„œ๋„ LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์Œ [13, 22]. +- **System Design:** ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ˜•ํƒœ์˜ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ถ”์ƒํ™” ๊ณ„์ธต์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ์ „๋ฌธ ์ง€์‹ ์—†๋Š” ์‚ฌ์šฉ์ž์˜ ์ ‘๊ทผ์„ฑ์„ ๋†’์ž„ [4, 23]. +- **Operation / Maintenance:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๋Œ€๋Ÿ‰ ์ถ”๊ฐ€ ์‹œ ๋ฐ˜๋“œ์‹œ `UpdateNodeCatalog`๋ฅผ ์žฌ์‹คํ–‰ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ง€์‹ ๋ฒ ์ด์Šค๋ฅผ ๋™๊ธฐํ™”ํ•ด์•ผ ํ•จ [7, 8]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Comfy Nodekit]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์ถ•ํ•˜๋Š” ์ •์  ์ƒ์„ฑ ๋ฐฉ์‹๊ณผ์˜ ๋น„๊ต ์—ฐ๊ตฌ [24]. +- [[Litegraph]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์‹œ๊ฐ์  ์š”์†Œ(์œ„์น˜, ํฌ๊ธฐ)๊ฐ€ ์ •์˜๋˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ‘œ์ค€ ๊ทœ๊ฒฉ ์ดํ•ด [17, 25]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ComfyUI-to-Python-Extension.md b/10_Wiki/Topics/Comfyui/ComfyUI-to-Python-Extension.md new file mode 100644 index 00000000..27c01d50 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ComfyUI-to-Python-Extension.md @@ -0,0 +1,66 @@ +--- +id: comfyui-to-python-extension +title: "ComfyUI-to-Python-Extension" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Save As Script"] +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_to_python.py", "comfyui_to_python_utils.py", "install.py", "init.py", "ComfyUI/custom_nodes"] +github_commit: "6cdcc23" +--- + +# [[ComfyUI-to-Python-Extension]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์‹œ๊ฐ์ ์ธ **ComfyUI ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณ„๋„์˜ ์„œ๋ฒ„ ์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํŒŒ์ด์ฌ(.py) ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜**ํ•˜์—ฌ ์ž๋™ํ™” ๋ฐ ์‹คํ—˜์˜ ๋ฐ˜๋ณต์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํ™•์žฅ ๋„๊ตฌ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Save As Script (UI Export):** ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค [2, 3]. +- **CLI Exporter:** ์ €์žฅ๋œ API ํฌ๋งท์˜ JSON ํŒŒ์ผ์„ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ์ผ๊ด„ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค [2, 4]. +- **Runtime Dependency:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์‹คํ–‰์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ **ComfyUI ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(PyTorch ๋“ฑ)**๊ณผ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋‹ค [5, 6]. +- **Metadata Preservation:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ†ตํ•ด ์ €์žฅ๋œ ์ด๋ฏธ์ง€๋Š” ์›๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ, ๋‹ค์‹œ ComfyUI๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜์—ฌ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค [5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Workflow-to-Script Serialization:** ์‹œ๊ฐ์  DAG(Directed Acyclic Graph) ๊ตฌ์กฐ๋ฅผ ์ˆœ์ฐจ์ ์ธ ํŒŒ์ด์ฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šคํ™” ์ฝ”๋“œ๋กœ ์ง๋ ฌํ™”ํ•˜๋Š” ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค [2, 7]. +- **Headless Execution Pattern:** ์›น ์„œ๋ฒ„๋‚˜ ํ”„๋ก ํŠธ์—”๋“œ ์—†์ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, ๋…๋ฆฝํ˜• ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ๋‚˜ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๊ธฐ ์šฉ์ดํ•œ ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [8, 9]. +- **Lifecycle Management:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ์˜ `main()` ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ชจ๋ธ ๋ฐ ์บ์‹œ ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” `finally` ๋ธ”๋ก์„ ํฌํ•จํ•˜์—ฌ ์ž์› ๊ด€๋ฆฌ๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [6]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +- **์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์‚ฌ์šฉ๋ฒ•:** + - **์›น UI ํ™•์žฅ:** `File -> Save As Script` ๋ฉ”๋‰ด๋ฅผ ํ†ตํ•ด `workflow_api.py` ํŒŒ์ผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋‚ด๋ณด๋‚ธ๋‹ค [3]. + - **CLI ๋ณ€ํ™˜:** `python comfyui_to_python.py --input_file workflow_api.json` ๋ช…๋ น์„ ํ†ตํ•ด ๊ธฐ์กด JSON ํŒŒ์ผ์„ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `--queue_size` ์˜ต์…˜์œผ๋กœ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค [4]. + - **ํ™˜๊ฒฝ ์„ค์ •:** ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ `COMFYUI_PATH`๋ฅผ ์„ค์ •ํ•˜์—ฌ ComfyUI ์ฝ”๋“œ๋ฒ ์ด์Šค ์œ„์น˜๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค [6, 10]. +- **๊ธฐ์ˆ ์  ํŠน์ง•:** + - **๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋Ÿฌ๋„ˆ:** ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ”„๋กฌํ”„ํŠธ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ **๋‹จ๋ฐœ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰๊ธฐ(single-shot runner)**๋กœ ๋™์ž‘ํ•œ๋‹ค [6]. + - **์ธ์ž ์ฒ˜๋ฆฌ:** ComfyUI์˜ ๋Ÿฐํƒ€์ž„ ์ธ์ž ํŒŒ์„œ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, `--highvram`, `--cpu`์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ์ง์ ‘ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค [5]. + - **ํŒŒ์ด์ฌ ๋ฒ„์ „ ์š”๊ตฌ์‚ฌํ•ญ:** ์•ˆ์ •์ ์ธ ๋™์ž‘์„ ์œ„ํ•ด **Python 3.12 ์ด์ƒ**์˜ ๋ฒ„์ „์„ ๊ถŒ์žฅํ•œ๋‹ค [2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋™์  ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํ•œ๊ณ„:** ํ•œ ์†Œ์Šค์—์„œ๋Š” ์ด ๋„๊ตฌ๊ฐ€ ์ค‘๊ฐ„ ๋ณ€ํ™˜ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— **๋™์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ(Dynamic workflows)**๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ์— ์–ด๋ ค์›€์ด ์žˆ๋‹ค๋Š” ๋น„ํŒ์  ์‹œ๊ฐ์„ ์ œ์‹œํ•œ๋‹ค [9]. +- **๋ฉ”๋‰ด ์œ„์น˜ ๋ณ€๋™์„ฑ:** ํ”„๋ก ํŠธ์—”๋“œ ๋ฒ„์ „์— ๋”ฐ๋ผ `Save As Script` ๋ฉ”๋‰ด์˜ ์œ„์น˜๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [3, 6]. +- **์ตœ์‹ ์„ฑ ์œ ์ง€:** ์ •์  ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ํ›ˆ๋ จ๋œ LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ๋„๊ตฌ์™€ ๋‹ฌ๋ฆฌ, ์ด ์ต์Šคํ…์…˜์€ ๋กœ์ปฌ์˜ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ๋ณด์ด์ง€๋งŒ, ์—ฌ์ „ํžˆ ์ˆ˜๋™ ๋ณ€ํ™˜ ๊ณผ์ •์ด ์ˆ˜๋ฐ˜๋œ๋‹ค [4, 11]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **pydn/ComfyUI-to-Python-Extension:** ํ•ด๋‹น ๊ฐœ๋…์ด ๊ตฌํ˜„๋œ ํ•ต์‹ฌ ํ”„๋กœ์ ํŠธ ์ €์žฅ์†Œ์ด๋‹ค [1]. +- **comfyui_to_python.py / comfyui_to_python_utils.py:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋กœ์ง์ด ๋‹ด๊ธด ์‹ค์ œ ์†Œ์Šค ํŒŒ์ผ๋“ค์ด๋‹ค [12]. +- **install.py:** ์ต์Šคํ…์…˜ ์„ค์น˜ ๋ฐ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ ์šฉ๋˜์–ด ์žˆ๋‹ค [12]. +- **Save As Script ๋ฉ”๋‰ด:** ComfyUI์˜ `File` ๋ฉ”๋‰ด ํ•˜๋‹จ์— ์‹ค์ œ ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋กœ ๊ตฌํ˜„๋˜์–ด ์ ์šฉ๋˜์—ˆ๋‹ค [3]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•.md b/10_Wiki/Topics/Comfyui/Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•.md new file mode 100644 index 00000000..9e30877b --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•.md @@ -0,0 +1,114 @@ +--- +id: comfyui-workflow-json-์ƒ์„ฑ-๋ฐฉ๋ฒ• +title: "Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI Workflow Serialization", "ComfyUI API JSON Generation"] +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", "API"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["bc85382", "82df278", "DanielPFlorian/ComfyUI-WorkflowGenerator", "SethRobinson/comfyui-workflow-to-api-converter-endpoint", "pydn/ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„(Frontend)์™€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋กœ์ง(API) ์‚ฌ์ด๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” **์ง๋ ฌํ™”๋œ ์†Œ์Šค ์ฝ”๋“œ**์ด๋ฉฐ, ์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ๋ถ€ํ„ฐ LLM ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ๊นŒ์ง€ ๋‹ค์ธต์ ์ธ ์ƒ์„ฑ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **ํ˜•์‹์˜ ์ด๋ถ„ํ™” (Bifurcation):** ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ **Frontend JSON**(์‚ฌ์šฉ์ž ํŽธ์ง‘์šฉ)๊ณผ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ๋กœ์ง๋งŒ ๋‚จ๊ธด **API JSON**(์„œ๋ฒ„/ํ”„๋กœ๊ทธ๋žจ ํ˜ธ์ถœ์šฉ)์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค [4-7]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** ์ƒ์„ฑ๋œ PNG/WebP ์ด๋ฏธ์ง€์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ ๋‚ด์— ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ฒจ ์ €์žฅํ•จ์œผ๋กœ์จ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฑ์—… ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [8, 9]. +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•ด ์‹คํ–‰ ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ตฌ์กฐ์  ํŠน์„ฑ์„ ๊ฐ€์ง„๋‹ค [10, 11]. +- **LLM ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ (LLM-driven Synthesis):** ์ž์—ฐ์–ด ์„ค๋ช…์„ ์„ธ ๋‹จ๊ณ„(์ƒ์„ฑ โ†’ ๊ฒ€์ฆ โ†’ ๋นŒ๋“œ)์˜ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฑฐ์ณ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” ์ตœ์‹  ์ ‘๊ทผ๋ฒ•์ด๋‹ค [12-14]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ํ™œ์„ฑํ™” ํŒจํ„ด:** API ์ „์šฉ JSON์„ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„ค์ • ๋ฉ”๋‰ด์—์„œ **'Enable Dev mode Options'**๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ๋งŒ 'Save (API format)' ๋ฒ„ํŠผ์ด ๋…ธ์ถœ๋œ๋‹ค [2, 15-17]. +- **๋…ธ๋“œ ID ๊ณ ์ •ํ™” ์ „๋žต:** API ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ œ์–ดํ•  ๋•Œ, ๊ฐ€๋ณ€์ ์ธ ๋…ธ๋“œ ID ๋Œ€์‹  **๋…ธ๋“œ ์ œ๋ชฉ(Title)**์ด๋‚˜ **์‚ฌ์šฉ์ž ์ •์˜ ํ‚ค**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ž˜ํผ(Wrapper) ์‚ฌ์šฉ ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [18-20]. +- **์˜์กด์„ฑ ์ž๋™ ํ•ด๊ฒฐ ํŒจํ„ด:** ์™ธ๋ถ€ JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” 'Missing Custom Node' ์˜ค๋ฅ˜(๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **ComfyUI Manager**๊ฐ€ JSON์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ์œ ๋„ํ•œ๋‹ค [21-23]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) + +### 1. GUI๋ฅผ ํ†ตํ•œ ์ˆ˜๋™ ์ƒ์„ฑ ๋ฐฉ๋ฒ• +๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ด๊ณ  ํ”ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ, ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ปจํŠธ๋กค ํŒจ๋„์„ ์‚ฌ์šฉํ•œ๋‹ค. +- **Frontend ํฌ๋งท (workflow.json):** ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ, ๋…ธ๋“œ ์ขŒํ‘œ, ๊ทธ๋ฃน, ์ƒ‰์ƒ ๋“ฑ ์‹œ๊ฐ์  ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค [4, 24]. **Ctrl + S** (๋˜๋Š” Cmd + S) ๋‹จ์ถ•ํ‚ค๋กœ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋ฐ”๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค [24]. +- **API ํฌ๋งท (workflow_api.json):** ์„œ๋ฒ„ ์‹คํ–‰์— ๋ถˆํ•„์š”ํ•œ UI ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ ์ •์ œ๋œ ๊ทธ๋ž˜ํ”„์ด๋‹ค [4, 7]. ์„ค์ •์—์„œ ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ์ผ  ํ›„ ์ƒ์„ฑ๋˜๋Š” **'Save (API format)'** ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”์ถœํ•˜๋ฉฐ, `/prompt` ์—”๋“œํฌ์ธํŠธ ํ˜ธ์ถœ์— ํ•„์ˆ˜์ ์ด๋‹ค [2, 25, 26]. + +### 2. ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ์˜ ์ถ”์ถœ +์ด๋ฏธ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ ํŒŒ์ผ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ์ง์„ ๋ณต๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ:** ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ PNG ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋–จ์–ด๋œจ๋ฆฌ๋ฉด ์ฆ‰์‹œ ๋…ธ๋“œ ๊ตฌ์„ฑ์ด ๋ณต์›๋œ๋‹ค [8, 27-29]. +- **์ถ”์ถœ ๋„๊ตฌ ํ™œ์šฉ:** `ExifTool`์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ๋ฅผ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜(`exiftool -b -workflow input.png > workflow.json`), ์ „๋ฌธ ์›น ์‚ฌ์ดํŠธ(Weird Wonderful AI Art) ๋ฐ CLI ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋ฒŒํฌ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค [30-33]. + +### 3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์ž๋™ํ™” ์ƒ์„ฑ +๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜ํ•œ๋‹ค. +- **Python ๋”•์…”๋„ˆ๋ฆฌ ์กฐ์ž‘:** JSON์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ค‘์ฒฉ๋œ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ์ด๋ฏ€๋กœ, `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹œ๋“œ, ํ”„๋กฌํ”„ํŠธ, ๋ชจ๋ธ ๊ฒฝ๋กœ ๋“ฑ์˜ ํŠน์ • ๋…ธ๋“œ ์ž…๋ ฅ์„ ์ง์ ‘ ์ˆ˜์ •ํ•˜์—ฌ ๋‹ค์‹œ ์ €์žฅํ•˜๊ฑฐ๋‚˜ API๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค [34, 35]. +- **ํ˜•์‹ ๋ณ€ํ™˜ ์—”๋“œํฌ์ธํŠธ:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ผ๋ฐ˜ Frontend JSON์„ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ์ฆ‰์‹œ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” `/workflow/convert` API๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค [26, 36]. +- **Python ์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜:** `ComfyUI-to-Python-Extension`์€ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ˆœ์ˆ˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ(.py)๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค [18, 37, 38]. + +### 4. LLM ๊ธฐ๋ฐ˜ ์ž์—ฐ์–ด ์ƒ์„ฑ (AI ํ•ฉ์„ฑ) +- **ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ:** `ComfyUI-WorkflowGenerator`๋Š” ์‚ฌ์šฉ์ž์˜ ์ž์—ฐ์–ด ๋ช…๋ น(์˜ˆ: "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ")์„ ์ž…๋ ฅ๋ฐ›์•„ **Generator**(๋…ผ๋ฆฌ ๊ตฌ์กฐ ์ƒ์„ฑ) โ†’ **Validator**(๋…ธ๋“œ ์ด๋ฆ„ ๊ฒ€์ฆ) โ†’ **Builder**(์‹คํ–‰ ๊ฐ€๋Šฅ JSON ๋นŒ๋“œ) ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค [13, 14]. +- **๊ธฐ๋ฐ˜ ๋ชจ๋ธ:** Qwen2.5-14B์™€ ๊ฐ™์ด ๋ฏธ์„ธ ์กฐ์ •๋œ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ์œ ํšจํ•œ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ถ”๋ก ํ•œ๋‹ค [39]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [23, 28]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜:** ์˜จ๋ผ์ธ ๊ณต์œ ๋‚˜ ์••์ถ• ๊ณผ์ •์—์„œ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(JSON ์ •๋ณด ํฌํ•จ)๊ฐ€ ์ œ๊ฑฐ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์„ ํ†ตํ•œ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค [9, 28, 40]. +- **Reroute ๋…ธ๋“œ ์ฒ˜๋ฆฌ:** ์ตœ๊ทผ ์—…๋ฐ์ดํŠธ(V2.2.0)์—์„œ๋Š” ๋ณ€ํ™˜๊ธฐ๋“ค์ด ์ƒˆ๋กœ์šด 'reroute' ๋…ธ๋“œ๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋กœ์ง์ด ์ˆ˜์ •๋˜์—ˆ๋‹ค [41]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Git ์ปค๋ฐ‹ bc85382:** `comfyui-workflow-to-api-converter-endpoint` ํ”„๋กœ์ ํŠธ์—์„œ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์˜ค๋ฅ˜(True vs true)๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์„ ์ •๊ทœํ™”ํ•˜๋Š” ๋กœ์ง์ด ์ ์šฉ๋จ [41, 42]. +- **Git ์ปค๋ฐ‹ 82df278:** `ComfyUI-WorkflowGenerator`์—์„œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ [43]. +- **/workflow/convert ์—”๋“œํฌ์ธํŠธ:** Seth A. Robinson์— ์˜ํ•ด ๊ฐœ๋ฐœ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋กœ, ๋น„ API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ [26, 44]. +- **Save As Script ๋ฉ”๋‰ด:** `pydn/ComfyUI-to-Python-Extension` ์„ค์น˜ ์‹œ ComfyUI์˜ 'File' ๋ฉ”๋‰ด์— ์ถ”๊ฐ€๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ํ•จ [45, 46]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๋‹ค์ˆ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ตฌํ˜„ ์‚ฌ๋ก€ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๊ฐœ๋ฐœ ๋ฌธ์„œ, ๋ฉ”์ด์ € ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž์˜ ๊ธฐ์ˆ  ๋…ธํŠธ ๋ฐ ํŠœํ† ๋ฆฌ์–ผ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… + +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํ˜•์‹์ด ๊ธฐ๋ฐ˜ํ•˜๊ณ  ์žˆ๋Š” ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„ ํ‘œ์ค€ [4, 6]. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ [10]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ JSON์˜ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๊ณ  ๋ˆ„๋ฝ๋œ ์š”์†Œ๋ฅผ ๋ณต๊ตฌํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ [21, 22]. +- [[ComfyUI API]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ƒ์„ฑ๋œ API JSON์ด ์ตœ์ข…์ ์œผ๋กœ ์†Œ๋น„๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์—”๋“œํฌ์ธํŠธ [47, 48]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์™œ ComfyUI๋Š” Frontend์™€ API ํฌ๋งท์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์„ค๊ณ„ํ–ˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ์–ป๋Š” ์„ฑ๋Šฅ์  ์ด๋“์€ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ฌด์—‡์ธ๊ฐ€? [4, 5] +- PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ(tEXt/zTXt)๋ฅผ ๋„˜์–ด์„œ๋Š” ๋Œ€์šฉ๋Ÿ‰ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ด๋ฏธ์ง€์— ์•ˆ์ „ํ•˜๊ฒŒ ํฌํ•จ์‹œํ‚ค๋Š” ๋Œ€์•ˆ ๊ธฐ์ˆ ์€ ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€? [9] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์‹œ, ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋Š” ์ตœ์‹  ์ปค์ŠคํŠธ ๋…ธ๋“œ์™€์˜ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด RAG(๊ฒ€์ƒ‰ ์ฆ๊ฐ• ์ƒ์„ฑ)๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [49] +- `Execution Model Inversion` ๊ตฌ์กฐ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ JSON์— ํฌํ•จ๋˜์—ˆ์„ ๋•Œ ์‹ค์ œ ์‹คํ–‰ ํšจ์œจ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์–ด๋– ํ•œ๊ฐ€? [10] +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ์ด์šฉํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์˜ JSON ๋‚ด ๋ชจ๋ธ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‘œ์ค€ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฌด์—‡์ธ๊ฐ€? [50] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์•ฑ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ˜์ • ํ›„ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ API ํ˜ธ์ถœ ์ƒ์„ฑ [26]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ Git์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ๋ฐฐํฌ ์‹œ์—๋Š” API ํฌ๋งท๋งŒ ์ถ”์ถœํ•˜์—ฌ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ(Replicate, Mystic ๋“ฑ)์— ์—…๋กœ๋“œ [16, 17, 51]. +- **Operation / Maintenance:** `object_info.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ์ „ ๋…ธ๋“œ ์ž…์ถœ๋ ฅ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•จ์œผ๋กœ์จ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜ ๋ฐฉ์ง€ [52, 53]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ตํžŒ ํ›„, `ComfyUI-to-Python`์„ ํ†ตํ•ด ์ž๋™ํ™” ๋‹จ๊ณ„๋กœ ์ง„์ž… [38, 54]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ ์ด์‹์„ฑ ๊ฐ•ํ™”๋ฅผ ์œ„ํ•œ ๋ชจ๋ธ ์‹๋ณ„ ๊ธฐ์ˆ  [50]. +- [[Custom Node Registry]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด `class_type`์ด ์ฐธ์กฐํ•˜๋Š” ์‹ค์ œ ๋…ธ๋“œ ๊ตฌํ˜„ ์ €์žฅ์†Œ ๊ด€๋ฆฌ [55]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source synthesis from 18 documents) [1-188] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Custom Node Dependency Management.md b/10_Wiki/Topics/Comfyui/Custom Node Dependency Management.md new file mode 100644 index 00000000..ee81db71 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Custom Node Dependency Management.md @@ -0,0 +1,102 @@ +--- +id: custom-node-dependency-management +title: "Custom Node Dependency Management" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ ๊ด€๋ฆฌ", "Missing Custom Nodes Resolution"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Dependency Management"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes/ComfyUI-Manager", "comfyui-workflow-to-api-converter-endpoint (V2.05)", "UpdateNodeCatalog Node"] +github_commit: "" +--- + +# [[Custom Node Dependency Management]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ด์‹์„ฑ์€ **JSON ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋‚ด `class_type` ๋ถ„์„**๊ณผ **ComfyUI Manager๋ฅผ ํ†ตํ•œ ์ž๋™ ์˜์กด์„ฑ ํ•ด๊ฒฐ** ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ๋ณด์žฅ๋œ๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **Red Node Detection:** ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ์‹œ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ์‹œ๊ฐ์  ๊ฒฝ๊ณ (๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋กœ ์‹๋ณ„ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ [1, 3, 4]. +2. **Node Registry (object_info.json):** ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์Šคํ‚ค๋งˆ ๋ฐ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํ†ตํ•ฉ ์นดํƒˆ๋กœ๊ทธ [5, 6]. +3. **Class Type Mapping:** JSON ํŒŒ์ผ์˜ `class_type` ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์—ญ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ์‹๋ณ„ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค [1, 7]. +4. **Automated Resolution (ComfyUI Manager):** ๋ฏธ์„ค์น˜ ๋…ธ๋“œ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์›ํด๋ฆญ์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ด€๋ฆฌ ๋„๊ตฌ [3, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Dependency Detection Marker:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ComfyUI Manager๊ฐ€ ์˜์กด์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ „์šฉ '๋งˆ์ปค ๋…ธ๋“œ'๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ์ „๋žต [9]. +- **Semantic Validation Pipeline:** LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด ๋ช…๋ น์—์„œ ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์ด ์‹ค์ œ ์„ค์น˜๋œ ๋…ธ๋“œ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ์œผ๋กœ ๊ฒ€์ฆํ•˜๊ณ  ๊ต์ •ํ•˜๋Š” ํŒจํ„ด [10, 11]. +- **Model Weight Hashing:** ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ณ ๊ธ‰ ์ง๋ ฌํ™” ๋ฐฉ์‹ [4, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์˜ ์˜์กด์„ฑ ๊ด€๋ฆฌ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ JSON์ด ๋‹จ์ˆœํ•œ ๊ทธ๋ž˜ํ”ฝ ๋ ˆ์ด์•„์›ƒ์ด ์•„๋‹ˆ๋ผ **์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ผ๋ฆฌ ๊ตฌ์กฐ(DAG)**๋ผ๋Š” ์ ์—์„œ ํ•ต์‹ฌ์ ์ธ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค [2, 13]. + +**์˜์กด์„ฑ ์‹๋ณ„ ๋ฐ ํ•ด๊ฒฐ ํ”„๋กœ์„ธ์Šค** +์‚ฌ์šฉ์ž๊ฐ€ ์™ธ๋ถ€์—์„œ ์ƒ์„ฑ๋œ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ, ComfyUI ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ฐ ๋…ธ๋“œ์˜ `class_type`์„ ๋กœ์ปฌ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•œ๋‹ค [1]. ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋…ธ๋“œ๋Š” ์บ”๋ฒ„์Šค์— ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค๋กœ ํ‘œ์‹œ๋œ๋‹ค [3, 14]. **ComfyUI Manager**๋Š” ์ด JSON์„ ๋‹ค์‹œ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๋ฉฐ, "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™ ์„ค์น˜๋ฅผ ์ง€์›ํ•œ๋‹ค [3, 8]. + +**๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ** +์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ๊ทผ๊ฐ„์€ `object_info.json` ํŒŒ์ผ์ด๋‹ค. ์ด ํŒŒ์ผ์€ ์ธ์Šคํ„ด์Šค ๋‚ด ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์œ ํ˜•, ๊ธฐ๋ณธ๊ฐ’, ํˆดํŒ ๋“ฑ ์ƒ์„ธ ์Šคํ‚ค๋งˆ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด ๋„๊ตฌ ๊ฐœ๋ฐœ ๋ฐ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ํ•„์ˆ˜์ ์ด๋‹ค [6, 15]. ๋˜ํ•œ, ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋„๊ตฌ์ธ **WorkflowGenerator**๋Š” `UpdateNodeCatalog` ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์Šค์บ”ํ•˜์—ฌ ์ตœ์‹  ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์œ ์ง€ํ•œ๋‹ค [16, 17]. + +**ํ™˜๊ฒฝ ๊ฐ„ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ** +๋กœ์ปฌ ๊ฒฝ๋กœ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€๋‚˜ ๋ชจ๋ธ์˜ ๊ฒฝ์šฐ, ํƒ€ ์‹œ์Šคํ…œ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ด๋™ํ•  ๋•Œ ๊ฒฝ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ๋‹ค [4]. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ํ•ด์‹ฑ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, `Comfy API Simplified`์™€ ๊ฐ™์ด ๋…ธ๋“œ ID ๋Œ€์‹  'ํƒ€์ดํ‹€'์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์œ ์—ฐ์„ฑ์„ ๋†’์ธ๋‹ค [12, 18]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๋Š” ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ, ๊ตฌ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์˜์กด์„ฑ ๋ฌธ์ œ ์—†์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์œผ๋ฉฐ ์ˆ˜๋™ ์ˆ˜์ •์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค [19]. +- **์ •์  ๋ชจ๋ธ์˜ ํ•œ๊ณ„:** ํŠน์ • ์‹œ์ ์— ํ•™์Šต๋œ LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ๋Š” ํ•™์Šต ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์กด์žฌ๋‚˜ ์˜์กด์„ฑ ๊ด€๊ณ„๋ฅผ ์•Œ ์ˆ˜ ์—†๋Š” '๋™๊ฒฐ(frozen)' ์ƒํƒœ์˜ ํ•œ๊ณ„๋ฅผ ๊ฐ€์ง„๋‹ค [20]. +- **๋ณด์•ˆ ์ด์Šˆ:** ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ์ธ `Impact-Pack` ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์—์„œ ์ฑ„๊ตด ๋ฐ”์ด๋Ÿฌ์Šค๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋Š” ๋“ฑ ์ปค์Šคํ…€ ๋…ธ๋“œ ์ƒํƒœ๊ณ„์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ๋ณด๊ณ ๋œ ๋ฐ” ์žˆ๋‹ค [21]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI/custom_nodes/ComfyUI-Manager:** ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ ์„ค์น˜๋ฅผ ์œ„ํ•œ ํ‘œ์ค€ ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ [22]. +- **comfyui-workflow-to-api-converter-endpoint (V2.05):** ์›Œํฌํ”Œ๋กœ์šฐ ์˜์กด์„ฑ ๊ฐ์ง€๋ฅผ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•œ "Marker Node" ๊ธฐ๋Šฅ ๊ตฌํ˜„ [9, 23]. +- **UpdateNodeCatalog ๋…ธ๋“œ:** ๊ฐ€์šฉ ๋…ธ๋“œ(๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€)๋ฅผ ์Šค์บ”ํ•˜์—ฌ ์˜์กด์„ฑ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์— ํ•„์š”ํ•œ ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ ์—…๋ฐ์ดํŠธ [16, 17]. +- **NodeValidator:** LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ๋…ธ๋“œ ์ด๋ฆ„์„ ์‹ค์ œ ๋กœ์ปฌ ์„ค์น˜ ๋…ธ๋“œ์™€ ๋น„๊ตํ•˜์—ฌ ๊ต์ •ํ•˜๋Š” ๊ฒ€์ฆ ๋…ธ๋“œ [10, 11]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์ฃผ์š” ๋„๊ตฌ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ตฌ์กฐ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์ฃผ์š” ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ฆฌ๋“œ๋ฏธ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow JSON - ComfyUI]] + - ์—ฐ๊ฒฐ ์ด์œ : ์˜์กด์„ฑ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ‘œ์ค€. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: `class_type` ํ•„๋“œ์˜ ์ค‘์š”์„ฑ. +- [[API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ๊ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์ˆ˜ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์—์„œ์˜ ์˜์กด์„ฑ ์ •์˜ ๋ฐฉ์‹. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹ค์งˆ์ ์ธ ์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐ ์ž๋™ ์„ค์น˜ ๋„๊ตฌ. +- [[object_info.json]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋“  ๋…ธ๋“œ ์˜์กด์„ฑ ๋ฐ ์Šคํ‚ค๋งˆ์˜ ๋Ÿฐํƒ€์ž„ ๋ฐ์ดํ„ฐ ์†Œ์Šค. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI Manager๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋™์ผํ•œ `class_type`์„ ๊ฐ€์งˆ ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ•˜๋Š”๊ฐ€? [์†Œ์Šค์— ๊ด€๋ จ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.] +- SHA-256 ๋ชจ๋ธ ํ•ด์‹ฑ์ด ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [12] +- LLM ๊ธฐ๋ฐ˜ `NodeValidator`๊ฐ€ ์˜ค์ธ์‹(Hallucination) ์—†์ด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ •ํ™•ํžˆ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กฌํ”„ํŠธ ์ตœ์ ํ™” ์ „๋žต์€? [10, 20] +- `object_info`๋ฅผ ์›๊ฒฉ ์„œ๋ฒ„์—์„œ ํ˜ธ์ถœํ•  ๋•Œ ๋ณด์•ˆ ์ธ์ฆ์ด ์˜์กด์„ฑ ์ •๋ณด ๋…ธ์ถœ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€? [24] +- ์˜์กด์„ฑ ๊ฐ์ง€๋ฅผ ์œ„ํ•œ 'Marker Node'๊ฐ€ JSON ๊ตฌ์กฐ ๋‚ด์—์„œ ์ฐจ์ง€ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ฐ€์ค‘์น˜๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? [9] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ์‹œ `INPUT_TYPES`๋ฅผ ์ •ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ `object_info.json`์— ๋ฐ˜์˜๋˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ํ•จ [25]. +- **System Design:** ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ, ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ๋กœ ์ธํ•œ ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ComfyUI Manager ํ˜ธํ™˜์„ฑ์„ ๊ณ ๋ คํ•ด์•ผ ํ•จ [1]. +- **Operation / Maintenance:** ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ ์„ค์น˜ ํ›„์—๋Š” `UpdateNodeCatalog`๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์˜์กด์„ฑ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ฐฑ์‹ ํ•ด์•ผ ํ•จ [17]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ชจ๋ธ ํŒŒ์ผ ๊ด€๋ฆฌ์˜ ์ผ๊ด€์„ฑ ๋ณด์žฅ ๊ธฐ์ˆ . +- [[Retrieval-Augmented Generation (RAG) for Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฏธ๋ž˜์˜ ๋™์  ์˜์กด์„ฑ ํƒ์ƒ‰ ๊ธฐ์ˆ  [26]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [27] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Custom Node Registry.md b/10_Wiki/Topics/Comfyui/Custom Node Registry.md new file mode 100644 index 00000000..29b50533 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Custom Node Registry.md @@ -0,0 +1,103 @@ +--- +id: custom-node-registry +title: "Custom Node Registry" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Node Catalog", "Node Schema Registry"] +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/models/LLM/", "ComfyUI/custom_nodes/ComfyUI-WorkflowGenerator", "/object_info endpoint", "/workflow/convert endpoint"] +github_commit: "" +--- + +# [[Custom Node Registry]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Custom Node Registry๋Š” ComfyUI์˜ ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ์„ ์ง€ํƒฑํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ, JSON ์›Œํฌํ”Œ๋กœ์˜ ์ถ”์ƒํ™”๋œ ๋…ธ๋“œ ํƒ€์ž…์„ ์‹ค์ œ Python ์‹คํ–‰ ๋กœ์ง ๋ฐ ์Šคํ‚ค๋งˆ์™€ ์—ฐ๊ฒฐํ•˜๋Š” ๊ถŒ์œ„ ์žˆ๋Š” ์›์ฒœ์ด๋‹ค. [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Node Mapping (class_type):** ์›Œํฌํ”Œ๋กœ JSON ๋‚ด์˜ `type` ๋˜๋Š” `class_type` ๋ฌธ์ž์—ด์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์„ค์น˜๋œ ์‹ค์ œ Python ํด๋ž˜์Šค ๊ธฐ๋Šฅ๊ณผ ๋งคํ•‘ํ•œ๋‹ค. [2, 4, 5] +- **Schema Discovery (object_info):** ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์—์„œ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ž…๋ ฅ/์ถœ๋ ฅ ์œ ํ˜•, ํ•„์ˆ˜ ์—ฌ๋ถ€, ํ—ˆ์šฉ ๋ฒ”์œ„๋ฅผ ๋™์ ์œผ๋กœ ์นดํƒˆ๋กœ๊ทธํ™”ํ•˜์—ฌ ์ œ๊ณตํ•œ๋‹ค. [3, 6] +- **Dependency Tracking:** ์™ธ๋ถ€์—์„œ ์œ ์ž…๋œ JSON ์›Œํฌํ”Œ๋กœ๋ฅผ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•œ๋‹ค. [7, 8] +- **Semantic Validation:** ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ์‹œ, ์ƒ์„ฑ๋œ ๋…ธ๋“œ ์ด๋ฆ„์ด ์‹ค์ œ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๊ณ  ๊ต์ •ํ•˜๋Š” ๊ธฐ์ค€์ ์ด ๋œ๋‹ค. [9-11] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Scan-and-Catalog ํŒจํ„ด:** ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธํ•œ ํ›„ `UpdateNodeCatalog` ๋…ธ๋“œ ๋“ฑ์„ ์‹คํ–‰ํ•˜์—ฌ ๋กœ์ปฌ ๋…ธ๋“œ ํ™˜๊ฒฝ์„ ์ตœ์‹ ํ™”ํ•˜๊ณ  ์นดํƒˆ๋กœ๊ทธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. [11-13] +- **Runtime Resolution ํŒจํ„ด:** ๋ฐฑ์—”๋“œ ์—”์ง„์€ ์‹คํ–‰ ์‹œ์ ์— JSON์˜ `class_type`์„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ฐพ์•„ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋ฉฐ, ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ API ํฌ๋งท์—์„œ ์ด ๋งคํ•‘์ด ํŠนํžˆ ์ค‘์š”ํ•˜๋‹ค. [2, 5, 14] +- **Schema Inversion ํŒจํ„ด:** `/object_info` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์™ธ๋ถ€๋กœ ๋…ธ์ถœํ•จ์œผ๋กœ์จ, ์™ธ๋ถ€ ์•ฑ์ด ComfyUI ๋‚ด๋ถ€ ๋กœ์ง์„ ๋ชจ๋ฅด๋”๋ผ๋„ ๋…ธ๋“œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. [3, 15] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Custom Node Registry๋Š” ComfyUI ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ๋ฐ ์ง๋ ฌํ™”์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃฌ๋‹ค. ์›Œํฌํ”Œ๋กœ๊ฐ€ JSON์œผ๋กœ ์ €์žฅ๋  ๋•Œ, ๊ฐ ๋…ธ๋“œ๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋œ ๊ณ ์œ ํ•œ **class_type**์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‹๋ณ„๋œ๋‹ค. [2, 4] ์ด๋Š” ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ์  ID์™€๋Š” ๋ณ„๊ฐœ์˜ ๊ธฐ๋Šฅ์  ํ‚ค ๊ฐ’์ด๋‹ค. [2, 16] + +**์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์—ญํ• :** +1. **์Šคํ‚ค๋งˆ ์ •์˜ (object_info.json):** ์ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ๊ฐ ๋…ธ๋“œ๊ฐ€ ์š”๊ตฌํ•˜๋Š” `required` ๋ฐ `optional` ์ž…๋ ฅ๊ฐ’, ๋ฐ์ดํ„ฐ ํƒ€์ž…, ๋„๊ตฌ ์„ค๋ช…(tooltips) ๋“ฑ์„ ์ƒ์„ธํžˆ ํฌํ•จํ•œ๋‹ค. [3] ๊ฐœ๋ฐœ์ž๋Š” ์ด๋ฅผ ํ™œ์šฉํ•ด ์ž…๋ ฅ๊ฐ’์„ ๊ฒ€์ฆํ•˜๊ฑฐ๋‚˜ ๋™์ ์œผ๋กœ ์›Œํฌํ”Œ๋กœ ์ˆ˜์ • ๋„๊ตฌ๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค. [3, 15, 17] +2. **์˜์กด์„ฑ ํ•ด๊ฒฐ ๋ฐ ๊ด€๋ฆฌ:** ComfyUI Manager๋Š” ์™ธ๋ถ€์—์„œ ๋กœ๋“œ๋œ JSON์˜ ๋…ธ๋“œ ํด๋ž˜์Šค๋ฅผ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๊ต์ฐจ ๊ฒ€์ฆํ•œ๋‹ค. [7] ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†์„ ๊ฒฝ์šฐ "Missing Custom Node" ์—๋Ÿฌ(๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋™ ์„ค์น˜๋ฅผ ์ง€์›ํ•œ๋‹ค. [7, 18] +3. **API ๋ณ€ํ™˜ ๋ฐ ๊ฒ€์ฆ:** `Workflow to API Converter`์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์ •ํ™•ํ•œ ๋ณ€ํ™˜์„ ์œ„ํ•ด ComfyUI์˜ ์‹ค์ œ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ ์œ„์ ฏ, ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. [19] +4. **LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ์˜ ์ค€๊ฑฐ ์ง‘๋‹จ:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ์›Œํฌํ”Œ๋กœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ(`ComfyUI-WorkflowGenerator`)์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™์Šต๋˜๊ฑฐ๋‚˜, ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€์˜ ์‹œ๋งจํ‹ฑ ๋งค์นญ์„ ํ†ตํ•ด ์œ ํšจํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ๋ณด์žฅํ•œ๋‹ค. [9, 10, 20] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •์  ๋ชจ๋ธ๊ณผ ๋™์  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ฐ„๊ทน:** ๊ณ ์ •๋œ ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต๋œ LLM ๋ชจ๋ธ์€ ํ•™์Šต ์‹œ์  ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์‹œ๊ฐ„ ์นดํƒˆ๋กœ๊ทธ ์Šค์บ”์ด ํ•„์ˆ˜์ ์ด๋‹ค. [21-23] +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋‚ด์˜ ํด๋ž˜์Šค ์ด๋ฆ„์ด๋‚˜ ๊ตฌ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋กœ ์ธํ•ด ๊ณผ๊ฑฐ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. [24] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **UpdateNodeCatalog:** ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์น˜ํ•œ ๋ชจ๋“  ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๋กœ์ปฌ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค. [11, 12] +- **ComfyUI Manager:** JSON ๋‚ด์˜ `class_type`์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์—†๋Š” ํŒจํ‚ค์ง€๋ฅผ ํƒ์ง€ํ•˜๊ณ  ์„ค์น˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. [7, 8] +- **Workflow to API Converter Endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก JS ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•ด ๋น„-API ํฌ๋งท์„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค. [19, 25] +- **object_info ์—”๋“œํฌ์ธํŠธ:** `/object_info` ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ธ์Šคํ„ด์Šค์˜ ์ „์ฒด ๋…ธ๋“œ ์Šคํ‚ค๋งˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ JSON ํ˜•ํƒœ๋กœ ๋ฐฐํฌํ•œ๋‹ค. [15] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ ๋‚ด ์—”๋“œํฌ์ธํŠธ ํ˜•ํƒœ๋กœ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ) [7, 15, 19] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository README / API Docs ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—†์ด ์˜ค์ง ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๊ธฐ๋Šฅ์  ํ‚ค์—๋งŒ ์˜์กดํ•˜์—ฌ ์‹คํ–‰๋œ๋‹ค. [2, 26] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐฑ์—”๋“œ ์‹คํ–‰ ๋กœ์ง์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉ์‹. [2, 5] +- [[JSON Schema v1.0]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ •์˜๋œ ๋…ธ๋“œ ๊ฐ์ฒด๋“ค์ด ์ค€์ˆ˜ํ•ด์•ผ ํ•  ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ •์˜ํ•œ๋‹ค. [4] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ID, ํƒ€์ž…, ์œ„์ ฏ ๊ฐ’ ๋“ฑ์˜ ๊ธฐ์ˆ ์  ์‚ฌ์–‘. [4, 27] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์˜์กด์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฐ€์žฅ ๋ณดํŽธ์ ์ธ ๋„๊ตฌ์ด๋‹ค. [7, 18] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ์„ค์น˜ ๋ฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค. [7, 28] +- [[ComfyUI-WorkflowGenerator]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ž์—ฐ์–ด๋ฅผ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ์œ ํšจํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์ œ๊ณตํ•œ๋‹ค. [10, 29] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•œ AI ๊ธฐ๋ฐ˜ ์ž๋™ํ™” ๋ฐฉ๋ฒ•๋ก . [9, 20, 30] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์„œ๋กœ ๋‹ค๋ฅธ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€ ๊ฐ„์— ํด๋ž˜์Šค ์ด๋ฆ„(`class_type`)์ด ์ถฉ๋Œํ•  ๊ฒฝ์šฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋Š” ์–ด๋–ค ์šฐ์„ ์ˆœ์œ„๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? +- ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์„ค์น˜๋œ ํ™˜๊ฒฝ์—์„œ ๋™์  ์นดํƒˆ๋กœ๊ทธ ์Šค์บ”(`UpdateNodeCatalog`)์ด ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๋ฐ ๋กœ๋”ฉ ์‹œ๊ฐ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? +- `object_info.json`์˜ ์Šคํ‚ค๋งˆ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์›น ๋Œ€์‹œ๋ณด๋“œ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ComfyUI ๋…ธ๋“œ UI๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? +- ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ(ํ•„๋“œ ์ถ”๊ฐ€/์‚ญ์ œ)์ด ๊ธฐ์กด์— ์ง๋ ฌํ™”๋œ JSON ์›Œํฌํ”Œ๋กœ์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๊ณผ ๊ทธ ๋Œ€์‘ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? +- `.cpack.zip`๊ณผ ๊ฐ™์€ ์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง• ๋ฐฉ์‹์€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์˜๊ตฌ์ ์œผ๋กœ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? [31] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ `/object_info`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์ด ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ทœ๊ฒฉ์— ๋งž๋Š”์ง€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ์ฆ‰์‹œ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ๋‹ค. [3, 15] +- **System Design:** Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ๋…ธ๋“œ ID ๋Œ€์‹  ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ํƒ€์ดํ‹€์ด๋‚˜ ํด๋ž˜์Šค ๋ช…์„ ์ฐธ์กฐํ•˜๋Š” ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. [32] +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ ๊ณต์œ  ์‹œ `Workflow to API Converter (Marker)` ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ํƒ€์ธ์ด๋‚˜ ๋งค๋‹ˆ์ €๊ฐ€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์˜์กด์„ฑ์„ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•˜๋„๋ก ๋•๋Š”๋‹ค. [8] +- **Learning Path:** ๋…ธ๋“œ ๋ฉ”๋‰ด์–ผ์„ ์ฝ๋Š” ๋Œ€์‹  `object_info` ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํŠน์ • ๋…ธ๋“œ์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์ž…๋ ฅ ์กฐํ•ฉ๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ๊ธฐ์ˆ ์ ์œผ๋กœ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค. [3] + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ์ „์ฒด ๋…ธ๋“œ ์ค‘ ์ตœ์ข… ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ์›๋ฆฌ. [33] +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋…ธ๋“œ ์ •์˜ ์™ธ์—๋„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ฐธ์กฐํ•˜๋Š” ๋ชจ๋ธ ํŒŒ์ผ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๊ธฐ์ˆ . [34] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [Source 26, 28, 37, 41, 133, 151 ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Custom Nodes.md b/10_Wiki/Topics/Comfyui/Custom Nodes.md new file mode 100644 index 00000000..9a374fbf --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Custom Nodes.md @@ -0,0 +1,99 @@ +--- +id: custom-nodes +title: "Custom Nodes" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์ปค์Šคํ…€ ๋…ธ๋“œ", "ํ™•์žฅ ๋…ธ๋“œ"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes", "GitHub: DanielPFlorian/ComfyUI-WorkflowGenerator", "GitHub: SethRobinson/comfyui-workflow-to-api-converter-endpoint", "GitHub: pydn/ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[Custom Nodes]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ComfyUI์˜ ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฌดํ•œํžˆ ํ™•์žฅํ•˜๋Š” ํ•ต์‹ฌ ๋™๋ ฅ์ด์ง€๋งŒ, ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ์ด์‹์„ฑ๊ณผ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฒฐ์ •์ง“๋Š” ๊ฐ€์žฅ ํฐ ์ข…์†์„ฑ ๋ณ€์ˆ˜์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ƒํƒœ๊ณ„ ํ™•์žฅ์„ฑ (Ecosystem Extensibility):** ๊ธฐ๋ณธ ๋…ธ๋“œ ์„ธํŠธ(Core nodes) ์™ธ์— ์ „ ์„ธ๊ณ„ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ณต์œ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ Stable Diffusion๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋น„๋””์˜ค, ์˜ค๋””์˜ค, 3D ์ƒ์„ฑ ๋“ฑ ๋ชจ๋“  ์œ ํ˜•์˜ ๋ฏธ๋””์–ด ์ž์‚ฐ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [2, 3]. +- **ํด๋ž˜์Šค ํƒ€์ž… ๋งคํ•‘ (Class_type Mapping):** JSON ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ๋‚ด์—์„œ ๊ฐ ๋…ธ๋“œ๋Š” `class_type` ์†์„ฑ์„ ํ†ตํ•ด ์‹๋ณ„๋˜๋ฉฐ, ์‹คํ–‰ ์‹œ ๋กœ์ปฌ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐ๋œ๋‹ค [4, 5]. +- **์ข…์†์„ฑ ๊ด€๋ฆฌ (Dependency Management):** ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ํ•ด๋‹น ์‹œ์Šคํ…œ์— ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด 'Red Boxes' ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ComfyUI Manager์™€ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ํ•„์ˆ˜์ ์ด๋‹ค [5, 6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ˆ„๋ฝ ๋…ธ๋“œ ๋ณต๊ตฌ ํŒจํ„ด:** ์™ธ๋ถ€ JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” 'Red Boxes'๋ฅผ ๊ฐ์ง€ํ•˜๊ณ  ComfyUI Manager๋ฅผ ํ†ตํ•ด "Install Missing Custom Nodes"๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜๋Š” ๋ณต๊ตฌ ํ๋ฆ„์ด ์ •ํ˜•ํ™”๋˜์–ด ์žˆ๋‹ค [5, 6]. +- **๋งˆ์ปค ๋…ธ๋“œ ํ™œ์šฉ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ComfyUI Manager๊ฐ€ ์ข…์†์„ฑ์„ ๋” ์‰ฝ๊ฒŒ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก "Workflow to API Converter (Marker)"์™€ ๊ฐ™์€ ํŠน์ • ๋งˆ์ปค ๋…ธ๋“œ๋ฅผ ์˜๋„์ ์œผ๋กœ ํฌํ•จ์‹œํ‚จ๋‹ค [7]. +- **LLM ๊ธฐ๋ฐ˜ ์ž๋™ ๊ฒ€์ƒ‰ ํŒจํ„ด:** `Update Node Catalog` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜„์žฌ ์„ค์น˜๋œ ๋ชจ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ณ , ์ด๋ฅผ LLM์ด ์ž์—ฐ์–ด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์ฐธ์กฐํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ™œ์šฉํ•œ๋‹ค [8, 9]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ComfyUI์˜ `custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ์— ์„ค์น˜๋˜๋ฉฐ, ์ฃผ๋กœ Git ํด๋ก ์„ ํ†ตํ•ด ์ถ”๊ฐ€๋œ๋‹ค [10, 11]. ์›Œํฌํ”Œ๋กœ์šฐ JSON ์ƒ์„ฑ ์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ •๋ณด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋œ๋‹ค. + +- **JSON ๋‚ด ๊ธฐ๋ก:** ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ €์žฅ๋  ๋•Œ ๊ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์„ค์ •, ์œ„์ ฏ ๊ฐ’, ์—ฐ๊ฒฐ ๊ด€๊ณ„๊ฐ€ JSON์˜ `nodes` ๋ฐฐ์—ด์— ํฌํ•จ๋œ๋‹ค [12, 13]. API ํฌ๋งท์ธ ๊ฒฝ์šฐ ๋น„์ฃผ์–ผ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ `class_type`๊ณผ `inputs` ์ •๋ณด๋งŒ ๋‚จ๋Š”๋‹ค [4, 14]. +- **์ฃผ์š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜ˆ์‹œ:** + - **ComfyUI-Manager:** ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ ์„ค์น˜/๊ด€๋ฆฌ์˜ ์ค‘์ถ” [10]. + - **Efficiency Nodes:** ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ„์†Œํ™”ํ•จ [15, 16]. + - **AnimateDiff Evolved & VideoHelperSuite:** ๋น„๋””์˜ค ์ƒ์„ฑ์„ ์œ„ํ•œ ํ•„์ˆ˜ ํ™•์žฅ [15, 16]. + - **IPAdapter Plus & ControlNet Aux:** ์ •๋ฐ€ํ•œ ์ด๋ฏธ์ง€ ์ œ์–ด๋ฅผ ์œ„ํ•œ ๋…ธ๋“œ๊ตฐ [16, 17]. +- **๊ฐœ๋ฐœ์ž ๋„๊ตฌ์™€์˜ ํ†ตํ•ฉ:** `Comfy Nodekit`๊ณผ ๊ฐ™์€ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์„œ๋ฒ„์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํƒ€์ž… ์•ˆ์ •์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค [18]. ๋˜ํ•œ `ComfyUI-to-Python-Extension`์€ ์ด๋Ÿฌํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ทธ๋ž˜ํ”„๋ฅผ ์ˆœ์ˆ˜ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰์„ ์ง€์›ํ•œ๋‹ค [19]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ, ๊ณผ๊ฑฐ์— ์ƒ์„ฑ๋œ JSON ํŒŒ์ผ ๋‚ด์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ตฌ์„ฑ์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋…ธ๋“œ์™€ ์ถฉ๋Œํ•˜์—ฌ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [20, 21]. +- **๋ฐ์ดํ„ฐ ์ฆ๋ฐœ ์œ„ํ—˜:** ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ์ด๋ฏธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ์ •๋ณด๊ฐ€ ๋‹ด๊ธด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(JSON)๊ฐ€ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ์–ด ์ „์šฉ ์ถ”์ถœ ๋„๊ตฌ ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋œ๋‹ค [22, 23]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **์„ค์น˜ ์œ„์น˜:** `ComfyUI/custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— ๊ฐ ๋…ธ๋“œ ํŒจํ‚ค์ง€๊ฐ€ ๋ฐฐ์น˜๋จ [10, 11]. +- **GitHub ํ”„๋กœ์ ํŠธ:** + - `DanielPFlorian/ComfyUI-WorkflowGenerator`: LLM์„ ํ†ตํ•ด ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜๋Š” ๋…ธ๋“œ ๊ตฌํ˜„ [24, 25]. + - `SethRobinson/comfyui-workflow-to-api-converter-endpoint`: (์ปค๋ฐ‹ `bc85382`) ๋น„ API ํฌ๋งท์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋กœ์ง ๊ตฌํ˜„ [26, 27]. +- **์˜์‚ฌ๊ฒฐ์ • ๊ธฐ๋ก:** ComfyUI Manager์˜ "Install Missing Custom Nodes" ๊ธฐ๋Šฅ์€ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ถ€์žฌ๋กœ ์ธํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์‹คํŒจ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‘œ์ค€ ์šด์˜ ์ ˆ์ฐจ(SOP)๋กœ ํ™•๋ฆฝ๋จ [5, 6]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋‹ค์ˆ˜์˜ GitHub ํ”„๋กœ์ ํŠธ ๋ฐ ๊ณต์‹ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•ด ์‹ค๋ฌด ์ ์šฉ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์ฃผ์š” ๊ฐœ๋ฐœ์ž ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” JSON ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๋™์ ์ธ ์š”์†Œ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด `class_type`์ด ์–ด๋–ป๊ฒŒ ์‹ค์ œ ๊ธฐ๋Šฅ์œผ๋กœ ๋งคํ•‘๋˜๋Š”์ง€ ์ดํ•ด ๊ฐ€๋Šฅ. +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์‹คํ–‰ ์‹œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ž…์ถœ๋ ฅ ๊ตฌ์กฐ๊ฐ€ ์ด ํฌ๋งท์— ๋งž์ถฐ ์ตœ์ ํ™”๋จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ์—†๋Š” ํ™˜๊ฒฝ์—์„œ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ํ˜ธ์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +#### [๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์„ค์น˜, ์—…๋ฐ์ดํŠธ, ๋ˆ„๋ฝ ๋ณต๊ตฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ „์šฉ ๋„๊ตฌ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ณต์žกํ•œ ์ข…์†์„ฑ ๋ฌธ์ œ๋ฅผ ์ž๋™ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ `class_type`์ด ์ค‘๋ณต๋  ๊ฒฝ์šฐ ComfyUI๋Š” ์–ด๋–ค ์šฐ์„ ์ˆœ์œ„๋กœ ๋…ธ๋“œ๋ฅผ ๋กœ๋“œํ•˜๋Š”๊ฐ€? +- `Update Node Catalog` ๋…ธ๋“œ๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋กœ์ปฌ์— ์„ค์น˜๋˜์ง€ ์•Š์€ ์›๊ฒฉ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [9] +- ์ปค์Šคํ…€ ๋…ธ๋“œ ๋‚ด์—์„œ ์ •์˜๋œ `INPUT_TYPES`๊ฐ€ JSON Schema v1.0 ๊ทœ๊ฒฉ๊ณผ ์ถฉ๋Œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [28] +- `comfy-pack`๊ณผ ๊ฐ™์€ ๋„๊ตฌ์—์„œ ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ์‚ฌ์šฉํ•  ๋•Œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋‚ด๋ถ€์˜ ๋ชจ๋ธ ๊ฒฝ๋กœ ์˜์กด์„ฑ์€ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐ๋˜๋Š”๊ฐ€? [29] +- LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ์—์„œ ํ•™์Šต ๋ฐ์ดํ„ฐ์— ์—†๋Š” ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ธ์‹์‹œํ‚ค๊ธฐ ์œ„ํ•œ RAG(Retrieval-Augmented Generation) ์ ์šฉ ๋ฐฉ์•ˆ์€ ๋ฌด์—‡์ธ๊ฐ€? [30] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•  ๋•Œ `ComfyUI/custom_nodes`์— Python ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ JSON์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ๋“ฑ๋กํ•จ [3, 10]. +- **System Design:** API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์ „ ์„ค์น˜๋œ Docker ์ด๋ฏธ์ง€๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•จ [31]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ "Red Box" ๋ฐœ์ƒ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ชฉ๋ก์„ ๋ณ„๋„๋กœ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๋งˆ์ปค ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•จ [6, 7]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ™์ง€ ํ›„, `Efficiency Nodes`๋‚˜ `Manager` ์„ค์น˜๋ฅผ ํ†ตํ•ด ๊ณ ๊ธ‰ ์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„ ๋‹จ๊ณ„๋กœ ์ง„์ž…ํ•จ [15, 32]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ • ๋ชจ๋ธ ํŒŒ์ผ์˜ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ณด์™„ ๊ธฐ์ˆ  [29]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source identifiers: [1, 3, 5, 6, 10, 19, 25, 26]) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Directed Acyclic Graph (DAG).md b/10_Wiki/Topics/Comfyui/Directed Acyclic Graph (DAG).md new file mode 100644 index 00000000..798afeea --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Directed Acyclic Graph (DAG).md @@ -0,0 +1,95 @@ +--- +id: directed-acyclic-graph-(dag) +title: "Directed Acyclic Graph (DAG)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„", "์‹คํ–‰ ๊ทธ๋ž˜ํ”„"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["workflow_api.json", "Execution Model Inversion", "WorkflowExecutor", "validate_prompt"] +github_commit: "bc85382, 82df278" +--- + +# [[Directed Acyclic Graph (DAG)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์•„ํ‚คํ…์ฒ˜๋Š” ๋…ธ๋“œ์™€ ๋งํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •์˜ํ•˜๋ฉฐ, ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ€์ง„ **Directed Acyclic Graph(DAG)** ๊ตฌ์กฐ๋ฅผ ํ•ต์‹ฌ ์‹คํ–‰ ๋ชจ๋ธ๋กœ ์ฑ„ํƒํ•œ๋‹ค [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Node-based Connectivity:** ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด์ธ ๋…ธ๋“œ๋“ค์ด ์„œ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋„คํŠธ์›Œํฌ(๊ทธ๋ž˜ํ”„)๋ฅผ ํ˜•์„ฑํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ๋ชจ๋ธ ๋กœ๋”, ์ƒ˜ํ”Œ๋Ÿฌ, ์ธ์ฝ”๋” ๋“ฑ์˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [1-3]. +- **Directional Data Flow:** ๋ฐ์ดํ„ฐ๋Š” ๋งํฌ๋ฅผ ํ†ตํ•ด ํ•œ ๋…ธ๋“œ์˜ ์ถœ๋ ฅ ์Šฌ๋กฏ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ์˜ ์ž…๋ ฅ ์Šฌ๋กฏ์œผ๋กœ ์ •ํ•ด์ง„ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ํ๋ฅธ๋‹ค [1, 4]. +- **Acyclicity (๋น„์ˆœํ™˜์„ฑ):** ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ๊ฒฝ๋กœ๊ฐ€ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋Œ์•„์˜ค์ง€ ์•Š๋Š” ๋น„์ˆœํ™˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ ์‹คํ–‰์˜ ์‹œ์ž‘๊ณผ ๋์ด ๋ช…ํ™•ํ•˜๋‹ค [1]. +- **Serialization:** ๋ณต์žกํ•œ DAG ๋„คํŠธ์›Œํฌ๋Š” JSON ํ˜•์‹์œผ๋กœ ์ง๋ ฌํ™”๋˜์–ด ์ด์‹์„ฑ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [1]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Execution Model Inversion (์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „):** ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , 'Save Image'์™€ ๊ฐ™์€ ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ถ”์ , ํ•„์š”ํ•œ ์ข…์†์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ํŒจํ„ด์ด๋‹ค [5]. +- **Bifurcation of Formats (ํ˜•์‹์˜ ์ด๋ถ„ํ™”):** ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ์„ ํฌํ•จํ•˜๋Š” **Frontend Format**๊ณผ ์ˆœ์ˆ˜ ์‹คํ–‰ ๋…ผ๋ฆฌ(DAG)๋งŒ์„ ๋‚จ๊ธด **Backend/API Format**์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค [6, 7]. +- **Slot-based Indexing:** ์—ฐ๊ฒฐ์€ ๋‹จ์ˆœํžˆ ๋…ธ๋“œ ๊ฐ„์˜ ๊ฒฐํ•ฉ์ด ์•„๋‹ˆ๋ผ, ํŠน์ • ์ถœ๋ ฅ ์Šฌ๋กฏ(์˜ˆ: VAE Loader์˜ VAE ์Šฌ๋กฏ)์—์„œ ํŠน์ • ์ž…๋ ฅ ์Šฌ๋กฏ์œผ๋กœ ์ •๋ฐ€ํ•˜๊ฒŒ ๋งคํ•‘๋˜๋Š” ์ธ๋ฑ์‹ฑ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค [4]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์Šคํ…Œ์ด๋ธ” ๋””ํ“จ์ „๊ณผ ๊ฐ™์€ ๋ณต์žกํ•œ ์ƒ์„ฑํ˜• AI ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ถ”์ƒํ™”ํ•˜๊ธฐ ์œ„ํ•ด DAG๋ฅผ ํ™œ์šฉํ•œ๋‹ค [1]. ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๊ฐ€ DAG์™€ ๋™์˜์–ด๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋Š” 3D ํ”„๋กœ๊ทธ๋žจ์˜ '์”ฌ ๊ทธ๋ž˜ํ”„'๋‚˜ ์˜์ƒ ํŽธ์ง‘ ํ”„๋กœ๊ทธ๋žจ์˜ 'ํ”„๋กœ์ ํŠธ ํŒŒ์ผ'๊ณผ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [8]. + +๊ทธ๋ž˜ํ”„์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์€ **JSON Schema v1.0** ๊ทœ๊ฒฉ์— ์˜ํ•ด ๊ฒ€์ฆ๋œ๋‹ค [9]. ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ  ID, ํด๋ž˜์Šค ํƒ€์ž…(type), ๊ทธ๋ฆฌ๊ณ  ์œ„์ ฏ ๊ฐ’์„ ํฌํ•จํ•˜๋ฉฐ, `inputs` ๋ฐฐ์—ด์€ ์œ ์ž…๋˜๋Š” ๋งํฌ์˜ ID๋ฅผ ๊ธฐ๋กํ•˜๊ณ  `outputs` ๋ฐฐ์—ด์€ ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์†Œ๋น„ํ•˜๋Š” ํ•˜์œ„ ๋…ธ๋“œ๋“ค์˜ ๋งํฌ ID ๋ฆฌ์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•œ๋‹ค [4, 9]. API ํ˜•์‹์˜ JSON์—์„œ๋Š” ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ , ๋งํฌ๊ฐ€ ๋ณ„๋„์˜ ๋ฐฐ์—ด ๋Œ€์‹  ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [6, 10]. + +์‹คํ–‰ ๋‹จ๊ณ„์—์„œ ์—”์ง„์€ DAG์˜ ํŠน์„ฑ์„ ์ด์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ๋ฐฐ์ œํ•œ๋‹ค. ์ตœ์ข… ์ถœ๋ ฅ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋“ค์ด ๊ทธ๋ž˜ํ”„์— ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„, ์—ญ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰(Backward Traversal)์„ ํ†ตํ•ด ์ด๋ฅผ ๋ฌด์‹œํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [5]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฐ์ดํ„ฐ ๋ณด์กด์˜ ์ทจ์•ฝ์„ฑ:** DAG ๊ตฌ์กฐ๋ฅผ PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์–ด ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๊ฐ€ ํŒŒ๊ดด๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ฃผ์˜์‚ฌํ•ญ์œผ๋กœ ์–ธ๊ธ‰๋œ๋‹ค [11]. +- **ํ˜•์‹ ๊ฐ„์˜ ๋ถˆ์™„์ „ํ•œ ํ˜ธํ™˜์„ฑ:** API ํ˜•์‹์œผ๋กœ ์ €์žฅ๋œ ๊ทธ๋ž˜ํ”„(DAG ์ตœ์ ํ™”๋ณธ)๋ฅผ ๋‹ค์‹œ UI๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ, ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๊ฐ€ ์—†์–ด ๋…ธ๋“œ๋“ค์ด ๊ฒน์น˜๊ฑฐ๋‚˜ ๋ผˆ๋Œ€๋งŒ ๋‚จ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [12]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **workflow_api.json:** ์‹œ๊ฐ์  ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์ˆ˜ DAG ํ˜•ํƒœ์˜ ์‹คํ–‰ ํŒŒ์ผ ํ˜•์‹์œผ๋กœ, ์„œ๋ฒ„ ์ธก ์ฒ˜๋ฆฌ ๋ฐ API ํ˜ธ์ถœ์— ์ตœ์ ํ™”๋˜์–ด ์ ์šฉ๋จ [6, 13]. +- **Execution Model Inversion:** ComfyUI ์„œ๋ฒ„ ์•„ํ‚คํ…์ฒ˜์—์„œ ๋…ธ๋“œ ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฒฐ์ •ํ•˜๊ณ  ํšจ์œจ์„ฑ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ ์šฉ๋จ [5, 14]. +- **WorkflowExecutor ํด๋ž˜์Šค:** Python ์Šคํฌ๋ฆฝํŠธ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ฐ ๋…ธ๋“œ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ์‹คํ–‰ํ•˜๋Š” ๋กœ์ง์— ์ ์šฉ๋จ [15]. +- **validate_prompt ํ•จ์ˆ˜:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „ DAG์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋กœ ํ™œ์šฉ๋จ [15]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (ComfyUI ๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ ์ž๋ฃŒ ๊ธฐ๋ฐ˜) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Technical Architectures via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : DAG ๊ตฌ์กฐ๋ฅผ ์ง€์† ๊ฐ€๋Šฅํ•œ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ์ง๋ ฌํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +#### [์‹ค๋ฌด ๊ตฌํ˜„ ๋„๊ตฌ] +- [[API Format (workflow_api.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : DAG์˜ ์‹คํ–‰ ๋…ผ๋ฆฌ๋งŒ์ด ์ •์ œ๋œ ์ตœ์ข… ๋ฐ์ดํ„ฐ ํฌ๋งท. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์˜ ์ฐจ์ด์ . +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : DAG ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์—”์ง„์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐ ์ตœ์ ํ™” ์›๋ฆฌ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- DAG ๊ตฌ์กฐ ๋‚ด์—์„œ ์˜๋„์ ์ธ ์ˆœํ™˜(Looping)์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ(์˜ˆ: ๋ฐ˜๋ณต ๊ฐœ์„ ) ComfyUI๋Š” ์ด๋ฅผ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? +- Execution Model Inversion์ด ์ค‘์ฒฉ๋œ [[Subgraph]] ๊ตฌ์กฐ๋ฅผ ๋งŒ๋‚ฌ์„ ๋•Œ, ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์˜ ๊นŠ์ด ์ œํ•œ์ด๋‚˜ ์šฐ์„ ์ˆœ์œ„๋Š” ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๋˜๋Š”๊ฐ€? [16, 17] +- ๋…ธ๋“œ ID๊ฐ€ ์ค‘๋ณต๋˜๊ฑฐ๋‚˜ ์œ ์‹ค๋œ ์†์ƒ๋œ DAG ๊ตฌ์กฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์  ์ „๋žต์ด ์†Œ์Šค ๋ฐ์ดํ„ฐ์— ์กด์žฌํ•˜๋Š”๊ฐ€? +- LLM ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ([[ComfyUI-WorkflowGenerator]])๋Š” DAG์˜ ๋…ผ๋ฆฌ์  ํƒ€๋‹น์„ฑ์„ ์–ด๋–ค ์˜๋ฏธ๋ก ์  ๊ฒ€์ฆ ๊ณผ์ •์„ ํ†ตํ•ด ํ™•๋ณดํ•˜๋Š”๊ฐ€? [18] +- `object_info.json`์— ์ •์˜๋œ ์Šคํ‚ค๋งˆ๊ฐ€ DAG์˜ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ์„ฑ์„ ์ œํ•œํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์–ด๋–ป๊ฒŒ ์ž‘์šฉํ•˜๋Š”๊ฐ€? [19] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ API JSON์˜ ๋…ธ๋“œ ID๋ฅผ ์ถ”์ ํ•˜๊ณ  `inputs` ๊ฐ’์„ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [20, 21]. +- **System Design:** ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ(Mystic, Replicate ๋“ฑ)์— ๋ฐฐํฌํ•  ๋•Œ, DAG ๊ตฌ์กฐ์—์„œ ๋ถˆํ•„์š”ํ•œ ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•œ API ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ†ต์‹  ํšจ์œจ์„ฑ์ด ๋†’์•„์ง„๋‹ค [22, 23]. +- **Operation / Maintenance:** 'Red Nodes'(๋ˆ„๋ฝ๋œ ๋…ธ๋“œ) ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ, DAG ์Šคํ‚ค๋งˆ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ ํŒจํ‚ค์ง€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค [24]. +- **Learning Path:** ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ๊ฑฐ๊พธ๋กœ ์ž…๋ ฅ์„ ์ฐพ์•„๊ฐ€๋Š” ์—ญ๋ฐฉํ–ฅ ์ถ”์  ๋ฐฉ์‹์„ ์ตํžˆ๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ด๋‹ค [5]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Litegraph]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ComfyUI ํ”„๋ก ํŠธ์—”๋“œ์—์„œ DAG๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ ํฌ๋งท ์—ฐ๊ตฌ. [6, 25] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Execution Model Inversion.md b/10_Wiki/Topics/Comfyui/Execution Model Inversion.md new file mode 100644 index 00000000..5e04bb1c --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Execution Model Inversion.md @@ -0,0 +1,94 @@ +--- +id: execution-model-inversion +title: "Execution Model Inversion" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์—ญ๋ฐฉํ–ฅ ์‹คํ–‰ ๋ชจ๋ธ", "Output-Driven Traversal"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Architecture"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI Server Documentation"] +github_commit: "" +--- + +# [[Execution Model Inversion]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ์„ ์—ญ์ถ”์ ํ•ด ์‹คํ–‰ํ•จ์œผ๋กœ์จ, ์›Œํฌํ”Œ๋กœ ๋‚ด ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ๊ฐ€ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์™„์ „ํžˆ ๋ฐฐ์ œํ•˜๋Š” ComfyUI์˜ ์ตœ์ ํ™” ์•„ํ‚คํ…์ฒ˜ [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ถœ๋ ฅ ๊ธฐ๋ฐ˜ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ (Output-Driven Traversal):** ์‹คํ–‰ ์—”์ง„์ด ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋Œ€์‹ , 'Save Image'์™€ ๊ฐ™์€ ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฑฐ๊พธ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•จ [1]. +- **์˜์กด์„ฑ ์ž๋™ ์‹๋ณ„ (Dependency Identification):** ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์— ๊ธฐ์—ฌํ•˜๋Š” ๋…ธ๋“œ๋“ค๋งŒ ์‹คํ–‰ ๋ชฉ๋ก(Execution List)์— ํฌํ•จ์‹œํ‚ค๊ณ , ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋”๋ผ๋„ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ๋ฌด์‹œํ•จ [1, 2]. +- **์„ฑ๋Šฅ ๊ฒฉ๋ฆฌ (Performance Isolation):** ์ƒ์„ฑ๋œ JSON ๋‚ด์— ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ฏธ์‚ฌ์šฉ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ๋ฐฑ์—”๋“œ์—์„œ ์ด๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹คํ–‰ ์„ฑ๋Šฅ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š์Œ [1]. +- **DAG(์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„) ๊ธฐ๋ฐ˜ ๋…ผ๋ฆฌ:** ์›Œํฌํ”Œ๋กœ๋ฅผ ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๊ณ  ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๋…ผ๋ฆฌ์ ์ธ ์—ญ์ถ”์ ์„ ๊ฐ€๋Šฅ์ผ€ ํ•จ [1, 3]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์˜์กด์„ฑ ์ฒด์ธ ๊ฒ€์ฆ ํŒจํ„ด:** `WorkflowExecutor`๊ฐ€ `validate_prompt` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ณ  ์ด๋ฅผ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ตฌ์กฐ [2]. +- **๊ฒฐ๊ณผ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ํ๋ฆ„:** ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชจ๋ธ ๋กœ๋”์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ƒ˜ํ”Œ๋Ÿฌ๋ฅผ ๊ฑฐ์ณ ์ถœ๋ ฅ์œผ๋กœ ํ๋ฅด์ง€๋งŒ, ์‹คํ–‰ ์ œ์–ด๋Š” ๊ทธ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์ธ ์ถœ๋ ฅ์—์„œ ์‹œ์ž‘๋จ [1, 3]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Execution Model Inversion์€ ComfyUI์˜ ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ฐ€์žฅ ์ •๊ตํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์›Œํฌํ”Œ๋กœ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ œ์ด๋‹ค [1]. + +- **์ž‘๋™ ์›๋ฆฌ:** ์—”์ง„์€ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค [1]. ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ตœ์ข… ์ถœ๋ ฅ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ƒ์œ„ ๋…ธ๋“œ(์˜์กด์„ฑ)๋“ค์„ ๊ณ„์ธต์ ์œผ๋กœ ํŒŒ์•…ํ•œ๋‹ค [1]. +- **JSON ์„ค๊ณ„์™€์˜ ๊ด€๊ณ„:** ์ด ๋ชจ๋ธ ๋•๋ถ„์— ์‚ฌ์šฉ์ž๋Š” ๋ณต์žกํ•˜๊ณ  ํฐ ๊ทœ๋ชจ์˜ ์›Œํฌํ”Œ๋กœ JSON์„ ์ƒ์„ฑํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ๊ฑฑ์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค [1]. ๋ฐฑ์—”๋“œ ์—”์ง„์€ ์ตœ์ข… ์ถœ๋ ฅ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ง€๋Šฅ์ ์œผ๋กœ ๋ฌด์‹œํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค [1]. +- **API ํšจ์œจ์„ฑ:** ํŠนํžˆ **API Format(workflow_api.json)**์œผ๋กœ ๋ณ€ํ™˜๋œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ์ด ๋ชจ๋ธ์€ ์ตœ์†Œํ•œ์˜ ํ•„์ˆ˜ ์—ฐ์‚ฐ๋งŒ์„ ๋ณด์žฅํ•˜์—ฌ ์„œ๋ฒ„ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [1, 4]. +- **์บ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ์˜ ์—ฐ๊ณ„:** `ExecutionCache`์™€ ๊ฒฐํ•ฉํ•˜์—ฌ, ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ ์ค‘ ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์˜ ๊ฒฝ์šฐ ์‹คํ–‰์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์บ์‹œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ๋ฐ˜ํ™˜ํ•จ์œผ๋กœ์จ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [5]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ „์ฒด ์‹คํ–‰ vs ๋ถ€๋ถ„ ์‹คํ–‰:** ์ „ํ†ต์ ์ธ ํŒŒ์ดํ”„๋ผ์ธ ๋ฐฉ์‹์ด ๋ชจ๋“  ๋‹จ๊ณ„๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ComfyUI๋Š” ์ถœ๋ ฅ ๋…ธ๋“œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ๊ฒฝ๋กœ๋งŒ์„ ์‹คํ–‰ํ•˜๋Š” "Lazy Evaluation"๊ณผ ์œ ์‚ฌํ•œ ํŠน์„ฑ์„ ๋ณด์ธ๋‹ค [1]. +- **JSON์˜ ์œ ์—ฐ์„ฑ:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ์›Œํฌํ”Œ๋กœ ํŒŒ์ผ ๋‚ด์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๊ฐ€ ๋งŽ์•„๋„ ์‹œ์Šคํ…œ์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์€ ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ์ตœ์ ํ™” ์ƒ์‹(๋ฆฌ์†Œ์Šค ์ตœ์†Œํ™”)๊ณผ๋Š” ๋‹ค๋ฅธ ComfyUI๋งŒ์˜ ์„ค๊ณ„์  ํŠน์ง•์ด๋‹ค [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI Server ๊ณต์‹ ๊ฐ€์ด๋“œ:** ๊ณต์‹ ๋ฌธ์„œ์˜ 'ComfyUI Server' ์„น์…˜ ๋‚ด์— "Execution Model Inversion Guide"๋ผ๋Š” ๋ช…์นญ์˜ ๊ธฐ์ˆ  ๋ฌธ์„œ๋กœ ์ƒ์„ธํžˆ ๋‹ค๋ฃจ์–ด์ง€๊ณ  ์žˆ์Œ [6]. +- **WorkflowExecutor ๊ตฌํ˜„:** ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ `WorkflowExecutor` ํด๋ž˜์Šค๊ฐ€ `validate_prompt`๋ฅผ ํ†ตํ•ด ์‹คํ–‰ ๋ชฉ๋ก์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์— ์ด ๋…ผ๋ฆฌ๊ฐ€ ๋‚ด์žฌ๋˜์–ด ์žˆ์Œ [2]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๊ฐ€์ด๋“œ๋ผ์ธ ์กด์žฌ ํ™•์ธ [6]) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ๋ถ„์„ ๋ฆฌํฌํŠธ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : Execution Model Inversion์ด ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ์  ํ† ๋Œ€์ž„ [3]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ๋งํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋…ผ๋ฆฌ์  ํ๋ฆ„์„ ํ˜•์„ฑํ•˜๋Š”์ง€ ํŒŒ์•… ๊ฐ€๋Šฅ. +- [[ComfyUI Backend Engine]] + - ์—ฐ๊ฒฐ ์ด์œ : ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰๊ณผ ์‹คํ–‰ ๋ชฉ๋ก ์ƒ์„ฑ์„ ๋‹ด๋‹นํ•˜๋Š” ์ฃผ์ฒด์ž„ [1, 2]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[API Format (workflow_api.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : UI ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ ์‹คํ–‰ ์ค‘์‹ฌ์˜ JSON ํฌ๋งท์œผ๋กœ, ์ด ๋ชจ๋ธ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์Œ [1, 4]. +- [[WorkflowExecutor]] + - ์—ฐ๊ฒฐ ์ด์œ : ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ ๋…ผ๋ฆฌ๋ฅผ ์‹ค์ œ ์‹คํ–‰ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค์ž„ [2]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Execution Model Inversion ํ™˜๊ฒฝ์—์„œ 'Bypass'๋œ ๋…ธ๋“œ๋Š” ์—ญ์ถ”์  ๊ณผ์ •์—์„œ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? [7] +- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ถœ๋ ฅ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ, ์—”์ง„์€ ๊ฐ ์ถœ๋ ฅ๋ณ„๋กœ ๋…๋ฆฝ์ ์ธ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š”๊ฐ€? +- `ExecutionCache`๊ฐ€ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰ ๊ฒฝ๋กœ์— ์žˆ๋Š” ํŠน์ • ๋…ธ๋“œ์˜ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ž„๊ณ„๊ฐ’์€ ๋ฌด์—‡์ธ๊ฐ€? [5] +- ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๊ฐ•์ œ ์‹คํ–‰(Force Execute)ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์šฐํšŒ ๋ฐฉ๋ฒ•์ด ์กด์žฌํ•˜๋Š”๊ฐ€? +- ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ ์ƒ์„ฑ ๋„๊ตฌ์ธ `ComfyUI-WorkflowGenerator`๋Š” ์ด ์‹คํ–‰ ๋ชจ๋ธ์„ ๊ณ ๋ คํ•˜์—ฌ ๋…ธ๋“œ ์—ฐ๊ฒฐ์„ ์ƒ์„ฑํ•˜๋Š”๊ฐ€? [8, 9] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ์›Œํฌํ”Œ๋กœ์— ํ…Œ์ŠคํŠธ์šฉ ๋…ธ๋“œ๊ฐ€ ์„ž์—ฌ ์žˆ๋”๋ผ๋„ ์„ฑ๋Šฅ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๋ฉฐ ๋ฐฐํฌ ๊ฐ€๋Šฅ [1]. +- **System Design:** ๋Œ€๊ทœ๋ชจ ์ž๋™ํ™” ๋ฐฐ๋„ˆ ๊ด‘๊ณ  ์‹œ์Šคํ…œ ๋“ฑ์—์„œ ๋‹ค์–‘ํ•œ ๋ณ€์ข… ์›Œํฌํ”Œ๋กœ๋ฅผ ํ•˜๋‚˜์˜ JSON ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ๋ฆฌํ•จ [10]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ ๋””๋ฒ„๊น… ์‹œ ์‹คํ–‰๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜์—ฌ ์˜์กด์„ฑ ์—ฐ๊ฒฐ ์˜ค๋ฅ˜๋ฅผ ํŒŒ์•…ํ•˜๋Š” ์ง€ํ‘œ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅ [11]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Lazy Evaluation in Graph Theory]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ปดํ“จํ„ฐ ๊ณผํ•™ ๊ด€์ ์—์„œ์˜ ๊ณ„์‚ฐ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ๋น„๊ต. +- [[Workflow JSON v1.0 Schema]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์— ํ•„์ˆ˜์ ์ธ `id`, `inputs`, `links` ์†์„ฑ์˜ ๊ธฐ์ˆ ์  ๋ช…์„ธ ์ดํ•ด [12, 13]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on Source [1], [6]) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/ExecutionCache.md b/10_Wiki/Topics/Comfyui/ExecutionCache.md new file mode 100644 index 00000000..7e8ef662 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/ExecutionCache.md @@ -0,0 +1,60 @@ +--- +id: executioncache +title: "ExecutionCache" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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: ["Standalone Execution Script (GitHub Gist)"] +github_commit: "" +--- + +# [[ExecutionCache]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋…๋ฆฝํ˜• ์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ๋…ธ๋“œ ์ถœ๋ ฅ ๋ฐ UI ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉ ๊ด€๋ฆฌํ•˜์—ฌ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ํ•ต์‹ฌ ์บ์‹œ ๊ด€๋ฆฌ ํด๋ž˜์Šค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **ํ†ตํ•ฉ ์บ์‹œ ๊ด€๋ฆฌ (Unified Cache Management):** ๋…ธ๋“œ ์ถœ๋ ฅ, UI ๋ฐ์ดํ„ฐ, ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์บ์‹ฑ์„ ์ค‘์•™์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ํšจ์œจ์„ ๋†’์ž„ [2]. +- **์„ฑ๋Šฅ ์ตœ์ ํ™” (Performance Optimization):** ๋ถˆํ•„์š”ํ•˜๊ณ  ์ค‘๋ณต๋˜๋Š” ๊ณ„์‚ฐ์„ ์ค„์—ฌ ๋…๋ฆฝํ˜• ์‹คํ–‰ ํ™˜๊ฒฝ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•จ [2]. +- **HierarchicalCache ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ:** ComfyUI์˜ ๊ธฐ๋ณธ ๊ณ„์ธต์  ์บ์‹œ(HierarchicalCache) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์œ„์— ๊ตฌ์ถ•๋˜์–ด ๋…ธ๋“œ ๊ฐ์ฒด์™€ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ ์œผ๋กœ ์ €์žฅํ•จ [2]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋…๋ฆฝํ˜• ์‹คํ–‰ ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰์„ ์กฐ์œจํ•˜๋Š” `WorkflowExecutor`์™€ ๋ฐ์ดํ„ฐ ์˜์†์„ฑ์„ ๊ด€๋ฆฌํ•˜๋Š” `ExecutionCache`๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ์„œ๋ฒ„ ์—†์ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•จ [1, 3]. +- **๋ฐ์ดํ„ฐ ์บก์Аํ™” ํŒจํ„ด:** ๋…ธ๋“œ ๊ฐ์ฒด(node object), ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ(output data), UI ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์˜ ์บ์‹œ ๋‹จ์œ„ ๋‚ด์— ๋ณด๊ด€ํ•˜์—ฌ ComfyUI์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•จ [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ExecutionCache๋Š” ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜์˜ ์›น ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด **๋…๋ฆฝํ˜• ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ**๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ์ž„ [1, 4]. ์ด ํด๋ž˜์Šค๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ. + +์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Œ: +1. **๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ๊ด€๋ฆฌ:** ๊ฐ ๋…ธ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ์ธ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, UI ๊ด€๋ จ ๋ฐ์ดํ„ฐ ๋ฐ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์ •๋ณด๋ฅผ ์บ์‹œ์— ์ €์žฅํ•จ [2]. +2. **์ค‘๋ณต ๊ณ„์‚ฐ ๋ฐฉ์ง€:** ๋™์ผํ•œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์ด๋ฏธ ๊ณ„์‚ฐ๋œ ๊ฒฐ๊ณผ๊ฐ€ ์บ์‹œ์— ์กด์žฌํ•  ๊ฒฝ์šฐ ์ด๋ฅผ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•˜๊ณ  ์ปดํ“จํŒ… ์ž์›์„ ์ ˆ์•ฝํ•จ [2]. +3. **ํ˜ธํ™˜์„ฑ ์œ ์ง€:** ComfyUI ๋‚ด๋ถ€์˜ `HierarchicalCache`๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด, ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ์˜ ์‹คํ–‰ ๋กœ์ง๊ณผ ์ตœ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ๋™์ž‘ ๋ฐฉ์‹์„ ๋ณด์žฅํ•จ [2, 3]. + +์ด ํด๋ž˜์Šค๋Š” `WorkflowExecutor`์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, `WorkflowExecutor`๊ฐ€ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰(`_execute_node`)ํ•  ๋•Œ ํ•„์š”ํ•œ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ ์—ญํ• ์„ ๋‹ด๋‹นํ•จ [1, 2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋…๋ฆฝํ˜• ์‹คํ–‰์˜ ํ•œ๊ณ„:** ExecutionCache๋ฅผ ํฌํ•จํ•œ ๋…๋ฆฝํ˜• ์Šคํฌ๋ฆฝํŠธ ๋ฐฉ์‹์€ ComfyUI ์„œ๋ฒ„์™€ ์›น UI๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ฅผ ์šฐํšŒํ•˜๋ ค๋Š” ์‹œ๋„์ด๋‚˜, ์—ฌ์ „ํžˆ ComfyUI์˜ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ(torch ๋“ฑ)์— ์˜์กดํ•จ [5-7]. +- **์บ์‹œ ์ƒ๋ช…์ฃผ๊ธฐ:** ์„œ๋ฒ„ ํ™˜๊ฒฝ์˜ Web UI ํ”„๋กฌํ”„ํŠธ/๊ฒฐ๊ณผ ์บ์‹ฑ๊ณผ ๋‹ฌ๋ฆฌ, ์ด๋ฅผ ํ™œ์šฉํ•œ ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ๋ฐœ์„ฑ ์‹คํ–‰(single-shot)์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ์‹คํ–‰ ์ข…๋ฃŒ ์‹œ ๋ชจ๋ธ/์บ์‹œ ์ •๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•จ [8]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **๋…๋ฆฝํ˜• ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ (Standalone Execution Script):** SDXL Turbo ์›Œํฌํ”Œ๋กœ์šฐ ๋“ฑ์„ API JSON ํ˜•์‹์—์„œ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ `WorkflowExecutor` ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ ๊ตฌํ˜„๋จ [1, 3, 4]. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํŠน์ • GitHub Gist๋ฅผ ํ†ตํ•ด ๊ณต์œ ๋˜๊ณ  ์žˆ์Œ [1, 4]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (์ „๋ฌธ ๊ฐœ๋ฐœ์ž ๋ธ”๋กœ๊ทธ ๋ฐ ๊ธฐ์ˆ  ๋ถ„์„ ์ž๋ฃŒ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Frontend Format (workflow.json).md b/10_Wiki/Topics/Comfyui/Frontend Format (workflow.json).md new file mode 100644 index 00000000..8a90a033 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Frontend Format (workflow.json).md @@ -0,0 +1,70 @@ +--- +id: frontend-format-(workflow.json) +title: "Frontend Format (workflow.json)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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", "ComfyUI-to-Python-Extension", "RunComfy Serverless API"] +github_commit: "" +--- + +# [[Frontend Format (workflow.json)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Frontend Format(`workflow.json`)์€ ComfyUI์˜ **Litegraph ํ‘œ์ค€**์„ ๋”ฐ๋ฅด๋ฉฐ, ๋…ธ๋“œ ๊ฐ„์˜ ์‹คํ–‰ ๋กœ์ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์บ”๋ฒ„์Šค์ƒ์˜ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ๊ณผ ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ๋ชจ๋‘ ๋ณด์กดํ•˜๋Š” **์ธ๊ฐ„ ์ค‘์‹ฌ์˜ ๊ณต์œ  ๋ฐ ํŽธ์ง‘์šฉ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ**์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(UI Metadata) ํฌํ•จ**: ๋…ธ๋“œ์˜ ์œ„์น˜(`pos`), ํฌ๊ธฐ(`size`), ์ƒ‰์ƒ, ๊ทธ๋ฃนํ™” ๊ตฌ์กฐ ๋ฐ ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์—ฌ๋ถ€์™€ ๊ฐ™์€ ์‹œ๊ฐ์  ์ƒํƒœ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•œ๋‹ค [1, 4, 5]. +- **Litegraph ํ‘œ์ค€ ์ค€์ˆ˜**: ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ์˜ ์‹œ๊ฐ์  ๋ Œ๋”๋ง ๋ฐ ์กฐ์ž‘์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค [1, 2]. +- **๋ช…์‹œ์  ๋งํฌ ํ‘œํ˜„ (Explicit Links)**: ์—ฐ๊ฒฐ์„ ๋…ธ๋“œ ๋‚ด๋ถ€์— ๋งคํ•‘ํ•˜๋Š” ๋Œ€์‹ , ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ณ ์œ  ID๋ฅผ ๊ฐ€์ง„ ๋ช…์‹œ์ ์ธ ์—ฐ๊ฒฐ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•œ๋‹ค [2, 4, 6]. +- **๊ฐ€์—ญ์„ฑ(Reversibility)**: ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ๋˜์–ด ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ๋งŒ์œผ๋กœ ์›๋ณธ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์žฌ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [7-9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํฌ๋งท์˜ ์ด๋ถ„ํ™”(Bifurcation)**: ComfyUI๋Š” ์‚ฌ์šฉ์ž์˜ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend ํฌ๋งท'๊ณผ ์„œ๋ฒ„์˜ ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ์œ„ํ•œ 'Backend/API ํฌ๋งท'์„ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์šด์˜ํ•œ๋‹ค [1, 10]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ(Metadata Embedding)**: ์ƒ์„ฑ๋œ PNG/WebP ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ด๋ฏธ์ง€๊ฐ€ ๊ณง ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋˜๋Š” ํŒจํ„ด์„ ํ˜•์„ฑํ•œ๋‹ค [8, 9, 11]. +- **์˜์กด์„ฑ ๊ธฐ๋ฐ˜ ๋…ธ๋“œ ID ํ• ๋‹น**: ๊ฐ ๋…ธ๋“œ๋Š” ์ƒ์„ฑ ์ˆœ์„œ ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜์— ๋”ฐ๋ผ ๊ณ ์œ ํ•œ ์ˆซ์žํ˜• ๋ฌธ์ž์—ด ID(์˜ˆ: "37")๋ฅผ ๋ถ€์—ฌ๋ฐ›์•„ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์˜ ํ‚ค๋กœ ํ™œ์šฉ๋œ๋‹ค [4, 5, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์€ ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ **๊ธฐ๋ณธ ์ €์žฅ(Ctrl+S)** ์‹œ ์ƒ์„ฑ๋˜๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ด๋‹ค [13]. ์ด๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์žฌ๋กœ๋“œํ–ˆ์„ ๋•Œ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ •ํ™•ํ•œ ์ขŒํ‘œ์— ๋‚˜ํƒ€๋‚˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค [13, 14]. + +**JSON ์Šคํ‚ค๋งˆ v1.0 ๊ตฌ์„ฑ ์š”์†Œ [5, 6, 15]**: +- **nodes**: ๊ฐœ๋ณ„ ๋…ธ๋“œ ๊ฐ์ฒด์˜ ๋ฐฐ์—ด๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. + - `id`: ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•œ ๊ณ ์œ  ์‹๋ณ„์ž. + - `type`: ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋งคํ•‘๋œ ํด๋ž˜์Šค ์ด๋ฆ„. + - `pos`/`size`: ์บ”๋ฒ„์Šค ์ขŒํ‘œ ๋ฐ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ Œ๋”๋ง ํฌ๊ธฐ. + - `widgets_values`: ์Šฌ๋ผ์ด๋”, ํ…์ŠคํŠธ ๋ฐ•์Šค, ํ† ๊ธ€ ๋“ฑ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์˜ ๋ฐฐ์—ด. + - `order`: ์‹คํ–‰ ๋˜๋Š” ๋ Œ๋”๋ง ๊ถŒ์žฅ ์ˆœ์„œ. + - `mode`: ๋…ธ๋“œ์˜ ํ™œ์„ฑ/๋น„ํ™œ์„ฑ/๋ฐ”์ดํŒจ์Šค ์ƒํƒœ. +- **links**: ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ •์˜ํ•˜๋Š” ์ƒ์œ„ ๋ ˆ๋ฒจ ๋ฐฐ์—ด๋กœ, `[origin_id, origin_slot, target_id, target_slot, type]` ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” 6๊ฐœ ํ•ญ๋ชฉ ๋ฐฐ์—ด ๋˜๋Š” ๊ตฌ์กฐํ™”๋œ ๊ฐ์ฒด ํ˜•ํƒœ๋ฅผ ๋ค๋‹ค [6]. + +์ด ํฌ๋งท์€ **API ํฌ๋งท๊ณผ ๋Œ€์กฐ**์ ์ด๋‹ค. API ํฌ๋งท์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์š”ํ•œ ๋กœ์ง๋งŒ ๋‚จ๊ธด '์ŠคํŠธ๋ฆผ๋ผ์ธ' ๋ฒ„์ „์œผ๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ์ผ์„ API ์—”๋“œํฌ์ธํŠธ์— ์ง์ ‘ ๋ณด๋‚ผ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [1, 14, 16]. ๋”ฐ๋ผ์„œ ์ „๋ฌธ์ ์ธ ์ž๋™ํ™” ํ™˜๊ฒฝ์—์„œ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์„ ์›๋ณธ(Source of truth)์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์‹คํ–‰ ์ง์ „์— API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ถŒ์žฅ๋œ๋‹ค [17, 18]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ**: ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „์—์„œ ์ƒ์„ฑ๋œ ํ”„๋ก ํŠธ์—”๋“œ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์‹œ๊ฐ์ ์œผ๋กœ ๊นจ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค [19]. +- **๋ฐ์ดํ„ฐ ์œ ์‹ค ์œ„ํ—˜**: ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ ํ”„๋ก ํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์†Œ์…œ ๋ฏธ๋””์–ด๋‚˜ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(GIMP ๋“ฑ)๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ ํŒŒ์ผ ํฌ๊ธฐ ์ตœ์ ํ™” ๋˜๋Š” ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์ด์œ ๋กœ ์ œ๊ฑฐ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ ๊ฐ€์—ญ์„ฑ์ด ํŒŒ๊ดด๋  ์ˆ˜ ์žˆ๋‹ค [9, 20]. +- **API ์‹คํ–‰ ๋ถˆ๊ฐ€**: ํ”„๋ก ํŠธ์—”๋“œ JSON์€ `/prompt` ์—”๋“œํฌ์ธํŠธ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ API ํฌ๋งท์œผ๋กœ์˜ ๋ณ€ํ™˜ ๊ณผ์ •์ด ์„ ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค [16, 17]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint**: `workflow.json`(ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท)์„ ์ž…๋ ฅ๋ฐ›์•„ ์„œ๋ฒ„ ์ธก์—์„œ API ํฌ๋งท์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•ด ์ฃผ๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ๋จ [16, 18, 21]. +- **ComfyUI-to-Python-Extension**: ํ”„๋ก ํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์ƒ์„ฑ๋œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋งŒ๋“  ์ด๋ฏธ์ง€๊ฐ€ ๋‹ค์‹œ ComfyUI๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ๋  ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„๋จ [11]. +- **RunComfy Serverless**: ๋ฐฐํฌ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ `workflow.json`์—์„œ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์‹œ๊ฐํ™” ๊ฐ€์ด๋“œ๋กœ ํ™œ์šฉํ•จ [3, 10]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ์œผ๋กœ applied ๋‹จ๊ณ„๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ๋ฌธ์„œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. ๋ณธ ๋ฌธ์„œ๋Š” ์†Œ์Šค ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์ˆ ์  ๋ช…์„ธ(v1.0 ์Šคํ‚ค๋งˆ)์™€ ์šด์˜ ํŒจํ„ด(ํฌ๋งท ์ด๋ถ„ํ™”)์„ ์ค‘์‹ฌ์œผ๋กœ ํ•ฉ์„ฑ๋จ. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Generative AI Pipeline.md b/10_Wiki/Topics/Comfyui/Generative AI Pipeline.md new file mode 100644 index 00000000..8f06eb68 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Generative AI Pipeline.md @@ -0,0 +1,67 @@ +--- +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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/JSON Schema v1.0.md b/10_Wiki/Topics/Comfyui/JSON Schema v1.0.md new file mode 100644 index 00000000..d01ce5f0 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/JSON Schema v1.0.md @@ -0,0 +1,109 @@ +--- +id: json-schema-v1.0 +title: "JSON Schema v1.0" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI Workflow JSON v1.0"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "JSON Schema"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["/specs/workflow_json"] +github_commit: "" +--- + +# [[JSON Schema v1.0]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON v1.0์€ Draft-07 ์‚ฌ์–‘์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ์ƒ์„ฑํ˜• AI ํŒŒ์ดํ”„๋ผ์ธ์„ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ๋…ผ๋ฆฌ๋กœ ์ด์›ํ™”ํ•˜์—ฌ ์ง๋ ฌํ™”ํ•˜๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Draft-07 Specification:** ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ตœ์‹  ๊ณต์‹ ์Šคํ‚ค๋งˆ ํ‘œ์ค€์ด๋‹ค [2]. +- **๋ฐ์ดํ„ฐ ์ด์›ํ™” (Bifurcation):** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์šฉ 'Frontend Format'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์šฉ 'API Format'์œผ๋กœ ๋‚˜๋‰˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค [1, 3]. +- **๋…ธ๋“œ ๊ฐ์ฒด ์†์„ฑ (Node Object Properties):** ๊ฐ ๋…ธ๋“œ๋Š” ID, ์œ ํ˜•, ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์œ„์ ฏ ๊ฐ’(widgets_values) ๋“ฑ์˜ ํ•„์ˆ˜ ๋ฐ ์„ ํƒ์  ์†์„ฑ์„ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค [2, 4]. +- **์Šฌ๋กฏ ๋ฐ ๋งํฌ ์—ฐ๊ฒฐ์„ฑ (Slot & Link Connectivity):** ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๊ณ ์œ ํ•œ ๋งํฌ ID์™€ ์ž…๋ ฅ/์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•ด ์ •์˜๋œ๋‹ค [5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์‹คํ–‰ ๋ชจ๋ธ ๋ฐ˜์ „ (Execution Model Inversion):** ์—”์ง„์ด ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰, ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ํŒจํ„ด์„ ๋”ฐ๋ฅธ๋‹ค [6]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ์— Frontend์™€ API ํฌ๋งท์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ €์žฅํ•˜์—ฌ ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์žฌ์‹คํ–‰์„ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค [7-9]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ์ œ์•ฝ:** ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ComfyUI ๋ฒ„์ „์—์„œ ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํŒจํ„ด์ด ๊ด€์ฐฐ๋œ๋‹ค [10]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON v1.0์€ ๋ณต์žกํ•œ ๋…ธ๋“œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ด์‹ ๊ฐ€๋Šฅํ•˜๊ณ  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด๋‹ค [11, 12]. + +**1. ๋…ธ๋“œ ๊ฐ์ฒด์˜ ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ** +- **ํ•„์ˆ˜ ์†์„ฑ:** `id`(๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์šฉ ๊ณ ์œ  ์‹๋ณ„์ž), `type`(๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ ํด๋ž˜์Šค ์ด๋ฆ„ ๋งคํ•‘), `pos` ๋ฐ `size`(UI ๋ Œ๋”๋ง์šฉ ์ขŒํ‘œ ๋ฐ ํฌ๊ธฐ), `order`(์‹คํ–‰ ๋˜๋Š” ๋ Œ๋”๋ง ์ˆœ์„œ), `mode`(ํ™œ์„ฑ/๋ฐ”์ดํŒจ์Šค ์ƒํƒœ)๊ฐ€ ํฌํ•จ๋œ๋‹ค [2]. +- **์„ ํƒ์  ์†์„ฑ:** ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์Šฌ๋ผ์ด๋”, ํ…์ŠคํŠธ ๋ฐ•์Šค ๋“ฑ์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” `widgets_values`๊ฐ€ ์กด์žฌํ•œ๋‹ค [2]. + +**2. ํฌ๋งท๋ณ„ ๊ตฌ์กฐ์  ์ฐจ์ด** +- **Frontend JSON (workflow.json):** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•ด Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ, ๋…ธ๋“œ ์œ„์น˜, ๊ทธ๋ฃน ๊ตฌ์กฐ, ์ƒ‰์ƒ ๋“ฑ ๋ชจ๋“  ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค [1, 3, 13]. +- **API JSON (workflow_api.json):** ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™”๋œ ์ŠคํŠธ๋ฆผ๋ผ์ธ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์ด๋‹ค [1]. ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด์— ๋งํฌ๋ฅผ ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1, 3, 14]. + +**3. ์—ฐ๊ฒฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜** +- ์—ฐ๊ฒฐ์€ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ์ •์˜๋˜๋ฉฐ, ๊ฐ ํ•ญ๋ชฉ์€ ์ผ๋ฐ˜์ ์œผ๋กœ `origin_id`, `origin_slot`, `target_id`, `target_slot`์„ ์ •์˜ํ•˜๋Š” 6๊ฐœ ํ•ญ๋ชฉ ๋ฐฐ์—ด ๋˜๋Š” ๊ตฌ์กฐํ™”๋œ ๊ฐ์ฒด์ด๋‹ค [5]. +- ์Šฌ๋กฏ ์ธ๋ฑ์‹ฑ์€ ๋งค์šฐ ์—„๊ฒฉํ•˜์—ฌ, ํŠน์ • ๋…ธ๋“œ์˜ ์—ฌ๋Ÿฌ ์ถœ๋ ฅ ์Šฌ๋กฏ ์ค‘ ์ •ํ™•ํžˆ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์šด์ŠคํŠธ๋ฆผ ๋…ธ๋“œ์— ์†Œ๋น„๋˜๋Š”์ง€ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค [5]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **JSON ํฌ๋งท์˜ ์ทจ์•ฝ์„ฑ:** PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ๋œ JSON์€ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ์••์ถ•/ํŽธ์ง‘ ์‹œ ์‚ญ์ œ๋˜๊ธฐ ์‰ฌ์šด ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค [9]. +- **๋ฒ„์ „ ๊ฐ„ ๋น„ํ˜ธํ™˜์„ฑ:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ComfyUI Manager ๋“ฑ์˜ ๋„๊ตฌ๊ฐ€ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค [10, 15]. +- **ํ•„๋“œ ๋ช…์นญ ์ฐจ์ด:** Frontend ํฌ๋งท์—์„œ๋Š” `type`์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ API ํฌ๋งท์—์„œ๋Š” `class_type`์ด๋ผ๋Š” ๋ช…์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•œ๋‹ค [3, 16]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **๊ณต์‹ ๋ฌธ์„œ ๊ฒฝ๋กœ:** `/specs/workflow_json` ์œ„์น˜์— JSON Schema v1.0 ๋ช…์„ธ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค [17]. +- **๋ฒ„์ „ ๊ด€๋ฆฌ:** ํ˜„์žฌ ๊ฐ€์žฅ ์ตœ์‹  ๊ทœ๊ฒฉ์€ Version 1.0์ด๋ฉฐ, ์ด์ „ ๋ฒ„์ „์ธ 0.4์™€ ๊ตฌ๋ถ„๋˜์–ด ๊ด€๋ฆฌ๋œ๋‹ค [18]. +- **์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ:** `comfyui-workflow-to-api-converter-endpoint` ์ปค์Šคํ…€ ๋…ธ๋“œ๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋น„-API ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ v1.0 API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค [19, 20]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ช…์„ธ ๋ฐ ๊ฐœ๋ฐœ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์กฐํ™”๋จ) [2, 21] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ๋ณธ ์†Œ์Šค ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Draft-07 Specification]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON Schema v1.0์ด ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ผ๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ  ํ‘œ์ค€์ด๋‹ค [2]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋ฐ์ดํ„ฐ์˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™ ๋ฐ ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด. +- [[Node-based Visual Programming]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON Schema๊ฐ€ ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ์ถ”์ƒํ™”๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์ด๋‹ค [11, 22]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ์™€ ๋งํฌ๊ฐ€ ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ ๋…ผ๋ฆฌ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[API JSON (workflow_api.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : v1.0 ์Šคํ‚ค๋งˆ๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ํ˜•ํƒœ์ด๋‹ค [1, 14]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ ๋ฐ API ํ˜ธ์ถœ ์‹œ์˜ ๋ฐ์ดํ„ฐ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•. +- [[Frontend JSON (workflow.json)]] + - ์—ฐ๊ฒฐ ์ด์œ : v1.0 ์Šคํ‚ค๋งˆ์˜ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์ด๋‹ค [1, 13]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์—์„œ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์žฌ๊ตฌ์„ฑ๊ณผ ๊ณต์œ . + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- v1.0 ์Šคํ‚ค๋งˆ์—์„œ Draft-07 ๊ทœ๊ฒฉ์ด ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ณผ์ •์„ ๊ฑฐ์ณ ๋…ธ๋“œ ์‹คํ–‰ ์ „ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š”๊ฐ€? [2] +- Frontend JSON์˜ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(pos, size)๊ฐ€ ์‹ค์ œ ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์—”์ง„์— ์ „ํ˜€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ตฌ์กฐ์  ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [1, 3] +- ๋งํฌ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹(6๊ฐœ ํ•ญ๋ชฉ ๋ฐฐ์—ด)์—์„œ ๊ฐ ์ธ๋ฑ์Šค๊ฐ€ ๋‹ด๊ณ  ์žˆ๋Š” ๊ธฐ์ˆ ์  ์˜๋ฏธ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [5] +- [[Execution Model Inversion]] ํŒจํ„ด์ด ์ ์šฉ๋  ๋•Œ, JSON ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ์–ด๋–ค ๊ณผ์ •์„ ํ†ตํ•ด ๋ฌด์‹œ๋˜๋Š”๊ฐ€? [6] +- API ํฌ๋งท์—์„œ `class_type`์ด ์•„๋‹Œ `inputs` ๋‚ด์— ๋งํฌ ์ •๋ณด๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ฐฉ์‹์ด ์‹คํ–‰ ์†๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 3] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ID๋ฅผ ์ถ”์ ํ•˜๊ณ  `widgets_values`๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์ž๋™ํ™”๋œ ์ด๋ฏธ์ง€ ์ƒ์„ฑ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค [23, 24]. +- **System Design:** ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ComfyUI๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ, `workflow_api.json` ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ UI ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์ „์†ก ํšจ์œจ์„ ๋†’์ธ๋‹ค [1, 25]. +- **Operation / Maintenance:** `ComfyUI Manager`๋ฅผ ํ†ตํ•ด JSON ๋‚ด์˜ `class_type`์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค [15]. +- **Learning Path:** ์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋จผ์ € ์ดํ•ดํ•œ ํ›„, ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ API ์ „์šฉ JSON ํฌ๋งท์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋‹จ๊ณ„๋กœ ํ•™์Šต์ด ์ง„ํ–‰๋œ๋‹ค [26, 27]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Object_info.json]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์˜ ๋…ธ๋“œ ์Šคํ‚ค๋งˆ ์นดํƒˆ๋กœ๊ทธ๋ฅผ ์ดํ•ดํ•˜์—ฌ JSON์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ ์ œ์ž‘ [28, 29]. +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ํŒŒ์ผ ๊ณต์œ  ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐฉ์ง€ ๋ฐ ๋ณต๊ตฌ ์ „๋žต [9, 19]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Lazy Evaluation in Graph Theory.md b/10_Wiki/Topics/Comfyui/Lazy Evaluation in Graph Theory.md new file mode 100644 index 00000000..60dad65b --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Lazy Evaluation in Graph Theory.md @@ -0,0 +1,100 @@ +--- +id: lazy-evaluation-in-graph-theory +title: "Lazy Evaluation in Graph Theory" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Execution Model Inversion"] +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: ["Execution Model Inversion"] +github_commit: "" +--- + +# [[Lazy Evaluation in Graph Theory]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI๋Š” **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „(Execution Model Inversion)** ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ ๋…ธ๋“œ๋กœ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ถ”์ ํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ํƒ์ ์œผ๋กœ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (Directed Acyclic Graph, DAG):** ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ทผ๊ฐ„์œผ๋กœ, ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ •์˜ํ•˜๋ฉฐ ์ˆœํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ตฌ์กฐ๋ฅผ ํ˜•์„ฑํ•œ๋‹ค [2]. +- **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , '์ถœ๋ ฅ' ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์—ญ์ถ”์ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [1]. +- **์˜์กด์„ฑ ์‹๋ณ„ (Dependency Identification):** ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ตœ์ข… ๊ฒฐ๊ณผ(์˜ˆ: Save Image)์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์‹คํ–‰ ๋ชฉ๋ก(Execution List)์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค [1, 3]. +- **๋ฐฑ์—”๋“œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ์ตœ์ ํ™”:** API ํฌ๋งท(workflow_api.json)์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰์— ํ•„์ˆ˜์ ์ธ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ฑ๋งŒ์„ ํฌํ•จํ•˜์—ฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ธ๋‹ค [4, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์—ญ๋ฐฉํ–ฅ ํŠธ๋ฆฌ๊ฑฐ๋ง ํŒจํ„ด:** ์‚ฌ์šฉ์ž๋‚˜ ์‹œ์Šคํ…œ์ด ํŠน์ • ์ถœ๋ ฅ ๋…ธ๋“œ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ํ•ด๋‹น ๋…ธ๋“œ์— ์—ฐ๊ฒฐ๋œ ์ž…๋ ฅ ๊ฒฝ๋กœ๋ฅผ ๋”ฐ๋ผ ์ƒ์œ„ ๋…ธ๋“œ๋“ค์ด ํ™œ์„ฑํ™”๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [1]. +- **๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ ๋ฐฐ์ œ:** ์ƒ์„ฑ๋œ JSON ๋‚ด์— ์ˆ˜์‹ญ ๊ฐœ์˜ ๋ฏธ์‚ฌ์šฉ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋”๋ผ๋„ ์ตœ์ข… ์ถœ๋ ฅ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค [1]. +- **๋™์  ํ”„๋กฌํ”„ํŠธ ๋ณ€ํ™˜:** JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ํ›„ `DynamicPrompt` ๋ฐ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…ธ๋“œ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ตœ์ ํ™”ํ•œ๋‹ค [3, 6]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์˜ ์ง€์—ฐ ํ‰๊ฐ€(Lazy Evaluation)์  ์ ‘๊ทผ๋ฒ•์€ **๊ทธ๋ž˜ํ”„ ์ด๋ก ์˜ DAG ๊ตฌ์กฐ**๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „** ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ตฌ์ฒดํ™”๋œ๋‹ค [1, 2]. ์ „ํ†ต์ ์ธ ์„ ํ˜• ํŒŒ์ดํ”„๋ผ์ธ๊ณผ ๋‹ฌ๋ฆฌ, ComfyUI ์—”์ง„์€ 'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ์ง€์ ์—์„œ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฑฐ๊พธ๋กœ ํšก๋‹จ(Traverse)ํ•œ๋‹ค [1]. ์ด ๊ณผ์ •์—์„œ ์—”์ง„์€ ์ตœ์ข… ๊ฒฐ๊ณผ๋ฌผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๋…ธ๋“œ์™€ ๊ทธ ์ˆœ์„œ๋ฅผ ์‹๋ณ„ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ์— ๊ธฐ์—ฌํ•˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ์™„์ „ํžˆ ๋ฌด์‹œ๋œ๋‹ค [1]. + +์ด๋Ÿฌํ•œ ๋ฐฉ์‹์€ ๋Œ€๊ทœ๋ชจ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ JSON์œผ๋กœ ๊ด€๋ฆฌํ•  ๋•Œ ํฐ ์ด์ ์„ ์ œ๊ณตํ•œ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹จ์ผ JSON ํŒŒ์ผ ๋‚ด์— ๋‹ค์–‘ํ•œ ์‹คํ—˜์  ๋…ธ๋“œ ๊ตฌ์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ค์ œ ์‹คํ–‰ ์‹œ์—๋Š” ํ•„์š”ํ•œ ๊ฒฝ๋กœ๋งŒ ํ™œ์„ฑํ™”๋˜๋ฏ€๋กœ ์„ฑ๋Šฅ ์ €ํ•˜ ์—†์ด ์œ ์—ฐํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค [1]. + +ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ๊ด€์ ์—์„œ, ์ด๋Ÿฌํ•œ ์‹คํ–‰ ๋กœ์ง์€ `WorkflowExecutor` ํด๋ž˜์Šค ๋“ฑ์— ์˜ํ•ด ์บก์Аํ™”๋  ์ˆ˜ ์žˆ๋‹ค [3]. ์›Œํฌํ”Œ๋กœ์šฐ JSON์ด ๋กœ๋“œ๋˜๋ฉด `validate_prompt` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฒ€์ฆ๋˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ ๋…ธ๋“œ๋ณ„ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰(`get_input_data`)๊ณผ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ(`get_output_data`)์„ ๊ฑฐ์น˜๋Š” ์‹คํ–‰ ๋ชฉ๋ก์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค [3, 6]. ๊ฒฐ๊ณผ์ ์œผ๋กœ JSON ํŒŒ์ผ์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์•„๋‹Œ, ์‹คํ–‰ ์—”์ง„์ด ์ฝ๊ณ  ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” **์ง€์‹œ๋ฌธ(Blueprint)** ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค [7]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ทจ์•ฝ์„ฑ:** JSON ๋ฐ์ดํ„ฐ๋Š” PNG ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)์— ์ €์žฅ๋˜์ง€๋งŒ, ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด ์ด ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค [8]. +- **ํฌ๋งท ๊ฐ„์˜ ๊ดด๋ฆฌ:** ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ์ธ 'Frontend Format'๊ณผ ์‹คํ–‰์šฉ์ธ 'API Format'์ด ์ด์›ํ™”๋˜์–ด ์žˆ์–ด, API ํฌ๋งท ํŒŒ์ผ์„ UI๋กœ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ(๋…ธ๋“œ ์œ„์น˜ ๋“ฑ)์ด ๋ˆ„๋ฝ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค [4, 9, 10]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Execution Model Inversion:** ComfyUI ๊ณต์‹ ๋ฐฑ์—”๋“œ ๋กœ์ง์— ์ ์šฉ๋˜์–ด ์ถœ๋ ฅ ๋…ธ๋“œ ์ค‘์‹ฌ์˜ ์—ญ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ํšก๋‹จ์„ ๊ตฌํ˜„ํ•จ [1]. +- **WorkflowExecutor:** Python ๊ธฐ๋ฐ˜ ๋…๋ฆฝ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ ๊ตฌํ˜„ ์‹œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ๋กœ ์ œ์•ˆ๋จ [3, 6]. +- **ComfyUI-WorkflowGenerator:** LLM์„ ์ด์šฉํ•ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ(JSON)๋กœ ํ•ฉ์„ฑํ•˜๊ณ  ์ด๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋นŒ๋”๋กœ ์ „๋‹ฌํ•˜๋Š” 3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ํ™œ์šฉ๋จ [11, 12]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Primary Source via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ตฌ์กฐ์  ๊ทผ๊ฐ„ [2]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ๋ฐฉํ–ฅ์„ฑ๊ณผ ๋…ธ๋“œ ๊ฐ„์˜ ์œ„๊ณ„์  ์—ฐ๊ฒฐ ๋ฐฉ์‹. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๋†’์ด๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๊ฐ€ ์ง๋ ฌํ™”๋˜์–ด ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋Š” ๋Œ€์ƒ [2, 7]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ID, ์œ ํ˜•, ์ž…๋ ฅ๊ฐ’ ๋“ฑ์ด JSON ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ๋งคํ•‘๋˜๋Š”์ง€. +- [[workflow_api.json]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ง€์—ฐ ํ‰๊ฐ€ ๋กœ์ง์ด ์ ์šฉ๋˜๋Š” ์ตœ์ข… ์‹คํ–‰์šฉ ํŒŒ์ผ ํฌ๋งท [4, 13]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋œ ์ˆœ์ˆ˜ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์˜ ๊ตฌ์กฐ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ComfyUI ๋ฐฑ์—”๋“œ์—์„œ ์—ญ๋ฐฉํ–ฅ ํšก๋‹จ ์‹œ ์บ์‹ฑ(Caching)์€ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•˜๋Š”๊ฐ€? [6] +- `DynamicPrompt`๊ฐ€ `ExecutionList`๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์—์„œ ๋…ธ๋“œ์˜ ์‹คํ–‰ ์šฐ์„ ์ˆœ์œ„(Order)๋Š” ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •๋˜๋Š”๊ฐ€? [3, 14] +- ๋…ธ๋“œ๊ฐ€ 'Bypass' ์ƒํƒœ์ผ ๋•Œ ๊ทธ๋ž˜ํ”„ ์ด๋ก  ์ธก๋ฉด์—์„œ ๋งํฌ ์—ฐ๊ฒฐ์„ฑ์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? [15] +- ํŠน์ • ๋…ธ๋“œ์—๋งŒ ์‹คํ–‰์„ ์ œํ•œํ•˜๋Š” 'Partial Execution' ๊ธฐ๋Šฅ์€ ์ง€์—ฐ ํ‰๊ฐ€ ๋ชจ๋ธ๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๊ฐ€? [16, 17] +- LLM ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ๊ธฐ์—์„œ ๋…ผ๋ฆฌ์  ํ•ฉ์„ฑ(Logical Synthesis) ๊ฒฐ๊ณผ๊ฐ€ ๊ทธ๋ž˜ํ”„ ์ด๋ก ์˜ ์œ ํšจ์„ฑ์„ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [12, 18] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ๋…๋ฆฝ ์‹คํ–‰ํ˜• ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ `WorkflowExecutor`๋ฅผ ํ™œ์šฉํ•˜์—ฌ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ง์ ‘ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค [3]. +- **System Design:** API ํ˜ธ์ถœ ์‹œ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ํฌํ•จ๋œ `workflow_api.json`์„ ์‚ฌ์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ํŽ˜์ด๋กœ๋“œ์™€ ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค [4, 5]. +- **Operation / Maintenance:** ์›Œํฌํ”Œ๋กœ์šฐ ์ˆ˜์ • ์‹œ ๋ฏธ์‚ฌ์šฉ ๋…ธ๋“œ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๋‚จ๊ฒจ๋‘๋”๋ผ๋„ ์‹ค์ œ ์‹คํ–‰ ์„ฑ๋Šฅ์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์œผ๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•˜๋‹ค [1]. +- **Learning Path:** ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์‹œ๊ฐ์  ๋กœ์ง์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ณง ์‹œ์Šคํ…œ์˜ ์‹คํ–‰ ๋…ผ๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์ด ๋œ๋‹ค [19]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ ํฌํ„ฐ๋นŒ๋ฆฌํ‹ฐ ํ™•๋ณด๋ฅผ ์œ„ํ•ด ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๋ฅผ ์ด์šฉํ•œ ๋ชจ๋ธ ์‹๋ณ„ ๋ฐฉ๋ฒ• [20]. +- [[Natural Language to Workflow Generation]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: LLM์„ ํ†ตํ•ด ๋Œ€ํ™”ํ˜•์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฏธ๋ž˜ ์ง€ํ–ฅ์  ๋ฐฉ์‹ [11, 21]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine.--- \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Litegraph Standard.md b/10_Wiki/Topics/Comfyui/Litegraph Standard.md new file mode 100644 index 00000000..2bcf7987 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Litegraph Standard.md @@ -0,0 +1,97 @@ +--- +id: litegraph-standard +title: "Litegraph Standard" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Litegraph Format", "Frontend JSON Format"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Litegraph", "Frontend"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-frontend-package/src/scripts/metadata", "ComfyUI Settings/Lite Graph"] +github_commit: "" +--- + +# [[Litegraph Standard]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Litegraph Standard๋Š” ComfyUI์˜ ์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋…ธ๋“œ์˜ ๋ฐฐ์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์ง๋ ฌํ™” ๊ทœ๊ฒฉ**์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **Frontend JSON (workflow.json):** ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ๋ฐ ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํฌ๋งท์œผ๋กœ, Litegraph ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜์—ฌ ๋…ธ๋“œ์˜ ์ขŒํ‘œ์™€ ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ๋ณด์กดํ•œ๋‹ค [1, 3]. +- **Visual Metadata:** ๋…ธ๋“œ์˜ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์ƒ‰์ƒ, ๊ทธ๋ฃน ๊ตฌ์กฐ, ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์ƒํƒœ์™€ ๊ฐ™์€ ์‹œ๊ฐ์  ์†์„ฑ์„ ํฌํ•จํ•œ๋‹ค [1, 4]. +- **Explicit Link Objects:** ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณ„๋„์˜ ๋ฐฐ์—ด ๋‚ด์—์„œ ๋ช…์‹œ์ ์ธ ์—ฐ๊ฒฐ ๊ฐ์ฒด(link ID)๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™”๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•œ๋‹ค [1, 3, 5]. +- **Node-Based Interface Compatibility:** Maya, Blender, Unreal Engine ๋“ฑ ํƒ€ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ๊ณผ ์œ ์‚ฌํ•œ ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ๋ฐ ์กฐ์ž‘ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ œ๊ณตํ•œ๋‹ค [6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํ˜•์‹์˜ ์ด๋ถ„ํ™” (Serialization Bifurcation):** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ Litegraph ๊ธฐ๋ฐ˜ 'ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท'๊ณผ ์‹คํ–‰ ํšจ์œจ์„ ์œ„ํ•œ 'API ํฌ๋งท'์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [1]. +- **์Šคํ‚ค๋งˆ ์ œ์•ฝ ์กฐ๊ฑด (Schema Constraints):** JSON v1.0 ๊ทœ๊ฒฉ์— ๋”ฐ๋ผ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ๊ณ ์œ  ID, ํด๋ž˜์Šค ํƒ€์ž…, ์ขŒํ‘œ, ํฌ๊ธฐ, ์‹คํ–‰ ์ˆœ์„œ(order), ๋ชจ๋“œ ๋“ฑ์„ ๋ฐ˜๋“œ์‹œ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค [4]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ (Metadata Embedding):** PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ์— Litegraph ํ˜•์‹์˜ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ๋ฐฑ์—… ๋ฐ ๊ณต์œ  ์ˆ˜๋‹จ์ด ๋˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค [7, 8]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Litegraph ํ‘œ์ค€์€ ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ **'์†Œ์Šค ์ฝ”๋“œ' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ JSON ํฌ๋งท**์˜ ๊ธฐ์ˆ ์  ๊ทผ๊ฐ„์ด๋‹ค [1, 9]. ์ด ํ‘œ์ค€์€ ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌ์„ฑํ•œ ์บ”๋ฒ„์Šค ์ƒ์˜ ์‹œ๊ฐ์  ์งˆ์„œ๋ฅผ ๋ณด์กดํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘”๋‹ค [1, 10]. + +์ฃผ์š” ๊ธฐ์ˆ ์  ํŠน์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: +- **๋ฐ์ดํ„ฐ ๊ตฌ์กฐ:** ๋ฃจํŠธ ๋ ˆ๋ฒจ์—์„œ `nodes` ๋ฐฐ์—ด๊ณผ `links` ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” ์บ”๋ฒ„์Šค ์ƒ์˜ X, Y ์ขŒํ‘œ(`pos`)์™€ ๋„ˆ๋น„, ๋†’์ด(`size`) ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ๋‹ค [4, 5]. +- **์—ฐ๊ฒฐ ๋ฐฉ์‹:** ๋…ธ๋“œ ๋‚ด๋ถ€์˜ `inputs`์™€ `outputs`๋Š” ๋‹จ์ˆœํ•œ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ, ์ „์—ญ `links` ๋ฐฐ์—ด์— ์ •์˜๋œ ๊ณ ์œ ํ•œ ๋งํฌ ID๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ ์—ฐ๊ฒฐ๋œ๋‹ค [5]. ์ด๋Š” API ํฌ๋งท์—์„œ ์ž…๋ ฅ๊ฐ’์— ์†Œ์Šค ๋…ธ๋“œ ์ •๋ณด๋ฅผ ์ง์ ‘ ๋‚ด์žฅํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋Œ€์กฐ์ ์ด๋‹ค [1]. +- **์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ์ง€์›:** ๊ทธ๋ฃนํ™” ๊ธฐ๋Šฅ ๋ฐ ๋…ธ๋“œ ์ƒํƒœ(Active, Bypassed ๋“ฑ)๋ฅผ ์ง€์›ํ•˜์—ฌ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ธ๋‹ค [4]. +- **ํ˜ธํ™˜์„ฑ ๋ฐ ํ™•์žฅ:** ComfyUI ์„ค์ • ๋ฉ”๋‰ด์—๋Š” 'Lite Graph' ๊ด€๋ จ ์ „์šฉ ์„ค์ • ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ธํ„ฐํŽ˜์ด์Šค ๋™์ž‘์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค [11, 12]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์‹คํ–‰ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** Litegraph ํ‘œ์ค€ ๊ธฐ๋ฐ˜์˜ JSON(workflow.json)์€ ๋…ธ๋“œ ์ขŒํ‘œ ๋“ฑ ๋ถˆํ•„์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„ ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ง์ ‘ ํ•ด์„ํ•˜๊ธฐ์— ๋น„ํšจ์œจ์ ์ด๋ฉฐ, ์ข…์ข… `/prompt` ์—”๋“œํฌ์ธํŠธ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค [1, 9, 13]. ๋”ฐ๋ผ์„œ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” ์ด๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค [14]. +- **๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** PNG ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ Litegraph ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์—์„œ ์••์ถ•/ํŽธ์ง‘ ์‹œ ์‰ฝ๊ฒŒ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์ ๋œ๋‹ค [7, 8]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-frontend-package:** ํ”„๋ก ํŠธ์—”๋“œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ ๋‚ด์˜ `src/scripts/metadata` ๊ฒฝ๋กœ์—์„œ ๊ณต์‹์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์œผ๋กœ ์ ์šฉ๋จ [15]. +- **ComfyUI ์„ค์ • ๋ฉ”๋‰ด:** ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด Settings > Lite Graph ์„น์…˜์„ ํ†ตํ•ด ๊ด€๋ จ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Œ [11]. +- **workflow.json ๋‚ด๋ณด๋‚ด๊ธฐ:** ComfyUI ์ œ์–ดํŒ์˜ 'Export' ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ƒ์„ฑ๋˜๋Š” ๋ชจ๋“  ํ‘œ์ค€ ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ์˜ ๊ทœ๊ฒฉ์œผ๋กœ ์‚ฌ์šฉ๋จ [16, 17]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„์„ ํ†ตํ•ด ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋ถ„์„ ๊ฒฐ๊ณผ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[ComfyUI Workflow JSON Generation and Serialization]] + - ์—ฐ๊ฒฐ ์ด์œ : Litegraph ํ‘œ์ค€์ด ์ง๋ ฌํ™” ํ”„๋กœ์„ธ์Šค์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํ”„๋ก ํŠธ์—”๋“œ์™€ API ํฌ๋งท ๊ฐ„์˜ ๊ธฐ์ˆ ์  ์ฐจ์ด์ . +- [[Visual Programming Environment]] + - ์—ฐ๊ฒฐ ์ด์œ : Litegraph๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ํŒจ๋Ÿฌ๋‹ค์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์˜ ๋ฒ”์šฉ์  ์„ค๊ณ„ ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : Litegraph JSON์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›Œํฌํ”Œ๋กœ์šฐ ์ข…์†์„ฑ ํ•ด๊ฒฐ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Litegraph ํ‘œ์ค€์—์„œ ์ •์˜ํ•˜๋Š” `links` ๋ฐฐ์—ด์˜ 6๊ฐ€์ง€ ์ธ๋ฑ์Šค ๊ฐ’์€ ๊ฐ๊ฐ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋Š”๊ฐ€? [5] +- API ํฌ๋งท(workflow_api.json)์œผ๋กœ ๋ณ€ํ™˜ ์‹œ Litegraph์˜ ์–ด๋–ค ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ํ๊ธฐ๋˜๋Š”๊ฐ€? [1, 3] +- `comfyui-frontend-package`์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์€ Litegraph ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒ€์ฆ(Validation)ํ•˜๋Š”๊ฐ€? [15] +- ๋…ธ๋“œ ์ƒํƒœ(`mode`) ์ค‘ 'Bypassed' ์ฒ˜๋ฆฌ๊ฐ€ Litegraph ์ง๋ ฌํ™” ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [18] +- 0.4 ๋ฒ„์ „์—์„œ 1.0 ๋ฒ„์ „์œผ๋กœ์˜ Litegraph ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ ์ฃผ์š” ์ฐจ์ด์ ์€ ๋ฌด์—‡์ธ๊ฐ€? [19, 20] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ์‹œ `INPUT_TYPES`๋ฅผ Litegraph ๊ทœ๊ฒฉ์— ๋งž์ถฐ ์ •์˜ํ•˜์—ฌ UI ์ƒ์—์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋„๋ก ํ•จ [21]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์„ค๊ณ„ ์‹œ, ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ ๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ์ „์šฉ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•จ [1]. +- **Learning Path:** ์ดˆ๋ณด์ž๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด JSON ํŒŒ์ผ์„ ์ง์ ‘ ์—ด์–ด ๋…ธ๋“œ ID์™€ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ถ”์ ํ•˜๋Š” ํ•™์Šต ๋„๊ตฌ๋กœ ํ™œ์šฉ ๊ฐ€๋Šฅํ•จ [22]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Directed Acyclic Graph (DAG)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: Litegraph๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ์ˆ˜ํ•™์  ๋ชจ๋ธ. +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ๊ณต์œ  ๊ณผ์ •์—์„œ Litegraph ์ •๋ณด๊ฐ€ ์†Œ์‹ค๋˜๋Š” ๋ณด์•ˆ ๋ฐ ๊ธฐ์ˆ ์  ์ด์œ  ๋ถ„์„. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Litegraph.md b/10_Wiki/Topics/Comfyui/Litegraph.md new file mode 100644 index 00000000..3bade50a --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Litegraph.md @@ -0,0 +1,58 @@ +--- +id: litegraph +title: "Litegraph" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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 Settings Menu", "workflow.json"] +github_commit: "" +--- + +# [[Litegraph]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ๊ณผ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ํ•ต์‹ฌ ์ง๋ ฌํ™” ํ‘œ์ค€ ๊ทœ๊ฒฉ [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **ํ”„๋ก ํŠธ์—”๋“œ JSON ํฌ๋งท์˜ ๊ทผ๊ฐ„:** ComfyUI์˜ ์‹œ๊ฐ์  ํŽธ์ง‘ ๋„๊ตฌ์ธ `workflow.json` ํŒŒ์ผ์ด ๋”ฐ๋ฅด๋Š” ํ‘œ์ค€์œผ๋กœ, ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๊ทธ๋ž˜ํ”„์˜ ์‹œ๊ฐํ™” ๋ฐ ์กฐ์ž‘์„ ์œ„ํ•ด ์„ค๊ณ„๋จ [1, 2]. +2. **์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ:** ๋…ธ๋“œ์˜ ์ขŒํ‘œ(`pos`), ํฌ๊ธฐ(`size`), ๊ทธ๋ฃน ๊ตฌ์„ฑ, ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์ƒํƒœ์™€ ๊ฐ™์€ UI ์ „์šฉ ์ •๋ณด๋ฅผ ํฌํ•จํ•จ [1, 3]. +3. **๋ช…์‹œ์  ๋งํฌ ์‹œ์Šคํ…œ (Explicit Links):** ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋Š” ๋ฐฑ์—”๋“œ ์‹คํ–‰์šฉ API ํฌ๋งท๊ณผ ์ฐจ๋ณ„ํ™”๋˜๋Š” ์ง€์ ์ž„ [1, 4, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ด๋ถ„๋ฒ•์  ์ง๋ ฌํ™” ๊ตฌ์กฐ:** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ Litegraph ๊ธฐ๋ฐ˜์˜ 'ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท'๊ณผ ์„œ๋ฒ„ ์‹คํ–‰์„ ์œ„ํ•œ 'API ํฌ๋งท'์„ ์—„๊ฒฉํžˆ ๊ตฌ๋ถ„ํ•˜์—ฌ ์šด์˜ํ•จ [1, 4, 6]. +- **์บ”๋ฒ„์Šค ์ƒํƒœ ๋ณต์› ํŒจํ„ด:** Litegraph ๊ทœ๊ฒฉ์„ ์ค€์ˆ˜ํ•จ์œผ๋กœ์จ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ์‹œ ์‚ฌ์šฉ์ž๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์—…ํ–ˆ๋˜ ์ขŒํ‘œ์™€ ๋…ธ๋“œ ๋ฐฐ์น˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์žฌ์ƒ์„ฑํ•จ [7, 8]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +- **๊ธฐ์ˆ ์  ๊ตฌ์„ฑ ์š”์†Œ:** Litegraph ํ‘œ์ค€์— ๋”ฐ๋ผ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” `id`(๊ณ ์œ  ๋ฒˆํ˜ธ), `type`(๋…ธ๋“œ ํด๋ž˜์Šค๋ช…), `pos`(์บ”๋ฒ„์Šค ๋‚ด x, y ์ขŒํ‘œ), `size`(๋„ˆ๋น„ ๋ฐ ๋†’์ด), `order`(์‹คํ–‰/๋ Œ๋”๋ง ์ˆœ์„œ) ๋“ฑ ํ•„์ˆ˜ ์†์„ฑ์„ ๊ฐ€์ง [3, 9]. +- **๋ฐ์ดํ„ฐ ํ๋ฆ„ ์ •์˜:** ์—ฐ๊ฒฐ์„ฑ์€ `inputs`์™€ `outputs` ๋ฐฐ์—ด์„ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ, ๊ฐ ์ž…๋ ฅ์€ ๊ณ ์œ ํ•œ ๋งํฌ ID๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๊ธฐ์›(origin_id)๊ณผ ์Šฌ๋กฏ(origin_slot)์„ ์‹๋ณ„ํ•จ [5]. +- **๋น„์ฃผ์–ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ:** Maya, Blender, Unreal Engine ๋“ฑ ์ „๋ฌธ์ ์ธ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์†Œํ”„ํŠธ์›จ์–ด์™€ ์œ ์‚ฌํ•œ '์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ'๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์žกํ•œ ์ˆ˜ํ•™์ด๋‚˜ ์ฝ”๋“œ ์ดํ•ด ์—†์ด๋„ AI ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ [10, 11]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ:** ComfyUI๋Š” Litegraph ๊ทœ๊ฒฉ์˜ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)์— ์‚ฝ์ž…ํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค๋กœ ๋“œ๋ž˜๊ทธํ–ˆ์„ ๋•Œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ฆ‰์‹œ ๋ณต๊ตฌ๋˜๋„๋ก ์ง€์›ํ•จ [12, 13]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ๊ฐ„ ํ˜ธํ™˜์„ฑ ์ œ์•ฝ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ด์ „ ๋ฒ„์ „์˜ Litegraph ๊ธฐ๋ฐ˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ๋กœ๋“œ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์œ„์ ฏ์ด ์‚ฌ๋ผ์ง€๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ [14, 15]. +- **์‹คํ–‰ ์—”์ง„๊ณผ์˜ ๊ดด๋ฆฌ:** Litegraph ํฌ๋งท์€ ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ๋น„๋Œ€ํ•˜์—ฌ ๋ฐฑ์—”๋“œ API ์š”์ฒญ ์‹œ ์˜ค๋ฅ˜๋ฅผ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ฐ˜๋“œ์‹œ 'Dev mode'๋ฅผ ํ†ตํ•œ API ํฌ๋งท ๋ณ€ํ™˜ ๊ณผ์ •์ด ํ•„์š”ํ•จ [8, 16]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI ์„ค์ •(Settings) ๋ฉ”๋‰ด:** ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด ์„ค์ • ์ฐฝ์— 'Lite Graph' ์„น์…˜์ด ๋ณ„๋„๋กœ ์กด์žฌํ•˜์—ฌ ๊ด€๋ จ ์‹œ๊ฐ ์˜ต์…˜์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Œ [17, 18]. +- **์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด๋ณด๋‚ด๊ธฐ(Export):** ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”๋‰ด์—์„œ 'Export'๋ฅผ ์„ ํƒํ•  ๋•Œ ์ƒ์„ฑ๋˜๋Š” `workflow.json` ํŒŒ์ผ์ด ์ด ๊ทœ๊ฒฉ์„ ์ง์ ‘์ ์œผ๋กœ ์‚ฌ์šฉํ•จ [7, 9]. +- **MetaData Parsing Logic:** ComfyUI ํ”„๋ก ํŠธ์—”๋“œ ํŒจํ‚ค์ง€ ๋‚ด์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ(`src/scripts/metadata`)์—์„œ Litegraph ๊ธฐ๋ฐ˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ์ด ๊ณต์‹์ ์œผ๋กœ ์ˆ˜ํ–‰๋จ [19]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (ComfyUI ๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ์ˆ  ์‚ฌ์–‘์„ ํ†ตํ•ด ๊ทœ๊ฒฉ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Technical Architecture Review via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Metadata Forensics.md b/10_Wiki/Topics/Comfyui/Metadata Forensics.md new file mode 100644 index 00000000..4417162c --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Metadata Forensics.md @@ -0,0 +1,61 @@ +--- +id: metadata-forensics +title: "Metadata Forensics" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Workflow Extraction", "Metadata Extraction"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Metadata", "Forensics"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfyui-frontend-package/src/scripts/metadata", "exiftool -b -workflow input.png > workflow.json"] +github_commit: "" +--- + +# [[Metadata Forensics]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Metadata Forensics๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ ๋‚ด๋ถ€์— ์€๋‹‰๋œ ์ƒ์„ฑํ˜• AI์˜ ์‹คํ–‰ ๋กœ์ง(JSON)์„ ์—ญ๊ณตํ•™์ ์œผ๋กœ ์ถ”์ถœํ•˜์—ฌ ์ƒ์„ฑ ๊ธฐ์›์˜ ํˆฌ๋ช…์„ฑ๊ณผ ์›Œํฌํ”Œ๋กœ์šฐ ์žฌํ˜„์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **Metadata Injection (๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฃผ์ž…):** ComfyUI์˜ `Save Image` ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ตœ์ข… ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ํ—ค๋”์— ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ๋ ˆ์ด์•„์›ƒ, ์„ค์ • ๋ฐ ํ”„๋กฌํ”„ํŠธ ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค [4, 5]. +2. **tEXt/zTXt Chunks:** PNG ํŒŒ์ผ ํ˜•์‹ ๋‚ด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ(Frontend ํ˜•์‹)์™€ ํ”„๋กฌํ”„ํŠธ(API ํ˜•์‹)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ƒ์ดํ•œ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ํŠน์ˆ˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์ด๋‹ค [3]. +3. **Data Fragility (๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ):** ๋‚ด์žฅ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ, ๋˜๋Š” ํŒŒ์ผ ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ์˜ํ•ด ์ œ๊ฑฐ๋˜๊ธฐ ์‰ฌ์šด "๋น„ํ•„์ˆ˜์ " ์ •๋ณด๋กœ ์ทจ๊ธ‰๋˜์–ด ์†Œ์‹ค๋  ์œ„ํ—˜์ด ๋†’๋‹ค [3, 6]. +4. **Algorithmic Extraction (์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ถ”์ถœ):** ์ „์šฉ ๋„๊ตฌ๋‚˜ CLI ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ๋ฅผ ๋ถ„์„ํ•˜๊ณ , ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ์ง๋ ฌํ™”๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ๊ธฐ์ˆ ์  ์ ˆ์ฐจ์ด๋‹ค [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ด์ค‘ ํ˜•์‹ ์ €์žฅ ํŒจํ„ด:** ComfyUI๋Š” ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend JSON'๊ณผ ์‹คํ–‰์„ ์œ„ํ•œ 'API JSON'์„ ์ด๋ฏธ์ง€ ๋‚ด์— ๋™์‹œ์— ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ๊ณผ ํ”„๋กœ๊ทธ๋žจ์  ์žฌ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ๋ชจ๋‘ ์ถฉ์กฑ์‹œํ‚จ๋‹ค [3]. +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ณต๊ตฌ ์ „๋žต:** ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ComfyUI ์บ”๋ฒ„์Šค์— ์ง์ ‘ ๋Œ์–ด๋‹ค ๋†“์œผ๋ฉด ๋‚ด์žฅ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฆ‰์‹œ ํŒŒ์‹ฑํ•˜์—ฌ ์›๋ž˜์˜ ๋…ธ๋“œ ๊ตฌ์„ฑ์„ ๋ณต์›ํ•˜๋Š” ์ง๊ด€์ ์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ๋ฐฉ์‹์ด๋‹ค [1, 4]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์—์„œ ์ƒ์„ฑ๋œ ๋ฏธ๋””์–ด ํŒŒ์ผ(PNG, WebP ๋“ฑ)์€ ๋‹จ์ˆœํ•œ ์‹œ๊ฐ์  ๋ฐ์ดํ„ฐ ์ด์ƒ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค [4, 9]. ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” `Save Image` ๋…ธ๋“œ๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ์ ์˜ **์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„์™€ ์„ค์ •์„ ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…**ํ•œ๋‹ค [4, 5]. ๊ตฌ์ฒด์ ์œผ๋กœ PNG ํŒŒ์ผ์˜ ๊ฒฝ์šฐ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ๋‹ด์€ Frontend ํ˜•์‹์˜ JSON๊ณผ ์‹ค์ œ ๋ฐฑ์—”๋“œ ์‹คํ–‰์— ํ•„์š”ํ•œ API ํ˜•์‹์˜ JSON(Prompt)์„ ์ €์žฅํ•œ๋‹ค [3]. + +์ด๋Ÿฌํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ฐฑ์—… ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์™€ ์ƒ์„ฑ ๊ธฐ๋ฒ•์„ ๊ณต์œ ํ•˜๋Š” ํšจ์œจ์ ์ธ ์ˆ˜๋‹จ์ด ๋œ๋‹ค [1, 9]. ๊ทธ๋Ÿฌ๋‚˜ **๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ ์ธก๋ฉด์—์„œ ์ทจ์•ฝ์ **์ด ์กด์žฌํ•œ๋‹ค. ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ํŒŒ์ผ ์••์ถ• ๊ณผ์ •์—์„œ ํŒŒ์ผ ํฌ๊ธฐ ์ ˆ๊ฐ์„ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฉฐ, GIMP์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋กœ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ์—๋„ ์›๋ณธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ๋‹ค [3, 6, 8]. + +์‹ค๋ฌด์ ์ธ ํฌ๋ Œ์‹ ๋ฐ ์ถ”์ถœ์„ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ๋„๊ตฌ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. `exiftool`๊ณผ ๊ฐ™์€ ๋ฒ”์šฉ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํƒœ๊ทธ(`-workflow`)๋ฅผ ์ง€์ •ํ•ด JSON์„ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, `ComfyUI Workflow Extractor`์™€ ๊ฐ™์€ ์›น ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋‚˜ `comfyui_extractor.py`์™€ ๊ฐ™์€ ์ „๋ฌธ ์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ์„ ํ†ตํ•ด ์ˆ˜์ฒœ ๊ฐœ์˜ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค [2, 7, 10]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ณต์œ  ํŽธ์˜์„ฑ vs. ๋ฐ์ดํ„ฐ ๋ณด์กด:** ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ ๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์ถ”์ฒœ๋˜์ง€๋งŒ, ๋„คํŠธ์›Œํฌ ์ „์†ก์ด๋‚˜ ์••์ถ• ๊ณผ์ •์—์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ **์ค‘์š”ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ณ„๋„์˜ JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ**๋œ๋‹ค [3, 5, 6]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ์ถ”์ถœํ•œ ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฆฌ์Šคํฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค [6]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ํŒŒ์ผ ๊ฒฝ๋กœ:** `comfyui-frontend-package/src/scripts/metadata` (๊ณต์‹ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์ด ๊ตฌํ˜„๋œ ์œ„์น˜) [11]. +- **CLI ๋ช…๋ น:** `exiftool -b -workflow input.png > workflow.json` (PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์—์„œ ์ง๋ ฌํ™”๋œ JSON์„ ๊ฒฉ๋ฆฌํ•˜๋Š” ํ‘œ์ค€ ๋ช…๋ น) [7]. +- **์ „๋ฌธ ๋„๊ตฌ:** `Comfy_UI_prompt_extractor`, `comfyui_extractor.py`, `comfyui-workflow-extractor` (AI ์•„ํŠธ์˜ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๋ฐ ๊ธฐ์ˆ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์œ ์ง€๋ฅผ ์œ„ํ•œ ์ถ”์ถœ ๋„๊ตฌ๋“ค) [7, 10]. +- **์„ค๊ณ„ ๊ฒฐ์ •:** PNG ํŒŒ์ผ ๋‚ด์— `workflow`(Frontend)์™€ `prompt`(API) ์ •๋ณด๋ฅผ ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ์ž๋™ํ™” ์‹คํ–‰์„ ๋™์‹œ์— ์ง€์›ํ•จ [3]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Metadata Stripping.md b/10_Wiki/Topics/Comfyui/Metadata Stripping.md new file mode 100644 index 00000000..e7db7d6c --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Metadata Stripping.md @@ -0,0 +1,98 @@ +--- +id: metadata-stripping +title: "Metadata Stripping" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ", "Metadata Loss"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["GIMP", "Social Media Platforms", "File Compression Utilities"] +github_commit: "" +--- + +# [[Metadata Stripping]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌํ•‘์€ ์ด๋ฏธ์ง€ ํŒŒ์ผ์— ๋‚ด์žฅ๋œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€ ํ™˜๊ฒฝ(์†Œ์…œ ๋ฏธ๋””์–ด, ํŽธ์ง‘๊ธฐ ๋“ฑ)์ด ๋ฐ์ดํ„ฐ ์ตœ์ ํ™”๋‚˜ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฌผ์˜ ์žฌํ˜„์„ฑ์„ ํŒŒ๊ดดํ•˜๋Š” ํ˜„์ƒ์ด๋‹ค. [1, 2] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ (Data Fragility):** ์ด๋ฏธ์ง€ ๋‚ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt ์ฒญํฌ)๋Š” ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด์— ์˜ํ•ด ์‰ฝ๊ฒŒ ์†์‹ค๋  ์ˆ˜ ์žˆ๋Š” ๋น„ํ•„์ˆ˜์  ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผ๋จ. [2] +- **์ฒญํฌ ๊ธฐ๋ฐ˜ ์ €์žฅ (Chunk-based Storage):** ComfyUI๋Š” PNG ํŒŒ์ผ์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ(Frontend)์™€ ํ”„๋กฌํ”„ํŠธ(API) JSON ๋ฌธ์ž์—ด์„ ์ €์žฅํ•จ. [2] +- **์ตœ์ ํ™” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ:** ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ์ „์†ก ๋„คํŠธ์›Œํฌ๊ฐ€ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋น„์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™ ์ œ๊ฑฐํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•จ. [2, 3] +- **์ถ”์ถœ ๋ฐ ๋ณต๊ตฌ (Extraction & Recovery):** ์†์‹ค๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ JSON ํŒŒ์ผ์„ ๋ณด์กดํ•˜๊ฑฐ๋‚˜, ํŠนํ™”๋œ ์ถ”์ถœ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž”์กด ๋ฐ์ดํ„ฐ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ํ–‰์œ„. [1, 4] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํ”Œ๋žซํผ ๊ธฐ๋ฐ˜ ์†์‹ค ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ํฌํ•จ๋œ PNG๋ฅผ ์†Œ์…œ ๋ฏธ๋””์–ด์— ๊ฒŒ์‹œํ•  ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„์˜ ํ”Œ๋žซํผ์€ ์šฉ๋Ÿ‰ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ๋‚ด์žฅ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ŠคํŠธ๋ฆฌํ•‘ํ•จ. [1, 2] +- **๋„๊ตฌ ๊ธฐ๋ฐ˜ ์ œ๊ฑฐ ํŒจํ„ด:** GIMP์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋กœ ํŒŒ์ผ์„ ์ˆ˜์ •ํ•˜๊ณ  ์ €์žฅํ•  ๋•Œ, ์‚ฌ์šฉ์ž ์ •์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜์ง€ ์•Š๊ณ  ์‚ญ์ œ๋จ. [4] +- **์ „์†ก ๋งค์ฒด ์ข…์†์„ฑ:** ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์„ ์ „์†กํ•  ๋•Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œ. [3] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„์™€ ์„ค์ •์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์„ ์ทจํ•˜์ง€๋งŒ, ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ๋งค์šฐ **๋ถˆ์•ˆ์ •(fragile)**ํ•œ ์ƒํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. [2] + +- **์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๋Š” ์ฃผ๋กœ `Save Image` ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ตœ์ข… ์ด๋ฏธ์ง€์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…๋œ๋‹ค. [5, 6] ๊ตฌ์ฒด์ ์œผ๋กœ PNG ํŒŒ์ผ ๊ตฌ์กฐ ๋‚ด์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ(Frontend format)๊ณผ ์‹คํ–‰ ๋กœ์ง(API format)์„ ๋™์‹œ์— ์ €์žฅํ•œ๋‹ค. [2] +- **์ŠคํŠธ๋ฆฌํ•‘์˜ ์ฃผ์š” ์›์ธ:** + - **์†Œ์…œ ๋ฏธ๋””์–ด ๋ฐ ์›น ํ”Œ๋žซํผ:** ์ด๋ฏธ์ง€ ๊ฒŒ์‹œ ์‹œ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ์—…๋กœ๋”์˜ ํ”„๋ผ์ด๋ฒ„์‹œ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ•œ๋‹ค. [1, 2] + - **์ด๋ฏธ์ง€ ํŽธ์ง‘ ์†Œํ”„ํŠธ์›จ์–ด:** GIMP ๋“ฑ์˜ ๋„๊ตฌ๋กœ ์ด๋ฏธ์ง€๋ฅผ ํŽธ์ง‘ํ•˜๋ฉด ์›๋ณธ์— ํฌํ•จ๋˜์–ด ์žˆ๋˜ ์‚ฌ์šฉ์ž ์ •์˜ ์ฒญํฌ ์ •๋ณด๊ฐ€ ์œ ์‹ค๋œ๋‹ค. [4] + - **ํŒŒ์ผ ์••์ถ• ๋ฐ ์ „์†ก:** ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ๋‚˜ ํŠน์ • ๋„คํŠธ์›Œํฌ ์ „์†ก ํ”„๋กœํ† ์ฝœ์€ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ ์™ธ์˜ ๋ถ€๊ฐ€ ์ •๋ณด๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๋‹ค. [2, 3] +- **์˜ํ–ฅ ๋ฐ ๋Œ€์•ˆ:** ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ŠคํŠธ๋ฆฌํ•‘๋œ ์ด๋ฏธ์ง€๋Š” ComfyUI ์บ”๋ฒ„์Šค๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•ด๋„ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋‹ค. [3, 6] ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ **JSON ํŒŒ์ผ** ํ˜•ํƒœ๋กœ ๋ณ„๋„ ์ €์žฅ ๋ฐ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋œ๋‹ค. [6] ์ด๋ฏธ ์ŠคํŠธ๋ฆฌํ•‘์ด ์šฐ๋ ค๋˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” `exiftool`์ด๋‚˜ ์ „๋ฌธ ์ถ”์ถœ๊ธฐ(Workflow Extractor)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋ฏธ๋ฆฌ ์ถ”์ถœํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค. [1, 7] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ด๋ฏธ์ง€ vs JSON ์ €์žฅ์˜ ์‹ ๋ขฐ์„ฑ:** ์ดˆ๊ธฐ์—๋Š” ์ด๋ฏธ์ง€ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ์ด ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์œผ๋กœ ์†Œ๊ฐœ๋˜์ง€๋งŒ, ์†Œ์Šค์—์„œ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๋ฝ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜ ๋•Œ๋ฌธ์— **JSON ํŒŒ์ผ ์ €์žฅ**์„ ์ตœ์ข…์ ์œผ๋กœ ๋” ๊ฐ•๋ ฅํžˆ ๊ถŒ์žฅํ•œ๋‹ค. [6] +- **์žฌ์‚ฝ์ž… ์š”๊ตฌ์‚ฌํ•ญ:** ๋‹จ์ˆœ ์ถ”์ถœ์„ ๋„˜์–ด ์œ ์‹ค๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ด๋ฏธ์ง€์— ์‚ฝ์ž…(Insert)ํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌ(Copy)ํ•˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์š”๊ตฌ๊ฐ€ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ง€์†์ ์œผ๋กœ ์ œ๊ธฐ๋˜๊ณ  ์žˆ๋‹ค. [4] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **GIMP ํŽธ์ง‘ ํ™˜๊ฒฝ:** ์‚ฌ์šฉ์ž๊ฐ€ pythongosssss ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฏธ์ง€๋ฅผ ์ œ์ž‘ํ•œ ํ›„ GIMP์—์„œ ์ˆ˜์ • ์‹œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์–ด ์žฌ์‚ฝ์ž… ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ด์ง„ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋จ. [4] +- **์†Œ์…œ ๋ฏธ๋””์–ด ๊ฒŒ์‹œ๋ฌผ:** ์˜จ๋ผ์ธ์— ๊ฒŒ์‹œ๋œ PNG ํŒŒ์ผ๋“ค์—์„œ ์ผ๋ฐ˜์ ์œผ๋กœ JSON ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์žˆ์–ด, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ `Weird Wonderful AI Art` ๋“ฑ์˜ ์ „์šฉ ์ถ”์ถœ ๋„๊ตฌ๊ฐ€ ๊ฐœ๋ฐœ๋จ. [1] +- **Comfy-CLI ๋„๊ตฌ:** ์ด๋ฏธ์ง€, webp, mp4 ๋“ฑ ์ง€์›๋˜๋Š” ๋ฏธ๋””์–ด์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž…, ๋ณต์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ `comfy-cli`์— ํฌํ•จ์‹œํ‚ค๋ ค๋Š” ๊ฐœ์„  ์ œ์•ˆ(Issue #341)์ด ์ง„ํ–‰ ์ค‘์ž„. [4, 8] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์œ ์‹ค ์‚ฌ๋ก€ ๋ฐ ๋Œ€์‘ ๋„๊ตฌ ์กด์žฌ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ ์ด์Šˆ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ŠคํŠธ๋ฆฌํ•‘๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์‹ค์ฒด์ด์ž ํ‘œ์ค€ ๊ทœ๊ฒฉ์ž„. [9, 10] + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON์˜ ๊ตฌ์กฐ์  ํŠน์„ฑ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์— ์–ด๋–ป๊ฒŒ ์ธ์ฝ”๋”ฉ๋˜๋Š”์ง€ ์ดํ•ด ๊ฐ€๋Šฅ. +- [[PNG Metadata Chunks]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์ €์žฅ๋˜๋Š” tEXt/zTXt ์œ„์น˜๋ฅผ ์ •์˜ํ•จ. [2] + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Workflow Extractor]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ŠคํŠธ๋ฆฌํ•‘๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฏธ์ง€์—์„œ ํšŒ์ˆ˜ํ•˜๋Š” ๋„๊ตฌ์ž„. [1] +- [[exiftool]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ช…๋ น์ค„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š” ํ‘œ์ค€ ๋„๊ตฌ์ž„. [7, 11] + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- PNG ์™ธ์— WebP๋‚˜ MP4 ํฌ๋งท์—์„œ๋„ ๋™์ผํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌํ•‘ ํŒจํ„ด์ด ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? [4] +- ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€ํ•˜๋ฉด์„œ ์ด๋ฏธ์ง€๋ฅผ ์••์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด์†์‹ค ์ „์†ก ๊ทœ๊ฒฉ์ด ์กด์žฌํ•˜๋Š”๊ฐ€? [2, 3] +- ์ŠคํŠธ๋ฆฌํ•‘๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด AI ๊ฐ€ ์ด๋ฏธ์ง€์˜ ํŠน์„ฑ์„ ๋ถ„์„ํ•˜์—ฌ ์—ญ์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”๋ก ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€? +- ํŠน์ • ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ ์ค‘ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋Š” ์˜ˆ์™ธ์ ์ธ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”๊ฐ€? [1] +- `exiftool`์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋˜์ง€ ์•Š์€(unregistered) ํƒœ๊ทธ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ฐ•์ œ๋กœ ์‚ฝ์ž…ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” ๋ฌด์—‡์ธ๊ฐ€? [11] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์›Œํฌํ”Œ๋กœ์šฐ ๊ณต์œ  ์‹œ ์ด๋ฏธ์ง€ ํŒŒ์ผ๋งŒ ์ „๋‹ฌํ•˜์ง€ ๋ง๊ณ  JSON ํŒŒ์ผ์„ ๋ณ‘ํ–‰ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์œ ์‹ค์— ๋Œ€๋น„ํ•ด์•ผ ํ•จ. [3, 6] +- **System Design:** API ์„œ๋ฒ„ ๊ตฌ์ถ• ์‹œ ์™ธ๋ถ€์—์„œ ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋กœ์ง์ด ํ•„์š”ํ•จ. [12] +- **Operation / Maintenance:** ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐฐํฌ์šฉ ์ด๋ฏธ์ง€๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋Š” ์ „์šฉ ํˆด(์˜ˆ: pythongosssss workflow image)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „ํ•จ. [4] +- **Learning Path:** ์›Œํฌํ”Œ๋กœ์šฐ ์ €์žฅ ๋ฐฉ์‹์„ ์ตํž ๋•Œ ๋‹จ์ˆœ 'Save'์™€ 'Export'์˜ ์ฐจ์ด, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ์ง€ ๋‚ด์žฅ ๋ฐฉ์‹์˜ ํ•œ๊ณ„๋ฅผ ๋จผ์ € ํŒŒ์•…ํ•ด์•ผ ํ•จ. [6, 13] + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์œ ์‹ค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์›Œํฌํ”Œ๋กœ์šฐ ๋‚ด ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ณด์™„ ๊ธฐ์ˆ ์ž„. [14] + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [Source 3, 14, 18, 32, 170] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Model Hashing (SHA-256).md b/10_Wiki/Topics/Comfyui/Model Hashing (SHA-256).md new file mode 100644 index 00000000..489f3956 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Model Hashing (SHA-256).md @@ -0,0 +1,96 @@ +--- +id: model-hashing-(sha-256) +title: "Model Hashing (SHA-256)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["SHA-256 Model Verification", "Content-based Model Identification"] +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: ["comfy-pack", ".cpack.zip"] +github_commit: "" +--- + +# [[Model Hashing (SHA-256)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋ชจ๋ธ ํ•ด์‹ฑ์€ ๊ฐ€๋ณ€์ ์ธ ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  ๊ณ ์œ ํ•œ SHA-256 ์ง€๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋ฅผ ์‹๋ณ„ํ•จ์œผ๋กœ์จ, ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ ๊ฐ„์˜ ์›Œํฌํ”Œ๋กœ ์ด์‹์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **SHA-256 ์•Œ๊ณ ๋ฆฌ์ฆ˜:** ๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ๋ฐ์ดํ„ฐ๋กœ๋ถ€ํ„ฐ ๊ณ ์œ ํ•œ ๊ณ ์ • ๊ธธ์ด ์‹๋ณ„์ž๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ณ  ์‹๋ณ„ํ•˜๋Š” ํ‘œ์ค€ ํ•ด์‹œ ํ•จ์ˆ˜์ด๋‹ค [1]. +2. **์ด์‹์„ฑ ๋ฐ ์žฌํ˜„์„ฑ (Portability):** ์ œ์ž‘์ž์™€ ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ ํŒŒ์ผ ์ด๋ฆ„(์˜ˆ: `sd_xl_base.safetensors` vs `sdxl_v10.safetensors`)์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋™์ผํ•œ ๋ชจ๋ธ์ž„์„ ์ธ์‹ํ•˜๊ฒŒ ํ•œ๋‹ค [1, 2]. +3. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ†ตํ•ฉ:** ์›Œํฌํ”Œ๋กœ JSON ๋˜๋Š” ๊ด€๋ จ ์•„์นด์ด๋ธŒ ํŒŒ์ผ ๋‚ด์— ํ•ด์‹œ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œ์ผœ ์‹œ์Šคํ…œ์ด ๋กœ์ปฌ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๋ชจ๋ธ์„ ์ž๋™์œผ๋กœ ์ฐพ๋„๋ก ์ง€์›ํ•œ๋‹ค [1, 2]. +4. **์˜์กด์„ฑ ํ•ด๊ฒฐ (Dependency Resolution):** ComfyUI Manager์™€ ๊ฐ™์€ ๋„๊ตฌ๊ฐ€ ๋ˆ„๋ฝ๋œ ๋ชจ๋ธ์„ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒด ๋ชจ๋ธ์„ ์ œ์•ˆํ•  ๋•Œ ๊ธฐ์ค€์ ์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค [2]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ฝ˜ํ…์ธ  ๊ธฐ๋ฐ˜ ์‹๋ณ„ (Content-Addressable Identification):** ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž์›์„ ์‹๋ณ„ํ•˜์—ฌ "Model Not Found" ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ์„ค๊ณ„ ํŒจํ„ด์ด๋‹ค [1]. +- **์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง• (Workspace Packaging):** ๋‹จ์ˆœ JSON ๋ฐฐํฌ์—์„œ ๋ฒ—์–ด๋‚˜ JSON, ๋ชจ๋ธ ํ•ด์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์„ `.cpack.zip`๊ณผ ๊ฐ™์€ ๋‹จ์ผ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ฌถ์–ด ๊ด€๋ฆฌํ•˜๋Š” ์ถ”์„ธ๊ฐ€ ๋ฐœ๊ฒฌ๋œ๋‹ค [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +๋ชจ๋ธ ํ•ด์‹ฑ์€ ComfyUI ์›Œํฌํ”Œ๋กœ์˜ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ธ **๋ชจ๋ธ ๊ฒฝ๋กœ ๋ฐ ์ด๋ฆ„ ๋ถˆ์ผ์น˜**๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๊ธ‰ ์ง๋ ฌํ™” ๊ธฐ๋ฒ•์ด๋‹ค [1]. ์ผ๋ฐ˜์ ์œผ๋กœ ์›Œํฌํ”Œ๋กœ๋Š” ์ œ์ž‘์ž์˜ ๋กœ์ปฌ ๊ฒฝ๋กœ๋ฅผ ์ฐธ์กฐํ•˜์ง€๋งŒ, ํƒ€์ธ์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ํŒŒ์ผ ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค [1]. + +์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด **comfy-pack**๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ **SHA-256 ํ•ด์‹œ**๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค [1, 2]. ์‹œ์Šคํ…œ์€ ์‹คํ–‰ ์‹œ ํŒŒ์ผ ์ด๋ฆ„ ๋Œ€์‹  ์ด ํ•ด์‹œ๊ฐ’์„ ๋Œ€์กฐํ•˜์—ฌ, ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๊ฐ€์ค‘์น˜๊ฐ€ ์ผ์น˜ํ•˜๋Š” ๋กœ์ปฌ ํŒŒ์ผ์„ ์ฐพ์•„ ์—ฐ๊ฒฐํ•œ๋‹ค [1]. + +์ตœ๊ทผ์—๋Š” ์›Œํฌํ”Œ๋กœ JSON ์™ธ์—๋„ ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋Š” **์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ**๊ฐ€ ๋„์ž…๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ–ฅํ›„ ์›Œํฌํ”Œ๋กœ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ํŠน์ • ๋…ธ๋“œ๊ฐ€ ๋” ์ด์ƒ ์ง€์›๋˜์ง€ ์•Š๋”๋ผ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ธฐ์ˆ ์  ํ† ๋Œ€๊ฐ€ ๋œ๋‹ค [2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ตœ์‹  ํŠธ๋ Œ๋“œ:** ๊ธฐ์กด์˜ ์›์‹œ(raw) JSON ์˜์กด ๋ฐฉ์‹์—์„œ ๋ชจ๋ธ ํ•ด์‹œ์™€ ๋…ธ๋“œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ **.cpack.zip** ๊ธฐ๋ฐ˜์˜ ํŒจํ‚ค์ง• ๋ฐฉ์‹์œผ๋กœ ์ง„ํ™”ํ•˜๊ณ  ์žˆ๋‹ค [2]. +- **์ˆ˜๋™ ํ•ด๊ฒฐ์˜ ํ•œ๊ณ„:** ์ˆ˜๋™์œผ๋กœ ๋ชจ๋ธ์„ ๋‹ค์‹œ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์€ ๋Œ€๊ทœ๋ชจ ์ž๋™ํ™”๋‚˜ API ํ™˜๊ฒฝ์—์„œ ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ํ•ด์‹ฑ์„ ํ†ตํ•œ ์ž๋™ ๊ฒ€์ƒ‰(Comfy Manager search)์ด ๊ถŒ์žฅ๋˜๋Š” ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ์ œ์‹œ๋œ๋‹ค [2]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfy-pack:** ์›Œํฌํ”Œ๋กœ ์ง๋ ฌํ™” ์‹œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๋„๊ตฌ๋กœ ๋ช…์‹œ๋จ [1, 2]. +- **.cpack.zip (Workspace Packaging):** ์›Œํฌํ”Œ๋กœ JSON๊ณผ ํ•จ๊ป˜ ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ํŒจํ‚ค์ง€ ํ˜•์‹์— ์ ์šฉ๋จ [2]. +- **ComfyUI Manager:** ๋ชจ๋ธ ๊ฒฝ๋กœ๊ฐ€ ๊นจ์กŒ์„ ๋•Œ ํ•ด์‹œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋ธ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ์— ํ™œ์šฉ๋จ [2]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๋„๊ตฌ์ธ comfy-pack๊ณผ ์—ฐ๊ณ„๋œ ๊ฐœ๋…์œผ๋กœ applied ์ˆ˜์ค€์— ๊ทผ์ ‘ํ•จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ๊ธฐ์ˆ  ๋ถ„์„ ์ž๋ฃŒ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[ComfyUI Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ทผ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ๋‚ด ๋ชจ๋ธ ์ฐธ์กฐ ๋ฐฉ์‹์˜ ๋ณ€ํ™”. +- [[Serialization Formats (Frontend vs API)]] + - ์—ฐ๊ฒฐ ์ด์œ : API ์ž๋™ํ™” ์‹œ ๋ชจ๋ธ ํ•ด์‹ฑ์„ ํ†ตํ•œ ๊ฒฝ๋กœ ํ•ด๊ฒฐ์ด ํ•„์ˆ˜์ ์ž„. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ˆ„๋ฝ๋œ ๋ชจ๋ธ์„ ํ•ด์‹œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ฐพ๊ณ  ์„ค์น˜ํ•˜๋Š” ์ฃผ์ฒด์ž„. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹ค๋ฌด์ ์ธ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ „๋žต. +- [[Workspace Packaging]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ•ด์‹œ๋ฅผ ํฌํ•จํ•œ ์•„์นด์ด๋ธŒ ๋ฐฐํฌ์˜ ์ตœ์ƒ์œ„ ๊ฐœ๋…์ž„. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- SHA-256 ํ•ด์‹œ ๊ณ„์‚ฐ์ด ์ˆ˜ ๊ธฐ๊ฐ€๋ฐ”์ดํŠธ(GB) ๊ทœ๋ชจ์˜ ๋ชจ๋ธ ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? +- ๋ชจ๋ธ ํŒŒ์ผ์˜ ์ผ๋ถ€(์˜ˆ: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)๊ฐ€ ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ ํ•ด์‹œ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ์œ„์–‘์„ฑ(False Negative) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•˜๋Š”๊ฐ€? +- ์„œ๋กœ ๋‹ค๋ฅธ ์ฒดํฌํฌ์ธํŠธ ๋ณ‘ํ•ฉ(Merging) ๋ชจ๋ธ์— ๋Œ€ํ•ด SHA-256 ํ•ด์‹ฑ์ด ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ  ์‹๋ณ„์˜ ์‹ ๋ขฐ๋„๋Š” ์–ด๋– ํ•œ๊ฐ€? +- ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ API ํ™˜๊ฒฝ(Replicate, Mystic ๋“ฑ)์—์„œ ๋กœ์ปฌ ๋ชจ๋ธ ํ•ด์‹œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ€์ค‘์น˜๋ฅผ ๋™์  ๋กœ๋”ฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹ฑ ์ •๋ณด๋ฅผ JSON ์Šคํ‚ค๋งˆ v1.0 ๋‚ด์— ๊ณต์‹์ ์œผ๋กœ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” RFC ๋…ผ์˜๊ฐ€ ์กด์žฌํ•˜๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfy-pack`์„ ์‚ฌ์šฉํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‚ด๋ณด๋‚ผ ๋•Œ ์ž๋™์œผ๋กœ ํ•ด์‹œ๊ฐ’์„ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•จ [1]. +- **System Design:** ์›Œํฌํ”Œ๋กœ ๋ฐฐํฌ ์‹œ ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธ๋ฒคํ† ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ตฌ์ถ• [2]. +- **Operation / Maintenance:** ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ณ€๊ฒฝ ์‹œ์—๋„ API ํ˜ธ์ถœ์ด ๋Š๊ธฐ์ง€ ์•Š๋„๋ก ํ•ด์‹œ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋ธ ๋งคํ•‘ ๋ ˆ์ด์–ด ์šด์˜ [2]. +- **Learning Path:** ์ดˆ๋ณด์ž๊ฐ€ ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” "Model Not Found" ์˜ค๋ฅ˜์˜ ์›์ธ๊ณผ ํ•ด์‹œ๋ฅผ ํ†ตํ•œ ํ•ด๊ฒฐ ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•จ [1, 2]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Node Dependency Management]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋ชจ๋ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•์žฅ. + + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on Source [1, 2]) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Model Hashing.md b/10_Wiki/Topics/Comfyui/Model Hashing.md new file mode 100644 index 00000000..e5054c59 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Model Hashing.md @@ -0,0 +1,91 @@ +--- +id: model-hashing +title: "Model Hashing" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["SHA-256 Model Identification"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "portability", "serialization"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["comfy-pack", ".cpack.zip"] +github_commit: "" +--- + +# [[Model Hashing]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ๊ณ ์œ ํ•œ ๋””์ง€ํ„ธ ์ง€๋ฌธ(SHA-256)์„ ์ƒ์„ฑํ•˜์—ฌ ํŒŒ์ผ๋ช…์ด๋‚˜ ๊ฒฝ๋กœ์˜ ๋ถˆ์ผ์น˜์— ๊ด€๊ณ„์—†์ด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด์‹์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ๊ธฐ์ˆ  [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **SHA-256 ๊ธฐ๋ฐ˜ ์‹๋ณ„:** ๋ชจ๋ธ ํŒŒ์ผ์˜ ๊ฐ€์ค‘์น˜๋ฅผ ํ•ด์‹ฑํ•˜์—ฌ ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ๋ถ€์—ฌํ•จ [1]. +2. **ํŒŒ์ผ๋ช… ๋…๋ฆฝ์„ฑ (Filename Independence):** ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋ธ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„(์˜ˆ: `sd_xl_base_v10` vs `sdxl_base`) ๋™์ผ ๋ชจ๋ธ์ž„์„ ์ธ์‹ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ [1]. +3. **๊ณ ๊ธ‰ ์ง๋ ฌํ™” (Advanced Serialization):** ํ‘œ์ค€ JSON ํฌ๋งท์„ ๋„˜์–ด ๋ชจ๋ธ ํ•ด์‹œ๋ฅผ ํฌํ•จํ•œ ์•„ํ‹ฐํŒฉํŠธ ์ค‘์‹ฌ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ํŒจํ‚ค์ง•์„ ์ง€ํ–ฅํ•จ [1, 2]. +4. **์˜์กด์„ฑ ๋ฌด๊ฒฐ์„ฑ:** ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ์ •ํ™•ํ•œ ๋ชจ๋ธ ๋ฒ„์ „์„ ํ™•์ธํ•˜์—ฌ "Model Not Found" ์˜ค๋ฅ˜๋ฅผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ•ด๊ฒฐํ•จ [1, 2]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ฝ˜ํ…์ธ  ์ค‘์‹ฌ ์ฐธ์กฐ ํŒจํ„ด:** ํ•˜๋“œ์ฝ”๋”ฉ๋œ 'ํŒŒ์ผ ๊ฒฝ๋กœ' ๋Œ€์‹  ํŒŒ์ผ์˜ '๋‚ด์šฉ(Hash)'์„ ๊ธฐ์ค€์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฐธ์กฐ ์ „๋žต [1]. +- **์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง• ํŒจํ„ด:** JSON ์›Œํฌํ”Œ๋กœ์šฐ, ๋ชจ๋ธ ํ•ด์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์„ ํ•˜๋‚˜์˜ ์•„์นด์ด๋ธŒ(`.cpack.zip`)๋กœ ๋ฌถ์–ด ๋ฐฐํฌํ•˜๋Š” ํ‘œ์ค€ํ™” ํŒจํ„ด [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ด์‹์„ฑ์—์„œ ๊ฐ€์žฅ ํฐ ์žฅ์• ๋ฌผ ์ค‘ ํ•˜๋‚˜๋Š” **๋ชจ๋ธ ํŒŒ์ผ์˜ ๋ช…๋ช… ๊ทœ์น™๊ณผ ๊ฒฝ๋กœ์˜ ๋ถˆ์ผ์น˜**์ด๋‹ค [1]. ์ œ์ž‘์ž์˜ ์ปดํ“จํ„ฐ์—์„œ๋Š” `sd_xl_base_v10.safetensors`๋กœ ์ €์žฅ๋œ ํŒŒ์ผ์ด ์‚ฌ์šฉ์ž์˜ ํ™˜๊ฒฝ์—์„œ๋Š” `sdxl_base.safetensors`๋กœ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ํ‘œ์ค€ JSON ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ํ•ด๋‹น ๋ชจ๋ธ์„ ์ฐพ์ง€ ๋ชปํ•ด ์‹คํ–‰์— ์‹คํŒจํ•œ๋‹ค [1, 2]. + +์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `comfy-pack`๊ณผ ๊ฐ™์€ ๊ณ ๊ธ‰ ์ง๋ ฌํ™” ๋„๊ตฌ๋Š” **SHA-256 ํ•ด์‹œ**๋ฅผ ํ™œ์šฉํ•œ๋‹ค [1]. ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ์‹œ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ์‹œํ‚ค๋ฉด, ์‹œ์Šคํ…œ์€ ํŒŒ์ผ๋ช… ๋Œ€์‹  ํ•ด์‹œ๊ฐ’์„ ๊ฒ€์ƒ‰ํ•˜์—ฌ ๋กœ์ปฌ ์ €์žฅ์†Œ์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ชจ๋ธ์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค [1]. + +์ด ๊ธฐ์ˆ ์€ ๋‹จ์ˆœํ•œ ์˜ค๋ฅ˜ ์ˆ˜์ •์„ ๋„˜์–ด, ํ–ฅํ›„ **์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง•**์˜ ํ•ต์‹ฌ ์š”์†Œ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ๋‹ค [2]. `.cpack.zip` ํฌ๋งท์€ ์›Œํฌํ”Œ๋กœ์šฐ JSON๊ณผ ํ•จ๊ป˜ ๋ชจ๋ธ ํ•ด์‹œ ์ •๋ณด๋ฅผ ๋‹ด์•„, ๊ฐœ๋ณ„ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋˜๋”๋ผ๋„ ์ƒ์„ฑ ์‹œ์ ์˜ ๋…ผ๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” '์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ'๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [2]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํ‘œ์ค€ vs ํ™•์žฅ:** ๊ธฐ๋ณธ ComfyUI์˜ "Save" ๋˜๋Š” "Save (API)" ๊ธฐ๋Šฅ์€ ํ˜„์žฌ ๋ชจ๋ธ ํ•ด์‹ฑ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋Š” `comfy-pack`๊ณผ ๊ฐ™์€ ๋ณ„๋„์˜ ๊ณ ๊ธ‰ ๋„๊ตฌ๋‚˜ ํ–ฅํ›„ ๋„์ž…๋  ํ‘œ์ค€ ํฌ๋งท์—์„œ ์ง€์›๋˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค [1, 2]. +- **์„ฑ๋Šฅ ์˜ค๋ฒ„ํ—ค๋“œ:** ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ํŒŒ์ผ์— ๋Œ€ํ•œ SHA-256 ๊ณ„์‚ฐ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๋ชจํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์†Œ์Šค์—์„œ๋Š” ์ด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ ์•ˆ์ •์„ฑ์„ ์œ„ํ•œ ํ•„์ˆ˜์ ์ธ ๋น„์šฉ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfy-pack:** ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋กœ ๋ฐ ํŒŒ์ผ๋ช… ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ง๋ ฌํ™” ๋„๊ตฌ๋กœ ๋ช…์‹œ๋จ [1]. +- **.cpack.zip (์›Œํฌ์ŠคํŽ˜์ด์Šค ํŒจํ‚ค์ง•):** ์›Œํฌํ”Œ๋กœ์šฐ JSON, ๋ชจ๋ธ ํ•ด์‹œ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „์„ ํ†ตํ•ฉํ•˜์—ฌ ๋ฏธ๋ž˜์—๋„ ์ž‘๋™ ๊ฐ€๋Šฅํ•œ ๋ฐฐํฌ ๋‹จ์œ„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํฌ๋งท์— ์ ์šฉ๋จ [2]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (comfy-pack ๋“ฑ ์‹ค์ œ ๋„๊ตฌ์—์„œ ์‚ฌ์šฉ ์ค‘์ž„์„ ํ™•์ธ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (์ „๋ฌธ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ์ˆ  ๋ฌธ์„œ ๋ฐ ๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Workflow API JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ํ•ด์‹œ ์ •๋ณด๊ฐ€ ์‚ฝ์ž…๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๋˜๋Š” ๊ธฐ๋ณธ ์‹คํ–‰ ๊ตฌ์กฐ์ฒด [3]. +- [[Serialization Formats]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ํฌ๋งท์„ ๋„˜์–ด์„  ๋ฐ์ดํ„ฐ ๋ณด์กด ์ „๋žต์˜ ์ผ๋ถ€ [1, 4]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋ธ ๊ฒ€์ƒ‰ ๋ฐ ๋ˆ„๋ฝ๋œ ์˜์กด์„ฑ ํ•ด๊ฒฐ ์‹œ ํ•ด์‹œ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ [2]. +- [[Workspace Packaging]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ชจ๋ธ ํ•ด์‹ฑ์ด ์‹ค์ œ ๊ตฌํ˜„๋˜๋Š” ์ตœ์ƒ์œ„ ๋ฐฐํฌ ๋‹จ์œ„ [2]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- `comfy-pack`์—์„œ SHA-256 ํ•ด์‹œ๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ(์˜ˆ: 10GB+)์— ๋Œ€ํ•œ ๊ณ„์‚ฐ ์†๋„ ์ตœ์ ํ™” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? +- ๋ชจ๋ธ ํ•ด์‹œ๊ฐ€ ์ผ์น˜ํ•˜์ง€๋งŒ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅผ ๋•Œ, ComfyUI ๋‚ด๋ถ€์ ์œผ๋กœ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ์„ ๋งคํ•‘ํ•˜๋Š” ๋กœ์ง์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”๊ฐ€? +- ํ–ฅํ›„ `.cpack.zip` ํ‘œ์ค€์ด ํ™•์ •๋  ๋•Œ, ๋ชจ๋ธ ํ•ด์‹œ ์™ธ์— ํ™˜๊ฒฝ(Python ๋ฒ„์ „ ๋“ฑ)์— ๋Œ€ํ•œ ํ•ด์‹ฑ๋„ ํฌํ•จ๋  ๊ณ„ํš์ด ์žˆ๋Š”๊ฐ€? +- ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ ์ผ๋ถ€๊ฐ€ ๋ณ€๊ฒฝ(Fine-tuning ๋“ฑ)๋˜์—ˆ์„ ๋•Œ, ํ•ด์‹œ ๋ณ€ํ™”์— ๋”ฐ๋ฅธ ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ „๋žต์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์™ธ๋ถ€ API ์„œ๋น„์Šค(Replicate, Mystic ๋“ฑ)์—์„œ ๋ชจ๋ธ ํ•ด์‹ฑ์„ ํ†ตํ•œ ํ”„๋ฆฌ๋กœ๋“œ(Pre-load) ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•œ๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfy-pack` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ์˜์กด์„ฑ์ด ํฌํ•จ๋œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ•ด์‹ฑ ๋กœ์ง์„ ํ˜ธ์ถœํ•จ [1]. +- **System Design:** ๋‹ค์ˆ˜์˜ ๋จธ์‹ ์—์„œ ๋™์ผํ•œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ๋ชจ๋ธ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•จ [2]. +- **Operation / Maintenance:** ๋ชจ๋ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํŒŒ์ผ๋ช…์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๊ธฐ์กด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ž‘๋™ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๋ฌด๊ฒฐ์„ฑ ์ฒดํฌ์šฉ์œผ๋กœ ํ™œ์šฉํ•จ [1]. +- **Learning Path:** ๋‹จ์ˆœํ•œ UI ์ €์žฅ์„ ๋„˜์–ด ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ๋ฐ ๋ฐฐํฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ํ•™์Šตํ•จ [5]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ด๋ฏธ์ง€ ๋ฐฐํฌ ์‹œ ํ•ด์‹œ ์ •๋ณด ๋“ฑ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๋Š” ๋ฌธ์ œ์™€ ๊ทธ ๋ฐฉ์ง€์ฑ… [6]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Natural Language to Workflow Generation.md b/10_Wiki/Topics/Comfyui/Natural Language to Workflow Generation.md new file mode 100644 index 00000000..0bb5054e --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Natural Language to Workflow Generation.md @@ -0,0 +1,69 @@ +--- +id: natural-language-to-workflow-generation +title: "Natural Language to Workflow Generation" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Natural Language to Workflow", "LLM-based Workflow Generation"] +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: ["DanielPFlorian/ComfyUI-WorkflowGenerator", "ComfyGPT research"] +github_commit: "82df278" +--- + +# [[Natural Language to Workflow Generation]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ž์—ฐ์–ด ์„ค๋ช…์„ ๋Œ€๊ทœ๋ชจ ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ ํ†ตํ•ด ComfyUI์˜ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„(JSON)๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง„์ž… ์žฅ๋ฒฝ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ƒ์„ฑ ์†๋„๋ฅผ ํ˜์‹ ์ ์œผ๋กœ ๋†’์ด๋Š” ๊ธฐ์ˆ ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **3๋‹จ๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ (Multi-stage Pipeline):** ๋…ผ๋ฆฌ ์ƒ์„ฑ(Generator), ์‹œ๋งจํ‹ฑ ๊ฒ€์ฆ(Validator), ๊ทธ๋ž˜ํ”„ ๊ตฌ์ถ•(Builder)์˜ ์ˆœ์ฐจ์  ๊ณผ์ •์„ ํ†ตํ•ด ์ž์—ฐ์–ด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [3, 4]. +- **๋…ธ๋“œ ์นดํƒˆ๋กœ๊น… (Node Cataloging):** ๋กœ์ปฌ์— ์„ค์น˜๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์Šค์บ”ํ•˜๊ณ  ์ƒ‰์ธํ™”ํ•˜์—ฌ LLM์ด ์‹ค์ œ ์กด์žฌํ•˜๋Š” ๋…ธ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค [5, 6]. +- **ํŠนํ™” LLM ๋ฏธ์„ธ์กฐ์ • (Fine-tuned LLMs):** Qwen2.5์™€ ๊ฐ™์€ ๋ชจ๋ธ์„ ComfyUI ์Šคํ‚ค๋งˆ ๋ฐ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ฐ์ดํ„ฐ๋กœ ๋ฏธ์„ธ ์กฐ์ •ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์กฐ์— ์ตœ์ ํ™”๋œ ์ถœ๋ ฅ์„ ์ƒ์„ฑํ•œ๋‹ค [1, 7]. +- **์‹œ๋งจํ‹ฑ ์ž„๋ฒ ๋”ฉ (Semantic Embedding):** ์ž์—ฐ์–ด ์„ค๋ช…๊ณผ ์‹ค์ œ ๋…ธ๋“œ ํด๋ž˜์Šค ๋ช…์นญ ์‚ฌ์ด์˜ ์˜๋ฏธ์  ์œ ์‚ฌ์„ฑ์„ ๊ณ„์‚ฐํ•˜์—ฌ ์ •ํ™•ํ•œ ๋…ธ๋“œ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํ•ฉ์„ฑ-๊ฒ€์ฆ-์ปดํŒŒ์ผ ๋ฃจํ”„:** LLM์ด ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ๋จผ์ € ์„ค๊ณ„(Logical Synthesis)ํ•˜๊ณ , ์ด๋ฅผ ๋กœ์ปฌ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐ(Semantic Validation)ํ•œ ๋’ค, ์ตœ์ข… JSON์œผ๋กœ ๋ณ€ํ™˜(Graph Compilation)ํ•˜๋Š” ๊ตฌ์กฐ์  ์„ค๊ณ„ ํŒจํ„ด์ด ๊ด€์ฐฐ๋œ๋‹ค [3]. +- **๋กœ์ปฌ ํ™˜๊ฒฝ ์ ‘์ง€(Local Grounding):** ๋ชจ๋ธ์˜ ์ง€์‹์ด ํ›ˆ๋ จ ์‹œ์ ์— ๊ณ ์ •๋˜๋Š” ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ์‹คํ–‰ ์ „ "Update Node Catalog" ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํ˜„์žฌ ์‹œ์Šคํ…œ์˜ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋™๊ธฐํ™”ํ•˜๋Š” ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค [5, 9]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์€ ์‚ฌ์šฉ์ž๊ฐ€ "SDXL์„ ์‚ฌ์šฉํ•œ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ง€์‹œ์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹œ์Šคํ…œ์ด ์ด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” JSON ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [2]. + +**1. ์ƒ์„ฑ ๋‹จ๊ณ„ (Generator):** +์ด ๋‹จ๊ณ„์—์„œ๋Š” fine-tuned๋œ ๋ชจ๋ธ(์˜ˆ: Qwen2.5-14B)์ด ์ง€์‹œ์–ด์˜ ์˜๋„๋ฅผ ํ•ด์„ํ•˜์—ฌ ๋…ผ๋ฆฌ์  ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค [3, 7]. ๋ชจ๋ธ์€ ๋…ธ๋“œ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„(์˜ˆ: CLIP Text Encode์—์„œ KSampler๋กœ์˜ ์—ฐ๊ฒฐ)์„ ์ดํ•ดํ•˜๊ณ  ์ด๋ฅผ ์ถ”์ƒ์ ์ธ JSON ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•œ๋‹ค [8]. + +**2. ๊ฒ€์ฆ ๋‹จ๊ณ„ (Validator):** +์ƒ์„ฑ๋œ ๋…ผ๋ฆฌ ๊ตฌ์กฐ์˜ ๋…ธ๋“œ ๋ช…์นญ์ด ์‹ค์ œ ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธํ•œ๋‹ค [3, 4]. `sentence-transformers`์™€ ๊ฐ™์€ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜๋ฏธ์ ์œผ๋กœ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ์‹ค์ œ ๋…ธ๋“œ๋ฅผ ์ฐพ์•„ ์ˆ˜์ •ํ•˜๋ฉฐ, ์ด ๊ณผ์ •์„ ํ†ตํ•ด LLM์˜ ํ™˜๊ฐ(Hallucination) ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค [7, 8]. + +**3. ๊ตฌ์ถ• ๋‹จ๊ณ„ (Builder):** +๊ฒ€์ฆ๋œ ๊ตฌ์กฐ๋ฅผ ComfyUI ์‹คํ–‰ ์—”์ง„์ด ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ข… .json ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [3, 10]. ์ด ๊ณผ์ •์—์„œ ๋…ธ๋“œ์˜ ์œ„์น˜(pos), ํฌ๊ธฐ(size), ์œ„์ ฏ ๊ฐ’(widgets_values) ๋“ฑ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์‹คํ–‰ ์ˆœ์„œ(order)๊ฐ€ ํ• ๋‹น๋œ๋‹ค [10, 11]. + +**์ฃผ์š” ๊ธฐ์ˆ ์  ์‚ฌ์–‘:** +- **๋ชจ๋ธ ๊ตฌ์กฐ:** GGUF ํฌ๋งท์œผ๋กœ ์–‘์žํ™”๋œ Qwen2.5 ๋ชจ๋ธ๊ตฐ์ด ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ, ํšจ์œจ์ ์ธ ์ถ”๋ก ์„ ์œ„ํ•ด llama-cpp-python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์š”๊ตฌ๋œ๋‹ค [7, 12]. +- **๋ฐ์ดํ„ฐ ํ•œ๊ณ„:** ์ •์  ๋ฏธ์„ธ ์กฐ์ •์„ ๊ฑฐ์นœ ๋ชจ๋ธ์€ ํ›ˆ๋ จ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ง€์†์ ์ธ ์นดํƒˆ๋กœ๊ทธ ์—…๋ฐ์ดํŠธ์™€ ์‚ฌ์šฉ์ž์˜ ๊ฐ๋…์ด ๊ถŒ์žฅ๋œ๋‹ค [9, 13]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +๊ณผ๊ฑฐ์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋ฐฉ์‹์ด ์ˆ˜๋™์ ์ธ ๋…ธ๋“œ ์—ฐ๊ฒฐ๊ณผ JSON ํŽธ์ง‘์— ์˜์กดํ–ˆ๋‹ค๋ฉด, ์ตœ์‹  ๊ธฐ์ˆ ์ธ **ComfyGPT** ์•„ํ‚คํ…์ฒ˜๋Š” ์ด๋ฅผ '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค [3]. ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด, ์ •์  ๋ชจ๋ธ์€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ™”ํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์ƒํƒœ๊ณ„๋ฅผ ๋”ฐ๋ผ์žก๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์ œ๊ธฐ๋˜์—ˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ–ฅํ›„์—๋Š” ์ •์  ๋ฏธ์„ธ ์กฐ์ •์„ ๋„˜์–ด์„  ๋™์  ์•„ํ‚คํ…์ฒ˜๋กœ์˜ ์ง„ํ™”๊ฐ€ ํ•„์š”ํ•จ์ด ๋ช…์‹œ๋˜์–ด ์žˆ๋‹ค [9]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **DanielPFlorian/ComfyUI-WorkflowGenerator:** ์ž์—ฐ์–ด ์„ค๋ช…์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์‹ค์ œ ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ตฌํ˜„์ฒด์ด๋‹ค [2, 14]. +- **ํ•ต์‹ฌ ๋…ธ๋“œ ๊ตฌ์„ฑ:** `Workflow Generator Pipeline`, `WorkflowGenerator`, `NodeValidator`, `WorkflowBuilder`, `UpdateNodeCatalog` ๋“ฑ์˜ ๋…ธ๋“œ๊ฐ€ ์‹ค์ œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๊ตฌ์กฐ(`nodes/`, `generators/`) ๋‚ด์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [6, 8, 10, 14, 15]. +- **์ˆ˜์ • ์ด๋ ฅ:** Git ์ปค๋ฐ‹ `82df278`์—์„œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด์˜ ์ค‘๋ณต ๋ชจ๋ธ ํ‘œ์‹œ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ ๊ธฐ๋ก์ด ๋ฐœ๊ฒฌ๋œ๋‹ค [14]. +- **์—ฐ๊ตฌ ๊ธฐ๋ฐ˜:** ์ด ๊ธฐ์ˆ ์€ "ComfyGPT: A Self-Optimizing Multi-Agent System..." ์—ฐ๊ตฌ์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋กœ์ปฌ ComfyUI ํ™˜๊ฒฝ์— ๋งž๊ฒŒ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๋‹ค [2, 4]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๊ตฌํ˜„์ฒด์ธ ComfyUI-WorkflowGenerator ํ”„๋กœ์ ํŠธ ํ™•์ธ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ GitHub ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/PNG Metadata Chunks.md b/10_Wiki/Topics/Comfyui/PNG Metadata Chunks.md new file mode 100644 index 00000000..af2e142f --- /dev/null +++ b/10_Wiki/Topics/Comfyui/PNG Metadata Chunks.md @@ -0,0 +1,72 @@ +--- +id: png-metadata-chunks +title: "PNG Metadata Chunks" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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-frontend-package/src/scripts/metadata", "exiftool -b -workflow"] +github_commit: "" +--- + +# [[PNG Metadata Chunks]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +PNG ์ด๋ฏธ์ง€์˜ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ๋ธ”๋ก์— ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹œ๊ฐ์  ๊ตฌ์กฐ์™€ ์‹คํ–‰ ๋กœ์ง์„ ๋™์‹œ์— ๋‚ด์žฅํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ž์ฒด๋ฅผ **ํœด๋Œ€ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์  ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ**๋กœ ๋ณ€๋ชจ์‹œํ‚ค๋Š” ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **tEXt ๋ฐ zTXt ์ฒญํฌ (Chunks):** ComfyUI๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ํ™œ์šฉํ•˜๋Š” PNG ํ‘œ์ค€์˜ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ ๋ณด๊ด€ ์˜์—ญ์ด๋‹ค [2]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฃผ์ž… (Metadata Injection):** `Save Image` ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ตœ์ข… ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ๋ ˆ์ด์•„์›ƒ ์„ค์ •, ํ”„๋กฌํ”„ํŠธ๋ฅผ ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ์˜์—ญ์— ์ฃผ์ž…ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋‹ค [1, 4]. +- **๋ฐ์ดํ„ฐ ์ด์›ํ™” (Bifurcation):** ํ•˜๋‚˜์˜ ์ด๋ฏธ์ง€ ๋‚ด์— ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'Frontend ํฌ๋งท(workflow)'๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์‹คํ–‰์„ ์œ„ํ•œ 'API ํฌ๋งท(prompt)' ์ •๋ณด๋ฅผ ์ค‘๋ณต ์ €์žฅํ•˜์—ฌ ํ˜ธํ™˜์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค [2]. +- **๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ (Data Fragility):** ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ, ๋˜๋Š” ํŒŒ์ผ ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ ๋น„ํ•„์ˆ˜์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ์œ ์‹ค๋  ์œ„ํ—˜์ด ํฌ๋‹ค [2, 5]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **์ข…๋‹จ ๋…ธ๋“œ ์ž๋™ ๊ธฐ๋ก ํŒจํ„ด:** ๊ฑฐ์˜ ๋ชจ๋“  ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ `Save Image` ๋…ธ๋“œ์—์„œ ์ข…๋ฃŒ๋˜๋ฉฐ, ์ด ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„ ํ˜„์žฌ ์บ”๋ฒ„์Šค์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”ํ•œ๋‹ค [1]. +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ณต๊ตฌ ํŒจํ„ด:** ์‚ฌ์šฉ์ž๊ฐ€ PNG ํŒŒ์ผ์„ ComfyUI ์บ”๋ฒ„์Šค๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด, ์‹œ์Šคํ…œ์ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ํŒŒ์‹ฑํ•˜์—ฌ ์ฆ‰์‹œ ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ๊ณผ ์„ค์ •์„ ์žฌํ˜„ํ•œ๋‹ค [1, 5, 6]. +- **CLI ๊ธฐ๋ฐ˜ ๋ฒŒํฌ ์ถ”์ถœ ํŒจํ„ด:** ๋‹ค์ˆ˜์˜ ์ด๋ฏธ์ง€์—์„œ ์ˆ˜๋™ ์กฐ์ž‘ ์—†์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋Œ€๋Ÿ‰์œผ๋กœ ํšŒ์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด `exiftool`๊ณผ ๊ฐ™์€ ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ์ฒญํฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•œ๋‹ค [7, 8]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ์ „ํ˜•์ ์ธ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฒฐ๊ณผ๋ฌผ๋กœ, ์ด๋ฅผ PNG ํŒŒ์ผ์˜ **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ**์— ์ €์žฅํ•จ์œผ๋กœ์จ ์ด๋™์„ฑ๊ณผ ์žฌํ˜„์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1, 9]. + +- **์ฒญํฌ์˜ ๊ธฐ์ˆ ์  ๊ตฌ์„ฑ:** + - ์ฃผ๋กœ **tEXt** ๋˜๋Š” ์••์ถ•๋œ ํ˜•ํƒœ์ธ **zTXt** ์ฒญํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฌธ์ž์—ด์„ ์ €์žฅํ•œ๋‹ค [2]. + - ํ•˜๋‚˜๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI) ์ƒ์˜ ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ์ •๋ณด๋ฅผ ํฌํ•จํ•œ **Frontend JSON** ๋ฐ์ดํ„ฐ๋‹ค [2, 10]. + - ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ์—์„œ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์ธ **API JSON(Prompt)** ๋ฐ์ดํ„ฐ๋กœ, ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ ์••์ถ•๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„๋‹ค [2, 10, 11]. + +- **์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ ๋ฐ ๋ถ„์„:** + - ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ ์›น ๋„๊ตฌ๋‚˜ Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค [8, 12]. + - ๋ช…๋ น์ค„ ๋„๊ตฌ์ธ `exiftool`์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, `-workflow` ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค [7, 8]. + - ๊ณต์‹์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์€ ComfyUI ํ”„๋ก ํŠธ์—”๋“œ ํŒจํ‚ค์ง€์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค [13]. + +- **์žฅ์  ๋ฐ ํ•œ๊ณ„:** + - ๋ณ„๋„์˜ JSON ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์ด๋ฏธ์ง€ ํ•˜๋‚˜๋กœ ๋ชจ๋“  ์ƒ์„ฑ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ ์ด๋‹ค [14]. + - ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ผ์ด ์˜จ๋ผ์ธ์— ๊ฒŒ์‹œ๋˜๊ฑฐ๋‚˜ ์žฌ๊ฐ€๊ณต๋  ๋•Œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ(Stripped)๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•˜๋ฉฐ, ๋งค์šฐ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ์ตœ์‹  ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ๊ฐ„ํ˜น ์ผ๋ถ€ ๋…ธ๋“œ ์ •๋ณด๊ฐ€ ์œ ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ธฐ์ˆ ์  ํ•œ๊ณ„๊ฐ€ ๋ณด๊ณ ๋˜์—ˆ๋‹ค [2, 4, 12]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ €์žฅ ์•ˆ์ •์„ฑ ๋…ผ๋ž€:** ์ฒซ ๋ฒˆ์งธ ์ €์žฅ ๋ฐฉ์‹์ธ '์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ' ๋ฐฉ์‹์€ ๊ฐ€์žฅ ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ๋ณต์žกํ•œ ๋…ธ๋“œ๋‚˜ ํŠน์ • ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๋ˆ„๋ฝํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด, ๋ณด๋‹ค ํ™•์‹คํ•œ ๋ฐฑ์—…์„ ์œ„ํ•ด์„œ๋Š” ๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹์ธ **์ˆ˜๋™ JSON ํŒŒ์ผ ์ €์žฅ**์ด ๊ถŒ์žฅ๋œ๋‹ค [4]. +- **ํฌ๋งท ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด, ๊ณผ๊ฑฐ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๋‚ด์žฅ๋œ ๊ตฌ๋ฒ„์ „ JSON ํ˜•์‹์ด ์ตœ์‹  ๋ฒ„์ „์˜ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์ ๋˜์—ˆ๋‹ค [5]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Exiftool ์ถ”์ถœ ๋ช…๋ น:** `exiftool -b -workflow input.png > workflow.json` ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด PNG์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ €์žฅํ•˜๋Š” ์‚ฌ๋ก€๊ฐ€ ํ™•์ธ๋œ๋‹ค [7, 8]. +- **Frontend ํŒŒ์‹ฑ ์œ„์น˜:** ๊ณต์‹์ ์ธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์€ `comfyui-frontend-package` ๋‚ด๋ถ€์˜ `src/scripts/metadata` ๊ฒฝ๋กœ์—์„œ ๊ตฌํ˜„ ๋ฐ ๊ด€๋ฆฌ๋˜๊ณ  ์žˆ๋‹ค [13]. +- **์ปค์Šคํ…€ ๋…ธ๋“œ ์—ฐ๋™:** `pythongosssss`์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋…ธ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ `workflow_templates`๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด JSON์„ ์ถ”์ถœํ•˜๋Š” ์ž‘์—… ํ๋ฆ„์ด ์กด์žฌํ•œ๋‹ค [15]. +- **์˜จ๋ผ์ธ ์ถ”์ถœ ๋„๊ตฌ:** `weirdwonderfulai.art` ๋“ฑ์—์„œ ์ œ๊ณตํ•˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ๊ธฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋“œ๋กญํ•œ PNG์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ JSON ํŒŒ์ผ๋กœ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [12, 16]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Serialization Formats (Frontend vs API).md b/10_Wiki/Topics/Comfyui/Serialization Formats (Frontend vs API).md new file mode 100644 index 00000000..08877a47 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Serialization Formats (Frontend vs API).md @@ -0,0 +1,113 @@ +--- +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) \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Serverless Deployment.md b/10_Wiki/Topics/Comfyui/Serverless Deployment.md new file mode 100644 index 00000000..3ea7d637 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Serverless Deployment.md @@ -0,0 +1,67 @@ +--- +id: serverless-deployment +title: "Serverless Deployment" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ", "API ๋ฐฐํฌ"] +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: ["new_pipeline.py", "pipeline.yaml", "fofr/any-comfyui-workflow"] +github_commit: "bc85382" +--- + +# [[Serverless Deployment]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ๋Š” ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ๋กœ์ง๋งŒ ๋‚จ๊ธด **API ํฌ๋งท JSON(Backend Format)**์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [1-4]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **API ํฌ๋งท JSON (workflow_api.json):** ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์‹คํ–‰์— ์ตœ์ ํ™”๋œ ์ŠคํŠธ๋ฆผ๋ผ์ธ๋“œ ๊ทธ๋ž˜ํ”„๋กœ, ๋…ธ๋“œ ์œ„์น˜๋‚˜ ํฌ๊ธฐ ๊ฐ™์€ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์˜ค์ง ๋…ธ๋“œ ํƒ€์ž…, ์ž…๋ ฅ๊ฐ’, ์—ฐ๊ฒฐ ์ •๋ณด๋งŒ์„ ํฌํ•จํ•œ๋‹ค [1, 4]. +2. **์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ (Serverless Endpoint):** GPU ๊ด€๋ฆฌ, ์˜คํ† ์Šค์ผ€์ผ๋ง, ํ”Œ๋žซํผ ์ตœ์ ํ™”๊ฐ€ ํฌํ•จ๋œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ์ง€์ ์œผ๋กœ, ์‚ฌ์šฉ์ž๋Š” ์ธํ”„๋ผ ๊ด€๋ฆฌ ์—†์ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค [3]. +3. **์ž…๋ ฅ ์˜ค๋ฒ„๋ผ์ด๋“œ (Input Overrides):** ๋ฐฐํฌ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ”„๋กฌํ”„ํŠธ, ์‹œ๋“œ, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ๋“ฑ ํŠน์ • ํŒŒ๋ผ๋ฏธํ„ฐ๋งŒ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [5, 6]. +4. **์ข…์†์„ฑ ํŒจํ‚ค์ง• (Dependency Packaging):** ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ, ๋ชจ๋ธ ๊ฐ€์ค‘์น˜, Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„์ปค ์ด๋ฏธ์ง€๋‚˜ YAML ์„ค์ •์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค [7, 8]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Bifurcation(์ด๋ถ„ํ™”) ํŒจํ„ด:** ์‚ฌ์šฉ์ž ํŽธ์ง‘์šฉ 'Frontend JSON'๊ณผ ์‹คํ–‰ ์ „์šฉ 'API JSON'์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋ฉฐ, API ์š”์ฒญ ์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ ํ›„์ž๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [1, 9, 10]. +- **Pipeline-as-Code:** ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰ ๋กœ์ง์„ Python ์Šคํฌ๋ฆฝํŠธ(`new_pipeline.py`)๋กœ, ํ™˜๊ฒฝ ์„ค์ •์„ YAML(`pipeline.yaml`)๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค [7]. +- **Remote Asset Referencing:** ๋กœ์ปฌ ํŒŒ์ผ์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  URL ์ฐธ์กฐ๋‚˜ ZIP/TAR ์••์ถ• ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต๊ธ‰ํ•œ๋‹ค [11, 12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +* **API ํฌ๋งท ํš๋“ ํ”„๋กœํ† ์ฝœ:** ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ JSON์„ ์–ป์œผ๋ ค๋ฉด ComfyUI ์„ค์ •(Settings) ๋ฉ”๋‰ด์—์„œ **'Enable Dev mode Options'**๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•œ๋‹ค [2, 11, 13, 14]. ์ดํ›„ ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” **'Save (API format)'** ๋˜๋Š” **'Export (API)'** ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค [2, 15]. +* **ํ”Œ๋žซํผ๋ณ„ ๋ฐฐํฌ ๋ฐฉ์‹:** + * **Mystic:** `pipeline.yaml`์— CUDA ๋ฐ Python ์˜์กด์„ฑ์„ ์ •์˜ํ•˜๊ณ , `new_pipeline.py`์—์„œ ComfyUI ์„œ๋ฒ„ ์‹œ์ž‘ ๋ฐ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ๋“œ ๋กœ์ง์„ ๊ตฌํ˜„ํ•œ๋‹ค [7, 8]. ๋„์ปค ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜์—ฌ Mystic ๊ณ„์ •์— ํ‘ธ์‹œํ•˜๋ฉด ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค [8, 16]. + * **Replicate:** `fofr/any-comfyui-workflow`์™€ ๊ฐ™์€ ๋ฒ”์šฉ ๋ชจ๋ธ์„ ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ์ „์šฉ API ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ Python/JavaScript ํด๋ผ์ด์–ธํŠธ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์ „์†กํ•œ๋‹ค [17-19]. + * **RunComfy:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ 'Serverless API (ComfyUI)'๋กœ ๋ฐฐํฌํ•˜๋ฉฐ, ํ”Œ๋žซํผ์ด ๋‚ด๋ถ€์ ์œผ๋กœ `workflow_api.json`์„ ์ €์žฅํ•˜๊ณ  API ํ˜ธ์ถœ ์‹œ ์˜ค๋ฒ„๋ผ์ด๋“œ ๊ฐ’๋งŒ ์ ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค [4, 6, 20]. +* **๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ํ†ต์‹ :** + * **์ž…๋ ฅ:** ์ด๋ฏธ์ง€ ์ž…๋ ฅ ์‹œ `Load Image (Base64)` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋‚ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ํฌํ•จํ•˜๊ฑฐ๋‚˜, URL์„ ํ†ตํ•ด ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์˜ ์ž์›์„ ์ฐธ์กฐํ•œ๋‹ค [11, 21]. + * **์ถœ๋ ฅ:** ๊ฒฐ๊ณผ๋ฌผ ํ™•์ธ์„ ์œ„ํ•ด `SaveImageWebsocket` ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น์†Œ์ผ“ ํ†ต์‹ ์œผ๋กœ ์ด๋ฏธ์ง€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ˆ˜์‹ ํ•˜๊ฑฐ๋‚˜, ์„œ๋ฒ„๋ฆฌ์Šค ํ”Œ๋žซํผ์˜ ์ถœ๋ ฅ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅ๋œ ํŒŒ์ผ์„ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค [21, 22]. +* **์ž๋™ํ™” ๋ฐ ๋ณ€ํ™˜ ๋„๊ตฌ:** `comfyui-workflow-to-api-converter-endpoint`๋ฅผ ์„ค์น˜ํ•˜๋ฉด `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ์ผ๋ฐ˜ `workflow.json`์„ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค [10, 23, 24]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +* **ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ํ‘œ์ค€ `workflow.json`์„ API ์—”๋“œํฌ์ธํŠธ(`prompt`)์— ์ง์ ‘ ์ „์†กํ•˜๋ฉด ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ•ด์„ํ•˜์ง€ ๋ชปํ•ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [10, 13]. +* **๊ฐ€๋…์„ฑ ์†์‹ค:** API JSON์€ ๋…ธ๋“œ ์œ„์น˜ ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฏ€๋กœ, ์ด๋ฅผ ๋‹ค์‹œ ComfyUI UI๋กœ ๋“œ๋ž˜๊ทธํ•˜๋ฉด ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ์ง„ '๋ผˆ๋Œ€๋งŒ ๋‚จ์€' ์ƒํƒœ๊ฐ€ ๋˜์–ด ํŽธ์ง‘์ด ๊ทน๋„๋กœ ์–ด๋ ต๋‹ค [25]. ๋”ฐ๋ผ์„œ ์›๋ณธ 'Full Workflow' JSON์„ ๋ฐ˜๋“œ์‹œ ๋ณ„๋„๋กœ ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค [25]. +* **์ข…์†์„ฑ ์ทจ์•ฝ์ :** ๋ฐฐํฌ๋œ ํ™˜๊ฒฝ์— ํ•„์š”ํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋ˆ„๋ฝ๋˜๋ฉด 'Red Boxes' ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `ComfyUI-Manager`๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ํ•ด๊ฒฐ์ด๋‚˜ ๋„์ปค ๊ธฐ๋ฐ˜์˜ ํ™˜๊ฒฝ ๊ตฌ์„ฑ์ด ํ•„์ˆ˜์ ์ด๋‹ค [8, 26, 27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +* **`new_pipeline.py`**: Mystic ํ”Œ๋žซํผ์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ํ•ต์‹ฌ ํŒŒ์ด์ฌ ํŒŒ์ผ๋กœ, ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ JSON ์›Œํฌํ”Œ๋กœ์šฐ์— ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—ญํ• ์„ ํ•œ๋‹ค [7, 22]. +* **`pipeline.yaml`**: Mystic ๋ฐฐํฌ ์‹œ CUDA ๋ฒ„์ „, Python ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ข…์†์„ฑ, ์˜คํ† ์Šค์ผ€์ผ๋ง ์„ค์ •์„ ํฌํ•จํ•˜๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์ด๋‹ค [7, 8]. +* **`fofr/any-comfyui-workflow`**: Replicate์—์„œ ์–ด๋–ค API ํฌ๋งท JSON์ด๋“  ์ˆ˜์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๋ฒ”์šฉ ์„œ๋ฒ„๋ฆฌ์Šค ๋ชจ๋ธ์ด๋‹ค [17, 19]. +* **GitHub Commit `bc85382`**: `comfyui-workflow-to-api-converter-endpoint`์—์„œ ์ฝค๋ณด ์œ„์ ฏ์˜ ๋Œ€์†Œ๋ฌธ์ž ํ‘œ๊ธฐ ์˜ค๋ฅ˜(์˜ˆ: True vs true)๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹คํŒจ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๊ธฐ๋ก์ด ํ™•์ธ๋œ๋‹ค [28, 29]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Steganography in Generative AI.md b/10_Wiki/Topics/Comfyui/Steganography in Generative AI.md new file mode 100644 index 00000000..b8fa0a74 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Steganography in Generative AI.md @@ -0,0 +1,62 @@ +--- +id: steganography-in-generative-ai +title: "Steganography in Generative AI" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์€๋‹‰", "Metadata Embedding"] +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-to-Python-Extension", "Comfy_UI_prompt_extractor", "comfyui_extractor.py", "exiftool"] +github_commit: "" +--- + +# [[Steganography in Generative AI]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์ƒ์„ฑํ˜• AI์˜ ๊ฒฐ๊ณผ๋ฌผ(์ด๋ฏธ์ง€) ๋‚ด๋ถ€์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ์ง(JSON)์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋กœ ์€๋‹‰ํ•จ์œผ๋กœ์จ, ์‹œ๊ฐ์  ์ž์‚ฐ๊ณผ ๊ทธ ์ œ์ž‘ ์ ˆ์ฐจ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ์™„๋ฒฝํ•œ ์žฌํ˜„์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๊ธฐ์ˆ  [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฃผ์ž… (Metadata Injection):** ComfyUI์˜ 'Save Image' ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ, ์ตœ์ข… ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ์ˆจ๊ฒจ์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ „์ฒด ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„, ์„ค์ • ๋ฐ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ž๋™์œผ๋กœ ํฌํ•จ์‹œํ‚ค๋Š” ํ”„๋กœ์„ธ์Šค [2, 4]. +- **PNG ์ฒญํฌ ๊ตฌ์กฐ (tEXt/zTXt Chunks):** PNG ํŒŒ์ผ ๊ทœ๊ฒฉ ๋‚ด์—์„œ ํ…์ŠคํŠธ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜๋œ ํŠน์ • ์˜์—ญ์œผ๋กœ, ComfyUI๋Š” ์ด๊ณณ์— 'workflow'(ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท)์™€ 'prompt'(API ํฌ๋งท)๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ์ €์žฅํ•จ [5]. +- **๋ฐ์ดํ„ฐ ํ”„๋ ˆ์ ˆ๋ฆฌํ‹ฐ (Metadata Fragility):** ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ์ผ๋ฐ˜ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(์˜ˆ: GIMP)๋ฅผ ๊ฑฐ์น  ๊ฒฝ์šฐ, ํŒŒ์ผ ์ตœ์ ํ™”๋‚˜ ๊ฐœ์ธ์ •๋ณด ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์ธ ์›Œํฌํ”Œ๋กœ์šฐ JSON์ด ์ œ๊ฑฐ๋˜์–ด ์žฌํ˜„์„ฑ์ด ์†Œ์‹ค๋˜๋Š” ํŠน์„ฑ [4-6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ณต๊ตฌ ํŒจํ„ด:** ์ด๋ฏธ์ง€ ํŒŒ์ผ์„ ComfyUI ์บ”๋ฒ„์Šค์— ์ง์ ‘ ๋Œ์–ด๋‹ค ๋†“์œผ๋ฉด ๋‚ด์žฅ๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์ฆ‰๊ฐ์ ์œผ๋กœ ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ์„ ๋ณต๊ตฌํ•˜๋Š” ์ง๊ด€์  ์ธํ„ฐํŽ˜์ด์Šค ํŒจํ„ด [2, 7]. +- **์ด์ค‘ ์ง๋ ฌํ™” ์ €์žฅ ์ „๋žต:** PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋‚ด์— ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ 'ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท'๊ณผ ์‹ค์ œ ์‹คํ–‰์„ ์œ„ํ•œ 'API/๋ฐฑ์—”๋“œ ํฌ๋งท'์„ ๋™์‹œ์— ์ €์žฅํ•˜์—ฌ ํ˜ธํ™˜์„ฑ์„ ๋†’์ž„ [5, 8]. +- **์‚ฌํ›„ ์ถ”์ถœ ๋ฐ ์ฃผ์ž… ํŒจํ„ด:** ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜์—ˆ๊ฑฐ๋‚˜ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€์—์„œ ๋กœ์ง์„ ์ถ”์ถœํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, `exiftool`์ด๋‚˜ ์ „์šฉ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ง„ ํƒœ๊ทธ์—์„œ JSON์„ ๋ถ„๋ฆฌํ•ด๋‚ด๋Š” ํŒจํ„ด [9, 10]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์ƒํƒœ๊ณ„์—์„œ ์Šคํ…Œ๊ฐ€๋…ธ๊ทธ๋ž˜ํ”ผ๋Š” ์ฃผ๋กœ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€(PNG, WebP ๋“ฑ) ๋‚ด๋ถ€์— ์›Œํฌํ”Œ๋กœ์šฐ์˜ "์†Œ์Šค ์ฝ”๋“œ"์— ํ•ด๋‹นํ•˜๋Š” JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ˆจ๊ธฐ๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค [1, 2]. + +- **์ €์žฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ๋Œ€๋ถ€๋ถ„์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋Š” `Save Image` ๋…ธ๋“œ์—์„œ ์ข…๋ฃŒ๋˜๋ฉฐ, ์ด ๋…ธ๋“œ๊ฐ€ ๊ตฌ๋™๋  ๋•Œ ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€์˜ ๋น„๊ฐ€์‹œ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์— ์ „์ฒด ๋…ธ๋“œ ๋ ˆ์ด์•„์›ƒ, ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ, ์ž…๋ ฅ๊ฐ’, ๋ชจ๋ธ ์„ค์ • ๋“ฑ์„ ์ฃผ์ž…ํ•œ๋‹ค [2, 4]. ์ด๋Š” ๋ณ„๋„์˜ ํŒŒ์ผ ์—†์ด ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ฐฑ์—… ๋˜๋Š” ๊ณต์œ  ๋งค์ฒด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [4]. +- **๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ์„ธ๋ถ„ํ™”:** PNG ํŒŒ์ผ ๋‚ด์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉฐ, ์—ฌ๊ธฐ์— ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์ด ์ €์žฅ๋œ๋‹ค. ํ•˜๋‚˜๋Š” UI ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ **Frontend Format(workflow.json)**์ด๋ฉฐ, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์ œ๋œ **API Format(prompt/workflow_api.json)**์ด๋‹ค [5]. +- **์ถ”์ถœ ๊ธฐ์ˆ :** ์ด๋ฏธ์ง€์—์„œ ์€๋‹‰๋œ ๋กœ์ง์„ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•ด `exiftool -b -workflow input.png > workflow.json`๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ง„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์˜์—ญ์—์„œ JSON ์ŠคํŠธ๋ง์„ ๋ถ„๋ฆฌํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค [9]. ๋˜ํ•œ `ComfyUI-to-Python-Extension`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์ƒ์„ฑ๋œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ €์žฅํ•˜๋Š” ์ด๋ฏธ์ง€์— ํ”„๋ŸฐํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ์‹œ์ผœ ๋‹ค์‹œ UI๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค [11]. +- **ํ•œ๊ณ„์ :** ์ด๋Ÿฌํ•œ ์Šคํ…Œ๊ฐ€๋…ธ๊ทธ๋ž˜ํ”ผ ๋ฐฉ์‹์€ ๋งค์šฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์ด๋ฏธ์ง€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์˜จ๋ผ์ธ ํ”Œ๋žซํผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ์ •์ฑ…์— ์ทจ์•ฝํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค๋  ์œ„ํ—˜์ด ์ƒ์กดํ•œ๋‹ค [5, 7]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •๋ณด์˜ ๋ถˆ์™„์ „์„ฑ:** ์ด๋ฏธ์ง€ ์ž„๋ฒ ๋”ฉ ๋ฐฉ์‹(์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•)์€ ๊ฐ„ํŽธํ•˜์ง€๋งŒ, ๋•Œ๋•Œ๋กœ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€๋œ ๋…ธ๋“œ๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ผ๋ถ€ ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ณด๊ณ ๋˜์–ด, ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ JSON ํŒŒ์ผ ์ €์žฅ(๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•)์ด ๊ถŒ์žฅ๋œ๋‹ค [4]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด, ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์— ์ €์žฅ๋œ ๊ตฌ๋ฒ„์ „์˜ JSON ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์˜ ComfyUI์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [7]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **exiftool ๊ธฐ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ถ”์ถœ:** `exiftool -b -workflow input.png` ๋ช…๋ น์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๋‚ด์˜ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ์ €์žฅ๋œ JSON์„ ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•จ [9, 10]. +- **ComfyUI-to-Python-Extension:** ์ƒ์„ฑ๋œ .py ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ์ €์žฅ๋˜๋Š” ์ด๋ฏธ์ง€์— ํ”„๋ŸฐํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด, ๊ฒฐ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ UI๋กœ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜์—ฌ ์žฌํŽธ์ง‘ ๊ฐ€๋Šฅ [11]. +- **Weird Wonderful AI Art (์ถ”์ถœ๊ธฐ):** ์›น ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋ฐ˜์œผ๋กœ PNG ํŒŒ์ผ์—์„œ JSON ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ถ”์ถœํ•ด์ฃผ๋Š” ์ „์šฉ ์„œ๋น„์Šค ๋„๊ตฌ [12, 13]. +- **Comfy_UI_prompt_extractor:** ์ด๋ฏธ์ง€์—์„œ ๊ธ์ • ํ”„๋กฌํ”„ํŠธ, API ๊ทธ๋ž˜ํ”„, UI ๋ ˆ์ด์•„์›ƒ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ JSON ํŒŒ์ผ๋กœ ์ผ๊ด„ ์ƒ์„ฑํ•˜๋Š” CLI ๋„๊ตฌ [9, 10]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Subgraph.md b/10_Wiki/Topics/Comfyui/Subgraph.md new file mode 100644 index 00000000..a222cac9 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Subgraph.md @@ -0,0 +1,62 @@ +--- +id: subgraph +title: "Subgraph" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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"] +github_commit: "bc85382" +--- + +# [[Subgraph]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Subgraph๋Š” ๋ณต์žกํ•œ ComfyUI ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์บก์Аํ™”ํ•˜๊ณ  ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ๊ด€๋ฆฌ ๋ฐ ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ณต์‹ ๊ธฐ๋Šฅ์ด๋‹ค. [1-3] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๊ทธ๋ž˜ํ”„ ์บก์Аํ™” (Encapsulation):** ๋ณต์žกํ•œ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ํ•˜๋‚˜์˜ ์ƒ์œ„ ๋…ธ๋“œ ๋‹จ์œ„๋กœ ๋ฌถ์–ด ์›Œํฌํ”Œ๋กœ์šฐ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ๊ด€๋ฆฌ ์ง€์ ์„ ๋‹จ์ˆœํ™”ํ•œ๋‹ค. [2, 3] +2. **์ค‘์ฒฉ ๊ตฌ์กฐ ์ง€์› (Nested Support):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€์— ๋˜ ๋‹ค๋ฅธ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋ฅผ ํฌํ•จํ•˜๋Š” ๊ณ„์ธต์  ๊ตฌ์กฐ ์„ค๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. [3] +3. **์ž…๋ ฅ ์Šฌ๋กฏ ๋งคํ•‘ (Slot Mapping):** ์ƒ์œ„ ๋…ธ๋“œ์˜ ์ž…๋ ฅ ์œ„์น˜์™€ ๋‚ด๋ถ€ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ •์˜ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ •ํ™•ํžˆ ์ผ์น˜์‹œํ‚ค๋Š” ๋™๊ธฐํ™” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํฌํ•จํ•œ๋‹ค. [4] +4. **์‹คํ–‰ ๋ชจ๋ธ ํ†ตํ•ฉ:** ๋…ธ๋“œ ์‹คํ–‰ ์‹œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฅผ ์ „์ฒด ์‹คํ–‰ ๋ฆฌ์ŠคํŠธ(Execution List)์˜ ์ผ๋ถ€๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. [5] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋งํฌ ID ์ถฉ๋Œ ๋ฐฉ์ง€ ํŒจํ„ด:** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€์˜ ๋งํฌ ID๊ฐ€ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋งํฌ ID์™€ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ๋…๋ฆฝ์ ์ธ ID ํ• ๋‹น ์ฒด๊ณ„๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. [4] +- **API ๋ณ€ํ™˜ ์ตœ์ ํ™”:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ์ „์šฉ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ, ์„œ๋ธŒ๊ทธ๋ž˜ํ”„์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ์˜ ๋…ธ๋“œ ์ž…๋ ฅ ์ฐธ์กฐ ๋ฐฉ์‹์œผ๋กœ ์ŠคํŠธ๋ฆผ๋ผ์ด๋‹ํ•œ๋‹ค. [3, 4] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +- **๊ณต์‹ ๋ฆด๋ฆฌ์Šค ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค:** Subgraph๋Š” ComfyUI์˜ ๊ณต์‹ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฆด๋ฆฌ์Šค๋˜์—ˆ์œผ๋ฉฐ, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ€์ด๋“œ์˜ "Interface Guide" ์„น์…˜์—์„œ ์ฃผ์š” ๊ธฐ๋Šฅ์œผ๋กœ ๋‹ค๋ฃจ์–ด์ง„๋‹ค. [1, 2] +- **์‹คํ–‰ ์—”์ง„๊ณผ์˜ ์ƒํ˜ธ์ž‘์šฉ:** ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์—”์ง„์€ `get_output_data` ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ UI ๊ด€๋ จ ์ถœ๋ ฅ๊ณผ ํ•จ๊ป˜ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„์˜ ์กด์žฌ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. [5] +- **์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ ํ™œ์šฉ:** ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž๋Š” "Subgraph blueprints" ๊ทœ๊ฒฉ์„ ํ™œ์šฉํ•˜์—ฌ ํŠน์ • ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. [6] +- **JSON ๋ณ€ํ™˜ ์‹œ์˜ ๊ธฐ์ˆ ์  ์ฒ˜๋ฆฌ:** + - ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€์˜ ๋งํฌ ID๊ฐ€ ์™ธ๋ถ€ ์›Œํฌํ”Œ๋กœ์šฐ์™€ ์ถฉ๋Œํ•  ๊ฒฝ์šฐ ์ž…๋ ฅ ์—ฐ๊ฒฐ์ด ์†Œ์‹ค๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด, ์ด๋ฅผ ๊ฒฉ๋ฆฌํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์ด ํ•„์ˆ˜์ ์ด๋‹ค. [4] + - ์™ธ๋ถ€ ๋…ธ๋“œ์˜ ์Šฌ๋กฏ ์œ„์น˜์™€ ์‹ค์ œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ •์˜ ๋‚ด์˜ ์ž…๋ ฅ ์Šฌ๋กฏ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์ด๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ •์ด ํฌํ•จ๋œ๋‹ค. [4] + - ์ค‘์ฒฉ๋œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์žฌ๊ท€์ ์ธ ๋ณ€ํ™˜ ๊นŠ์ด ์ œํ•œ(์˜ˆ: 100ํšŒ)์„ ๋‘์–ด ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์•ˆ์ •์„ฑ์„ ํ™•๋ณดํ•œ๋‹ค. [3] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **API ํ˜ธํ™˜์„ฑ ์ด์Šˆ:** ์ดˆ๊ธฐ์—๋Š” ์„œ๋ธŒ๊ทธ๋ž˜ํ”„๊ฐ€ ํฌํ•จ๋œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋‚ด๋ถ€ ๋งํฌ ID ์ถฉ๋Œ์ด๋‚˜ ์Šฌ๋กฏ ๋งคํ•‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋‚˜, ์ดํ›„ `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ํˆด์„ ํ†ตํ•ด ์ด๋Ÿฌํ•œ ๊ธฐ์ˆ ์  ๊ฒฐํ•จ๋“ค์ด ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. [4, 7] +- **๋ฒ„์ „๋ณ„ ๊ธฐ๋Šฅ ์ฐจ์ด:** V2.09 ๋ฒ„์ „์—์„œ ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ž…๋ ฅ ์Šฌ๋กฏ ๋งคํ•‘ ๋ฐฉ์‹์ด ๊ฐœ์„ ๋˜๋Š” ๋“ฑ ์ง€์†์ ์ธ ์ŠคํŽ™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ๋‹ค. [4] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint (V2.09):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ •์˜์™€ ์™ธ๋ถ€ ๋…ธ๋“œ ๊ฐ„์˜ ์ž…๋ ฅ ์Šฌ๋กฏ ๋งคํ•‘ ์œ„์น˜๊ฐ€ ๋ถˆ์ผ์น˜ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค. [4] +- **comfyui-workflow-to-api-converter-endpoint (V2.07):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ๋‚ด๋ถ€ ๋งํฌ ID์™€ ์ „์ฒด ์›Œํฌํ”Œ๋กœ์šฐ ๋งํฌ ID ๊ฐ„์˜ ์ถฉ๋Œ๋กœ ์ธํ•œ ์ž…๋ ฅ ์—ฐ๊ฒฐ ์†Œ์‹ค ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค. [4] +- **comfyui-workflow-to-api-converter-endpoint (V2.02):** ์„œ๋ธŒ๊ทธ๋ž˜ํ”„ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ ์ผ๋ฐ˜์ ์ธ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ๋‹ค. [7] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** 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. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Visual Programming Environment.md b/10_Wiki/Topics/Comfyui/Visual Programming Environment.md new file mode 100644 index 00000000..a0b0ae12 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Visual Programming Environment.md @@ -0,0 +1,114 @@ +--- +id: visual-programming-environment +title: "Visual Programming Environment" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ", "Node-based Interface"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Visual Programming"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "ComfyUI/custom_nodes/ComfyUI-Manager" + - "ComfyUI-WorkflowGenerator (Commit: 82df278)" + - "comfyui-workflow-to-api-converter-endpoint (Commit: bc85382)" + - "comfyui_to_python.py" + - "/workflow/convert" + - "workflow_api.json" +github_commit: "82df278, bc85382" +--- + +# [[Visual Programming Environment]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI๋Š” ์ƒ์„ฑํ˜• AI์˜ ๋ณต์žกํ•œ ํŒŒ์ดํ”„๋ผ์ธ์„ ๋…ธ๋“œ ๊ธฐ๋ฐ˜์˜ ์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)๋กœ ์ถ”์ƒํ™”ํ•˜์—ฌ, ์ฝ”๋“œ ์—†์ด ๋กœ์ง์„ ์„ค๊ณ„ํ•˜๊ณ  ์ด๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ง๋ ฌํ™”ํ•˜์—ฌ ์‹คํ–‰ ๋ฐ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ณ ์ˆ˜์ค€ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์œ ํ–ฅ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„ (DAG):** ๋ชจ๋ธ ๋กœ๋”, ์ƒ˜ํ”Œ๋Ÿฌ, ์ธ์ฝ”๋” ๋“ฑ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋…ธ๋“œ๋“ค์ด ๋งํฌ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ์ •์˜ํ•˜๋Š” ๊ตฌ์กฐ์  ํ† ๋Œ€์ด๋‹ค [1, 4]. +2. **์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ (Procedural Framework):** ์ •์ ์ธ ๋ฉ”๋‰ด ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ด ์ฝ˜ํ…์ธ ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ '์†Œ์Šค ์ฝ”๋“œ' ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [3, 5]. +3. **ํฌ๋งท์˜ ์ด์›ํ™” (Bifurcation of Formats):** ์‹œ๊ฐ์  ํŽธ์ง‘์„ ์œ„ํ•œ **Frontend JSON**๊ณผ ์„œ๋ฒ„ ์‹คํ–‰ ๋ฐ API ํ˜ธ์ถœ์— ์ตœ์ ํ™”๋œ **API JSON**์œผ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์šด์˜๋œ๋‹ค [6-8]. +4. **์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „ (Execution Model Inversion):** ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ๊ฑฐ๊พธ๋กœ ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•จ์œผ๋กœ์จ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค [9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ ํŒจํ„ด:** ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์˜ tEXt ๋˜๋Š” zTXt ์ฒญํฌ ๋‚ด์— ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ์‚ฝ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋˜๋„๋ก ์„ค๊ณ„ํ•œ๋‹ค [10, 11]. +- **API ์ตœ์ ํ™” ํŒจํ„ด:** ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์‹œ ๋ถˆํ•„์š”ํ•œ ์ขŒํ‘œ(pos), ํฌ๊ธฐ(size), ๊ทธ๋ฃน ๋“ฑ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์ฐธ์กฐ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‹จ์ˆœํ™”ํ•œ๋‹ค [6, 8, 12]. +- **์˜์กด์„ฑ ํ•ด๊ฒฐ ํŒจํ„ด:** ์›Œํฌํ”Œ๋กœ์šฐ JSON ๋‚ด `class_type`์„ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ์ž๋™์œผ๋กœ ์„ค์น˜๋ฅผ ์œ ๋„ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [13, 14]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI๋Š” ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์œผ๋กœ์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณต์žกํ•œ ์ˆ˜ํ•™์  ์ดํ•ด๋‚˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด๋„ ์ •๊ตํ•œ ์ƒ์„ฑ AI ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š”๋‹ค [2]. ์ด ํ™˜๊ฒฝ์˜ ํ•ต์‹ฌ์€ ๋ชจ๋“  ์ž‘์—… ๋‹จ์œ„๊ฐ€ **๋…ธ๋“œ(Node)**๋กœ ์ •์˜๋œ๋‹ค๋Š” ์ ์ด๋ฉฐ, ์ด ๋…ธ๋“œ๋“ค์€ ํŠน์ • ์Šฌ๋กฏ(Slot)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค [4, 15]. + +**JSON ์ง๋ ฌํ™” ์•„ํ‚คํ…์ฒ˜** +- **์Šคํ‚ค๋งˆ ๊ทœ๊ฒฉ:** ComfyUI JSON Schema v1.0(Draft-07 ์‚ฌ์–‘)์„ ๋”ฐ๋ฅด๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” `id`, `type`, `pos`, `size`, `widgets_values`, `inputs`, `outputs` ๋“ฑ์˜ ์†์„ฑ์„ ํ•„์ˆ˜์ ์œผ๋กœ ํฌํ•จํ•œ๋‹ค [16]. +- **์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๊ฒฝ๋กœ:** + - **์ˆ˜๋™ ์ƒ์„ฑ:** ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ `Ctrl + S`๋ฅผ ํ†ตํ•ด ์ง๋ ฌํ™”๋œ JSON ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค [17]. + - **์ž๋™ ์ถ”์ถœ:** ์ „์šฉ ๋„๊ตฌ(exiftool ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ JSON์„ ๋ณต์›ํ•œ๋‹ค [18, 19]. + - **ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ƒ์„ฑ:** Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ LLM์„ ํ†ตํ•ด ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [20, 21]. + +**์‹คํ–‰ ํ™˜๊ฒฝ์˜ ๋ถ„๋ฆฌ** +ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹(Litegraph ํ‘œ์ค€ ๊ธฐ๋ฐ˜)์€ ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์ธ๊ฐ„์˜ ํ˜‘์—…๊ณผ ์‹œ๊ฐ์  ํŽธ์ง‘์— ์ ํ•ฉํ•˜๋ฉฐ, API ํ˜•์‹์€ `/prompt` ์—”๋“œํฌ์ธํŠธ์— ์ฆ‰์‹œ ์ „๋‹ฌ ๊ฐ€๋Šฅํ•œ ์••์ถ•๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ํ˜•ํƒœ๋ฅผ ๋ค๋‹ค [6, 12, 22, 23]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ทจ์•ฝ์„ฑ:** ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์€ ํŽธ๋ฆฌํ•˜์ง€๋งŒ, ์†Œ์…œ ๋ฏธ๋””์–ด๋‚˜ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ๊ฑฐ(Stripped)๋  ์œ„ํ—˜์ด ํฌ๋‹ค [11, 24]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [25]. +- **API ํ˜ธํ™˜์„ฑ ์˜ค๋ฅ˜:** ํ‘œ์ค€ 'Save'๋กœ ์ƒ์„ฑ๋œ JSON์„ API๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ, ๋ฐ˜๋“œ์‹œ 'Dev mode'๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ 'Save (API Format)'์œผ๋กœ ์ถ”์ถœํ•ด์•ผ ํ•œ๋‹ค [26]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI/custom_nodes/ComfyUI-Manager:** ์›Œํฌํ”Œ๋กœ์šฐ JSON์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์‹ค์ œ ๊ตฌํ˜„์ฒด์ด๋‹ค [27, 28]. +- **ComfyUI-WorkflowGenerator (Commit: 82df278):** Qwen2.5 ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด๋ฅผ ComfyUI JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค [29, 30]. +- **comfyui-workflow-to-api-converter-endpoint (Commit: bc85382):** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ JS ๋กœ์ง์„ Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ์ผ๋ฐ˜ JSON์„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [26, 31]. +- **comfyui_to_python.py:** ์‹œ๊ฐ์  ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์ ์ธ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค [32]. +- **workflow_api.json:** RunComfy ๋“ฑ์˜ ํ”Œ๋žซํผ์—์„œ ์„œ๋ฒ„๋ฆฌ์Šค API ํ˜ธ์ถœ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ง๋ ฌํ™” ํŒŒ์ผ์ด๋‹ค [7]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ๋ถ„์„ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•จ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฐ ์˜์กด์„ฑ ๊ด€๊ณ„. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํฌ๋งท์˜ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์„ ๊ฒฐ์ •ํ•จ [6, 23]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ ๋ฐ ๊ทธ๋ฃน ๊ด€๋ฆฌ ๋ฐฉ์‹. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹œ๊ฐ์  ํ™˜๊ฒฝ์˜ ์„ค๊ณ„๋ฅผ ์ €์žฅํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š” ์ค‘๊ฐ„ ๋งค๊ฐœ์ฒด์ž„ [1, 33]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์ˆ˜๋™/์ž๋™ ์ƒ์„ฑ ๋ฐฉ๋ฒ• ๋ฐ ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : ๊ทธ๋ž˜ํ”„๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ๊ธฐ์ˆ ์ž„ [9]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ ์‹คํ–‰ ๋ฐฉ์ง€ ๋ฉ”์ปค๋‹ˆ์ฆ˜. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- JSON v1.0 ์Šคํ‚ค๋งˆ์—์„œ `widgets_values` ๋ฐฐ์—ด์˜ ์ˆœ์„œ๊ฐ€ ๋…ธ๋“œ ์‹คํ–‰ ์•ˆ์ •์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [16] +- ์ด๋ฏธ์ง€์˜ tEXt ์ฒญํฌ ์™ธ์— SVG ํฌ๋งท์„ ํ™œ์šฉํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์‹œ๊ฐํ™” ๋ฐ ๋ณด์กด ์ „๋žต์€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”๊ฐ€? [34, 35] +- `object_info.json`์„ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ์—์„œ ๋™์ ์œผ๋กœ ๋…ธ๋“œ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [36] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ ์‹œ 'Semantic Validation' ๋‹จ๊ณ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ž„๋ฒ ๋”ฉ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰์˜ ์ •ํ™•๋„ ํ•œ๊ณ„๋Š”? [37, 38] +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ ํ†ตํ•œ ์›Œํฌํ”Œ๋กœ์šฐ ์ด์‹์„ฑ(Portability) ํ•ด๊ฒฐ ๋ฐฉ์‹์˜ ์ƒ์„ธ ์•„ํ‚คํ…์ฒ˜๋Š”? [39] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹ค์‹œ๊ฐ„ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ [26]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ์ ์ธ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(Headless) ์ฒ˜๋ฆฌ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ [40, 41]. +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ(Red boxes)๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ณต๊ตฌ [13, 14]. +- **Learning Path:** ๊ธฐ๋ณธ ์˜ˆ์ œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ๋ถ„์„ํ•˜์—ฌ ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›๋ฆฌ๋ฅผ ์Šต๋“ [4, 42]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Generative AI Pipeline]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์‹œ๊ฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์‹ค์ œ AI ๋ชจ๋ธ ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ์ „ํ™˜๋˜๋Š” ์ „์ฒด ์ฃผ๊ธฐ. +- [[Metadata Forensics]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: AI ์ƒ์„ฑ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋””์ง€ํ„ธ ํฌ๋ Œ์‹ ๊ธฐ์ˆ  [18]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. Drawing on sources [1-186]. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Workflow API JSON (Backend Format).md b/10_Wiki/Topics/Comfyui/Workflow API JSON (Backend Format).md new file mode 100644 index 00000000..025c2af9 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Workflow API JSON (Backend Format).md @@ -0,0 +1,98 @@ +--- +id: workflow-api-json-(backend-format) +title: "Workflow API JSON (Backend Format)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API JSON", "Backend Format JSON"] +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-WorkflowGenerator", "ComfyUI-to-Python-Extension", "comfyui-workflow-to-api-converter-endpoint", "comfy_api_simplified"] +github_commit: "" +--- + +# [[Workflow API JSON (Backend Format)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ์‹คํ–‰ ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ ํ๋ฆ„๋งŒ์„ ์ •์ œํ•˜์—ฌ, ComfyUI ๋ฐฑ์—”๋“œ ์—”์ง„์˜ `/prompt` ์—”๋“œํฌ์ธํŠธ์—์„œ ์ฆ‰๊ฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ตœ์ ํ™”๋œ ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ํ˜•์‹์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๋ฐ•๋ฆฌ (Stripping UI Metadata):** ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ์ •๋ณด, ์ƒ‰์ƒ ๋“ฑ ์บ”๋ฒ„์Šค ์‹œ๊ฐํ™”๋ฅผ ์œ„ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ œ์™ธํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ถ•์†Œํ•˜๊ณ  ์ฒ˜๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค [1-4]. +- **์ž„๋ฒ ๋””๋“œ ๋งํฌ ๊ตฌ์กฐ (Embedded Link Representation):** ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ , ๋…ธ๋“œ ์ž…๋ ฅ ํ•„๋“œ ๋‚ด์— ์†Œ์Šค ๋…ธ๋“œ ID์™€ ์ถœ๋ ฅ ์Šฌ๋กฏ ๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ฐธ์กฐ(์˜ˆ: `[5, 6]`)ํ•˜์—ฌ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ๋‹ค [1, 2, 7, 8]. +- **๊ธฐ๋Šฅ์  ํ‚ค ๋งคํ•‘ (Functional Key Mapping):** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ ๋ฌธ์ž์—ด ํ‚ค(ID)๋กœ ์‹๋ณ„๋˜๋ฉฐ, `class_type`๊ณผ `inputs`๋ฅผ ํ•ต์‹ฌ ์†์„ฑ์œผ๋กœ ๋ณด์œ ํ•˜์—ฌ ๋ฐฑ์—”๋“œ ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ์ง์ ‘ ๋งคํ•‘๋œ๋‹ค [2, 9-11]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์ „ํ™˜ ํŒจํ„ด:** ์ˆ˜๋™ ์ƒ์„ฑ ์‹œ ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Enable Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ 'Save (API Format)' ๋ฒ„ํŠผ์„ ๋…ธ์ถœ์‹œํ‚ค๋Š” ๊ฒƒ์ด ํ•„์ˆ˜ ์ ˆ์ฐจ์ด๋‹ค [3, 12-15]. +- **๋™์  ํŒŒ๋ผ๋ฏธํ„ฐ ์ฃผ์ž… ํŒจํ„ด:** ์ƒ์„ฑ๋œ JSON ํ…œํ”Œ๋ฆฟ์„ ๋กœ๋“œํ•œ ํ›„, ํŠน์ • ๋…ธ๋“œ ID์˜ `inputs` ๋”•์…”๋„ˆ๋ฆฌ์— ์ ‘๊ทผํ•˜์—ฌ ์‹œ๋“œ(Seed), ํ”„๋กฌํ”„ํŠธ, ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ ๋“ฑ์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์žฌ์ „์†กํ•œ๋‹ค [9, 11, 16-18]. +- **๋ฐ์ดํ„ฐ ์ธ๋ผ์ธํ™” (Self-containment):** ์™ธ๋ถ€ ํŒŒ์ผ ์ฐธ์กฐ ๋Œ€์‹  "Load Image (Base64)" ๋…ธ๋“œ ๋“ฑ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ Base64 ๋ฌธ์ž์—ด๋กœ JSON ๋‚ด๋ถ€์— ์ง์ ‘ ํฌํ•จ์‹œ์ผœ ์ž๊ฐ€ ํฌํ•จ๋œ ์š”์ฒญ์„ ๊ตฌ์„ฑํ•œ๋‹ค [19, 20]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Workflow API JSON์€ ComfyUI์˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์ง๋ ฌํ™” ํ˜•์‹ ์ค‘ ํ•˜๋‚˜๋กœ, ์ฃผ๋กœ **ํ”„๋กœ๊ทธ๋žจ ๋ฐฉ์‹์˜ ์‹คํ–‰ ๋ฐ API ํ˜ธ์ถœ**์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ๋‹ค [1, 2]. ์ด ํ˜•์‹์€ Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ ํ˜•์‹(`workflow.json`)๊ณผ ๋‹ฌ๋ฆฌ ๋ฐฑ์—”๋“œ ์—”์ง„์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ƒํ•˜๋Š” ํ‰๋ฉดํ™”๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„(Flattened execution graph)๋ฅผ ์ œ๊ณตํ•œ๋‹ค [1, 12]. + +๊ธฐ์ˆ ์ ์œผ๋กœ API JSON์€ ๋ฃจํŠธ ํ‚ค๊ฐ€ ๋…ธ๋“œ ID์ด๊ณ  ๊ฐ’์ด ๋…ธ๋“œ ์ •์˜์ธ ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค [10]. ๊ฐ ๋…ธ๋“œ ์ •์˜์—๋Š” `class_type`, `inputs`, ๊ทธ๋ฆฌ๊ณ  ์„ ํƒ์ ์ธ `_meta` ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ๋‹ค [10]. ์—ฐ๊ฒฐ(Link)์€ ์ž…๋ ฅ ๋ฆฌ์ŠคํŠธ ๋‚ด์—์„œ `[์†Œ์Šค_๋…ธ๋“œ_ID, ์†Œ์Šค_์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ์ด๋Š” ํŠน์ • ์Šฌ๋กฏ(์˜ˆ: VAE Loader์˜ VAE ์ถœ๋ ฅ ์Šฌ๋กฏ)์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๋‹ค [7, 8]. + +์‹คํ–‰ ์‹œ ComfyUI ๋ฐฑ์—”๋“œ๋Š” ์ด JSON์„ ์ˆ˜์‹ ํ•˜์—ฌ '์‹คํ–‰ ๋ชจ๋ธ ์—ญ์ „(Execution Model Inversion)' ๋ฐฉ์‹์„ ์ ์šฉํ•œ๋‹ค [21]. ์ฆ‰, 'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ทธ๋ž˜ํ”„๋ฅผ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ถ”์ ํ•˜๋ฉฐ ํ•„์š”ํ•œ ์˜์กด์„ฑ๋งŒ ์‹๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค [21]. ์ด ๊ณผ์ • ๋•๋ถ„์— JSON ๋‚ด์— ์‹คํ–‰๊ณผ ๋ฌด๊ด€ํ•œ ๋…ธ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด๋„ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค [21]. ๋˜ํ•œ, API JSON์€ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ ํฌ๊ธฐ๊ฐ€ ๋งค์šฐ ์ž‘์•„ ๋ฒ„์ „ ๊ด€๋ฆฌ์™€ ์•„์นด์ด๋น™์— ์œ ๋ฆฌํ•˜๋‹ค [22, 23]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ฐ€๋…์„ฑ ๋ฐ ํŽธ์ง‘์„ฑ:** API JSON์€ ์‹คํ–‰์—๋Š” ์ตœ์ ํ™”๋˜์–ด ์žˆ์œผ๋‚˜, ComfyUI UI๋กœ ๋‹ค์‹œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•  ๊ฒฝ์šฐ ๋…ธ๋“œ ์œ„์น˜ ์ •๋ณด ๋“ฑ์ด ์—†์–ด ๋กœ์ง๋งŒ ๋‚จ์€ '๋ผˆ๋Œ€' ์ƒํƒœ๋กœ ๋กœ๋“œ๋˜์–ด ์‹œ๊ฐ์  ํŽธ์ง‘์ด ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์ง€์ ๋œ๋‹ค [24, 25]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ ์ด์ „ ๋ฒ„์ „์˜ API JSON ํ˜•์‹์ด ์ตœ์‹  ๋ฒ„์ „์˜ ๋ฐฑ์—”๋“œ ์—”์ง„์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค [26]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** PNG ์ด๋ฏธ์ง€์— ์ž„๋ฒ ๋“œ๋œ API JSON ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด์„œ ์†์‹ค๋˜๊ธฐ ์‰ฝ๋‹ค [27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํ”„๋ŸฐํŠธ์—”๋“œ ํฌ๋งท์„ ๋ฐฑ์—”๋“œ API ํฌ๋งท์œผ๋กœ ์„œ๋ฒ„ ์ธก์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [28, 29]. +- **ComfyUI-to-Python-Extension:** API ํฌ๋งท์˜ JSON์„ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•œ๋‹ค [30, 31]. +- **comfy_api_simplified:** ๋…ธ๋“œ ํƒ€์ดํ‹€์„ ๊ธฐ์ค€์œผ๋กœ API JSON์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ํ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” Python ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค [16, 18]. +- **Replicate ๋ฐ RunComfy ํ”Œ๋žซํผ:** ์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•œ API JSON์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค [4, 32, 33]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋ฐœ๊ฒฌ ์‹œ applied/validated๋กœ ์Šน๊ฒฉ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / Primary Source via NotebookLM) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜ ๋ฐ ๋ฐ์ดํ„ฐ ํ‘œ์ค€] +- [[Workflow JSON (Frontend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์˜ ์›ํ˜•์ด ๋˜๋Š” ์‹œ๊ฐ์  ์ž‘์—… ๋ฐ์ดํ„ฐ ํฌ๋งท์ด๋‹ค [1, 34]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: UI ๋ฐ์ดํ„ฐ ์œ ๋ฌด์— ๋”ฐ๋ฅธ ๋‘ ํฌ๋งท ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์™€ ๋ณ€ํ™˜ ํ•„์š”์„ฑ [2]. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ํ”„๋ŸฐํŠธ์—”๋“œ๊ฐ€ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š” ๊ทธ๋ž˜ํ”„ ์‹œ๊ฐํ™” ํ‘œ์ค€์ด๋‹ค [1, 34]. + +#### [๊ตฌํ˜„ ๋ฐ ์ž๋™ํ™” ๋„๊ตฌ] +- [[ComfyUI API Integration]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON์ด ์‹ค์ œ๋กœ ํ™œ์šฉ๋˜๋Š” ์ตœ์ข… ๋ชฉ์ ์ง€์ด๋‹ค [12, 35]. +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : API JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ด๋‹ค [36, 37]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ์ด ์—†๋Š” API JSON์„ ๋‹ค์‹œ UI์šฉ ํ”„๋ŸฐํŠธ์—”๋“œ JSON์œผ๋กœ ๋ณต์›ํ•  ๋•Œ, ๋…ธ๋“œ ๋ฐฐ์น˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€? +- ๋…ธ๋“œ ID๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์—์„œ, ํŠน์ • ๋…ธ๋“œ๋ฅผ ํƒ€์ดํ‹€(Title) ๊ธฐ๋ฐ˜์œผ๋กœ ์•ˆ์ •์ ์œผ๋กœ ์‹๋ณ„ํ•˜์—ฌ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ์ตœ์ ์˜ ํœด๋ฆฌ์Šคํ‹ฑ์€ ๋ฌด์—‡์ธ๊ฐ€? [16, 18] +- Execution Model Inversion ๊ฐ€์ด๋“œ์— ๋ช…์‹œ๋œ ๋ฐฑ์—”๋“œ ์—”์ง„์˜ ๋…ธ๋“œ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฉ์ง€ํ•˜๋Š”๊ฐ€? [21] +- ์ด๋ฏธ์ง€ ๋‚ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ํฌํ•จ๋œ API JSON์ด ์†์‹ค๋˜์—ˆ์„ ๋•Œ, ํ”ฝ์…€ ์ •๋ณด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ์ถ”๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๋Š”๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ํ™˜๊ฒฝ์—์„œ API JSON์˜ `_meta` ํ•„๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹คํ–‰ ๋กœ๊ทธ์™€ ๊ฒฐ๊ณผ๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [10] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ ์‹œ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด API JSON์˜ ํŠน์ • ๋…ธ๋“œ `inputs` ๊ฐ’์„ ๋ฎ์–ด์”Œ์›Œ ์„œ๋ฒ„์— POST ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค [9, 20]. +- **System Design:** ์„œ๋ฒ„๋ฆฌ์Šค AI ์„œ๋น„์Šค ๊ตฌ์ถ• ์‹œ, ์‚ฌ์šฉ์ž์˜ ์˜๋„๋ฅผ LLM์œผ๋กœ ํ•ด์„ํ•˜์—ฌ API JSON ๊ตฌ์กฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์„ ์„ค๊ณ„ํ•œ๋‹ค [38-40]. +- **Operation / Maintenance:** ComfyUI Manager๋ฅผ ํ†ตํ•ด JSON ๋‚ด์— ์ •์˜๋œ `class_type`์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์ž๋™ ์„ค์น˜ํ•˜์—ฌ ํ™˜๊ฒฝ์„ ๋™๊ธฐํ™”ํ•œ๋‹ค [36, 41]. +- **Learning Path:** ๊ธฐ๋ณธ ํ…์ŠคํŠธ-ํˆฌ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ๋ฅผ API ํ˜•์‹์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ , Python์—์„œ ์‹œ๋“œ๊ฐ’์„ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์‹คํ–‰ํ•ด๋ณด๋Š” ๊ฒƒ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•œ๋‹ค [20, 42]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing (SHA-256)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด ๋ชจ๋ธ ํŒŒ์ผ ์ด๋ฆ„ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ ๊ณ ์œ  ์‹๋ณ„ ๊ธฐ์ˆ  [43]. +- [[Base64 Image Encoding]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ์š”์ฒญ ์‹œ ํŒŒ์ผ ์—…๋กœ๋“œ ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ JSON์— ์ง๋ ฌํ™”ํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹ [19, 20]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Source references 29, 30, 32, 37, 38, 42, 43, 44, 45, 46, 71, 85, 86, 116, 124, 143, 144, 151, 152, 161, 162, 174, 192, 196 ๋“ฑ ํ™œ์šฉ) [1-4, 7-16, 18-21, 24, 28, 30, 31, 36, 43] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Workflow API JSON.md b/10_Wiki/Topics/Comfyui/Workflow API JSON.md new file mode 100644 index 00000000..e0154463 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Workflow API JSON.md @@ -0,0 +1,103 @@ +--- +id: workflow-api-json +title: "Workflow API JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["workflow_api.json", "Backend Format"] +duplicate_of: "" +source_trust_level: "B" +confidence_score: 0.95 +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: ["SethRobinson/comfyui-workflow-to-api-converter-endpoint", "pydn/ComfyUI-to-Python-Extension", "DanielPFlorian/ComfyUI-WorkflowGenerator", "deimos-deimos/comfy_api_simplified"] +github_commit: "" +--- + +# [[Workflow API JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +Workflow API JSON์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ์ˆœ์ˆ˜ ์‹คํ–‰ ๋กœ์ง๊ณผ ์—ฐ๊ฒฐ์„ฑ๋งŒ์„ ์ตœ์ ํ™”ํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ComfyUI์˜ ์„œ๋ฒ„ ์ธก ์‹คํ–‰ ์ธํ„ฐํŽ˜์ด์Šค์šฉ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฐฑ์—”๋“œ ์‹คํ–‰ ์ตœ์ ํ™” (Backend Optimization):** ํ”„๋ก ํŠธ์—”๋“œ์šฉ ์‹œ๊ฐ์  ์ •๋ณด(์œ„์น˜, ํฌ๊ธฐ, ์ƒ‰์ƒ)๋ฅผ ์ œ์™ธํ•˜๊ณ  ์˜ค์ง `/prompt` ์—”๋“œํฌ์ธํŠธ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ํฌํ•จํ•œ๋‹ค [1-3]. +- **๋…ธ๋“œ-์Šฌ๋กฏ ์—ฐ๊ฒฐ์„ฑ (Node-Slot Connectivity):** ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด ๋Œ€์‹  ๋…ธ๋“œ ์ž…๋ ฅ(inputs) ๋‚ด์— ์ง์ ‘ [์›๋ณธ ๋…ธ๋“œ ID, ์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค] ํ˜•์‹์œผ๋กœ ์—ฐ๊ฒฐ ์ •๋ณด๋ฅผ ์ž„๋ฒ ๋”ฉํ•œ๋‹ค [1, 4, 5]. +- **๊ณ ์œ  ์‹๋ณ„์ž ์ฒด๊ณ„ (Unique ID System):** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ ์ˆซ์žํ˜• ๋ฌธ์ž์—ด ํ‚ค(์˜ˆ: "5", "6")๋กœ ์‹๋ณ„๋˜๋ฉฐ, ์ด๋Š” ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ถ”์ ํ•˜๋Š” ๊ธฐ์ค€์ด ๋œ๋‹ค [1, 3, 6]. +- **์ง๋ ฌํ™” ์œ ์—ฐ์„ฑ (Serialization Flexibility):** ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” JSON ํ˜•์‹์„ ์ทจํ•˜๋ฉฐ, ๋Œ€๊ทœ๋ชจ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๋ณ„๊ฐœ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ ๋กœ์ง์˜ ๋ฐฐํฌ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์ž๋™ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [7-9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆฌํ•‘ (Metadata Stripping):** ์‹œ๊ฐ์  ํŽธ์ง‘์šฉ `workflow.json`์—์„œ API ํ˜ธ์ถœ์šฉ `workflow_api.json`์œผ๋กœ ์ „ํ™˜ ์‹œ `pos`, `size`, `groups`์™€ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ถ•์†Œํ•˜๊ณ  ์ฒ˜๋ฆฌ ํšจ์œจ์„ ๋†’์ธ๋‹ค [1, 2, 5]. +- **์‹คํ–‰ ๋ชจ๋ธ ์ธ๋ฒ„์ „ (Execution Model Inversion):** ์—”์ง„์ด 'Save Image'์™€ ๊ฐ™์€ ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ํ•„์ˆ˜ ์ข…์†์„ฑ๋งŒ ์‹คํ–‰ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋…ธ๋“œ๋Š” ๋ฌด์‹œํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ทจํ•œ๋‹ค [10]. +- **์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์ธ์ ์…˜ (Input Injection):** ์ž๋™ํ™” ์‹œ JSON ๋‚ด์˜ ํŠน์ • ๋…ธ๋“œ ID๋ฅผ ์ฐพ์•„ ์‹œ๋“œ(seed), ํ”„๋กฌํ”„ํŠธ(prompt), ๋˜๋Š” Base64 ์ธ์ฝ”๋”ฉ๋œ ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๊ต์ฒดํ•˜์—ฌ ์‹คํ–‰ํ•œ๋‹ค [6, 11-13]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ง๋ ฌํ™” ํ˜•์‹์€ ํฌ๊ฒŒ **ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท**๊ณผ **๋ฐฑ์—”๋“œ(API) ํฌ๋งท**์œผ๋กœ ์ด๋ถ„ํ™”๋œ๋‹ค [1, 2, 14]. API JSON์€ ์„œ๋ฒ„ ์ธก ์—”์ง„์ด ํ”„๋กฌํ”„ํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ๋…ผ๋ฆฌ ๊ทธ๋ž˜ํ”„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, `Litegraph` ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท๊ณผ ๋‹ฌ๋ฆฌ ๋งค์šฐ ๊ฐ„๊ฒฐํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค [1, 3, 15]. + +- **์ƒ์„ฑ ๋ฐฉ๋ฒ•:** ์‚ฌ์šฉ์ž๋Š” ์„ค์ • ๋ฉ”๋‰ด์—์„œ "Dev mode Options"๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ์ดํ›„ ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” "Save (API Format)" ๋˜๋Š” "Export (API)" ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ด ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [16-20]. +- **๊ตฌ์กฐ์  ํŠน์ง•:** ๋ฃจํŠธ ํ‚ค๋Š” ๋…ธ๋“œ ID์ด๋ฉฐ, ๊ฐ ๊ฐ’์€ `class_type`๊ณผ `inputs`๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค [6, 20]. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ๋…ธ๋“œ์˜ ์ž…๋ ฅ ํ•„๋“œ์— `[ "20", 1 ]`๊ณผ ๊ฐ™์€ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๋ฉด ์ด๋Š” 20๋ฒˆ ๋…ธ๋“œ์˜ 2๋ฒˆ ์Šฌ๋กฏ(์ธ๋ฑ์Šค 1) ์ถœ๋ ฅ์ด ์—ฐ๊ฒฐ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค [4]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ:** ComfyUI์—์„œ ์ƒ์„ฑ๋œ PNG ๋˜๋Š” WebP ์ด๋ฏธ์ง€์—๋Š” ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ์™€ API ํ”„๋กฌํ”„ํŠธ(JSON ํ˜•์‹)๊ฐ€ ๋ชจ๋‘ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt ๋˜๋Š” zTXt ์ฒญํฌ)๋กœ ์ €์žฅ๋˜์–ด ์žˆ์–ด, ์ด๋ฏธ์ง€ ์ž์ฒด๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ๋กœ์ง์„ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค [21-24]. +- **ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์˜ ์กฐ์ž‘:** ํŒŒ์ด์ฌ์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜, `comfy_api_simplified`์™€ ๊ฐ™์€ ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ ์ œ๋ชฉ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ์ด๋ฏธ์ง€๋ฅผ ์ž๋™ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค [6, 25-27]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๊ฐ€๋…์„ฑ vs ํŽธ์ง‘์„ฑ:** API ํฌ๋งท์€ ์‹คํ–‰์—๋Š” ํšจ์œจ์ ์ด๋‚˜, ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ๊ฒฐ์—ฌ๋˜์–ด ์žˆ์–ด ๋‹ค์‹œ ComfyUI ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ ๋ณด์ด๊ฑฐ๋‚˜ ๊ตฌ์กฐ ํŒŒ์•…์ด ์–ด๋ ค์šด '์Šค์ผˆ๋ ˆํ†ค' ์ƒํƒœ๊ฐ€ ๋œ๋‹ค [28-30]. +- **ํŒŒ์ผ ํฌ๋งท ํ˜ธํ™˜์„ฑ:** ComfyUI๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ์— ๋”ฐ๋ผ ๊ตฌ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค [31, 32]. +- **์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ:** JSON ์ž์ฒด์—๋Š” ๋กœ์ง๋งŒ ํฌํ•จ๋˜๋ฏ€๋กœ, ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ์ž๊ฐ€ ์‚ฌ์šฉํ•œ ๋™์ผํ•œ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด 'Red Box' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค [33, 34]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ JS ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„ ์ธก์—์„œ ์ผ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ API ํฌ๋งท์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค [28, 35]. +- **ComfyUI-to-Python-Extension:** `.json` ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋…๋ฆฝ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(headless) ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค [25, 36]. +- **ComfyUI-WorkflowGenerator:** LLM(Qwen2.5 ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์—ฐ์–ด ์„ค๋ช…์„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ API JSON ๊ทธ๋ž˜ํ”„๋กœ ํ•ฉ์„ฑํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•œ๋‹ค [37-39]. +- **fofr/any-comfyui-workflow (Replicate):** ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ JSON ๋ธ”๋กญ(blob)์„ ์ž…๋ ฅ๋ฐ›์•„ API๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค [40, 41]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ ๋ฐ ์ƒ์„ฑ ๋ฐฉ์‹ ํ™•์ธ๋จ) [42, 43] +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation / GitHub Repository / Expert Tutorial) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ํ”„๋ก ํŠธ์—”๋“œ JSON์ด ์‹œ๊ฐ์  ํ‘œํ˜„์„ ์œ„ํ•ด ์ฑ„ํƒํ•œ ๊ธฐ๋ฐ˜ ํ‘œ์ค€์ž„ [1, 15]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: API ํฌ๋งท์œผ๋กœ ์ „ํ™˜ ์‹œ ์ œ๊ฑฐ๋˜๋Š” UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ์  ๊ทผ๊ฑฐ [1, 2]. +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๊ทผ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ตฌ์กฐ์ž„ [7, 44]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ์„ฑ๊ณผ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๋…ผ๋ฆฌ์  ์›๋ฆฌ [7, 10]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋กœ๋“œ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ˆ„๋ฝ๋œ ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•„์ˆ˜ ๋„๊ตฌ์ž„ [33, 34, 45]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฐํฌ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ์ „๋žต [34, 46]. +- [[/prompt endpoint]] + - ์—ฐ๊ฒฐ ์ด์œ : API ํฌ๋งท JSON์ด ์ตœ์ข…์ ์œผ๋กœ ์ „์†ก๋˜์–ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋ชฉ์ ์ง€์ž„ [2, 16, 28]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ๊ฐ„์˜ ์‹ค์ œ ํ†ต์‹  ๋ฉ”์ปค๋‹ˆ์ฆ˜ [12, 13]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API JSON ๋‚ด์—์„œ ๋งํฌ ์ •๋ณด๋ฅผ ๋ณ„๋„ ๋ฐฐ์—ด์ด ์•„๋‹Œ ๋…ธ๋“œ ์ž…๋ ฅ(inputs) ๋‚ด์— ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ด ์‹คํ–‰ ํšจ์œจ์„ฑ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [1, 4] +- LLM ๊ธฐ๋ฐ˜์˜ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ ๋ชจ๋ธ์€ ํ•™์Šต ๋ฐ์ดํ„ฐ ์ดํ›„์— ์ถœ์‹œ๋œ ์ƒˆ๋กœ์šด ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ I/O ์Šคํ‚ค๋งˆ๋ฅผ ์–ด๋–ป๊ฒŒ ๋™์ ์œผ๋กœ ํ•™์Šตํ•˜๊ณ  ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? [44, 47, 48] +- `object_info.json`์„ ํ™œ์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋œ API JSON์˜ ์œ ํšจ์„ฑ์„ ๋Ÿฐํƒ€์ž„์— ๊ฒ€์ฆํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜๋Š”๊ฐ€? [20, 49] +- ์‹คํ–‰ ๋ชจ๋ธ ์ธ๋ฒ„์ „(Execution Model Inversion) ๊ณผ์ •์—์„œ ์กฐ๊ฑด๋ถ€ ๋ถ„๊ธฐ๋‚˜ ๋ฐ˜๋ณต ๋ฃจํ”„๊ฐ€ ํฌํ•จ๋œ ๋ณต์žกํ•œ ๊ทธ๋ž˜ํ”„์˜ ์ข…์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ถ”์ ํ•˜๋Š”๊ฐ€? [10] +- ๋ชจ๋ธ ํ•ด์‹ฑ(Model Hashing)์„ ํ†ตํ•ด ํ•˜๋“œ์ฝ”๋”ฉ๋œ ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ๋•Œ, ์„œ๋กœ ๋‹ค๋ฅธ ๋จธ์‹  ๊ฐ„์˜ ๋ชจ๋ธ ๋ฒ„์ „ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ธ๊ฐ€? [32, 46] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ๋ฐฐ๋„ˆ ๊ด‘๊ณ  ์ž๋™ ์ƒ์„ฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ• ์‹œ, ํ…œํ”Œ๋ฆฟ JSON์˜ ํŠน์ • ๋…ธ๋“œ(์˜ˆ: CLIPTextEncode)๋ฅผ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ๋กœ ์ˆ˜์ •ํ•˜์—ฌ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ์Œ [12, 50]. +- **System Design:** ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ(Mystic, Replicate ๋“ฑ)์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ฐฐํฌํ•  ๋•Œ UI ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•œ ์ตœ์ ํ™”๋œ API JSON์„ ๊ธฐ๋ณธ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์„ค์ •ํ•จ [5, 19, 51]. +- **Operation / Maintenance:** `comfyui-workflow-to-api-converter-endpoint`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ๋งŒ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ ์ง์ „์— API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•จ์œผ๋กœ์จ ๊ด€๋ฆฌ ํฌ์ธํŠธ์˜ ์ด์›ํ™”๋ฅผ ๋ฐฉ์ง€ํ•จ [29, 35]. +- **Learning Path:** ์ดˆ๋ณด์ž๋Š” ์‹œ๊ฐ์  ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ๋กœ์ง์„ ์ดํ•ดํ•˜๊ณ , ์ˆ™๋ จ์ž๋Š” ๊ฐœ๋ฐœ์ž ๋ชจ๋“œ๋ฅผ ํ†ตํ•ด ์ถ”์ถœ๋œ JSON์˜ ๋…ธ๋“œ ID์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์ฝ”๋”ฉ ๋ฐฉ์‹์˜ ์ œ์–ด๋กœ ์ „์ดํ•จ [52-54]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Base64 Image Encoding]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: API ์š”์ฒญ ์‹œ ๋กœ์ปฌ ํŒŒ์ผ ๊ฒฝ๋กœ ๋Œ€์‹  ์ด๋ฏธ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ JSON์— ์ง์ ‘ ํฌํ•จํ•˜๋Š” ๊ธฐ์ˆ ์  ๊ตฌํ˜„ ๋ฐฉ๋ฒ• [11, 13]. +- [[RAG (Retrieval-Augmented Generation)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ •์  ๋ชจ๋ธ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‹ค์‹œ๊ฐ„ ๋…ธ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ฐจ์„ธ๋Œ€ AI ์—์ด์ „ํŠธ ์„ค๊ณ„ [44]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. (Based on 18 sources) [1-200] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Workflow JSON v1.0 Schema.md b/10_Wiki/Topics/Comfyui/Workflow JSON v1.0 Schema.md new file mode 100644 index 00000000..3598132b --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Workflow JSON v1.0 Schema.md @@ -0,0 +1,117 @@ +--- +id: workflow-json-v1.0-schema +title: "Workflow JSON v1.0 Schema" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["ComfyUI JSON Schema", "Workflow v1.0 Specification"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•", "Schema", "JSON"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: + - "/specs/workflow_json" + - "/src/scripts/metadata" + - "comfyui-workflow-to-api-converter-endpoint" + - "ComfyUI-to-Python-Extension" +github_commit: "bc85382" +--- + +# [[Workflow JSON v1.0 Schema]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์ƒ์„ฑ ๋กœ์ง์„ **์œ ๋„ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG)**๋กœ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ์‹œ๊ฐ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ์‹คํ–‰ ์—”์ง„ ์‚ฌ์ด์˜ ์ƒํ˜ธ์šด์šฉ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ด์›์  ์ง๋ ฌํ™” ํฌ๋งท (Bifurcation of Formats):** ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ๋ ˆ์ด์•„์›ƒ ๋ณด์กด์„ ์œ„ํ•œ **Frontend Format**(workflow.json)๊ณผ ์„œ๋ฒ„ ์ธก ์‹คํ–‰์— ์ตœ์ ํ™”๋œ **Backend/API Format**(workflow_api.json)์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค [3-5]. +- **Litegraph ํ‘œ์ค€ ๊ธฐ๋ฐ˜:** ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์€ ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃนํ™” ๋“ฑ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค [3, 6]. +- **์Šฌ๋กฏ ๊ธฐ๋ฐ˜ ์—ฐ๊ฒฐ์„ฑ (Slot-based Connectivity):** ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ๊ณ ์œ ํ•œ ์ž…๋ ฅ/์ถœ๋ ฅ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ •์˜๋˜๋ฉฐ, API ํฌ๋งท์—์„œ๋Š” ์ด๋ฅผ ๋…ธ๋“œ ๋‚ด๋ถ€์— ์ธ๋ผ์ธ ์ฐธ์กฐ๋กœ ๋‚ด์žฅํ•œ๋‹ค [3, 7, 8]. +- **JSON Schema v1.0 (Draft-07):** ๊ธฐ์ˆ ์  ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด ํ•„์ˆ˜ ์†์„ฑ๊ณผ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ทœ์ •ํ•˜๋Š” ์ตœ์‹  ๊ณต์‹ ์‚ฌ์–‘์ด๋‹ค [9-11]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Metadata Redundancy ํŒจํ„ด:** PNG ํŒŒ์ผ ๋‚ด์— ์‹œ๊ฐ์  ํฌ๋งท(workflow)๊ณผ ์‹คํ–‰ ํฌ๋งท(prompt)์„ ๋™์‹œ์— ๋‚ด์žฅํ•˜์—ฌ, ์ด๋ฏธ์ง€ ํ•œ ์žฅ๋งŒ์œผ๋กœ ํŽธ์ง‘๊ณผ ์žฌ์‹คํ–‰์ด ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [12, 13]. +- **Execution Model Inversion:** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)์—์„œ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜์—ฌ ์‹คํ–‰์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹๋ณ„ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ๋ฐฐ์ œํ•œ๋‹ค [14]. +- **Node Functional Mapping:** API ํฌ๋งท์—์„œ ๋งํฌ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  `[๋…ธ๋“œID, ์Šฌ๋กฏ๋ฒˆํ˜ธ]` ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ๊ฐ„์†Œํ™”ํ•˜์—ฌ ์ „์†ก ํšจ์œจ๊ณผ ํŒŒ์‹ฑ ์†๋„๋ฅผ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [3, 15, 16]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +### 1. ๋…ธ๋“œ ๊ฐ์ฒด ์†์„ฑ (Node Object Properties) +v1.0 ์Šคํ‚ค๋งˆ์— ์ •์˜๋œ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐ ๋ Œ๋”๋ง์„ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์„ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค [8, 9]: +- **id:** ๊ทธ๋ž˜ํ”„ ๋‚ด ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณ ์œ  ์ •์ˆ˜ ๋˜๋Š” ๋ฌธ์ž์—ด [9]. +- **type (๋˜๋Š” class_type):** ๋…ธ๋“œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋ก๋œ ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๋งคํ•‘๋˜๋Š” ์‹๋ณ„์ž [9, 16]. +- **pos & size:** ์บ”๋ฒ„์Šค์ƒ์˜ ์ขŒํ‘œ ๋ฐ ํฌ๊ธฐ ์ •๋ณด๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด (API ํฌ๋งท์—์„œ๋Š” ์ œ๊ฑฐ๋จ) [9, 16]. +- **widgets_values:** ํ…์ŠคํŠธ ๋ฐ•์Šค, ์Šฌ๋ผ์ด๋” ๋“ฑ ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฐ์—ด [9, 15]. +- **order & mode:** ์‹คํ–‰/๋ Œ๋”๋ง ์šฐ์„ ์ˆœ์œ„ ๋ฐ ๋…ธ๋“œ์˜ ํ™œ์„ฑ ์ƒํƒœ(์˜ˆ: bypass)๋ฅผ ์ •์˜ํ•œ๋‹ค [8, 9]. + +### 2. ๊ทธ๋ž˜ํ”„ ์—ฐ๊ฒฐ ๊ตฌ์กฐ (Link and Slot Connectivity) +- **์—ฐ๊ฒฐ ์ •์˜:** ๋…ธ๋“œ์˜ `inputs` ๋ฐฐ์—ด์€ ์œ ์ž…๋˜๋Š” ์„ ์˜ ID๋ฅผ ์ฐธ์กฐํ•˜๋ฉฐ, `outputs` ๋ฐฐ์—ด์€ ์—ฌ๋Ÿฌ ํ•˜์œ„ ๋…ธ๋“œ๋กœ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ๋Š” ๋งํฌ ID๋“ค์˜ ๋ฐฐ์—ด์„ ํฌํ•จํ•œ๋‹ค [7]. +- **์Šฌ๋กฏ ์ธ๋ฑ์‹ฑ:** ํŠน์ • ๋…ธ๋“œ์˜ ์ถœ๋ ฅ(์˜ˆ: VAE Loader์˜ VAE ์ถœ๋ ฅ)์ด ์ •ํ™•ํžˆ ์–ด๋–ค ์Šฌ๋กฏ์—์„œ ์ƒ์„ฑ๋˜์–ด ์†Œ๋น„๋˜๋Š”์ง€ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค [7]. +- **API ํฌ๋งท์˜ ํŠน์ˆ˜์„ฑ:** `workflow_api.json`์€ ์‹œ๊ฐ์  ๋งํฌ ๋ฐฐ์—ด์„ ์ œ๊ฑฐํ•˜๊ณ , ๋…ธ๋“œ ์ž…๋ ฅ ํ•„๋“œ ๋‚ด์— ์ง์ ‘ `["๋…ธ๋“œID", ์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ๊ฐ’์„ ํ• ๋‹นํ•˜์—ฌ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„๋ฅผ ํ‰ํƒ„ํ™”(Flattening)ํ•œ๋‹ค [3, 15]. + +### 3. ๋ณด์กฐ ์Šคํ‚ค๋งˆ (object_info.json) +- ์‹คํ–‰ ์ค‘์ธ ComfyUI ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ ์นดํƒˆ๋กœ๊ทธ์ด๋‹ค [5, 17]. +- ๊ฐ ๋…ธ๋“œ๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ์ž…๋ ฅ ์œ ํ˜•, ๋ฒ”์œ„, ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฐ ํˆดํŒ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜์—ฌ ์™ธ๋ถ€ ๋„๊ตฌ์—์„œ JSON์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฒ€์ฆํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค [17-19]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ์†Œ์Šค์— ๋”ฐ๋ฅด๋ฉด ํ˜„์žฌ v1.0์ด ์ตœ์‹ ์ด์ง€๋งŒ, ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด 0.4 ๋ฒ„์ „ ๋“ฑ ์ด์ „ ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ํ™˜๊ฒฝ์—์„œ ์ •์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์ด ์ง€์ ๋œ๋‹ค [10, 11, 20]. +- **๋ฐ์ดํ„ฐ ํŒŒํŽธํ™”:** ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—์„œ ์ถ”์ถœํ•œ JSON์€ ์ข…์ข… ์ปค์Šคํ…€ ๋…ธ๋“œ ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ๊ฒฝ์šฐ ์บ”๋ฒ„์Šค์— 'Red Boxes' ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [21-23]. +- **API ํฌ๋งท์˜ ๊ฐ€๋…์„ฑ:** ์‹คํ–‰ ์ตœ์ ํ™”๋œ API JSON์€ ์‹œ๊ฐ์  ์ •๋ณด๊ฐ€ ๋ชจ๋‘ ์ œ๊ฑฐ๋œ 'Skeleton' ํ˜•ํƒœ์ด๋ฏ€๋กœ, ์ด๋ฅผ ๋‹ค์‹œ ComfyUI ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋“œ๋ž˜๊ทธํ•˜์—ฌ ํŽธ์ง‘ํ•˜๊ธฐ์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค [24, 25]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI ๊ณต์‹ ์‚ฌ์–‘:** `/specs/workflow_json` ๊ฒฝ๋กœ์—์„œ v1.0 ๊ทœ๊ฒฉ์„ ๊ณต์‹ ๊ด€๋ฆฌํ•œ๋‹ค [10]. +- **ํ”„๋ก ํŠธ์—”๋“œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ:** `ComfyUI_frontend/src/scripts/metadata`์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์‹ฑ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค [26]. +- **comfyui-workflow-to-api-converter-endpoint:** ์„œ๋ฒ„ ์ธก ํŒŒ์ด์ฌ ๋กœ์ง์„ ํ†ตํ•ด Frontend JSON์„ API JSON ๊ทœ๊ฒฉ์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™˜ํ•˜๋ฉฐ, `bc85382` ์ปค๋ฐ‹์—์„œ ์ฝค๋ณด ์œ„์ ฏ ๊ฐ’์˜ ์ •๊ทœํ™” ์ด์Šˆ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค [24, 27-29]. +- **ComfyUI-to-Python-Extension:** JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๋™์ผํ•œ ๋กœ์ง์˜ `.py` ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ v1.0 ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค [30, 31]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๊ธฐ๋ฐ˜์˜ ์ŠคํŽ™ ์ •์˜ ์™„๋ฃŒ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ณธ ์Šคํ‚ค๋งˆ๊ฐ€ ์ƒ์„ฑ ๋ฐฉ๋ฒ•๋ก ์˜ ๊ธฐ์ˆ ์  ๊ธฐ๋ฐ˜์ด ๋จ. +- [[Dev mode Options]] + - ์—ฐ๊ฒฐ ์ด์œ : ์Šคํ‚ค๋งˆ์˜ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ(Frontend/API) ์ค‘ API ํฌ๋งท์„ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์ „์ œ ์กฐ๊ฑด์ž„. + +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๋ Œ๋”๋ง ๋ฐฉ์‹์„ ๊ทœ์ •ํ•จ. +- [[Execution Model Inversion]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๊ทธ๋ž˜ํ”„๋ฅผ ํ•ด์„ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์ตœ์ ํ™” ์›๋ฆฌ์ž„. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ์Šคํ‚ค๋งˆ ๋‚ด์˜ `class_type`์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๋ณต๊ตฌํ•จ. +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ์ด์‹ํ•˜๋Š” ์‹ค์ œ ์‚ฌ๋ก€์ž„. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- API ํฌ๋งท์—์„œ ๋งํฌ๋ฅผ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ธ๋ผ์ธํ™”ํ•˜๋Š” ๋ฐฉ์‹์ด ์ˆœํ™˜ ์ฐธ์กฐ(Circular Reference) ๋ฐฉ์ง€์— ์–ด๋–ค ๊ธฐ์—ฌ๋ฅผ ํ•˜๋Š”๊ฐ€? +- `object_info.json`์˜ ์Šคํ‚ค๋งˆ ๋ฐ์ดํ„ฐ์™€ ์‹ค์ œ ๋…ธ๋“œ์˜ `INPUT_TYPES` ๋ฉ”์„œ๋“œ ์‚ฌ์ด์˜ ๋™๊ธฐํ™” ์‹คํŒจ ์‹œ ์–ด๋–ค ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? +- v1.0 ์Šคํ‚ค๋งˆ์—์„œ `widgets_values` ๋ฐฐ์—ด์˜ ์ˆœ์„œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•œ ์œ„์ ฏ ์ถ”๊ฐ€ ์‹œ ์–ด๋–ค ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š”๊ฐ€? +- PNG ํŒŒ์ผ์˜ `tEXt` ์ฒญํฌ ์šฉ๋Ÿ‰ ์ œํ•œ์ด ๋งค์šฐ ๊ฑฐ๋Œ€ํ•œ ์›Œํฌํ”Œ๋กœ์šฐ JSON(์˜ˆ: ์ˆ˜๋ฐฑ ๊ฐœ์˜ ๋…ธ๋“œ) ์ €์žฅ์— ํ•œ๊ณ„๋กœ ์ž‘์šฉํ•˜๋Š”๊ฐ€? +- `comfy-pack`๊ณผ ๊ฐ™์€ ๋„๊ตฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ ํ•ด์‹ฑ ๊ธฐ์ˆ ์ด JSON ์Šคํ‚ค๋งˆ ๋‚ด์—์„œ ์–ด๋–ป๊ฒŒ ํ‘œ์ค€ํ™”๋  ์ˆ˜ ์žˆ๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์™ธ๋ถ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Unity, Web App ๋“ฑ)์—์„œ ComfyUI ์„œ๋ฒ„์— ์ž‘์—…์„ ์š”์ฒญํ•  ๋•Œ API JSON์„ ์ƒ์„ฑํ•˜๊ณ  ์ „์†กํ•ด์•ผ ํ•œ๋‹ค [28, 32]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™”๋ฅผ ์œ„ํ•ด JSON ๋‚ด์˜ ํŠน์ • ๋…ธ๋“œ ID์™€ ์ž…๋ ฅ ํ•„๋“œ(์˜ˆ: ํ”„๋กฌํ”„ํŠธ, ์‹œ๋“œ)๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ๋กœ์ง์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค [33, 34]. +- **Operation / Maintenance:** ์ปค์Šคํ…€ ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ ์‹œ JSON ๋‚ด `class_type` ๋ช…์นญ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ํŒŒ์†๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค [20, 35]. +- **Learning Path:** ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋ฉด ์‹œ๊ฐ์  ํˆด ์—†์ด๋„ ์ˆœ์ˆ˜ ์ฝ”๋“œ๋กœ ์ƒ์„ฑ AI ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [30, 36]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ์Šคํ‚ค๋งˆ์— ์ƒˆ๋กœ์šด ๋…ธ๋“œ ํƒ€์ž…์„ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์—ฐ๊ตฌ. +- [[Metadata Stripping]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์†Œ์…œ ๋ฏธ๋””์–ด ๋ฐฐํฌ ์‹œ ์ด๋ฏธ์ง€ ๋‚ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์†์‹ค ๋Œ€์‘ ๋ฐฉ์•ˆ ๋ฐ ์™ธ๋ถ€ JSON ์ €์žฅ ์ „๋žต. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Workflow JSON.md b/10_Wiki/Topics/Comfyui/Workflow JSON.md new file mode 100644 index 00000000..0d8c3df6 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Workflow JSON.md @@ -0,0 +1,111 @@ +--- +id: workflow-json +title: "Workflow JSON" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Workflow API JSON", "Frontend 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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["ComfyUI/custom_nodes/ComfyUI-Manager", "ComfyUI/custom_nodes/ComfyUI-WorkflowGenerator", "ComfyUI/models/LLM/", "workflow_api.py"] +github_commit: "82df278, bc85382" +--- + +# [[Workflow JSON]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ Workflow JSON์€ ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๋น„์ˆœํ™˜ ์œ ํ–ฅ ๊ทธ๋ž˜ํ”„(DAG)๋ฅผ ์ง๋ ฌํ™”ํ•˜์—ฌ ๋ณต์žกํ•œ ์ƒ์„ฑํ˜• AI ํŒŒ์ดํ”„๋ผ์ธ์„ ํœด๋Œ€ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ž๋™ํ™”๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋งค๊ฐœ์ฒด์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **์ด๋ถ„ํ™”๋œ ์ง๋ ฌํ™” ํฌ๋งท:** ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ **Frontend ํฌ๋งท(workflow.json)**๊ณผ ์„œ๋ฒ„ ์ธก ์‹คํ–‰์— ์ตœ์ ํ™”๋œ **API ํฌ๋งท(workflow_api.json)**์œผ๋กœ ๋‚˜๋‰œ๋‹ค [4-6]. +- **Litegraph ๊ธฐ๋ฐ˜ ์Šคํ‚ค๋งˆ (v1.0):** ๋…ธ๋“œ ID, ์œ ํ˜•, ์œ„์น˜, ํฌ๊ธฐ, ์œ„์ ฏ ๊ฐ’ ๋ฐ ๋…ธ๋“œ ๊ฐ„์˜ ๋งํฌ ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๊ธฐ์ˆ  ๊ทœ๊ฒฉ์„ ๋”ฐ๋ฅธ๋‹ค [7-9]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž„๋ฒ ๋”ฉ ๊ธฐ์ˆ :** ์ƒ์„ฑ๋œ PNG๋‚˜ WebP ์ด๋ฏธ์ง€์˜ tEXt/zTXt ์ฒญํฌ ๋‚ด์— JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์‚ฝ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ํŒŒ์ผ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฑ์—… ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•œ๋‹ค [10, 11]. +- **์‹คํ–‰ ๋ชจ๋ธ ๋ฐ˜์ „ (Execution Model Inversion):** ์ตœ์ข… ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)๋กœ๋ถ€ํ„ฐ ์—ญ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [12]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **UI-to-API ์ •์ œ ํŒจํ„ด:** ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(์ขŒํ‘œ, ๊ทธ๋ฃน, ์ƒ‰์ƒ)๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ์ž…๋ ฅ์„ ์ง์ ‘์ ์ธ ๋…ธ๋“œ ์ฐธ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์‹คํ–‰ ํšจ์œจ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [4, 13]. +- **LLM ๊ธฐ๋ฐ˜ 3๋‹จ๊ณ„ ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ:** ์ž์—ฐ์–ด ์„ค๋ช… ํ•ด์„(Logical Synthesis) โ†’ ๋…ธ๋“œ ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์ฆ(Semantic Validation) โ†’ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JSON ์ปดํŒŒ์ผ(Graph Compilation) ๊ณผ์ •์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•œ๋‹ค [14-16]. +- **์˜์กด์„ฑ ๋ณต๊ตฌ ํœด๋ฆฌ์Šคํ‹ฑ:** JSON ๋‚ด `class_type`์„ ๋กœ์ปฌ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ComfyUI Manager๋ฅผ ํ†ตํ•ด ์ผ๊ด„ ์„ค์น˜๋ฅผ ์ œ์•ˆํ•œ๋‹ค [17, 18]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์ƒ์„ฑ์  AI ํ”„๋กœ์„ธ์Šค๋ฅผ ์ ˆ์ฐจ์  ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์ถ”์ƒํ™”ํ•œ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค [1, 19]. ์ด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ์ธ๊ฐ„์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•์‹์ด๋ฉฐ, ๋Œ€์šฉ๋Ÿ‰ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์™€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ณต์œ  ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค [2]. + +**1. ์ฃผ์š” ํฌ๋งท ์ƒ์„ธ ๋น„๊ต** [4, 5, 13, 20-22]: +- **Frontend JSON:** Litegraph ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋ฉฐ ๋…ธ๋“œ์˜ ์บ”๋ฒ„์Šค ์ขŒํ‘œ(`pos`), ํฌ๊ธฐ(`size`), ๊ทธ๋ฃน ์ •๋ณด ๋“ฑ ์‹œ๊ฐ์  ๋ ˆ์ด์•„์›ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ณด์กดํ•œ๋‹ค. ์ฃผ๋กœ ์‹œ๊ฐ์  ํŽธ์ง‘๊ณผ ๊ณต์œ ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. +- **API JSON:** `/prompt` ์—”๋“œํฌ์ธํŠธ ํ˜ธ์ถœ์„ ์œ„ํ•œ ์ •์ œ๋œ ํ˜•ํƒœ์ด๋‹ค. ์‹œ๊ฐ์  ์ •๋ณด๋Š” ์‚ญ์ œ๋˜๋ฉฐ, ๋…ธ๋“œ ๊ฐ„ ์—ฐ๊ฒฐ์€ ๋ณ„๋„์˜ ๋งํฌ ๋ฐฐ์—ด์ด ์•„๋‹Œ ๊ฐ ๋…ธ๋“œ ์ž…๋ ฅ๋ถ€์— `[๋…ธ๋“œ_ID, ์ถœ๋ ฅ_์Šฌ๋กฏ_์ธ๋ฑ์Šค]` ํ˜•ํƒœ๋กœ ์ง์ ‘ ์ž„๋ฒ ๋”ฉ๋œ๋‹ค. + +**2. ์ƒ์„ฑ ๋ฐ ํš๋“ ๋ฐฉ๋ฒ•** [23-27]: +- **์ˆ˜๋™ ๋‚ด๋ณด๋‚ด๊ธฐ:** GUI์˜ ์ œ์–ดํŒ์—์„œ `Ctrl + S`(Frontend)๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜, ์„ค์ •์—์„œ 'Dev mode' ํ™œ์„ฑํ™” ํ›„ 'Save (API format)' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค. +- **์ด๋ฏธ์ง€์—์„œ ์ถ”์ถœ:** ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์„ ์บ”๋ฒ„์Šค์— ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญํ•˜๋ฉด ๋‚ด์žฅ๋œ JSON์ด ๋กœ๋“œ๋œ๋‹ค. ๋Œ€๋Ÿ‰ ์ถ”์ถœ ์‹œ `exiftool`์ด๋‚˜ `ComfyUI-Workflow-Extractor` ๊ฐ™์€ CLI ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ์—์„œ ์ง์ ‘ ํŒŒ์‹ฑํ•  ์ˆ˜ ์žˆ๋‹ค. +- **LLM ์ƒ์„ฑ:** `Qwen2.5-14B` ๋“ฑ ๋ฏธ์„ธ ์กฐ์ •๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ "SDXL์šฉ ํ…์ŠคํŠธ-์ด๋ฏธ์ง€ ์›Œํฌํ”Œ๋กœ์šฐ ์ƒ์„ฑ"๊ณผ ๊ฐ™์€ ์ž์—ฐ์–ด ์ง€์‹œ๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ JSON ๊ทธ๋ž˜ํ”„๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [14, 28]. + +**3. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์กฐ์ž‘ ๋ฐ ์ž๋™ํ™”** [29-33]: +- ๊ฐœ๋ฐœ์ž๋Š” Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋…ธ๋“œ ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ”„๋กฌํ”„ํŠธ(`CLIPTextEncode`), ์‹œ๋“œ๊ฐ’, ์ฒดํฌํฌ์ธํŠธ ์ด๋ฆ„ ๋“ฑ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. +- `Comfy API Simplified`์™€ ๊ฐ™์€ ๋ž˜ํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ˆซ์ž ID ๋Œ€์‹  ๋…ธ๋“œ ์ œ๋ชฉ(Title)์„ ๊ธฐ์ค€์œผ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ธ๋‹ค. +- ์›Œํฌํ”Œ๋กœ์šฐ ์ž์ฒด๋ฅผ ์ˆœ์ˆ˜ Python ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์ด๋‚˜ ๋‹จ๋… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋‹ค [34]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI์˜ ์žฆ์€ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์กด์žฌํ•œ๋‹ค [35]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ, ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ ๋“ฑ์—์„œ ํŒŒ์ผ ์ตœ์ ํ™” ๊ณผ์ • ์ค‘ ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๊ฐ€ ํฌํ•จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์•„ JSON ๊ณต์œ  ์‹œ ์ฃผ์˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค [10]. +- **๋…ธ๋“œ ๋ช…์นญ ์ถฉ๋Œ:** ์„œ๋กœ ๋‹ค๋ฅธ ์ œ์ž‘์ž๊ฐ€ ๋งŒ๋“  ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ๋™์ผํ•œ ์ œ๋ชฉ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ์ ‘๊ทผ ์‹œ ์ˆซ์ž ID๋‚˜ ๊ณ ์œ  ํด๋ž˜์Šค ํƒ€์ž… ํ™•์ธ์ด ํ•„์ˆ˜์ ์ด๋‹ค [33]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **DanielPFlorian/ComfyUI-WorkflowGenerator:** LLM์„ ์ด์šฉํ•ด ์ž์—ฐ์–ด๋กœ JSON์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋กœ, ์ปค๋ฐ‹ `82df278`์—์„œ ๋ชจ๋ธ ๊ฒฝ๋กœ ํ•ด๊ฒฐ ๋ฐ ์ค‘๋ณต ๋“œ๋กญ๋‹ค์šด ์ˆ˜์ •์ด ์ด๋ฃจ์–ด์กŒ๋‹ค [36, 37]. +- **SethRobinson/comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก JS ๋กœ์ง์„ ์„œ๋ฒ„ ์ธก Python์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Frontend JSON์„ API ํฌ๋งท์œผ๋กœ ์ฆ‰์‹œ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค (์ปค๋ฐ‹ `bc85382`) [38, 39]. +- **ComfyUI Manager:** JSON ๋‚ด๋ถ€์˜ ๋…ธ๋“œ ์ •์˜๋ฅผ ๋ถ„์„ํ•˜์—ฌ `ComfyUI/custom_nodes` ๋””๋ ‰ํ† ๋ฆฌ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ž๋™ ์„ค์น˜ํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•œ๋‹ค [17, 40]. +- **Standalone Execution Scripts:** `sdxl_workflow_api.json`์„ ๋กœ๋“œํ•˜์—ฌ ๋…๋ฆฝ์ ์ธ Python ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” `WorkflowExecutor` ์‚ฌ๋ก€๊ฐ€ ํ™•์ธ๋˜์—ˆ๋‹ค [41, 42]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์™€ ๊ณต์‹ ๋ฌธ์„œ์˜ ๊ตฌ์กฐ๊ฐ€ ์ผ์น˜ํ•จ์„ ํ™•์ธ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ์‹ค์ œ ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ GitHub ์ €์žฅ์†Œ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Directed Acyclic Graph (DAG)]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋…ธ๋“œ ์—ฐ๊ฒฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” ์ˆ˜ํ•™์  ๊ธฐ๋ฐ˜์ž„ [1]. + - ์ดํ•ด ์ฆ์ง„: ์‹คํ–‰ ์ˆœ์„œ ๊ฒฐ์ • ๋ฐ ์˜์กด์„ฑ ํ•ด๊ฒฐ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํฌ๋งท์˜ ์‹œ๊ฐ์  ์ง๋ ฌํ™” ๊ทœ๊ฒฉ์ž„ [4, 20]. + - ์ดํ•ด ์ฆ์ง„: ๋…ธ๋“œ ์œ„์น˜, ํฌ๊ธฐ ๋ฐ ์‹œ๊ฐ์  ํ”Œ๋ž˜๊ทธ ์ €์žฅ ๋ฐฉ์‹์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Œ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋‚ด ์ •์˜๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ ์˜์กด์„ฑ์„ ํ•ด๊ฒฐํ•˜๋Š” ํ•ต์‹ฌ ๋„๊ตฌ์ž„ [17]. + - ์ดํ•ด ์ฆ์ง„: ๊ณต์œ ๋œ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์‹คํ–‰ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. +- [[Large Language Models (LLM)]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ž์—ฐ์–ด๋ฅผ JSON์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ตœ์‹  ์ž๋™ํ™” ๊ธฐ์ˆ ์˜ ํ•ต์‹ฌ์ž„ [14, 37]. + - ์ดํ•ด ์ฆ์ง„: '๋Œ€ํ™”ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์œผ๋กœ์˜ ์ง„ํ™” ๋ฐฉํ–ฅ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Œ. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Frontend JSON๊ณผ API JSON ์‚ฌ์ด์˜ ๋ณ€ํ™˜ ๊ณผ์ •์—์„œ ์†์‹ค๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์‹คํ–‰ ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋ฌด์—‡์ธ๊ฐ€? [4, 39] +- ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(tEXt/zTXt) ์™ธ์— ์›Œํฌํ”Œ๋กœ์šฐ ์ •๋ณด๋ฅผ ๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ๋” ๊ฒฌ๊ณ ํ•œ ์•„ํ‚คํ…์ฒ˜๋Š” ๋ฌด์—‡์ธ๊ฐ€? [10, 43] +- LLM ๊ธฐ๋ฐ˜ ์ƒ์„ฑ๊ธฐ์—์„œ 'ํ›ˆ๋ จ ์‹œ์  ์ดํ›„ ์ถœ์‹œ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ'์— ๋Œ€ํ•œ ํ™˜๊ฐ(Hallucination) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ œ์–ดํ•˜๋Š”๊ฐ€? [44, 45] +- Execution Model Inversion์ด ๋Œ€๊ทœ๋ชจ ๋ณตํ•ฉ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์ž์› ํšจ์œจ์„ฑ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ผ๋งˆ๋‚˜ ๊ฐœ์„ ํ•˜๋Š”๊ฐ€? [12] +- ๋ชจ๋ธ ํ•ด์‹ฑ(SHA-256)์„ JSON ๋‚ด์— ํฌํ•จ์‹œ์ผœ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‘œ์ค€ํ™”๋œ ๋ฐฉ์‹์€ ๋ฌด์—‡์ธ๊ฐ€? [46] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** Python์˜ `urllib`๊ณผ `websocket`์„ ์‚ฌ์šฉํ•˜์—ฌ `/prompt` ์—”๋“œํฌ์ธํŠธ์— JSON ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ „์†กํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ˆ˜์‹ ํ•จ [32]. +- **System Design:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ JSON์œผ๋กœ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•œ ์ž๋™ ํ…Œ์ŠคํŠธ ๋ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง [47]. +- **Operation / Maintenance:** ๋ชจ๋ธ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ์ด์ „ ์‹œ JSON ๋‚ด๋ถ€์˜ ํŒŒ์ผ๋ช…์„ ๋กœ์ปฌ ํ™˜๊ฒฝ์— ๋งž์ถฐ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ComfyUI Manager์˜ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•จ [43]. +- **Learning Path:** ๊ธฐ๋ณธ ์›Œํฌํ”Œ๋กœ์šฐ ํ…œํ”Œ๋ฆฟ ๋กœ๋“œ โ†’ ์‹œ๊ฐ์  ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ณ€๊ฒฝ โ†’ JSON ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ๊ตฌ์กฐ ๋ถ„์„ ์ˆœ์„œ๋กœ ํ•™์Šต ๊ถŒ์žฅ [48]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Model Hashing]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ํŒŒ์ผ์˜ ๊ธฐ๊ธฐ ๊ฐ„ ์ด๋™ ์‹œ ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ธฐ์ˆ ์  ๋Œ€์•ˆ [46]. +- [[Workspace Packaging (.cpack.zip)]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‹จ์ผ ํŒŒ์ผ์˜ ํ•œ๊ณ„๋ฅผ ๋„˜์–ด ๋ชจ๋ธ ํ•ด์‹œ์™€ ๋…ธ๋“œ ๋ฒ„์ „๊นŒ์ง€ ํŒจํ‚ค์ง•ํ•˜๋Š” ๋ฏธ๋ž˜ ํ‘œ์ค€ [43]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. [1, 6, 14, 24, 25, 29, 30, 32, 37, 41, 43, 49-52] \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Workflow.json (Frontend Format).md b/10_Wiki/Topics/Comfyui/Workflow.json (Frontend Format).md new file mode 100644 index 00000000..90ff47f5 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Workflow.json (Frontend Format).md @@ -0,0 +1,109 @@ +--- +id: workflow.json-(frontend-format) +title: "Workflow.json (Frontend Format)" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["Frontend JSON", "Full Workflow Export"] +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", "ComfyUI-to-Python-Extension", "ComfyUI-WorkflowGenerator"] +github_commit: "" +--- + +# [[Workflow.json (Frontend Format)]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +ComfyUI์˜ ์‹œ๊ฐ์  ํŽธ์ง‘ ์ƒํƒœ์™€ ๋…ธ๋“œ ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ **Litegraph ํ‘œ์ค€**์— ๋”ฐ๋ผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณด์กดํ•˜์—ฌ, ์ธ๊ฐ„์˜ ์žฌํŽธ์ง‘๊ณผ ๊ธฐ๊ณ„์  ์‹คํ–‰ ์‚ฌ์ด์˜ ๊ฐ€๊ต ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ „์ œ ์ƒํƒœ(Full State) ์Šค๋ƒ…์ƒท [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **Litegraph ํ‘œ์ค€ ์ค€์ˆ˜:** ComfyUI ์›น ์ธํ„ฐํŽ˜์ด์Šค์˜ ์บ”๋ฒ„์Šค ๋ ˆ์ด์•„์›ƒ์„ ์ •์˜ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Litegraph ํ˜•์‹์„ ๋”ฐ๋ฅด๋ฉฐ, ์‹œ๊ฐ์  ๋ Œ๋”๋ง์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ๋‹ค [1, 2]. +2. **์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(Visual Metadata):** ๋…ธ๋“œ์˜ ์ขŒํ‘œ(pos), ํฌ๊ธฐ(size), ๊ทธ๋ฃน ๊ตฌ์„ฑ, ์ƒ‰์ƒ, ๋…ธ๋“œ์˜ ์ถ•์†Œ(collapsed) ๋˜๋Š” ๊ณ ์ •(pinned) ์ƒํƒœ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ƒ์„ธํžˆ ๊ธฐ๋กํ•œ๋‹ค [1, 3, 4]. +3. **๋ช…์‹œ์  ๋งํฌ ๊ตฌ์กฐ(Explicit Links):** ๋…ธ๋“œ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ๋ณ„๋„์˜ `links` ๋ฐฐ์—ด ๋‚ด์—์„œ ๊ณ ์œ  ID๋ฅผ ๊ฐ€์ง„ ๋ช…์‹œ์  ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•˜์—ฌ ๊ทธ๋ž˜ํ”„์˜ ์‹œ๊ฐ์  ์—ฐ๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค [2, 3, 5]. +4. **๋…ธ๋“œ ์‹๋ณ„์ž(Node Identification):** ๊ฐ ๋…ธ๋“œ๋Š” ์ฃผ๋กœ ์ˆซ์ž ํ˜•ํƒœ์˜ ๊ณ ์œ  ๋ฌธ์ž์—ด ID(์˜ˆ: "1", "2")๋กœ ์‹๋ณ„๋˜๋ฉฐ, ์ด๋Š” ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๋ฐ UI ๋ Œ๋”๋ง์˜ ๊ธฐ์ค€์ด ๋œ๋‹ค [1, 2, 6]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Full UI Export ํŒจํ„ด:** ๋‹จ์ˆœํžˆ ์‹คํ–‰ ๋กœ์ง๋งŒ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…ํ•˜๋˜ ํ™˜๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์บ”๋ฒ„์Šค์˜ ๋ชจ๋“  ์ƒํƒœ๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค [7, 8]. +- **Metadata Embedding ํŒจํ„ด:** ์ƒ์„ฑ๋œ PNG ์ด๋ฏธ์ง€์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์— Frontend JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•˜์—ฌ ์ด๋ฏธ์ง€ ์ž์ฒด๊ฐ€ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐฑ์—… ํŒŒ์ผ ์—ญํ• ์„ ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค [9-11]. +- **์—ญ๋ฐฉํ–ฅ ์‹คํ–‰ ๋ชจ๋ธ(Execution Model Inversion):** JSON ๋‚ด์— ์ˆ˜๋งŽ์€ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ์‹คํ–‰ ์—”์ง„์€ ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)๋ถ€ํ„ฐ ์—ญ์ถ”์ ํ•˜์—ฌ ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋ฉฐ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋…ธ๋“œ๋Š” ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ณด์กด๋œ๋‹ค [12]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +Frontend Format์ธ `workflow.json`์€ ComfyUI์˜ ๊ธฐ๋ณธ ์ €์žฅ ํ˜•์‹์œผ๋กœ, ์‚ฌ์šฉ์ž๊ฐ€ ์›น ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๊ณต์œ ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [1, 2, 13]. + +### 1. ์ฃผ์š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ +- **nodes:** ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐœ๋ณ„ ๋…ธ๋“œ๋“ค์˜ ๋ฐฐ์—ด์ด๋‹ค. ๊ฐ ๋…ธ๋“œ ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค ํƒ€์ž…(`type`), ์ขŒํ‘œ(`pos`), ํฌ๊ธฐ(`size`), ์‹คํ–‰ ์ˆœ์„œ(`order`), ๋ชจ๋“œ(`mode`, ํ™œ์„ฑ/์šฐํšŒ ๋“ฑ), ๊ทธ๋ฆฌ๊ณ  ์œ„์ ฏ ์„ค์ •๊ฐ’(`widgets_values`)์„ ํฌํ•จํ•œ๋‹ค [4, 14]. +- **links:** ๋…ธ๋“œ ์‚ฌ์ด์˜ ์™€์ด์–ด(Wire) ์—ฐ๊ฒฐ์„ ์ •์˜ํ•˜๋Š” ์ตœ์ƒ์œ„ ๋ฐฐ์—ด์ด๋‹ค. ๊ฐ ๋งํฌ๋Š” ๋ณดํ†ต 6๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด ํ˜•ํƒœ๋กœ, ์†Œ์Šค ๋…ธ๋“œ ID, ์†Œ์Šค ์Šฌ๋กฏ, ํƒ€๊ฒŸ ๋…ธ๋“œ ID, ํƒ€๊ฒŸ ์Šฌ๋กฏ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค [5]. +- **groups:** ์บ”๋ฒ„์Šค ์ƒ์—์„œ ๋…ธ๋“œ๋“ค์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์–ด์ฃผ๋Š” ์‹œ๊ฐ์  ๊ทธ๋ฃน ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค [4]. + +### 2. API Format(Backend)๊ณผ์˜ ์ฐจ์ด์  +Frontend Format์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ํฌ๊ธฐ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๋ฉฐ, ๋ฐฑ์—”๋“œ ์‹คํ–‰ ์—”์ง„์ด ์ง์ ‘ ํ•ด์„ํ•˜๊ธฐ์—๋Š” ๋ถ€์ ์ ˆํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค [1, 3, 15]. ๋ฐ˜๋ฉด API Format์€ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด์— ๋งํฌ ์ •๋ณด๋ฅผ ์ง์ ‘ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ ์‹คํ–‰ ์ตœ์ ํ™”์— ์ง‘์ค‘ํ•œ๋‹ค [1, 16, 17]. + +### 3. ์ƒํ˜ธ ์šด์šฉ์„ฑ ๋ฐ ํ•œ๊ณ„ +- **์ด๋ฏธ์ง€ ๊ธฐ๋ฐ˜ ๋กœ๋”ฉ:** PNG ์ด๋ฏธ์ง€์— ํฌํ•จ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ฆ‰์‹œ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์„ ๊ฑฐ์น˜๋ฉด์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋  ์œ„ํ—˜์ด ์žˆ๋‹ค [9, 11, 18]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ:** ComfyUI๋Š” ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ, ๊ตฌ๋ฒ„์ „์˜ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค [18]. +- **์ข…์†์„ฑ ๋ฌธ์ œ:** JSON ํŒŒ์ผ ์ž์ฒด์—๋Š” ๋ชจ๋ธ ๊ฐ€์ค‘์น˜๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋กœ์ปฌ ํ™˜๊ฒฝ์— ํ•ด๋‹น ๋…ธ๋“œ๋‚˜ ๋ชจ๋ธ์ด ์—†์„ ๊ฒฝ์šฐ 'Red Box' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค [19, 20]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **ํŒŒ์ผ ํ™•์žฅ์ž ํ˜ผ์šฉ:** ์†Œ์Šค์— ๋”ฐ๋ผ API ์ „์šฉ ํฌ๋งท์„ `workflow_api.json`์œผ๋กœ, ํ”„๋ก ํŠธ์—”๋“œ ํฌ๋งท์„ `workflow.json`์œผ๋กœ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„ํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์ธ ๋Œ€ํ™”์—์„œ๋Š” ๋ชจ๋‘ '์›Œํฌํ”Œ๋กœ์šฐ JSON'์œผ๋กœ ํ†ต์นญ๋˜๊ธฐ๋„ ํ•œ๋‹ค [1, 21]. +- **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ทจ์•ฝ์„ฑ:** PNG์— ์ž„๋ฒ ๋”ฉ๋œ JSON์€ ์••์ถ• ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ๋„คํŠธ์›Œํฌ ์ „์†ก ์‹œ ์†Œ์‹ค๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด ์ง€์†์ ์œผ๋กœ ์ง€์ ๋œ๋‹ค [11, 18]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ, ํ”„๋ก ํŠธ์—”๋“œ ํ˜•์‹์˜ JSON์„ API ํ˜•์‹์œผ๋กœ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ์—์„œ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค (์ปค๋ฐ‹ bc85382 ์ฐธ์กฐ) [15, 22, 23]. +- **ComfyUI-to-Python-Extension:** ํ”„๋ก ํŠธ์—”๋“œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์ €์žฅ๋œ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์žฌ์ž„ํฌํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค [24, 25]. +- **ComfyUI-WorkflowGenerator:** LLM์„ ํ†ตํ•ด ์ƒ์„ฑ๋œ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ตœ์ข…์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ Frontend JSON ๋˜๋Š” API JSON ํฌ๋งท์œผ๋กœ ๋นŒ๋“œํ•˜๋Š” `WorkflowBuilder` ๋…ธ๋“œ๋ฅผ ํฌํ•จํ•œ๋‹ค [26, 27]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๋‹ค์ˆ˜์˜ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ ํ•ต์‹ฌ ๊ทœ๊ฒฉ์œผ๋กœ ์‚ฌ์šฉ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ, GitHub ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•œ ๊ต์ฐจ ๊ฒ€์ฆ ์™„๋ฃŒ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Litegraph Standard]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON ํฌ๋งท์˜ ๊ตฌ์กฐ์  ๊ทผ๊ฐ„์ด ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ทœ๊ฒฉ์ž„ [1]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๋ฐฐ์น˜ ๋ฐ ๋งํฌ ๋ Œ๋”๋ง ์›๋ฆฌ. +- [[Workflow.api.json (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : Frontend JSON์—์„œ UI ์ •๋ณด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ ๋Œ€์‘ ํฌ๋งท์ž„ [1, 3]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์‹œ๊ฐ์  ํ‘œํ˜„๊ณผ ๋…ผ๋ฆฌ์  ์‹คํ–‰ ๊ตฌ์กฐ์˜ ๋ถ„๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : JSON ๋‚ด์˜ `class_type`์„ ๋ถ„์„ํ•˜์—ฌ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์„ค์น˜ํ•ด์ฃผ๋Š” ํ•„์ˆ˜ ๊ด€๋ฆฌ ๋„๊ตฌ์ž„ [20]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: JSON ์ข…์†์„ฑ ๊ด€๋ฆฌ ๋ฐ ํ™˜๊ฒฝ ๋ณต๊ตฌ ํ”„๋กœ์„ธ์Šค. +- [[Workflow Extractor]] + - ์—ฐ๊ฒฐ ์ด์œ : ์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ˆจ๊ฒจ์ง„ Frontend JSON์„ ์ถ”์ถœํ•˜๋Š” ์ „๋ฌธ ๋„๊ตฌ์ž„ [28, 29]. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด์กด ๋ฐ ๋ฐ์ดํ„ฐ ๋ณต๊ตฌ ๊ธฐ์ˆ . + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- Frontend JSON์˜ `order` ํ•„๋“œ๊ฐ€ ์‹ค์ œ ๋ฐฑ์—”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ์™€ ํ•ญ์ƒ ์ผ์น˜ํ•˜๋Š”๊ฐ€? [14] +- PNG ์ด๋ฏธ์ง€์˜ `tEXt` ์ฒญํฌ์™€ `zTXt` ์ฒญํฌ ์ค‘ ์–ด๋А ๋ฐฉ์‹์ด ์›Œํฌํ”Œ๋กœ์šฐ ๋ฐ์ดํ„ฐ ์ €์žฅ์— ๋” ์œ ๋ฆฌํ•œ๊ฐ€? [11] +- `comfyui-workflow-to-api-converter-endpoint`๋Š” ์„œ๋ธŒ๊ทธ๋ž˜ํ”„(Subgraph)๊ฐ€ ํฌํ•จ๋œ ๋ณต์žกํ•œ ํ”„๋ก ํŠธ์—”๋“œ JSON์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€? [23, 30] +- ๋…ธ๋“œ ID๊ฐ€ ๋ฌธ์ž์—ด๋กœ ์ €์žฅ๋  ๋•Œ์™€ ์ˆซ์ž๋กœ ์ €์žฅ๋  ๋•Œ์˜ ์‹œ์Šคํ…œ ์ฒ˜๋ฆฌ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€? [4, 6] +- ๋ชจ๋ธ ํ•ด์‹ฑ(Model Hashing) ๊ธฐ์ˆ ์ด JSON์˜ ํฌํ„ฐ๋นŒ๋ฆฌํ‹ฐ(Portability) ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋Š”๊ฐ€? [31] +- LLM์ด ์ƒ์„ฑํ•œ ๋…ผ๋ฆฌ์  ๋‹ค์ด์–ด๊ทธ๋žจ์„ ํ‘œ์ค€ V1.0 ์Šคํ‚ค๋งˆ์— ๋งž๊ฒŒ ๊ฒ€์ฆํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ๋ฌด์—‡์ธ๊ฐ€? [26, 32] + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ์ปค์Šคํ…€ ์•ฑ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋กœ๋“œํ•  ๋•Œ, ์šฐ์„  Frontend ํฌ๋งท์œผ๋กœ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ค€ ๋’ค ์‹คํ–‰ ์‹œ์ ์—๋งŒ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์š”์ฒญํ•œ๋‹ค [33]. +- **System Design:** ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Git)์— ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ €์žฅํ•  ๋•Œ, ์‹œ๊ฐ์  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด Frontend ํฌ๋งท์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•˜๋‹ค [34]. +- **Operation / Maintenance:** ์‚ฌ์šฉ์ž๊ฐ€ ๊ณต์œ ํ•œ ์ด๋ฏธ์ง€์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, `exiftool` ๋“ฑ์„ ์‚ฌ์šฉํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์„ ์ œ์ ์œผ๋กœ ํ™•์ธํ•œ๋‹ค [29, 35]. +- **Learning Path:** ์ดˆ๋ณด์ž๋Š” ์‹œ๊ฐ์  ๋…ธ๋“œ ์—ฐ๊ฒฐ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋…ผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ตํžˆ๊ณ , ์ˆ™๋ จ์ž๋Š” JSON์˜ `widgets_values`๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•˜์—ฌ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค [13, 36]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Custom Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: JSON ๋‚ด์˜ `type` ํ•„๋“œ๊ฐ€ ์‹ค์ œ ํŒŒ์ด์ฌ ํด๋ž˜์Šค์™€ ๋งคํ•‘๋˜๋Š” ๋ฐฉ์‹ ์—ฐ๊ตฌ. +- [[JSON Schema v1.0]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ์˜ ๊ตฌ์กฐ์  ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ์ˆ ์  ๋ช…์„ธ ํ™•์ธ [14]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine based on 18 sources. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/WorkflowExecutor.md b/10_Wiki/Topics/Comfyui/WorkflowExecutor.md new file mode 100644 index 00000000..5161709f --- /dev/null +++ b/10_Wiki/Topics/Comfyui/WorkflowExecutor.md @@ -0,0 +1,94 @@ +--- +id: workflowexecutor +title: "WorkflowExecutor" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "applied" +canonical_id: "" +aliases: ["์›Œํฌํ”Œ๋กœ ์‹คํ–‰๊ธฐ"] +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 ์ƒ์„ฑ ๋ฐฉ๋ฒ•"] +raw_sources: ["NotebookLM Synthesis"] +applied_in: ["GitHub Gist: Standalone execution script", "Quasilinear Musings: Executing ComfyUI Workflows as Standalone Scripts"] +github_commit: "" +--- + +# [[WorkflowExecutor]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +**[[WorkflowExecutor]]**๋Š” ComfyUI์˜ ์›น UI ๋ฐ ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋…๋ฆฝ์ ์ธ ํŒŒ์ด์ฌ ์Šคํฌ๋ฆฝํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ํ•ต์‹ฌ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์—”์ง„์ด๋‹ค [1, 2]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋…๋ฆฝ์  ์‹คํ–‰ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜**: ์›น ๊ธฐ๋ฐ˜ ์ธํ„ฐํŽ˜์ด์Šค ์—†์ด๋„ ์›Œํฌํ”Œ๋กœ์˜ ํ™˜๊ฒฝ ์ดˆ๊ธฐํ™”, ์บ์‹œ ๊ด€๋ฆฌ, ๋…ธ๋“œ ์‹คํ–‰์„ ์ด๊ด„ํ•œ๋‹ค [2]. +- **์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐํ™”**: JSON ํ˜•์‹์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๊ฒ€์ฆํ•œ ํ›„ `DynamicPrompt`๋ฅผ ๊ฑฐ์ณ ์ˆœ์ฐจ์  ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [2]. +- **๋…ธ๋“œ ๋‹จ์œ„ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ**: ๊ฐœ๋ณ„ ๋…ธ๋“œ์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒ(`get_input_data`)ํ•˜๊ณ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ(`get_output_data`)ํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„๋ฅผ ์ œ์–ดํ•œ๋‹ค [3]. +- **์บ์‹œ ํ†ตํ•ฉ ๊ด€๋ฆฌ**: `ExecutionCache`์™€ ์—ฐ๋™ํ•˜์—ฌ ๋…ธ๋“œ ์ถœ๋ ฅ ๋ฐ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•จ์œผ๋กœ์จ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค [3, 4]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **Backend-Only Execution Pattern**: ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ Frontend JSON ๋Œ€์‹ , ๋…ธ๋“œ ๊ฐ„์˜ ์ง์ ‘์ ์ธ ์ž…๋ ฅ ์ฐธ์กฐ๋ฅผ ํฌํ•จํ•˜๋Š” [[Workflow API JSON (Backend Format)]]๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [5, 6]. +- **Validation-to-Execution Pipeline**: ์‹คํ–‰ ์ „ `validate_prompt`๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์„ ์ œ์ ์œผ๋กœ ํ™•์ธํ•˜๊ณ , ์ด๋ฅผ ๋™์  ๋ฆฌ์ŠคํŠธ๋กœ ์ปดํŒŒ์ผํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์  ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅธ๋‹ค [2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +**[[WorkflowExecutor]]**๋Š” ComfyUI ์›Œํฌํ”Œ๋กœ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ํ™˜๊ฒฝ์ด๋‚˜ ๋…๋ฆฝํ˜• ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ํ•ด๊ฒฐ์ฑ…์œผ๋กœ ๊ณ ์•ˆ๋˜์—ˆ๋‹ค [1, 7]. ๊ธฐ๋ณธ์ ์œผ๋กœ ComfyUI๋Š” ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์œผ๋‚˜, ์ด ์—”์ง„์€ ํ•ด๋‹น ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ํ—ค๋“œ๋ฆฌ์Šค(Headless) ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค [1]. + +์‹คํ–‰ ๊ณผ์ •์€ ํฌ๊ฒŒ ์„ธ ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค. ์ฒซ์งธ, ์ž…๋ ฅ๋ฐ›์€ API ํ˜•์‹์˜ JSON ์›Œํฌํ”Œ๋กœ๋ฅผ ComfyUI ๋‚ด๋ถ€์˜ `validate_prompt` ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ฆํ•œ๋‹ค [2]. ๋‘˜์งธ, ๊ฒ€์ฆ๋œ ๋ฐ์ดํ„ฐ๋ฅผ `DynamicPrompt` ๊ฐ์ฒด๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์ •์˜๋œ `ExecutionList`๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค [2]. ์…‹์งธ, ์ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐœ๋ณ„ ๋…ธ๋“œ๋ฅผ `_execute_node` ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•œ๋‹ค [3]. + +๋…ธ๋“œ ์‹คํ–‰ ์‹œ์—๋Š” `get_input_data`๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด์ „ ๋…ธ๋“œ์˜ ์ถœ๋ ฅ๊ฐ’์ด๋‚˜ ์œ„์ ฏ ๊ฐ’์„ ์ˆ˜์ง‘ํ•˜๊ณ , ์ด๋ฅผ `get_output_data` ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์—ฌ ์‹ค์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค [3]. ์ด ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ์‹คํ–‰ ์ƒํƒœ๋Š” **[[ExecutionCache]]**์— ์ €์žฅ๋˜์–ด, ๋™์ผํ•œ ์—ฐ์‚ฐ์˜ ๋ฐ˜๋ณต์„ ํ”ผํ•˜๊ณ  ์‹คํ–‰ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ๊ธฐ์—ฌํ•œ๋‹ค [3, 4]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ข…์†์„ฑ ๋ชจ์ˆœ**: ComfyUI์˜ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜๋Š” ์„œ๋ฒ„์™€ UI๊ฐ€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์–ด ๋…๋ฆฝ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์—ฌ๊ฒจ์กŒ์œผ๋‚˜, **[[WorkflowExecutor]]**๋Š” ๋‚ด๋ถ€ ํ•จ์ˆ˜๋“ค์„ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ด ์ œ์•ฝ์„ ๊ทน๋ณตํ–ˆ๋‹ค [1, 4]. +- **ํ˜•์‹ ์š”๊ตฌ์‚ฌํ•ญ**: ์ผ๋ฐ˜์ ์ธ `workflow.json`์€ ์‹œ๊ฐ์  ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ **[[WorkflowExecutor]]**์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ 'Dev mode'์—์„œ ๋‚ด๋ณด๋‚ธ [[Workflow API JSON (Backend Format)]]์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค [5, 6]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **Quasilinear Musings ํ”„๋กœ์ ํŠธ**: Timothy Lin์ด ์ œ์•ˆํ•œ "Executing ComfyUI Workflows as Standalone Scripts"์˜ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌํ˜„๋˜์—ˆ๋‹ค [7, 8]. +- **๋…๋ฆฝ ์‹คํ–‰ ์Šคํฌ๋ฆฝํŠธ**: GitHub Gist์— ๊ณต๊ฐœ๋œ ์†Œ์Šค ์ฝ”๋“œ์—์„œ `WorkflowExecutor` ํด๋ž˜์Šค๊ฐ€ ์‹ค์ œ๋กœ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, SDXL Turbo ์›Œํฌํ”Œ๋กœ๋ฅผ ๋…๋ฆฝ์ ์ธ `.py` ํŒŒ์ผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉ๋˜์—ˆ๋‹ค [2, 4, 6]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** applied (GitHub Gist ๋ฐ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๊ตฌํ˜„ ์ฝ”๋“œ๊ฐ€ ํ™•์ธ๋จ [2, 8]) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (์ „๋ฌธ ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ ๋ฐ ์˜คํ”ˆ ์†Œ์Šค ๊ตฌํ˜„ ์‚ฌ๋ก€ ๊ธฐ๋ฐ˜ [2, 7]) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (๊ธฐ์กด ์†Œ์Šค ๋‚ด ๋…๋ฆฝ ์‹คํ–‰ ์—”์ง„ ๊ฐœ๋… ์ •์˜) + + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[Comfyui workflow json ์ƒ์„ฑ ๋ฐฉ๋ฒ•]] + - ์—ฐ๊ฒฐ ์ด์œ : ๋ณธ ์ฃผ์ œ์˜ ๋ฃจํŠธ ์ฃผ์ œ์ด๋ฉฐ ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ƒ์„ฑ ๊ธฐ์›์„ ์ •์˜ํ•จ. +- [[Workflow API JSON (Backend Format)]] + - ์—ฐ๊ฒฐ ์ด์œ : **[[WorkflowExecutor]]**๊ฐ€ ์‹คํ–‰์„ ์œ„ํ•ด ๋ฐ˜๋“œ์‹œ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉ์ž„ [5]. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ExecutionCache]] + - ์—ฐ๊ฒฐ ์ด์œ : ์‹คํ–‰ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด **[[WorkflowExecutor]]**์™€ ํ•จ๊ป˜ ํ•„์ˆ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์บ์‹œ ์‹œ์Šคํ…œ์ž„ [3]. +- [[ComfyUI-to-Python-Extension]] + - ์—ฐ๊ฒฐ ์ด์œ : ์›Œํฌํ”Œ๋กœ๋ฅผ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋…๋ฆฝ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋ชฉ์ ์„ ๊ณต์œ ํ•˜๋Š” ๋Œ€์•ˆ์  ๋„๊ตฌ์ž„ [1]. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- WorkflowExecutor๊ฐ€ `validate_prompt`๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•˜๋Š”๊ฐ€? [2] +- `ExecutionList` ์ƒ์„ฑ ์‹œ ์ˆœํ™˜ ์ฐธ์กฐ(Circular Reference)๊ฐ€ ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ๋ฐฉ์–ด ๋กœ์ง์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”๊ฐ€? [2] +- **[[ExecutionCache]]**๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ์˜ ๋ฐ์ดํ„ฐ ์ถ•์ถœ ์ •์ฑ…์€ ์–ด๋–ป๊ฒŒ ์ •์˜๋˜์–ด ์žˆ๋Š”๊ฐ€? [3] +- ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ `SaveImage` ๋…ธ๋“œ์™€ ๊ฐ™์€ ํŒŒ์ผ ์ถœ๋ ฅ ๋…ธ๋“œ์˜ ๊ฒฝ๋กœ ์ง€์ • ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๋Š”๊ฐ€? [6] +- WorkflowExecutor๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ๋•Œ์™€ ํ‘œ์ค€ ComfyUI ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ๋•Œ์˜ VRAM ์ ์œ  ํšจ์œจ ์ฐจ์ด๋Š” ์–ด๋А ์ •๋„์ธ๊ฐ€? +- ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ WorkflowExecutor์˜ ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜์–ด ์žˆ๋Š”๊ฐ€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** ํŒŒ์ด์ฌ ํ™˜๊ฒฝ์—์„œ ComfyUI ์„œ๋ฒ„๋ฅผ ๋„์šฐ์ง€ ์•Š๊ณ  AI ์ƒ์„ฑ ํŒŒ์ดํ”„๋ผ์ธ์„ ์ž๋™ํ™”ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค [6]. +- **System Design:** ๋„์ปค(Docker) ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์ตœ์†Œํ•œ์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ํŠน์ • ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์— ์ ํ•ฉํ•˜๋‹ค [1]. +- **Operation / Maintenance:** ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ์—…๋ฐ์ดํŠธ ์—†์ด ํŠน์ • ์‹คํ–‰ ๋กœ์ง๋งŒ์„ ๋…๋ฆฝ์ ์œผ๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•ด์•ผ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค [1]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ถœ๋ ฅ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ•„์š”ํ•œ ์ข…์†์„ฑ๋งŒ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ๋ชจ๋ธ์— ๋Œ€ํ•œ ์‹ฌ์ธต ์ดํ•ด [9]. +- [[ComfyUI Manager]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ๋…๋ฆฝ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ ๋ˆ„๋ฝ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก  ์กฐ์‚ฌ [10]. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/Workspace Packaging.md b/10_Wiki/Topics/Comfyui/Workspace Packaging.md new file mode 100644 index 00000000..17258612 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/Workspace Packaging.md @@ -0,0 +1,97 @@ +--- +id: workspace-packaging +title: "Workspace Packaging" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [".cpack.zip", "Artifact-based Deployment"] +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: ["comfy-pack", ".cpack.zip"] +github_commit: "" +--- + +# [[Workspace Packaging]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +๋‹จ์ˆœํ•œ ๋…ธ๋“œ ๊ทธ๋ž˜ํ”„ ์ง๋ ฌํ™”๋ฅผ ๋„˜์–ด, ๋ชจ๋ธ ํ•ด์‹œ์™€ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ๋“ฑ ์‹คํ–‰ ์˜์กด์„ฑ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์•„ํ‹ฐํŒฉํŠธ๋กœ ๋ฌถ์–ด ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์˜๊ตฌ์  ์žฌํ˜„์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ฐจ์„ธ๋Œ€ ๋ฐฐํฌ ํ‘œ์ค€ [1]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **์•„ํ‹ฐํŒฉํŠธ ๊ธฐ๋ฐ˜ ๋ฐฐํฌ (Artifact-based Deployment):** ์›์‹œ JSON ํŒŒ์ผ ๋Œ€์‹  ์›Œํฌํ”Œ๋กœ์šฐ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ปจํ…์ŠคํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” ํŒจํ‚ค์ง€ ๋‹จ์œ„์˜ ๋ฐฐํฌ ๋ฐฉ์‹ [1]. +2. **๋ชจ๋ธ ๊ฐ€์ค‘์น˜ ํ•ด์‹ฑ (Model Weight Hashing):** ํŒŒ์ผ๋ช…์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผํ•œ ๋ชจ๋ธ์„ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ๋งคํ•‘ [1, 2]. +3. **๋ฒ„์ „ ๊ณ ์ • (Version Locking):** ์›Œํฌํ”Œ๋กœ์šฐ ์„ค๊ณ„ ๋‹น์‹œ ์‚ฌ์šฉ๋œ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ํŠน์ • ๋ฒ„์ „์„ ๊ธฐ๋กํ•˜์—ฌ, ํ–ฅํ›„ ๋…ธ๋“œ ์—…๋ฐ์ดํŠธ๋‚˜ ๊ธฐ๋Šฅ ์ค‘๋‹จ(deprecation)์œผ๋กœ ์ธํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ [1]. +4. **.cpack.zip ๊ทœ๊ฒฉ:** ์›Œํฌํ”Œ๋กœ์šฐ JSON, ๋ชจ๋ธ ํ•ด์‹œ ๋ฆฌ์ŠคํŠธ, ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๋„๋ก ์ œ์•ˆ๋œ ํ†ตํ•ฉ ํŒจํ‚ค์ง€ ํ˜•์‹ [1]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ถˆ๋ณ€์„ฑ ํ™•๋ณด ํŒจํ„ด (Immutability Pattern):** JSON + SHA-256 Hash + Node Versioning์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ๋™์ผํ•œ ์ถœ๋ ฅ์„ ๋ณด์žฅํ•˜๋Š” '์ •์  ์‹คํ–‰ ํ™˜๊ฒฝ'์„ ๊ตฌ์ถ•ํ•จ [1]. +- **ํ™˜๊ฒฝ ๋…๋ฆฝ์  ์‹๋ณ„ ํŒจํ„ด (Environment-Agnostic Identification):** ๋ฌผ๋ฆฌ์  ํŒŒ์ผ ๊ฒฝ๋กœ(sd_xl_base.safetensors)๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ์˜ ์ง€๋ฌธ(Hash)์„ ํ†ตํ•ด ์ž์›์„ ๊ฒ€์ƒ‰ํ•จ์œผ๋กœ์จ ์ด์‹์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•จ [1, 2]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +ComfyUI ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๊ธฐ์กด์— PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋‚˜ ๋‹จ์ˆœ JSON ํŒŒ์ผ๋กœ ๊ณต์œ ๋˜์—ˆ์œผ๋‚˜, ์ด๋Š” ๋ชจ๋ธ ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜๋‚˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ์ฐจ์ด๋กœ ์ธํ•œ 'Red Nodes' ์˜ค๋ฅ˜์— ์ทจ์•ฝํ•œ(fragile) ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง [1, 3, 4]. **Workspace Packaging**์€ ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ๊ณ ๋ฆฝ๋œ ์‹คํ–‰ ๋‹จ์œ„๋กœ ์ทจ๊ธ‰ํ•จ [1]. + +์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Œ: +- **์›Œํฌํ”Œ๋กœ์šฐ ์ง๋ ฌํ™”:** ํ‘œ์ค€ JSON v1.0 ๊ทœ๊ฒฉ์— ๋”ฐ๋ฅธ ๋…ธ๋“œ ๋ฐ ๋งํฌ ๋ฐ์ดํ„ฐ ํฌํ•จ [1, 5]. +- **์˜์กด์„ฑ ์ฒดํฌ์„ฌ:** `comfy-pack`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ํŒŒ์ผ๋ช…์ด ๋‹ค๋ฅด๋”๋ผ๋„ ์˜ฌ๋ฐ”๋ฅธ ๋ชจ๋ธ์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Œ [1, 2]. +- **๋…ธ๋“œ ์ปจํ…์ŠคํŠธ:** ํŠน์ • ์‹œ์ ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ ์ฝ”๋“œ ์ƒํƒœ๋ฅผ ๊ณ ์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•จ [1]. + +์ด ๋ฐฉ์‹์€ ํŠนํžˆ ๊ณ ๋„ํ™”๋œ ์ƒ์„ฑํ˜• AI ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ๊ฐ€ ๋ฏธ๋ž˜์—๋„ ์ •์ƒ ์ž‘๋™ํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” '๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์•„์นด์ด๋น™'์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ๋กœ ์ž๋ฆฌ ์žก๊ณ  ์žˆ์Œ [1, 6]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ชจ์ˆœ:** ํ˜„์žฌ ๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๋ฐฉ์‹์€ Metadata๊ฐ€ ํฌํ•จ๋œ PNG์ด๋‚˜, ์ด๋Š” ๋ณด์•ˆ ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์— ์˜ํ•ด ๋ฐ์ดํ„ฐ๊ฐ€ ์†์‹ค๋˜๊ธฐ ์‰ฌ์›Œ(stripped) ์‹ ๋ขฐ๋„๊ฐ€ ๋‚ฎ์Œ [3]. +- **์—…๋ฐ์ดํŠธ:** ๋‹จ์ˆœ JSON ์ €์žฅ ๋ฐฉ์‹์—์„œ ์‹œ์Šคํ…œ ์ „์ฒด ์ƒํƒœ๋ฅผ ํŒจํ‚ค์ง•ํ•˜๋Š” `.cpack.zip` ๊ธฐ๋ฐ˜์˜ ์•„ํ‹ฐํŒฉํŠธ ๋ฐฐํฌ๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ „ํ™˜๋˜๊ณ  ์žˆ์Œ [1]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfy-pack:** ๋ชจ๋ธ ๊ฐ€์ค‘์น˜์˜ SHA-256 ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌผ๋ฆฌ์  ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ๋…ผ๋ฆฌ์  ์‹๋ณ„์ž๋กœ ๋ชจ๋ธ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋จ [1, 2]. +- **.cpack.zip:** ์›Œํฌํ”Œ๋กœ์šฐ JSON, ๋ชจ๋ธ ํ•ด์‹œ, ๋…ธ๋“œ ๋ฒ„์ „ ์ •๋ณด๋ฅผ ํ†ตํ•ฉ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฏธ๋ž˜ํ˜• ์•„ํ‹ฐํŒฉํŠธ ํŒŒ์ผ ๊ทœ๊ฒฉ์œผ๋กœ ์ œ์•ˆ๋จ [1]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (๋ฏธ๋ž˜ ์ง€ํ–ฅ์  ๊ธฐ์ˆ ๋กœ ์ œ์•ˆ๋˜์—ˆ์œผ๋ฉฐ comfy-pack ๋“ฑ ์ผ๋ถ€ ๋„๊ตฌ์—์„œ ๊ตฌํ˜„ ์‹œ์ž‘) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ ์ „๋ฌธ ์•„ํ‚คํ…์ฒ˜ ๋ถ„์„ ๊ธฐ๋ฐ˜) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ + +## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) + +### ์ƒ์œ„/์œ ์‚ฌ ๊ฐœ๋… +#### [์•„ํ‚คํ…์ฒ˜/๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ] +- [[ComfyUI Workflow JSON]] + - ์—ฐ๊ฒฐ ์ด์œ : ํŒจํ‚ค์ง•์˜ ํ•ต์‹ฌ์ด ๋˜๋Š” ์ง๋ ฌํ™” ๋ฐ์ดํ„ฐ ํ˜•์‹. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ๋…ธ๋“œ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์˜ ํ‘œ์ค€ํ™”๋œ ์ €์žฅ ๋ฐฉ์‹. +- [[Model Hashing]] + - ์—ฐ๊ฒฐ ์ด์œ : ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ์ž์›์„ ์‹๋ณ„ํ•˜๋Š” ์œ ์ผํ•œ ๊ธฐ์ˆ ์  ์ˆ˜๋‹จ. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ํŒŒ์ผ๋ช… ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” SHA-256 ๊ธฐ๋ฐ˜ ๋งคํ•‘ ์›๋ฆฌ. + +#### [๊ตฌํ˜„/ํ™œ์šฉ ๋„๊ตฌ] +- [[ComfyUI Manager]] + - ์—ฐ๊ฒฐ ์ด์œ : ํŒจํ‚ค์ง€ ๋‚ด ๋ช…์‹œ๋œ ๋ˆ„๋ฝ ๋…ธ๋“œ๋ฅผ ํƒ์ง€ํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰. + - ์ด ๊ฐœ๋…์„ ํ†ตํ•ด ๋” ๊นŠ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„: ์˜์กด์„ฑ ์ž๋™ ํ•ด๊ฒฐ ๋ฐ ์„ค์น˜ ํ”„๋กœ์„ธ์Šค. + +### ์‹ฌ์ธต ํ›„์† ์งˆ๋ฌธ (Deeper Research Questions) +- `.cpack.zip` ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ๋ชจ๋ธ ํŒŒ์ผ ์ž์ฒด๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  ํ•ด์‹œ๋งŒ์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ๊ฐ€์ค‘์น˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ™•๋ณดํ•˜๋Š” ์›๊ฒฉ ์ €์žฅ์†Œ ์—ฐ๋™ ํ”„๋กœํ† ์ฝœ์€ ๋ฌด์—‡์ธ๊ฐ€? +- ์ปค์Šคํ…€ ๋…ธ๋“œ ๋ฒ„์ „ ๊ณ ์ •์ด Git ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์‹œ๋งจํ‹ฑ ๋ฒ„์ €๋‹(Semantic Versioning)์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ์–ด๋А ๊ฒƒ์ด ๋” ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€? +- Workspace Packaging ๊ธฐ์ˆ ์ด Replicate๋‚˜ Mystic๊ณผ ๊ฐ™์€ ์„œ๋ฒ„๋ฆฌ์Šค API ํ™˜๊ฒฝ์—์„œ ์ฝœ๋“œ ์Šคํƒ€ํŠธ(Cold Start) ์‹œ๊ฐ„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ์–ด๋– ํ•œ๊ฐ€? +- ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ปค์Šคํ…€ ๋…ธ๋“œ๊ฐ€ ์–ฝํžŒ ๋ณต์žกํ•œ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ๋ชจ๋“  ์˜์กด์„ฑ์„ ๋ˆ„๋ฝ ์—†์ด ํŒจํ‚ค์ง•ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒ€์ฆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„๋˜๋Š”๊ฐ€? +- ํŒจํ‚ค์ง•๋œ ์•„ํ‹ฐํŒฉํŠธ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด SHA-256 ์™ธ์— ๋””์ง€ํ„ธ ์„œ๋ช…(Digital Signature)์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ณด์•ˆ ๋ชจ๋ธ์˜ ๊ฐ€๋Šฅ์„ฑ์€? + +### ์‹ค๋ฌด ์ ์šฉ ๋งฅ๋ฝ (Practical Application Contexts) +- **Implementation:** `comfy-pack` ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ณ„ ๋ชจ๋ธ ํ•ด์‹œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•จ [2]. +- **System Design:** CI/CD ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์›Œํฌํ”Œ๋กœ์šฐ ๋ณ€๊ฒฝ ์‹œ๋งˆ๋‹ค `.cpack.zip` ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ž๋™ ์ƒ์„ฑํ•˜์—ฌ ๋ฐฐํฌํ•จ [1]. +- **Operation / Maintenance:** ํŠน์ • ์‹œ์ ์— ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ์žฌํ˜„ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ๋กœ๋“œํ•˜์—ฌ ๋…ธ๋“œ ๋ฐ ๋ชจ๋ธ์˜ ํ™˜๊ฒฝ์„ ์ฆ‰๊ฐ ๋ณต์›ํ•จ [1]. +- **Learning Path:** ๋‹จ์ˆœ JSON ์ €์žฅ์„ ๋„˜์–ด ๋ชจ๋ธ ํ•ด์‹œ์˜ ์ค‘์š”์„ฑ๊ณผ ์˜์กด์„ฑ ๊ด€๋ฆฌ์˜ ์›๋ฆฌ๋ฅผ ํ•™์Šตํ•˜๋Š” ๊ณ ๋„ํ™” ๋‹จ๊ณ„์ž„ [6]. + +### ์ธ์ ‘ ์ฃผ๋ณ€ ์ฃผ์ œ (Adjacent Topics) +- [[Retrieval-Augmented Generation (RAG) for Nodes]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ์ •์ ์œผ๋กœ ๊ณ ์ •๋œ ํŒจํ‚ค์ง€๋ฅผ ๋„˜์–ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ตœ์‹  ๋…ธ๋“œ ์ •๋ณด๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๋Š” ๊ธฐ์ˆ . +- [[Execution Model Inversion]] + - ํ™•์žฅ ๋ฐฉํ–ฅ: ํŒจํ‚ค์ง•๋œ ๊ฑฐ๋Œ€ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ ์‹ค์ œ ์ถœ๋ ฅ์— ํ•„์š”ํ•œ ๋…ธ๋“œ๋งŒ ์„ ๋ณ„ํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ์ตœ์ ํ™” ๊ธฐ๋ฒ•. + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. ๊ธฐ์ดˆ ์•„ํ‚คํ…์ฒ˜ ๋ฐ .cpack.zip ๊ทœ๊ฒฉ ์ •์˜ ํฌํ•จ. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/exiftool.md b/10_Wiki/Topics/Comfyui/exiftool.md new file mode 100644 index 00000000..ad920491 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/exiftool.md @@ -0,0 +1,58 @@ +--- +id: exiftool +title: "exiftool" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: [] +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.config"] +github_commit: "" +--- + +# [[exiftool]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +`exiftool`์€ ๋ฏธ๋””์–ด ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฒญํฌ ๋‚ด์— ์ž„๋ฒ ๋”ฉ๋œ ComfyUI ์›Œํฌํ”Œ๋กœ JSON ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ, ์‚ฝ์ž… ๋ฐ ๋ณต๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ์ด๋‹ค. [1], [2] + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +1. **๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ (Metadata Extraction):** PNG ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์™€ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ์—์„œ ์ง๋ ฌํ™”๋œ ์›Œํฌํ”Œ๋กœ JSON์„ ๋…๋ฆฝ๋œ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค. [3], [1] +2. **์›Œํฌํ”Œ๋กœ ๋ณต๊ตฌ (Workflow Recovery):** ์ด๋ฏธ์ง€ ํŽธ์ง‘๊ธฐ(์˜ˆ: GIMP) ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ์‚ญ์ œ๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์›๋ณธ ํŒŒ์ผ์—์„œ ์ถ”์ถœํ•˜์—ฌ ์žฌ์‚ฝ์ž…ํ•จ์œผ๋กœ์จ ์›Œํฌํ”Œ๋กœ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค. [4], [2] +3. **๋น„ํ‘œ์ค€ ํƒœ๊ทธ ์ •์˜ (Non-standard Tag Definition):** ComfyUI ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋Š” ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ์ €์žฅ๋˜๋ฏ€๋กœ, ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ตฌ์„ฑ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค. [2] + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **๋ฐ”์ด๋„ˆ๋ฆฌ ์ถœ๋ ฅ ํŒจํ„ด:** `-b` ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํƒœ๊ทธ(`-workflow`)์˜ ์›์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์บก์ฒ˜ํ•˜๊ณ  ๋ฆฌ๋‹ค์ด๋ ‰์…˜(`>`)์„ ํ†ตํ•ด JSON ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ์ „๋žต์„ ์‚ฌ์šฉํ•œ๋‹ค. [1], [2] +- **์„ค์ • ๊ธฐ๋ฐ˜ ์‚ฝ์ž… ํŒจํ„ด:** `exiftool`์ด ๋“ฑ๋ก๋˜์ง€ ์•Š์€ ํƒœ๊ทธ ์“ฐ๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด `%unreg` ์ง€์‹œ์–ด๋ฅผ ํฌํ•จํ•œ ์„ค์ • ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์—ฌ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค. [2] + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +`exiftool`์€ ComfyUI ์›Œํฌํ”Œ๋กœ ๊ด€๋ฆฌ ๋ฐ ๋””์ง€ํ„ธ ํฌ๋ Œ์‹์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค. [1] ComfyUI๋Š” ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ `Save Image` ๋…ธ๋“œ๋ฅผ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ(Frontend ํฌ๋งท)์™€ ํ”„๋กฌํ”„ํŠธ(API ํฌ๋งท) ์ •๋ณด๋ฅผ PNG ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ฃผ์ž…ํ•˜๋Š”๋ฐ, `exiftool`์€ ์ด๋Ÿฌํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํƒœ๊ทธ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ๋ฐ ์ตœ์ ํ™”๋˜์–ด ์žˆ๋‹ค. [5], [3], [1] + +๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ ์  ์ƒ์„ธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค: +- **์ถ”์ถœ ๋ฉ”์ปค๋‹ˆ์ฆ˜:** ๋Œ€๊ทœ๋ชจ ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ์—์„œ ๋“œ๋ž˜๊ทธ ์•ค ๋“œ๋กญ ๋ฐฉ์‹์˜ ์ˆ˜๋™ ์ถ”์ถœ์ด ๋น„ํšจ์œจ์ ์ผ ๋•Œ, `exiftool -b -workflow input.png > workflow.json` ๋ช…๋ น์„ ํ†ตํ•ด ์›Œํฌํ”Œ๋กœ๋ฅผ ์ผ๊ด„์ ์œผ๋กœ ๊ฒฉ๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. [1] ์ด๋Š” ์ด๋ฏธ์ง€ ๋‚ด๋ถ€์˜ ์ง๋ ฌํ™”๋œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ธ์ถœํ•˜๋Š” ํ‘œ์ค€์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. [1] +- **์‚ฝ์ž… ๋ฐ ๋ณต์‚ฌ:** ๋‹จ์ˆœํ•œ ์ถ”์ถœ์„ ๋„˜์–ด, ํ•œ ์ด๋ฏธ์ง€์˜ ์›Œํฌํ”Œ๋กœ๋ฅผ ๋‹ค๋ฅธ ๋ฏธ๋””์–ด(PNG, WebP, MP4 ๋“ฑ)๋กœ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ ์žฌ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. [4] ๋‹จ, ์›Œํฌํ”Œ๋กœ ํƒœ๊ทธ๋Š” ํ‘œ์ค€ ๊ทœ๊ฒฉ์ด ์•„๋‹ˆ๋ฏ€๋กœ, `exiftool`์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ˆ˜์ •์„ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๋Š” ํƒœ๊ทธ๋ฅผ ๋ฏธ๋“ฑ๋ก(`%unreg`) ์ƒํƒœ๋กœ ์ •์˜ํ•˜๋Š” ๋ณ„๋„์˜ ์„ค์ • ํŒŒ์ผ์„ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค. [2] +- **๋Œ€์•ˆ ๋„๊ตฌ์™€์˜ ๊ด€๊ณ„:** `Comfy_UI_prompt_extractor`๋‚˜ `comfymeta` ๋“ฑ ํŠน์ • ๋ชฉ์ ์„ ๊ฐ€์ง„ CLI ๋ฐ UI ๋„๊ตฌ๋“ค์ด ์กด์žฌํ•˜์ง€๋งŒ, `exiftool`์€ ๊ฐ€์žฅ ์›ํ˜•์ ์ธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ์„œ ์›Œํฌํ”Œ๋กœ ์‚ฝ์ž… ๋ฐ ๋ณต์‚ฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ๋กœ ์–ธ๊ธ‰๋œ๋‹ค. [2] + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **๋ฐ์ดํ„ฐ ํœ˜๋ฐœ์„ฑ:** `exiftool`์˜ ์„ฑ๋Šฅ๊ณผ ๊ด€๊ณ„์—†์ด, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ์ทจ์•ฝํ•˜๋‹ค๋Š” ์ ์ด ์ง€์ ๋œ๋‹ค. ์†Œ์…œ ๋ฏธ๋””์–ด ํ”Œ๋žซํผ์ด๋‚˜ ํ‘œ์ค€ ์ด๋ฏธ์ง€ ์••์ถ• ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ํŒŒ์ผ ํฌ๊ธฐ ์ ˆ๊ฐ ๋ฐ ํ”„๋ผ์ด๋ฒ„์‹œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์›Œํฌํ”Œ๋กœ JSON์ด ํฌํ•จ๋œ ๋น„ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ, ์›๋ณธ ํŒŒ์ผ์ด ์•„๋‹ ๊ฒฝ์šฐ `exiftool`์„ ํ†ตํ•œ ์ถ”์ถœ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ๋‹ค. [6], [7], [3] + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **ComfyUI.config ํ™œ์šฉ:** ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„ํ‘œ์ค€ ํƒœ๊ทธ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด `exiftool` ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น ํƒœ๊ทธ๋ฅผ `%unreg`๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋˜์—ˆ๋‹ค. [2] +- **CLI ์›Œํฌํ”Œ๋กœ ์ถ”์ถœ:** `exiftool -b -workflow input.png > workflow.json` ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด PNG ํŒŒ์ผ์—์„œ ์›Œํฌํ”Œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ถ”์ถœํ•˜์—ฌ JSON ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. [1], [2] + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ๋ช…๋ น์–ด์™€ ์„ค์ • ํŒŒ์ผ ์ ์šฉ ๋ฐฉ์‹์ด ์†Œ์Šค ๋‚ด์— ๊ธฐ์ˆ ๋จ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Official Documentation ๋ฐ GitHub Issue ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ  ๋ช…์„ธ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/Comfyui/workflow_api.json.md b/10_Wiki/Topics/Comfyui/workflow_api.json.md new file mode 100644 index 00000000..10aa6530 --- /dev/null +++ b/10_Wiki/Topics/Comfyui/workflow_api.json.md @@ -0,0 +1,67 @@ +--- +id: workflow_api.json +title: "workflow_api.json" +category: "10_Wiki/Topics" +status: "draft" +verification_status: "conceptual" +canonical_id: "" +aliases: ["API Format JSON", "Backend Format JSON", "Prompt JSON"] +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: ["/workflow/convert", "comfyui-workflow-to-api-converter-endpoint", "fofr/any-comfyui-workflow", "ComfyUI-to-Python-Extension"] +github_commit: "bc85382" +--- + +# [[workflow_api.json]] + +## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) +`workflow_api.json`์€ UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋…ธ๋“œ ๊ฐ„์˜ ๊ธฐ๋Šฅ์  ์—ฐ๊ฒฐ์„ฑ๋งŒ์„ ์ถ”์ถœํ•˜์—ฌ ComfyUI ๋ฐฑ์—”๋“œ ์—”์ง„์ด ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ตœ์ ํ™”๋œ ์ง๋ ฌํ™”๋œ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„์ด๋‹ค [1-3]. + +## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) +- **๋ฐฑ์—”๋“œ/API ํฌ๋งท (Backend/API Format):** ์‹œ๊ฐ์  ์š”์†Œ(์œ„์น˜, ํฌ๊ธฐ, ๊ทธ๋ฃน ๋“ฑ)๋ฅผ ๋ฐฐ์ œํ•˜๊ณ  ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์ฒ˜๋ฆฌ ๋ฐ ํ”„๋กœ๊ทธ๋žจ ๊ธฐ๋ฐ˜ ์ž๋™ํ™”์— ์ตœ์ ํ™”๋œ ํฌ๋งท์ด๋‹ค [1, 3]. +- **ํ‰ํƒ„ํ™”๋œ ๊ทธ๋ž˜ํ”„ (Flattened Execution Graph):** ๋งํฌ๊ฐ€ ๋ณ„๋„์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๋…ธ๋“œ ์ž…๋ ฅ ๋‚ด๋ถ€์— ์ง์ ‘ ์ฐธ์กฐ(Origin Node ID ๋ฐ Output Slot) ํ˜•ํƒœ๋กœ ํฌํ•จ๋œ ๊ตฌ์กฐ์ด๋‹ค [1, 3, 4]. +- **๊ฐœ๋ฐœ์ž ๋ชจ๋“œ ์ข…์†์„ฑ (Dev Mode Dependency):** ํ‘œ์ค€ ๋‚ด๋ณด๋‚ด๊ธฐ ๊ธฐ๋Šฅ๊ณผ ๋‹ฌ๋ฆฌ, ์„ค์ • ๋ฉ”๋‰ด์—์„œ 'Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ๋งŒ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•œ ํŠน์ˆ˜ ํฌ๋งท์ด๋‹ค [5-7]. +- **/prompt ์—”๋“œํฌ์ธํŠธ ํ˜ธํ™˜์„ฑ:** ComfyUI ์„œ๋ฒ„์˜ API ์—”๋“œํฌ์ธํŠธ์— ์ง์ ‘ ์ „๋‹ฌํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ํ‘œ์ค€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ๋œ๋‹ค [2, 8, 9]. + +## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) +- **ํฌ๋งท ๋ถ„ํ™” (Schema Bifurcation):** ์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ 'Frontend JSON(workflow.json)'๊ณผ ์‹คํ–‰์„ ์œ„ํ•œ 'API JSON(workflow_api.json)'์„ ์ฒ ์ €ํžˆ ๋ถ„๋ฆฌํ•˜์—ฌ ์šด์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•œ๋‹ค [1, 2, 10]. +- **๋…ธ๋“œ ์‹๋ณ„ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ:** ๊ฐ ๋…ธ๋“œ๋Š” ๊ณ ์œ ํ•œ ์ˆซ์žํ˜• ํ‚ค(String ID)๋กœ ์‹๋ณ„๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํŠน์ • ๋…ธ๋“œ์˜ ์ž…๋ ฅ์„ ๋™์ ์œผ๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค [11, 12]. +- **์—ญ๋ฐฉํ–ฅ ์˜์กด์„ฑ ํƒ์ƒ‰ (Execution Model Inversion):** ์—”์ง„์ด ์ถœ๋ ฅ ๋…ธ๋“œ(Save Image ๋“ฑ)๋กœ๋ถ€ํ„ฐ ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ์ตœ์ข… ๊ฒฐ๊ณผ์— ํ•„์š”ํ•œ ์˜์กด์„ฑ ๋…ธ๋“œ๋งŒ ์‹คํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ง€์›ํ•œ๋‹ค [13]. + +## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details) +**๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์†์„ฑ** +`workflow_api.json`์€ ๋ฃจํŠธ ๋ ˆ๋ฒจ์˜ ํ‚ค๊ฐ€ ๋…ธ๋“œ ID(๋ฌธ์ž์—ด)์ธ ๋‹จ์ผ JSON ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค [14]. ๊ฐ ๋…ธ๋“œ ์ •์˜์—๋Š” `class_type`(๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„)๊ณผ `inputs`(์œ„์ ฏ ๊ฐ’ ๋ฐ ํƒ€ ๋…ธ๋“œ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ์ •๋ณด)๊ฐ€ ํฌํ•จ๋˜๋ฉฐ, ์„ ํƒ์ ์œผ๋กœ `_meta` ํ•„๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค [11, 14]. ๋งํฌ ํ‘œํ˜„ ๋ฐฉ์‹์€ `[node_id, output_slot_index]` ํ˜•ํƒœ์˜ ๋ฐฐ์—ด๋กœ ์ž…๋ ฅ ํ•„๋“œ์— ์ง์ ‘ ์‚ฝ์ž…๋œ๋‹ค [3, 15]. + +**์ƒ์„ฑ ๋ฐ ์ถ”์ถœ ํ”„๋กœ์„ธ์Šค** +1. **GUI ๋‚ด๋ณด๋‚ด๊ธฐ:** ์„ค์ • ๋ฉ”๋‰ด์˜ ํ†ฑ๋‹ˆ๋ฐ”ํ€ด ์•„์ด์ฝ˜์„ ํ†ตํ•ด 'Enable Dev mode Options'๋ฅผ ํ™œ์„ฑํ™”ํ•œ ํ›„, ์ œ์–ดํŒ์— ๋‚˜ํƒ€๋‚˜๋Š” 'Save (API Format)' ๋˜๋Š” 'Export (API)' ๋ฒ„ํŠผ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ๋‹ค [6, 7, 14, 16]. +2. **์ด๋ฏธ์ง€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ถ”์ถœ:** ComfyUI์—์„œ ์ƒ์„ฑ๋œ PNG ํŒŒ์ผ์˜ `tEXt` ๋˜๋Š” `zTXt` ์ฒญํฌ์—๋Š” ์›Œํฌํ”Œ๋กœ์šฐ(Frontend)์™€ ํ”„๋กฌํ”„ํŠธ(API) ๋ฐ์ดํ„ฐ๊ฐ€ ํ•จ๊ป˜ ์ €์žฅ๋˜๋ฉฐ, `exiftool`์ด๋‚˜ ์ „๋ฌธ ์ถ”์ถœ ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค [17-20]. +3. **์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ณ€ํ™˜:** `comfyui-workflow-to-api-converter-endpoint`์™€ ๊ฐ™์€ ์ปค์Šคํ…€ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜ ์›Œํฌํ”Œ๋กœ์šฐ ํฌ๋งท์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ API ํฌ๋งท์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค [9, 21]. + +**ํ”„๋กœ๊ทธ๋ž˜๋ฐ์  ํ™œ์šฉ** +์ด ํฌ๋งท์€ Python์˜ `json` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ๋”•์…”๋„ˆ๋ฆฌ ํ˜•ํƒœ๋กœ ๋กœ๋“œ๋˜์–ด ์”จ๋“œ(seed), ํ”„๋กฌํ”„ํŠธ ํ…์ŠคํŠธ, ๋…ธ์ด์ฆˆ ๊ฐ•๋„ ๋“ฑ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค [11, 22]. `Replicate`, `Mystic`, `RunComfy` ๋“ฑ ํด๋ผ์šฐ๋“œ API ์„œ๋น„์Šค๋Š” ์ด ํฌ๋งท์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋‚˜ ์ปจํ…Œ์ด๋„ˆํ™”๋œ ์„œ๋น„์Šค๋กœ ๋ฐฐํฌํ•œ๋‹ค [3, 23, 24]. + +## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) +- **์ •๋ณด ์†์‹ค์˜ ๋น„๊ฐ€์—ญ์„ฑ:** API ํฌ๋งท์„ ๋‹ค์‹œ ComfyUI ์บ”๋ฒ„์Šค๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ, UI ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ๋“œ๋“ค์ด ๊ฒน์ณ ๋ณด์ด๊ฑฐ๋‚˜ ๊ทธ๋ฃน ์ •๋ณด๊ฐ€ ์‚ฌ๋ผ์ง„ '๋ผˆ๋Œ€(skeleton)' ์ƒํƒœ๋กœ ๋ณต์›๋˜๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค [9, 25]. +- **๋ฒ„์ „ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ:** ComfyUI์˜ ๋นˆ๋ฒˆํ•œ ์—…๋ฐ์ดํŠธ๋กœ ์ธํ•ด ๊ตฌ๋ฒ„์ „ JSON ํŒŒ์ผ์ด ์ตœ์‹  ๋ฒ„์ „์—์„œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ปค์Šคํ…€ ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ํƒ€์ž… ๋ณ€๊ฒฝ์— ์ทจ์•ฝํ•˜๋‹ค [26, 27]. + +## ๐Ÿ› ๏ธ ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) +- **comfyui-workflow-to-api-converter-endpoint:** ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜ ๋กœ์ง์„ ํŒŒ์ด์ฌ์œผ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ `/workflow/convert` ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ œ๊ณตํ•จ [9, 28]. (Git Commit: `bc85382`) +- **ComfyUI-to-Python-Extension:** `workflow_api.json` ์ž…๋ ฅ์„ ๋ฐ›์•„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ `.py` ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ง€์›ํ•จ [29, 30]. +- **Mystic Pipeline Deployment:** `new_pipeline.py` ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ API ํฌ๋งท JSON์„ ๋กœ๋“œํ•˜์—ฌ ์ž…๋ ฅ ํ”„๋กฌํ”„ํŠธ๋ฅผ ์ฃผ์ž…ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ๊ตฌ์กฐ์— ์ ์šฉ๋จ [31, 32]. +- **Replicate fofr/any-comfyui-workflow:** API JSON ๋ธ”๋กญ์„ ์ž…๋ ฅ๋ฐ›์•„ ์ด๋ฏธ์ง€/๋น„๋””์˜ค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฒ”์šฉ ์›Œํฌํ”Œ๋กœ์šฐ ๋ชจ๋ธ์˜ ํ•ต์‹ฌ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ํ™œ์šฉ๋จ [23, 33]. + +## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ +- **์ƒํƒœ:** draft +- **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual (์‹ค์ œ ์ ์šฉ ์‚ฌ๋ก€ ๋‹ค์ˆ˜ ๋ฐœ๊ฒฌ์œผ๋กœ ๊ฒ€์ฆ ๊ฐ€๋Šฅ) +- **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (๊ณต์‹ ๋ฌธ์„œ ๋ฐ ๊ฐœ๋ฐœ์ž ๊ฐ€์ด๋“œ ๊ธฐ๋ฐ˜ ํ•ฉ์„ฑ) +- **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) + +## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) +- 2026-05-19: Initial draft generated via Datacollector_MAC P-Reinforce engine. \ No newline at end of file diff --git a/10_Wiki/Topics/memory/episodes/ep_2026-05-15_tetris๋ผ๋Š”_ํด๋”๋ฅผ_๋งŒ๋“ค๊ณ _๊ฑฐ๊ธฐ์—_react_๊ธฐ๋ฐ˜์œผ๋กœ_ํ…ŒํŠธ๋ฆฌ์Šค_๊ฒŒ์ž„_.json b/10_Wiki/Topics/memory/episodes/ep_2026-05-15_tetris๋ผ๋Š”_ํด๋”๋ฅผ_๋งŒ๋“ค๊ณ _๊ฑฐ๊ธฐ์—_react_๊ธฐ๋ฐ˜์œผ๋กœ_ํ…ŒํŠธ๋ฆฌ์Šค_๊ฒŒ์ž„_.json new file mode 100644 index 00000000..5fc52c8c --- /dev/null +++ b/10_Wiki/Topics/memory/episodes/ep_2026-05-15_tetris๋ผ๋Š”_ํด๋”๋ฅผ_๋งŒ๋“ค๊ณ _๊ฑฐ๊ธฐ์—_react_๊ธฐ๋ฐ˜์œผ๋กœ_ํ…ŒํŠธ๋ฆฌ์Šค_๊ฒŒ์ž„_.json @@ -0,0 +1,27 @@ +{ + "id": "262cd2f1-d533-4f6c-91c2-de044b44570a", + "sessionId": "task_1778819919539", + "title": "tetris๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์— react ๊ธฐ๋ฐ˜์œผ๋กœ ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด. ์šฐ์„  ๋งŒ๋“ค๊ธฐ ์ „์—...", + "summary": "์‹œ์ž‘: tetris๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฑฐ๊ธฐ์— react ๊ธฐ๋ฐ˜์œผ๋กœ ํ…ŒํŠธ๋ฆฌ์Šค ๊ฒŒ์ž„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด. ์šฐ์„  ๋งŒ๋“ค๊ธฐ ์ „์— ๊ธฐํšํ•˜๊ณ  ์„ค๊ณ„ํ•˜๊ณ  ๊ทธ ๋‹ค์Œ์— ๊ณ ๋”ฉ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ์ข‹๊ฒ ์–ด โ†’ ์ตœ์ข…: ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ์ž‘์—…ํ•˜๋ฉด์„œ self reflector ๊ธฐ๋Šฅ์ด ์žˆ๋Š”๋ฐ. ์ž˜ ๋ฐ˜์˜๋˜๊ณ  ์žˆ๋Š”๊ฑด์ง€ ํ™•์ธํ•ด์ฃผ๋ฉด ์ข‹๊ฒ ์–ด.", + "keyDecisions": [ + "ํ…์„œํŠธ(Conclusion Text): Final Result]**", + "ํ˜„์žฌ์˜ `connectai`๋Š” **'๊ฐœ์ธ์šฉ ์ง€๋Šฅํ˜• ์—์ด์ „ํŠธ'**๋กœ์„œ๋Š” ๋งค์šฐ ์ˆ˜์ค€ ๋†’์€ ์„ค๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๊ทœ๋ชจ๊ฐ€ '๊ฐœ์ธ์˜ ๋ฉ”๋ชจ'๋ฅผ ๋„˜์–ด '๋ฐฉ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ์…‹'์„ ๋‹ค๋ฃจ๊ฒŒ ๋  ๊ฒฝ์šฐ, ์ง€๊ธˆ์˜ **Ful", + "๋ฐ›์œผ์‹ ๋‹ค๊ณ  ํ•˜์…”์„œ ์ผ๋‹จ์€ ํ™€๋“œ๋ฅผ ํ•œ ์ดํ‹€ ์ •๋„ ํ•ด๋†จ์—ˆ์ž–์•„์š”.", + "์ฐธ์„์ž 7 46:53", + "* 5์›” 19์ผ๊นŒ์ง€ ์ตœ์ข… ์ˆ˜์ • ๋นŒ๋“œ ์™„๋ฃŒ ๋ฐ ์™ธ๋ถ€ ์‹œ์—ฐ์šฉ ์˜์ƒ ์ œ์ž‘ ๊ณ„ํš ์ˆ˜๋™" + ], + "topics": [ + "์ฐธ์„์ž", + "๊ทธ๋Ÿฌ๋‹ˆ๊นŒ", + "์ด๋ ‡๊ฒŒ", + "๋ชจ๋ฐ”์ผ", + "๊ทธ๋ž˜์„œ", + "๊ฐ™์•„์š”", + "๊ทธ๋Ÿฌ๋ฉด", + "๊ฑฐ์˜ˆ์š”" + ], + "projectContext": "e:\\Wiki", + "timestamp": 1778840072869, + "duration": 0, + "messageCount": 77 +} \ No newline at end of file diff --git a/10_Wiki/Topics/memory/episodes/ep_2026-05-18_e_wiki_00_raw_script_test_ai๋กœ_์ƒˆ๋กœ์šด_๋น„์ฆˆ๋‹ˆ์Šค_์ €.json b/10_Wiki/Topics/memory/episodes/ep_2026-05-18_e_wiki_00_raw_script_test_ai๋กœ_์ƒˆ๋กœ์šด_๋น„์ฆˆ๋‹ˆ์Šค_์ €.json new file mode 100644 index 00000000..ad803fdf --- /dev/null +++ b/10_Wiki/Topics/memory/episodes/ep_2026-05-18_e_wiki_00_raw_script_test_ai๋กœ_์ƒˆ๋กœ์šด_๋น„์ฆˆ๋‹ˆ์Šค_์ €.json @@ -0,0 +1,21 @@ +{ + "id": "4549141d-0e03-4af8-b9fd-581b41891078", + "sessionId": "task_1779074798650", + "title": "E:\\Wiki\\00_Raw\\Script_test\\AI๋กœ ์ƒˆ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ์ €์™€ ํ•จ๊ป˜ ๋น„ํ–‰๊ธฐ ํƒ€๊ณ  ์ƒŒํ”„๋ž€์‹œ...", + "summary": "์‹œ์ž‘: E:\\Wiki\\00_Raw\\Script_test\\AI๋กœ ์ƒˆ๋กœ์šด ๋น„์ฆˆ๋‹ˆ์Šค ์ €์™€ ํ•จ๊ป˜ ๋น„ํ–‰๊ธฐ ํƒ€๊ณ  ์ƒŒํ”„๋ž€์‹œ์Šค์ฝ” ๊ตฌ๊ธ€๋กœ ๋– ๋‚˜์‹œ์ฃ  l EP.1 ๊ตฌ๊ธ€ IO ์‹ค๋ฆฌ์ฝ˜๋ฐธ๋ฆฌ__FmcX0VKJres โ†’ ์ตœ์ข…: ๋งŒ์•ฝ ๋‚ด๊ฐ€ ์œ ์‚ฌํ•œ ๋‚ด์šฉ์œผ๋กœ ์˜์ƒ์„ ์ œ์ž‘ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”์ง€ ์Šคํฌ๋ฆฝํŠธ ์จ์ค„ ์ˆ˜ ์žˆ์–ด? \n\n์Šคํฌ๋ฆฝํŠธ ์จ์ค„๋•Œ ์ฝ˜ํ‹ฐ๋„ ๋งํ•ด์ฃผ๊ณ  ๊ทธ ๋‹ค์Œ์— ์ƒ์„ธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์จ์ฃผ๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™", + "keyDecisions": [], + "topics": [ + "์Šคํฌ๋ฆฝํŠธ๋ฅผ", + "wiki", + "00_raw", + "script_test", + "ai๋กœ", + "์ƒˆ๋กœ์šด", + "๋น„์ฆˆ๋‹ˆ์Šค", + "๋น„ํ–‰๊ธฐ" + ], + "projectContext": "e:\\Wiki", + "timestamp": 1779078041153, + "duration": 0, + "messageCount": 7 +} \ No newline at end of file diff --git a/10_Wiki/Topics/memory/episodes/ep_2026-05-18_e_wiki_connectai_์ด_ํ”„๋กœ์ ํŠธ์•ผ.json b/10_Wiki/Topics/memory/episodes/ep_2026-05-18_e_wiki_connectai_์ด_ํ”„๋กœ์ ํŠธ์•ผ.json new file mode 100644 index 00000000..10bb6fef --- /dev/null +++ b/10_Wiki/Topics/memory/episodes/ep_2026-05-18_e_wiki_connectai_์ด_ํ”„๋กœ์ ํŠธ์•ผ.json @@ -0,0 +1,15 @@ +{ + "id": "81c78f42-315b-4af0-a694-3f6dc6fe624b", + "sessionId": "task_1779065343970", + "title": "E:\\Wiki\\connectai ์ด ํ”„๋กœ์ ํŠธ์•ผ", + "summary": "E:\\Wiki\\connectai ์ด ํ”„๋กœ์ ํŠธ์•ผ ASTRA OFFICE ๋ถ€๋ถ„ ๊ด€๋ จํ•ด์„œ ๊ฐœ์„ ํ•  ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ๋งŽ์•„. ๊ฐœ์„ ์ ์ด ๋ฌด์—ˆ์ด ์žˆ๋Š”์ง€ ์˜๊ฒฌ ์ฃผ๋ฉด ์ข‹๊ฒ ์–ด. E:\\Wiki\\connectai GIT์—์„œ PUll ํ•ด", + "keyDecisions": [], + "topics": [ + "wiki", + "connectai" + ], + "projectContext": "e:\\Wiki", + "timestamp": 1779065687652, + "duration": 0, + "messageCount": 7 +} \ No newline at end of file diff --git a/10_Wiki/Topics/memory/episodes/ep_2026-05-18_์ง€๊ธˆ_์ž‘์—…ํ•˜๊ณ _์žˆ๋Š”๊ฑฐ_์ทจ์†Œํ•ด.json b/10_Wiki/Topics/memory/episodes/ep_2026-05-18_์ง€๊ธˆ_์ž‘์—…ํ•˜๊ณ _์žˆ๋Š”๊ฑฐ_์ทจ์†Œํ•ด.json new file mode 100644 index 00000000..8c820f28 --- /dev/null +++ b/10_Wiki/Topics/memory/episodes/ep_2026-05-18_์ง€๊ธˆ_์ž‘์—…ํ•˜๊ณ _์žˆ๋Š”๊ฑฐ_์ทจ์†Œํ•ด.json @@ -0,0 +1,12 @@ +{ + "id": "cf21f52b-4219-4951-b10e-7b92d9dfbbf6", + "sessionId": "task_1779106388454", + "title": "์ง€๊ธˆ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š”๊ฑฐ ์ทจ์†Œํ•ด", + "summary": "์ง€๊ธˆ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋Š”๊ฑฐ ์ทจ์†Œํ•ด ์ง€๊ธˆ ํŽ˜์ด์ง€๋“ค์„ ๋ดค๋Š”๋ฐ ์ž‘๋™์•ˆ๋˜๋Š” ํŽ˜์ด์ง€๋„ ๋งŽ๊ณ , ๋™์‹œ์— ์ด๋ฏธ์ง€๊ฐ€ ์—†๋Š” ์ด๋ฏธ์ง€๋“ค๋„ ์žˆ์–ด. ๋”๋ฏธ ๊ฐ’์ด์ง€๋งŒ ์ผ๋‹จ ๋ชจ๋“  ์ด๋ฏธ์ง€๋ฅผ ๋‹ค ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  ํด๋ฆญํ–ˆ์„๋•Œ์˜ ๋ณด์—ฌ์ค˜์•ผํ•  ํŽ˜์ด์ง€๋“ค๋„ ๋‹ค ๋ณด์ผ ์ˆ˜ ์žˆ๊ฒŒ ์ˆ˜์ •ํ•ด์ค˜.", + "keyDecisions": [], + "topics": [], + "projectContext": "e:\\Wiki", + "timestamp": 1779108915969, + "duration": 0, + "messageCount": 4 +} \ No newline at end of file diff --git a/10_Wiki/Topics/memory/long_term.json b/10_Wiki/Topics/memory/long_term.json index 6cd6ead5..851b8db7 100644 --- a/10_Wiki/Topics/memory/long_term.json +++ b/10_Wiki/Topics/memory/long_term.json @@ -8,8 +8,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981978, - "lastReferencedAt": 1778655981978, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 5 }, { "id": "5d44cb85-e018-468c-a7be-dbfa44546fce", @@ -18,8 +18,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981979, - "lastReferencedAt": 1778655981979, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 5 }, { "id": "4cb93674-fd06-4cf4-96f9-9ac2008a6b49", @@ -28,8 +28,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981979, - "lastReferencedAt": 1778655981979, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 4 }, { "id": "acb8373d-3a17-4266-9f7e-608349add88c", @@ -38,8 +38,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981986, - "lastReferencedAt": 1778655981986, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 4 }, { "id": "64b1c34d-64a0-493a-82ee-298c0fd1900f", @@ -48,8 +48,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981992, - "lastReferencedAt": 1778655981992, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 5 }, { "id": "2e323e3f-bd37-4b25-8cd7-d21ddee58728", @@ -58,8 +58,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981997, - "lastReferencedAt": 1778655981997, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 4 }, { "id": "e54c9135-67ac-4a46-b337-95af5bce61bb", @@ -68,8 +68,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981998, - "lastReferencedAt": 1778655981998, - "referenceCount": 0 + "lastReferencedAt": 1779074730275, + "referenceCount": 2 }, { "id": "cee8c995-169d-481f-90e4-10cdb920dea5", @@ -78,8 +78,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655981998, - "lastReferencedAt": 1778655981998, - "referenceCount": 0 + "lastReferencedAt": 1779074803033, + "referenceCount": 1 }, { "id": "1438ba42-23b4-4751-bb64-aa583bbf43e0", @@ -88,8 +88,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655982004, - "lastReferencedAt": 1778655982004, - "referenceCount": 0 + "lastReferencedAt": 1779074803033, + "referenceCount": 1 }, { "id": "8f248ce7-e9f8-42a9-bc4a-eadfd3534419", @@ -98,8 +98,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655982011, - "lastReferencedAt": 1778655982011, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 2 }, { "id": "e0e13452-6fb1-40d4-8f7e-b3c24e07263b", @@ -158,8 +158,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655982028, - "lastReferencedAt": 1778655982028, - "referenceCount": 0 + "lastReferencedAt": 1779074803033, + "referenceCount": 1 }, { "id": "1a3671d5-1300-4a26-a9d1-3469c705a927", @@ -168,8 +168,8 @@ "source": "session:task_1778642741077", "confidence": 0.7, "createdAt": 1778655982028, - "lastReferencedAt": 1778655982028, - "referenceCount": 0 + "lastReferencedAt": 1779106389633, + "referenceCount": 2 }, { "id": "2b5867b3-6842-4bd5-ab71-79e54d94beb8", @@ -240,7 +240,197 @@ "createdAt": 1778655982068, "lastReferencedAt": 1778655982068, "referenceCount": 0 + }, + { + "id": "ec70d45f-665c-43e6-8e04-72afa35c468a", + "category": "rule", + "content": "ํ•ญ์ƒ ์ด๊ฑฐ์˜ˆ์š”. ๋„ค ํ•ญ์ƒ ์ด๊ฑฐ", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072790, + "lastReferencedAt": 1778840072790, + "referenceCount": 0 + }, + { + "id": "da7281ea-67d0-4d11-a22e-de8fe2530bbe", + "category": "rule", + "content": "๋ฌด์กฐ๊ฑด ์ •๊ฐ€ ๊ธฐ์ค€ ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ํ• ์ธ๊ฐ€๋Š” ๋งค ๊ตฌ๋งค ํŽ˜์ด์ง€์— ๋ฐ˜์˜ ๋ญ ์ด๋ ‡๊ฒŒ ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ฒŒ ๋ญ˜ ์จ์ค˜์•ผ ๋  ๊ฒƒ ๊ฐ™์•„์š”.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072791, + "lastReferencedAt": 1779074803033, + "referenceCount": 1 + }, + { + "id": "a85600e4-0991-4803-83d4-e414ec5f2eef", + "category": "rule", + "content": "๋ฌด์กฐ๊ฑด ํ•œ ์„นํ„ฐ์— 21๊ฐœ๊ฐ€ ๋งฅ์Šค์•ผ ์ด๊ฑฐ๋ฅผ ๋”ฑ ์ด๋ ‡๊ฒŒ ๊ฐ์ธ์‹œํ‚ค๊ณ  ์‹ถ์€ ๊ฒƒ๋„ ์žˆ์–ด์š”.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072791, + "lastReferencedAt": 1779106389633, + "referenceCount": 2 + }, + { + "id": "da138a29-ae01-468a-a2dd-b1e349d3af9e", + "category": "rule", + "content": "ํ•ญ์ƒ ๊ฑฐ๊ธฐ์— ๋งž์ถฐ์„œ ๋„ˆํฌ๋“ค์ด ๋‚ด๋ฆฌ๊ณ  ์˜ฌ๋ ธ๋‹ค๊ณ  ๋ง‰ ํ•˜๋ฉด ๋ช‡ ๊ฐœ๋งŒ ๋” ๋„ฃ์–ด์ค˜์š”.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072792, + "lastReferencedAt": 1778840072792, + "referenceCount": 0 + }, + { + "id": "fe879dd3-ebf2-4aa6-8667-24a03baa7ca8", + "category": "rule", + "content": "ํ•ญ์ƒ\n\n์ฐธ์„์ž 4 1:06:26", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072798, + "lastReferencedAt": 1778840072798, + "referenceCount": 0 + }, + { + "id": "81e1c769-3dd0-4708-ba62-434d01541a3e", + "category": "rule", + "content": "์•ž์œผ๋กœ ์„ ํƒ์„ ํ•  ๋•Œ๋„์š”.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072805, + "lastReferencedAt": 1778840072805, + "referenceCount": 0 + }, + { + "id": "6a31f93a-ae13-47a9-a0eb-f0f990d47a17", + "category": "rule", + "content": "์•ž์œผ๋กœ ๋™์ผํ•œ ์–ด๋–ค ๋ญ”๊ฐ€๊ฐ€ ์˜จ๋‹ค ๊ทธ๋Ÿฌ๋ฉด ์ข€ ๋” ๋น ๋ฅผ ์ˆ˜๋Š” ์žˆ์ž–์•„์š”.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072810, + "lastReferencedAt": 1778840072810, + "referenceCount": 0 + }, + { + "id": "64dca6a5-0ec1-4015-bc8f-148701c08a1e", + "category": "rule", + "content": "์•ž์œผ๋กœ ์›์น™์œผ๋กœ ํ•˜์‹œ์ž๊ณ  ํ•˜๋‹ˆ๊นŒ ๋ฐ”๊นฅ์— ์•ˆ ๋“ค์–ด๊ฐ€๋‹ˆ๊นŒ ํ™€ ๋งˆ์‹œ๋กœ ๋Œ๋ ค ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ํ•˜๋‹ˆ๊นŒ", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072815, + "lastReferencedAt": 1778840072815, + "referenceCount": 0 + }, + { + "id": "b45e0a4b-6f25-46d5-a3a6-9d80b8565c8e", + "category": "rule", + "content": "๋‹ค์Œ๋ถ€ํ„ฐ๋Š” ๋ˆ ๋ฐ›์„ ๊ฑฐ์˜ˆ์š”.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072820, + "lastReferencedAt": 1778840072820, + "referenceCount": 0 + }, + { + "id": "32067848-bc29-4046-995c-a1930c930a61", + "category": "preference", + "content": "์ €๋Š” ์ข‹์•„์š”. ์ €๋Š” ์ข‹์•„", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072824, + "lastReferencedAt": 1778840072824, + "referenceCount": 0 + }, + { + "id": "451d2a29-2420-4f13-ad17-62d4bcc2a4bf", + "category": "goal", + "content": "Goal: ์›ํ•˜๋Š” ๋ชฉํ‘œ", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072829, + "lastReferencedAt": 1778840072829, + "referenceCount": 0 + }, + { + "id": "18604089-47fb-4b98-879b-8e8595d73cfe", + "category": "goal", + "content": "Goal\n์‚ฌ์šฉ์ž๊ฐ€ ์–ป๊ณ  ์‹ถ์€ ๋ชฉํ‘œ", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072834, + "lastReferencedAt": 1778840072834, + "referenceCount": 0 + }, + { + "id": "51d6ae78-4c61-4830-8ad4-c550f8fc3931", + "category": "goal", + "content": "Goal: ๋…ผ๋ฌธ์˜ outline์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072838, + "lastReferencedAt": 1779074612073, + "referenceCount": 1 + }, + { + "id": "0a257ba3-b320-48e4-bec0-e0bef68b6069", + "category": "decision", + "content": "๊ฒฐ๋ก \n\nAI ๋‹ต๋ณ€์˜ ์‹คํŒจ๋Š” ๋‹จ์ˆœํ•œ ๋ชจ๋ธ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž์˜ ๋ถˆ์™„์ „ํ•œ ์˜๋„ ์ „๋‹ฌ์—์„œ๋„ ๋ฐœ์ƒํ•œ๋‹ค.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072838, + "lastReferencedAt": 1778840072838, + "referenceCount": 0 + }, + { + "id": "947dd1e0-a369-4023-8829-381d72a6fefd", + "category": "decision", + "content": "Conclusion ๊ตฌ์กฐ๋กœ ์ •๋ฆฌํ•ด์ค˜.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072839, + "lastReferencedAt": 1779074730275, + "referenceCount": 3 + }, + { + "id": "e0cdc235-8907-4934-b9f8-24c9f36f8e0d", + "category": "decision", + "content": "๊ฒฐ๋ก \n\nC-G-C-F-Q ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๊ธธ๊ฒŒ ์„ค๋ช…ํ•˜๋„๋ก ๊ฐ•์š”ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ๋„, AI๊ฐ€ ๋‹ต๋ณ€์— ํ•„์š”ํ•œ ์ตœ์†Œ ๋งฅ๋ฝ์„ ํ™•๋ณดํ•˜๋„๋ก ๋•๋Š”๋‹ค.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072845, + "lastReferencedAt": 1779106389633, + "referenceCount": 1 + }, + { + "id": "d4804a31-585e-49bc-b6a3-4c1751dcf312", + "category": "decision", + "content": "๊ฒฐ๋ก \n\n์ข‹์€ AI ์ƒํ˜ธ์ž‘์šฉ์€ ํ•œ ๋ฒˆ์— ์™„๋ฒฝํ•œ ์งˆ๋ฌธ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‚ฌ์šฉ์ž์™€ AI๊ฐ€ ํ•จ๊ป˜ ์˜๋„๋ฅผ ์ •๊ตํ™”ํ•˜๋Š” ๋Œ€ํ™” ์ ˆ์ฐจ๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072850, + "lastReferencedAt": 1779074730275, + "referenceCount": 3 + }, + { + "id": "19d285cc-70c5-49e5-8abf-6f25a8f2b924", + "category": "decision", + "content": "Conclusion\nSummary", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072855, + "lastReferencedAt": 1779074730275, + "referenceCount": 3 + }, + { + "id": "e7056c41-7a01-4e1c-b3c8-64480cd95077", + "category": "rule", + "content": "๋ฐ˜๋“œ์‹œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑํ•œ๋‹ค.", + "source": "session:task_1778819919539", + "confidence": 0.7, + "createdAt": 1778840072860, + "lastReferencedAt": 1778840072860, + "referenceCount": 0 } ], - "lastUpdated": 1778655982068 + "lastUpdated": 1779108916044 } \ No newline at end of file