--- 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])