--- id: node-replacement---comfyui title: "Node replacement - ComfyUI" category: "10_Wiki/Topics" status: "draft" verification_status: "conceptual" canonical_id: "" aliases: [] duplicate_of: "" source_trust_level: "B" confidence_score: 0.8 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/node-replacement"] applied_in: [] github_commit: "" --- # [[Node replacement - ComfyUI]] ## ๐ŸŽฏ ํ•œ ์ค„ ํ†ต์ฐฐ (One-line insight) [[Node Replacement API]]๋Š” ์ปค์Šคํ…€ ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ตฌ์‹(deprecated) ๋…ธ๋“œ๋ฅผ ์ตœ์‹  ๋…ธ๋“œ๋กœ ์ž๋™ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜์—ฌ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ## ๐Ÿง  ํ•ต์‹ฌ ๊ฐœ๋… (Core concepts) - **Migration Path Definition**: [[Node Replacement API]]๋ฅผ ํ†ตํ•ด ๊ตฌ ๋ฒ„์ „ ๋…ธ๋“œ์—์„œ ์‹ ๊ทœ ๋…ธ๋“œ๋กœ์˜ ์ „ํ™˜ ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•œ๋‹ค. - **Automated Workflow Upgrade**: ๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ณ€๊ฒฝ, ๋…ธ๋“œ ๋ณ‘ํ•ฉ, ์ž…๋ ฅ/์ถœ๋ ฅ ๋ฆฌํŒฉํ† ๋ง ์‹œ ์‚ฌ์šฉ์ž์˜ ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค. - **Lifecycle Integration**: ์ปค์Šคํ…€ ๋…ธ๋“œ ํ™•์žฅ์˜ `on_load` ์ƒ๋ช…์ฃผ๊ธฐ ํ›…(lifecycle hook) ๋‹จ๊ณ„์—์„œ ๊ต์ฒด ๋กœ์ง์„ ๋“ฑ๋กํ•œ๋‹ค. - **Data Mapping**: [[Input mapping]], [[Output mapping]], [[Widget ID binding]]์„ ํ†ตํ•ด ์ž…๋ ฅ/์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์œ„์ ฏ ๊ฐ’์„ ์ •๋ฐ€ํ•˜๊ฒŒ ์žฌ์—ฐ๊ฒฐํ•œ๋‹ค. ## ๐Ÿงฉ ์ถ”์ถœ๋œ ํŒจํ„ด (Extracted patterns) - **Node Replacement Use Cases**: ๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„ ๋ณ€๊ฒฝ, ๋…ธ๋“œ ๋ณ‘ํ•ฉ(Merging), ์ž…๋ ฅ ๋ฆฌํŒฉํ† ๋ง, ์˜คํƒ€ ์ˆ˜์ •(Typo fix) ๋“ฑ ํŠน์ • ๋ชฉ์ ์— ๋”ฐ๋ผ API๋ฅผ ํ™œ์šฉํ•จ. - **Registration Strategy**: `node_replacements.py`์™€ ๊ฐ™์€ ์ „์šฉ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜์—ฌ `on_load` ์‹œ์ ์— ๋“ฑ๋กํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง. - **Mapping Logic**: - [[Input mapping]]: ๊ธฐ์กด ์ž…๋ ฅ์„ ์ƒˆ ์ž…๋ ฅ์œผ๋กœ ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜ ๊ณ ์ •๊ฐ’(`set_value`)์„ ์„ค์ •ํ•จ. - [[Output mapping]]: ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜์˜ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๋ฐฐ์น˜ํ•จ. - **Frontend Automation**: ํ”„๋ก ํŠธ์—”๋“œ์—์„œ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๊ต์ฒด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ ํ›„, ์‚ฌ์šฉ์ž์—๊ฒŒ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์ œ์•ˆํ•˜๊ณ  ์—ฐ๊ฒฐ ๋ฐ ์œ„์ ฏ ๊ฐ’์„ ๋ณด์กดํ•จ. ## ๐Ÿ“– ์„ธ๋ถ€ ๋‚ด์šฉ (Details ### ๐Ÿ›  NodeReplace Parameters | ํ•„๋“œ | ํƒ€์ž… | ํ•„์ˆ˜/์„ ํƒ | ์ œ์•ฝยท์„ค๋ช… | | :--- | :--- | :--- | :--- | | `new_node_id` | str | ํ•„์ˆ˜ | ๊ต์ฒด๋  ๋Œ€์ƒ ๋…ธ๋“œ์˜ ํด๋ž˜์Šค ์ด๋ฆ„ | | `old_node_rypt_id` | str | ํ•„์ˆ˜ | ๊ธฐ์กด์˜ ๊ตฌ์‹(deprecated) ๋…ธ๋“œ ํด๋ž˜์Šค ์ด๋ฆ„ | | `old_widget_ids` | list[str] \| None | ์„ ํƒ | ์ƒ๋Œ€์  ์ธ๋ฑ์Šค์— ๋ฐ”์ธ๋”ฉํ•  ์œ„์ ฏ ID์˜ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ | | `input_mapping` | list \| None | ์„ ํƒ | ๊ธฐ์กด ๋…ธ๋“œ์—์„œ ์ƒˆ ๋…ธ๋“œ๋กœ ์ž…๋ ฅ์„ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ• | | `output_mapping` | list \| None | ์„ ํƒ | ๊ธฐ์กด ๋…ธ๋“œ์—์„œ ์ƒˆ ๋…ธ๋“œ๋กœ ์ถœ๋ ฅ์„ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ• | ### ๐Ÿ“ฅ Input Mapping Details ์ž…๋ ฅ ๋งคํ•‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค: - **๊ธฐ์กด ์ž…๋ ฅ ๋งคํ•‘**: `{"new_id": "model", "old_id": "model"}` - **๊ณ ์ •๊ฐ’ ์„ค์ •**: `{"new_id": "scheduler", "set_value": "normal"}` - **๋™์ /Autogrow ์ž…๋ ฅ (Dot notation ์‚ฌ์šฉ)**: `{"new_id": "images.image0", "old_id": "image1"}` ### ๐Ÿ“ค Output Mapping Details ์ถœ๋ ฅ ๋งคํ•‘์€ ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค: - `{"new_idx": 0, "old_idx": 0}` (์ฒซ ๋ฒˆ์งธ ์ถœ๋ ฅ ๋งคํ•‘) - `{"new_idx": 1, "old_idx": 0}` (๊ธฐ์กด ์ถœ๋ ฅ 0์„ ์ƒˆ ์ถœ๋ ฅ 1๋กœ ๋งคํ•‘) ### ๐Ÿ”— Widget ID Binding `old_widget_ids` ํ•„๋“œ๋Š” ์œ„์ ฏ ID๋ฅผ ์œ„์น˜ ์ธ๋ฑ์Šค์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. ์›Œํฌํ”Œ๋กœ์šฐ JSON์€ ์œ„์ ฏ ๊ฐ’์„ ID๊ฐ€ ์•„๋‹Œ ์œ„์น˜๋กœ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. - ์˜ˆ: `["steps", "cfg", "sampler"]` -> index 0์€ "steps"๋ฅผ ์˜๋ฏธํ•จ. ### ๐ŸŒ REST API (GET /api/node_replacements) ๋“ฑ๋ก๋œ ๋ชจ๋“  ๊ต์ฒด ์ •๋ณด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์‘๋‹ต ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค: ```json { "OldSamplerNode": [ { "new_node_im_id": "NewSamplerNode", "old_node_id": "OldSamplerNode", "old_widget_ids": ["num_steps", "cfg_scale", "sampler_name"], "input_mapping": [...], "output_mapping": [...] } ] } ``` ## โš–๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & updates) ๋ณธ๋ฌธ์—์„œ ํ™•์ธ๋˜์ง€ ์•Š์Œ. ## ๐Ÿ›  ์ ์šฉ ์‚ฌ๋ก€ (Applied in summary) - **Simple Node Merge**: `Load3DAnimation` ๋…ธ๋“œ๋ฅผ `Load3D`๋กœ ๋ณ‘ํ•ฉ. - **Typo Fix**: `SDV_img2vid_Conditioning`์˜ ์˜คํƒ€๋ฅผ `SVD_imgint2vid_Conditioning`์œผ๋กœ ์ˆ˜์ •. - **Input Renaming**: `ImageScaleBy`๋ฅผ `ResizeImageMaskNode`๋กœ ๊ต์ฒดํ•˜๋ฉฐ ์ž…๋ ฅ/์ถœ๋ ฅ ๋งคํ•‘ ๋ฐ ๊ธฐ๋ณธ๊ฐ’(`set_value`) ์ ์šฉ. - **Autogrow Mapping**: `BatchImagesNode`์—์„œ ๋„ํŠธ ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ `images.image0`๊ณผ ๊ฐ™์€ ๋™์  ์ž…๋ ฅ ์ฒ˜๋ฆฌ. ## โœ… ๊ฒ€์ฆ ์ƒํƒœ ๋ฐ ์‹ ๋ขฐ๋„ - **์ƒํƒœ:** draft - **๊ฒ€์ฆ ๋‹จ๊ณ„:** conceptual - **์ถœ์ฒ˜ ์‹ ๋ขฐ๋„:** B (Primary Source โ€” ์›น์‚ฌ์ดํŠธ ๋ณธ๋ฌธ ์ง์ ‘ ์ถ”์ถœ) - **์ค‘๋ณต ๊ฒ€์‚ฌ ๊ฒฐ๊ณผ:** ์‹ ๊ทœ ์ƒ์„ฑ (New discovery) ## ๐Ÿ”— ๊ด€๋ จ ๋ฌธ์„œ ๋งํฌ (Related document links) - [[Node Replacement API]]: ๋…ธ๋“œ ๊ต์ฒด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค. - [[Input mapping]]: ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ ๋…ธ๋“œ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜. - [[Output mapping]]: ์ถœ๋ ฅ ์ธ๋ฑ์Šค๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•. - [[Widget ID binding]]: ์œ„์ ฏ ์œ„์น˜ ๊ธฐ๋ฐ˜ ๋งคํ•‘์„ ์œ„ํ•œ ๊ธฐ์ˆ ์  ์š”๊ตฌ์‚ฌํ•ญ. - [[on_load lifecycle hook]]: ๊ต์ฒด ๋กœ์ง์„ ๋“ฑ๋กํ•ด์•ผ ํ•˜๋Š” ์‹œ์ . ## ๐Ÿ“ ๋ณ€๊ฒฝ ์ด๋ ฅ (Change history) - 2026-05-20: Astra /wikify ๋กœ https://docs.comfy.org/custom-nodes/backend/node-replacement ๋ณธ๋ฌธ์—์„œ ์ดˆ์•ˆ ์ƒ์„ฑ.