--- id: lifecycle---comfyui title: "Lifecycle - ComfyUI" category: "10_Wiki/Topics" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: [] duplicate_of: "" source_trust_level: "B" confidence_score: 1.0 created_at: 2026-05-20 updated_at: 2026-05-20 review_reason: "" merge_history: [] tags: ["web", "wikify"] raw_sources: ["https://docs.comfy.org/custom-nodes/backend/lifecycle"] applied_in: [] github_commit: "" --- # [[Lifecycle - ComfyUI]] ## 🎯 ν•œ 쀄 톡찰 (One-line insight) ComfyUIκ°€ μ‹œμž‘λ  λ•Œ `custom_nodes` 디렉토리λ₯Ό μŠ€μΊ”ν•˜μ—¬ Python λͺ¨λ“ˆμ„ λ‘œλ“œν•˜κ³  μ»€μŠ€ν…€ λ…Έλ“œλ₯Ό μ •μ˜ν•˜λŠ” 라이프사이클 ν”„λ‘œμ„ΈμŠ€. ## 🧠 핡심 κ°œλ… (Core concepts) * **[[custom_nodes]] λ‘œλ”©**: ComfyUI μ‹œμž‘ μ‹œ `custom_nodes` 폴ের더λ₯Ό μŠ€μΊ”ν•˜μ—¬ Python λͺ¨λ“ˆμ„ μ°Ύμ•„ λ‘œλ“œν•¨. * **[[NODE_CLASS_MAPPINGS]]**: λͺ¨λ“ˆμ΄ μ»€μŠ€ν…€ λ…Έλ“œλ‘œ μΈμ‹λ˜κΈ° μœ„ν•΄ λ°˜λ“œμ‹œ 내보내야(export) ν•˜λŠ” λ”•μ…”λ„ˆλ¦¬ λ§€ν•‘ 정보. * **[[__init__.py]] μ—­ν• **: μ»€μŠ€ν…€ λ…Έλ“œ λͺ¨λ“ˆμ˜ μ§„μž…μ μœΌλ‘œ, μ‹€ν–‰ μ‹œ `NODE_CLASS_MAPPINGS`λ₯Ό ν¬ν•¨ν•˜μ—¬ λ…Έλ“œ μ •μ˜λ₯Ό ComfyUI에 κ°€μš©ν•˜κ²Œ 함. * **[[WEB_DIRECTORY]] μ„€μ •**: ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ JavaScript νŒŒμΌμ„ μ œκ³΅ν•˜κΈ° μœ„ν•΄ λͺ¨λ“ˆ λ‚΄ μƒλŒ€ 경둜λ₯Ό μ§€μ •ν•˜λŠ” κΈ°λŠ₯. ## 🧩 μΆ”μΆœλœ νŒ¨ν„΄ (Extracted patterns) * **λͺ¨λ“ˆ 인식 쑰건**: Python λͺ¨λ“ˆμ€ `__init__.py`λ₯Ό ν¬ν•¨ν•˜λŠ” 디렉토리 ν˜•νƒœμ΄λ©°, `__all__` 속성에 μ •μ˜λœ λ‚΄μš©μ„ 내보냄. * **μ—λŸ¬ 처리 νŒ¨ν„΄**: μ½”λ“œμ— μ—λŸ¬κ°€ λ°œμƒν•˜λ”λΌλ„ ComfyUIλŠ” 계속 μ§„ν–‰ν•˜μ§€λ§Œ, ν•΄λ‹Ή λͺ¨λ“ˆμ΄ λ‘œλ“œμ— μ‹€νŒ¨ν–ˆμŒμ„ Python μ½˜μ†”μ„ 톡해 보고함. * **ν‘œμ€€ν™”λœ ꡬ쑰**: μ»€μŠ€ν…€ λ…Έλ“œμ˜ JavaScript νŒŒμΌμ€ κ΄€λ‘€μ μœΌλ‘œ `js`λΌλŠ” ν•˜μœ„ 디렉토리에 λ°°μΉ˜ν•¨. ## πŸ“– μ„ΈλΆ€ λ‚΄μš© (Details) ### 1. How Comfy loads custom nodes ComfyUIλŠ” μ‹œμž‘ μ‹œ `custom_nodes` 디렉토리λ₯Ό μŠ€μΊ”ν•˜μ—¬ Python λͺ¨λ“ˆμ„ λ‘œλ“œν•˜λ €κ³  μ‹œλ„ν•©λ‹ˆλ‹€. ν•΄λ‹Ή λͺ¨λ“ˆμ΄ `NODE_CLASS_MAPPINGS`λ₯Ό 내보내면 μ»€μŠ€ν…€ λ…Έλ“œλ‘œ μ·¨κΈ‰λ©λ‹ˆλ‹€. ### 2. init.py ꡬ성 μš”μ†Œ μ»€μŠ€ν…€ λ…Έλ“œ μ •μ˜λ₯Ό μœ„ν•΄ `__init__.py`μ—μ„œ 관리해야 ν•˜λŠ” μ£Όμš” λ§€ν•‘ μ •λ³΄λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. | ν•„λ“œ | νƒ€μž… | ν•„μˆ˜/선택 | μ œμ•½Β·μ„€λͺ… | | :--- | :--- | :--- | :--- | | [[NODE_CLASS_MAPPINGS]] | dict | ν•„μˆ˜ | μ»€μŠ€ν…€ λ…Έλ“œ 이름(κ³ μœ κ°’)을 ν•΄λ‹Ή λ…Έλ“œ ν΄λž˜μŠ€μ— 맀핑함. | | [[NODE_DISPLAY_NAME_MAPPINGS]] | dict | 선택 | 고유 이름을 μ‚¬μš©μžμ—κ²Œ 보여쀄 ν‘œμ‹œμš© μ΄λ¦„μœΌλ‘œ 맀핑함. 미제곡 μ‹œ 고유 이름을 μ‚¬μš©ν•¨. | | [[WEB_DIRECTORY]] | string | 선택 | JavaScript 파일이 μœ„μΉ˜ν•œ λͺ¨λ“ˆ λ‚΄ μƒλŒ€ 경둜λ₯Ό 지정함 (예: `js` 디렉토리). | ### 3. JavaScript 배포 및 μ£Όμ˜μ‚¬ν•­ * **파일 μ œν•œ**: `.js` 파일만 제곡 κ°€λŠ₯ν•˜λ©°, `.css`λ‚˜ 기타 νƒ€μž…μ€ 이 λ°©μ‹μœΌλ‘œ 배포할 수 μ—†μŒ. * **ꡬ 버전 방식 μ§€μ–‘**: κ³Όκ±°μ—λŠ” JavaScript νŒŒμΌμ„ Comfy μ›Ή ν•˜μœ„ λ””λ ‰ν† λ¦¬λ‘œ λ³΅μ‚¬ν•˜λŠ” μ½”λ“œκ°€ ν•„μš”ν–ˆμœΌλ‚˜, ν˜„μž¬λŠ” 이λ₯Ό ꢌμž₯ν•˜μ§€ μ•ŠμŒ. ## βš–οΈ λͺ¨λͺ¨μˆœ 및 μ—…λ°μ΄νŠΈ (Contradictions & updates) * **μ—…λ°μ΄νŠΈ 사항**: 이전 λ²„μ „μ˜ Comfyμ—μ„œλŠ” `__init__.py`κ°€ JavaScript νŒŒμΌμ„ 메인 μ›Ή λ””λ ‰ν† λ¦¬λ‘œ λ³΅μ‚¬ν•˜λŠ” μž‘μ—…μ΄ ν•„μš”ν–ˆμœΌλ‚˜, ν˜„μž¬λŠ” 이λ₯Ό μˆ˜ν–‰ν•˜λŠ” μ½”λ“œλ₯Ό μ‚¬μš©ν•˜μ§€ 말라고 λͺ…μ‹œλ˜μ–΄ 있음. ## πŸ› οΈ 적용 사둀 (Applied in summary) * **λ‹¨μˆœν•œ `__init__.py` μ˜ˆμ‹œ**: ```python from .python_file import MyCustomNode NODE_CLASS_MAPPINGS = { "My Custom Node" : MyCustomNode } __all__ = ["NODE_CLASS_MAPPINGS"] ``` ## βœ… 검증 μƒνƒœ 및 신뒰도 - **μƒνƒœ:** draft - **검증 단계:** conceptual - **좜처 신뒰도:** B (Primary Source β€” μ›Ήμ‚¬μ΄νŠΈ λ³Έλ¬Έ 직접 μΆ”μΆœ) - **쀑볡 검사 κ²°κ³Ό:** μ‹ κ·œ 생성 (New discovery) ## πŸ”— κ΄€λ ¨ λ¬Έμ„œ 링크 (Related document links) * [[custom_nodes]] - μ»€μŠ€ν…€ λ…Έλ“œκ°€ λ‘œλ“œλ˜λŠ” 물리적 κ²½λ‘œμ™€ λ©”μ»€λ‹ˆμ¦˜ μ„€λͺ…. * [[NODE_CLASS_MAPPINGS]] - λ…Έλ“œ 클래슀λ₯Ό μ‹λ³„ν•˜κΈ° μœ„ν•œ 핡심 λ§€ν•‘ ꡬ쑰. * [[WEB_DIRECTORY]] - ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄λ“œ JS 파일 배포λ₯Ό μœ„ν•œ 경둜 섀정법. * [[__init__.py]] - Python λͺ¨λ“ˆμ˜ μ΄ˆκΈ°ν™” 및 μ»€μŠ€ν…€ λ…Έλ“œ 둜직 μ‹€ν–‰ 지점. ## πŸ“ λ³€κ²½ 이λ ₯ (Change history) - 2026-05-20: Astra /wikify 둜 https://docs.comfy.org/custom-nodes/backend/lifecycle λ³Έλ¬Έμ—μ„œ μ΄ˆμ•ˆ 생성.