跳转到主要内容
节点替换 API 允许自定义节点开发者定义从已弃用节点到新版本节点的迁移路径。当您更新或重命名节点时,用户可以自动升级其工作流。

使用场景

  • 更改节点类名:您更改了节点的类名(对于显示名称更改,请使用 DISPLAY_NAME
  • 合并节点:多个节点合并为一个(例如,Load3DAnimation 合并到 Load3D
  • 重构输入:版本之间输入名称或类型发生变化
  • 修复拼写错误:在不破坏现有工作流的情况下更正节点名称

在哪里注册替换

在扩展的 on_load 生命周期钩子中注册替换。在您的自定义节点包中创建一个专用文件(例如 node_replacements.py):

完整示例

以下是一个完整示例,展示如何在自定义节点包中构建节点替换:

核心示例

ComfyUI 核心使用节点替换进行内置节点迁移。以下是 comfy_extras/nodes_replacements.py 中的实际示例:

简单节点合并

Load3DAnimation 合并到 Load3D 时:

拼写错误修复

更正 SDV_img2vid_ConditioningSVD_img2vid_Conditioning 中的拼写错误:

带默认值的输入重命名

ResizeImageMaskNode 替换 ImageScaleBy

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. 保留连接和小部件值
查看前端实现: