언제 사용하나요
- 노드 클래스 이름 변경: 노드의 클래스 이름을 변경한 경우 (표시 이름 변경에는
DISPLAY_NAME을 사용하세요) - 노드 병합: 여러 노드를 하나로 통합한 경우 (예:
Load3DAnimation을Load3D로 병합) - 입력 리팩토링: 입력 이름이나 유형이 버전 간에 변경된 경우
- 타이포 수정: 기존 워크플로우를 깨지 않으면서 노드 이름을 수정하는 경우
교체를 어디에 등록하나요
확장 프로그램의on_load 라이프사이클 훅 동안 교체를 등록하세요. 커스텀 노드 패키지에 전용 파일(예: node_replacements.py)을 생성하세요:
전체 예제
다음은 커스텀 노드 패키지에서 노드 교체를 구성하는 방법을 보여주는 전체 예제입니다:핵심 예제
ComfyUI 코어는 내장 노드 마이그레이션을 위해 노드 교체를 사용합니다. 다음은comfy_extras/nodes_replacements.py에서 가져온 실제 예제입니다:
간단한 노드 병합
Load3DAnimation이 Load3D로 병합되었을 때:
타이포 수정
SDV_img2vid_Conditioning → SVD_img2vid_Conditioning의 타이포 수정:
기본값을 가진 입력 이름 변경
ImageScaleBy를 ResizeImageMaskNode로 교체:
Autogrow 입력 매핑
Autogrow(동적 입력)을 사용하는 노드의 경우 점 표기법을 사용하세요:NodeReplace 매개변수
| 매개변수 | 유형 | 설명 |
|---|---|---|
new_node_id | str | 교체 노드의 클래스 이름 |
old_node_id | str | 더 이상 사용되지 않는 노드의 클래스 이름 |
old_widget_ids | list[str] | None | 위젯 ID를 상대 인덱스와 바인딩한 순서 리스트 |
input_mapping | list | None | 이전 노드에서 새 노드로의 입력 매핑 방법 |
output_mapping | list | None | 이전 노드에서 새 노드로의 출력 매핑 방법 |
입력 매핑
각 입력 매핑 항목은 이전 노드에서 새 노드로 입력이 어떻게 전달되는지를 정의합니다. 이전 입력에서 매핑:출력 매핑
출력 매핑은 인덱스 기반 참조를 사용합니다:위젯 ID 바인딩
old_widget_ids 필드는 위젯 ID를 위치 인덱스와 매핑합니다. 이는 워크플로우 JSON이 위젯 값을 ID가 아닌 위치별로 저장하기 때문에 필요합니다.
REST API
등록된 모든 교체 조회:프론트엔드 동작
워크플로우에 더 이상 사용되지 않는 노드가 포함되어 있으면 프론트엔드는 다음과 같이 작동합니다:GET /api/node_replacements에서 교체 정보를 가져옵니다.old_node_id와 일치하는 노드를 감지합니다.- 사용자에게 업그레이드를 요청합니다.
- 입력/출력 매핑을 자동으로 적용합니다.
- 연결과 위젯 값을 유지합니다.