메인 콘텐츠로 건너뛰기
노드 교체 API를 통해 커스텀 노드 개발자는 더 이상 사용되지 않는 노드에서 최신 equivalent로의 마이그레이션 경로를 정의할 수 있습니다. 노드를 업데이트하거나 이름을 변경하면 사용자가 워크플로우를 자동으로 업그레이드할 수 있습니다.

언제 사용하나요

  • 노드 클래스 이름 변경: 노드의 클래스 이름을 변경한 경우 (표시 이름 변경에는 DISPLAY_NAME을 사용하세요)
  • 노드 병합: 여러 노드를 하나로 통합한 경우 (예: Load3DAnimationLoad3D로 병합)
  • 입력 리팩토링: 입력 이름이나 유형이 버전 간에 변경된 경우
  • 타이포 수정: 기존 워크플로우를 깨지 않으면서 노드 이름을 수정하는 경우

교체를 어디에 등록하나요

확장 프로그램의 on_load 라이프사이클 훅 동안 교체를 등록하세요. 커스텀 노드 패키지에 전용 파일(예: node_replacements.py)을 생성하세요:

전체 예제

다음은 커스텀 노드 패키지에서 노드 교체를 구성하는 방법을 보여주는 전체 예제입니다:

핵심 예제

ComfyUI 코어는 내장 노드 마이그레이션을 위해 노드 교체를 사용합니다. 다음은 comfy_extras/nodes_replacements.py에서 가져온 실제 예제입니다:

간단한 노드 병합

Load3DAnimationLoad3D로 병합되었을 때:

타이포 수정

SDV_img2vid_ConditioningSVD_img2vid_Conditioning의 타이포 수정:

기본값을 가진 입력 이름 변경

ImageScaleByResizeImageMaskNode로 교체:

Autogrow 입력 매핑

Autogrow(동적 입력)을 사용하는 노드의 경우 점 표기법을 사용하세요:

NodeReplace 매개변수

입력 매핑

각 입력 매핑 항목은 이전 노드에서 새 노드로 입력이 어떻게 전달되는지를 정의합니다. 이전 입력에서 매핑:
고정 값 설정:
동적/autogrow 입력 매핑(점 표기법 사용):

출력 매핑

출력 매핑은 인덱스 기반 참조를 사용합니다:

위젯 ID 바인딩

old_widget_ids 필드는 위젯 ID를 위치 인덱스와 매핑합니다. 이는 워크플로우 JSON이 위젯 값을 ID가 아닌 위치별로 저장하기 때문에 필요합니다.

REST API

등록된 모든 교체 조회:
응답:

프론트엔드 동작

워크플로우에 더 이상 사용되지 않는 노드가 포함되어 있으면 프론트엔드는 다음과 같이 작동합니다:
  1. GET /api/node_replacements에서 교체 정보를 가져옵니다.
  2. old_node_id와 일치하는 노드를 감지합니다.
  3. 사용자에게 업그레이드를 요청합니다.
  4. 입력/출력 매핑을 자동으로 적용합니다.
  5. 연결과 위젯 값을 유지합니다.
프론트엔드 구현 참고: