--- id: executing-comfyui-workflows-as-standalone-scripts title: "Executing ComfyUI Workflows as Standalone Scripts" 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-20 updated_at: 2026-05-20 review_reason: "" merge_history: [] tags: ["research", "Comfyui workflow json 생성 방법"] raw_sources: ["NotebookLM Synthesis"] applied_in: ["pydn/ComfyUI-to-Python-Extension", "WorkflowExecutor", "ExecutionCache", "new_pipeline.py", "bc85382"] github_commit: "bc85382" --- # [[Executing ComfyUI Workflows as Standalone Scripts]] ## 🎯 ν•œ 쀄 톡찰 (One-line insight) ComfyUI μ›Œν¬ν”Œλ‘œμš°λ₯Ό μ‹œκ°μ  μΈν„°νŽ˜μ΄μŠ€ 없이 μ‹€ν–‰ κ°€λŠ₯ν•œ λ…λ¦½ν˜• 슀크립트둜 λ³€ν™˜ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λŠ” **API ν˜•μ‹μ˜ JSON 직렬화와 Python ν™˜κ²½μ˜ μ‹€ν–‰ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜**을 톡해 κ³ λ„μ˜ μžλ™ν™”μ™€ ν—€λ“œλ¦¬μŠ€(Headless) ν™˜κ²½ 배포λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€ [1-4]. ## 🧠 핡심 κ°œλ… (Core concepts) - **API JSON Format (Backend JSON):** μ‹œκ°μ  메타데이터λ₯Ό μ œκ±°ν•˜κ³  λ…Έλ“œ μž…λ ₯κ³Ό μ—°κ²° μ •λ³΄λ§Œμ„ 남긴 μ‹€ν–‰ μ΅œμ ν™” κ·Έλž˜ν”„ 파일둜, λ…λ¦½ν˜• 슀크립트 μ‹€ν–‰μ˜ κΈ°μ΄ˆκ°€ λœλ‹€ [2, 5, 6]. - **WorkflowExecutor:** μ›Œν¬ν”Œλ‘œμš° μ‹€ν–‰ ν™˜κ²½μ„ μ΄ˆκΈ°ν™”ν•˜κ³ , λ…Έλ“œ μœ νš¨μ„± 검사(`validate_prompt`) 및 μ‹€ν–‰ λͺ©λ‘(`ExecutionList`) ꡬ좕을 λ‹΄λ‹Ήν•˜λŠ” μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 객체이닀 [7]. - **ExecutionCache:** λ…Έλ“œ 좜λ ₯, UI 데이터 및 객체 μΈμŠ€ν„΄μŠ€λ₯Ό μΊμ‹±ν•˜μ—¬ 쀑볡 계산을 쀄이고 μ‹€ν–‰ μ„±λŠ₯을 μ΅œμ ν™”ν•˜λŠ” 톡합 관리 ν΄λž˜μŠ€μ΄λ‹€ [8]. - **Headless Processing:** μ›Ή λΈŒλΌμš°μ €λ‚˜ GUI 없이 μ„œλ²„ λ°±μ—”λ“œ λ˜λŠ” λ…λ¦½ν˜• 슀크립트 ν˜•νƒœλ‘œ μ›Œν¬ν”Œλ‘œμš°λ₯Ό κ΅¬λ™ν•˜μ—¬ μ‹€ν–‰ μ˜€λ²„ν—€λ“œλ₯Ό μ€„μ΄λŠ” 방식이닀 [4]. ## 🧩 μΆ”μΆœλœ νŒ¨ν„΄ (Extracted patterns) - **Serialization Bifurcation (직렬화 이뢄화):** μ‹œκ°μ  νŽΈμ§‘μ„ μœ„ν•œ Frontend JSON(`workflow.json`)κ³Ό μžλ™ν™” 싀행을 μœ„ν•œ Backend API JSON(`workflow_api.json`)을 λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•˜λŠ” 섀계 νŒ¨ν„΄μ΄ λ°œκ²¬λœλ‹€ [2, 5, 6, 9]. - **Execution Model Inversion (μ‹€ν–‰ λͺ¨λΈ μ—­μ „):** λͺ¨λ“  λ…Έλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” λŒ€μ‹  'Save Image'와 같은 좜λ ₯ λ…Έλ“œμ—μ„œ μ—­μΆ”μ ν•˜μ—¬ ν•„μš”ν•œ μ˜μ‘΄μ„±λ§Œ μ‹λ³„ν•˜κ³  μ‹€ν–‰ν•˜λŠ” 효율적 νŒ¨ν„΄μ„ μ‚¬μš©ν•œλ‹€ [10]. - **Python-to-Script Conversion:** `.json` μ›Œν¬ν”Œλ‘œμš°λ₯Ό `.py` μ½”λ“œλ‘œ 직접 λ³€ν™˜ν•˜μ—¬ λ³„λ„μ˜ JSON 처리 없이 Python λŸ°νƒ€μž„μ—μ„œ μ¦‰μ‹œ μ‹€ν–‰ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 좔상화 νŒ¨ν„΄μ΄ μ‘΄μž¬ν•œλ‹€ [3, 11]. ## πŸ“– μ„ΈλΆ€ λ‚΄μš© (Details) ComfyUI μ›Œν¬ν”Œλ‘œμš°λ₯Ό λ…λ¦½ν˜• 슀크립트둜 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ¨Όμ € **'Dev mode'**λ₯Ό ν™œμ„±ν™”ν•˜μ—¬ **API ν˜•μ‹μ˜ JSON**을 μΆ”μΆœν•΄μ•Ό ν•œλ‹€ [6, 12, 13]. ν‘œμ€€ Frontend JSON은 λ…Έλ“œ μœ„μΉ˜λ‚˜ κ·Έλ£Ήν™” λ“± μ‹œκ°μ  정보λ₯Ό ν¬ν•¨ν•˜μ§€λ§Œ, API JSON은 이λ₯Ό μ œκ±°ν•˜κ³  λ…Έλ“œ κ°„μ˜ 링크λ₯Ό μž…λ ₯ ν•„λ“œ λ‚΄μ˜ 직접 μ°Έμ‘°(`[origin_id, output_slot]`)둜 ν¬ν•¨ν•˜μ—¬ λ°±μ—”λ“œ 엔진이 μ¦‰μ‹œ 해석할 수 μžˆλ„λ‘ μ΅œμ ν™”λ˜μ–΄ μžˆλ‹€ [2, 14, 15]. λ…λ¦½ν˜• μ‹€ν–‰μ˜ 핡심 ꡬ성 μš”μ†ŒμΈ **WorkflowExecutor**λŠ” `DynamicPrompt`λ₯Ό κ΅¬μ„±ν•˜κ³  이λ₯Ό λ…Έλ“œ λ‹¨μœ„μ˜ μ‹€ν–‰ λͺ©λ‘μΈ `ExecutionList`둜 λ³€ν™˜ν•œλ‹€ [7]. 각 λ…Έλ“œλŠ” `_execute_node` λ©”μ„œλ“œλ₯Ό 톡해 순차적으둜 μ‹€ν–‰λ˜λ©°, μ΄λ•Œ `get_input_data`와 `get_output_data` ν•¨μˆ˜κ°€ μ‚¬μš©λ˜μ–΄ 데이터 흐름을 μ²˜λ¦¬ν•œλ‹€ [8, 16]. **ExecutionCache**λŠ” `HierarchicalCache`λ₯Ό 기반으둜 κ΅¬μΆ•λ˜μ–΄ 이전 μ‹€ν–‰ κ²°κ³Όλ₯Ό λ³΄μ‘΄ν•¨μœΌλ‘œμ¨ 연속적인 μ‹€ν–‰ μ‹œ μ„±λŠ₯을 λΉ„μ•½μ μœΌλ‘œ ν–₯μƒμ‹œν‚¨λ‹€ [8]. 더 κ³ λ„ν™”λœ λ°©μ‹μœΌλ‘œλŠ” **ComfyUI-to-Python-Extension**을 μ‚¬μš©ν•˜μ—¬ μ›Œν¬ν”Œλ‘œμš° 자체λ₯Ό μ‹€ν–‰ κ°€λŠ₯ν•œ `.py` 파일둜 λ³€ν™˜ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€ [3, 11]. 이 방식은 μƒμ„±λœ 슀크립트 내에 λ…Έλ“œ μ‹€ν–‰ 둜직이 ν¬ν•¨λ˜μ–΄ μžˆμ–΄ λ³„λ„μ˜ ν”„λ‘¬ν”„νŠΈ μ„œλ²„ 호좜 없이도 단독 μ‹€ν–‰(Single-shot runner)이 κ°€λŠ₯ν•˜λ©°, λ©”λͺ¨λ¦¬ 관리 ν”Œλž˜κ·Έ(`--highvram` λ“±)λ₯Ό 슀크립트 인자둜 전달받아 μ œμ–΄ν•  수 μžˆλ‹€ [17, 18]. 생산 ν™˜κ²½μ—μ„œλŠ” **Mystic**μ΄λ‚˜ **Replicate**와 같은 ν”Œλž«νΌμ„ 톡해 μ΄λŸ¬ν•œ 슀크립트λ₯Ό μ„œλ²„λ¦¬μŠ€ μ—”λ“œν¬μΈνŠΈλ‘œ 배포할 수 있으며, μ΄λ•Œ Python SDKλ₯Ό μ‚¬μš©ν•˜μ—¬ μ›Œν¬ν”Œλ‘œμš° JSON λ‚΄μ˜ μ‹œλ“œ(seed)λ‚˜ ν”„λ‘¬ν”„νŠΈ 값을 ν”„λ‘œκ·Έλž˜λ° λ°©μ‹μœΌλ‘œ μˆ˜μ •ν•˜μ—¬ μ‹€ν–‰ν•œλ‹€ [19-21]. ## βš–οΈ λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & updates) - **μ›Œν¬ν”Œλ‘œμš° μœ μ—°μ„± λŒ€ λ³€ν™˜ λ³΅μž‘μ„±:** 일뢀 μ—°κ΅¬μ—μ„œλŠ” `ComfyUI-to-Python-Extension`이 쀑간 λ³€ν™˜ 단계λ₯Ό μš”κ΅¬ν•˜μ—¬ **동적(Dynamic) μ›Œν¬ν”Œλ‘œμš°** 싀행에 어렀움이 μžˆμ„ 수 μžˆλ‹€κ³  μ§€μ ν•˜λ©°, λŒ€μ‹  API JSON을 직접 λ‘œλ“œν•˜λŠ” 방식을 ꢌμž₯ν•˜κΈ°λ„ ν•œλ‹€ [4]. - **JSON 버전 ν˜Έν™˜μ„±:** ComfyUIλŠ” λΉˆλ²ˆν•˜κ²Œ μ—…λ°μ΄νŠΈλ˜λ―€λ‘œ κ΅¬λ²„μ „μ˜ JSON 파일이 μ΅œμ‹  λ²„μ „μ˜ μ‹€ν–‰ μ—”μ§„μ—μ„œ 정상 μž‘λ™ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€λŠ” κ²½κ³ κ°€ λͺ…μ‹œλ˜μ–΄ μžˆλ‹€ [22, 23]. ## πŸ› οΈ 적용 사둀 (Applied in summary) - **pydn/ComfyUI-to-Python-Extension:** μ›Œν¬ν”Œλ‘œμš°λ₯Ό λ…λ¦½ν˜• `.py` 슀크립트둜 μžλ™ λ²ˆν™˜ν•˜λŠ” λ„κ΅¬λ‘œ κ΅¬ν˜„λ˜μ—ˆλ‹€ [3, 24]. - **WorkflowExecutor & ExecutionCache:** SDXL Turbo μ›Œν¬ν”Œλ‘œμš°λ₯Ό λ…λ¦½ν˜• 슀크립트둜 μ‹€ν–‰ν•˜κΈ° μœ„ν•œ 핡심 μ•„ν‚€ν…μ²˜λ‘œ μ œμ•ˆλ˜μ—ˆμœΌλ©° GitHub Gistλ₯Ό 톡해 μ†ŒμŠ€ μ½”λ“œκ°€ κ³΅μœ λ˜μ—ˆλ‹€ [7, 8, 25]. - **Mystic (new_pipeline.py):** ComfyUI μ„œλ²„λ₯Ό μ‹œμž‘ν•˜κ³  μ»€μŠ€ν…€ μ›Œν¬ν”Œλ‘œμš°λ₯Ό λ‘œλ“œν•˜μ—¬ μž…λ ₯ ν”„λ‘¬ν”„νŠΈλ₯Ό μ£Όμž…ν•˜λŠ” 배포용 Python ν…œν”Œλ¦Ώ νŒŒμΌμ΄λ‹€ [20, 26]. - **GitHub Commit (bc85382):** `comfyui-workflow-to-api-converter-endpoint` ν”„λ‘œμ νŠΈμ—μ„œ 콀보 μœ„μ ―μ˜ λŒ€μ†Œλ¬Έμž 검증 문제λ₯Ό μˆ˜μ •ν•œ 컀밋 기둝이 λ°œκ²¬λœλ‹€ [27]. ## βœ… 검증 μƒνƒœ 및 신뒰도 - **μƒνƒœ:** draft - **검증 단계:** conceptual (μ‹€μ œ 적용 사둀 발견 μ‹œ applied/validated둜 승격 κ°€λŠ₯) - **좜처 신뒰도:** B (Official Documentation / Primary Source via NotebookLM) - **쀑볡 검사 κ²°κ³Ό:** μ‹ κ·œ 생성 (New discovery) ## πŸ“ λ³€κ²½ 이λ ₯ (Change history) - 2026-05-20: Initial draft generated via Datacollector_MAC P-Reinforce engine.