メインコンテンツへスキップ
ノード置換 API を使用すると、カスタムノード開発者は廃止されたノードから新しい同等のノードへの移行パスを定義できます。ノードを更新または改名すると、ユーザーはワークフローを自動的にアップグレードできます。

利用シーン

  • ノードクラス名の変更: ノードのクラス名を変更した場合(表示名の変更には代わりに DISPLAY_NAME を使用してください)
  • ノードの統合: 複数のノードが 1 つに統合された場合(例:Load3DAnimationLoad3D に統合)
  • 入力のリファクタリング: バージョン間で入力名またはタイプが変更された場合
  • タイプミスの修正: 既存のワークフローを壊さずにノード名を修正する場合

置換の登録場所

拡張機能の on_load ライフサイクルフック中に置換を登録します。カスタムノードパッケージ内に専用ファイル(例:node_replacements.py)を作成します:

完全な例

カスタムノードパッケージ内でノード置換を構造化する方法を示す完全な例は以下の通りです:

コアの例

ComfyUI コアは組み込みノードの移行にノード置換を使用します。以下は comfy_extras/nodes_replacements.py の実際の例です:

単純なノード統合

Load3DAnimationLoad3D に統合された場合:

タイプミスの修正

SDV_img2vid_ConditioningSVD_img2vid_Conditioning のタイプミスを修正する場合:

デフォルト値付きの入力改名

ImageScaleByResizeImageMaskNode に置換する場合:

Autogrow 入力マッピング

Autogrow(動的入力)を使用するノードの場合、ドット記法を使用します:

NodeReplace パラメータ

パラメータタイプ説明
new_node_idstr置換ノードのクラス名
old_node_idstr廃止されたノードのクラス名
old_widget_idslist[str] | Noneウィジェット ID を相対インデックスにバインドする順序付きリスト
input_mappinglist | None入力を旧ノードから新ノードにマッピングする方法
output_mappinglist | None出力を旧ノードから新ノードにマッピングする方法

入力マッピング

各入力マッピングエントリーは、入力が旧ノードから新ノードにどのように転送されるかを定義します。 旧入力からマッピング:
固定値を設定:
動的/autogrow 入力をマッピング(ドット記法を使用):

出力マッピング

出力マッピングはインデックスベースの参照を使用します:

ウィジェット ID バインディング

old_widget_ids フィールドは、ウィジェット ID を位置インデックスにマッピングします。ワークフロー JSON は ID ではなく位置によってウィジェット値を保存するため、これは必須です。

REST API

登録されたすべての置換を取得:
レスポンス:

フロントエンドの動作

ワークフローに廃止されたノードが含まれている場合、フロントエンドは以下を行います:
  1. GET /api/node_replacements から置換情報を取得
  2. old_node_id に一致するノードを検出
  3. ユーザーにアップグレードを促す
  4. 入力/出力マッピングを自動的に適用
  5. 接続とウィジェット値を保持
フロントエンドの実装を確認: