Saltar al contenido principal
La API de reemplazo de nodos permite a los desarrolladores de nodos personalizados definir rutas de migración desde nodos obsoletos hasta sus equivalentes más recientes. Cuando actualizas o renombras nodos, los usuarios pueden mejorar automáticamente sus flujos de trabajo.

Cuándo usar

  • Cambiar nombres de clase de nodo: Cambiaste el nombre de clase de un nodo (en su lugar, usa DISPLAY_NAME para cambios de nombre para mostrar)
  • Fusionar nodos: Varios nodos consolidados en uno (p. ej., Load3DAnimation fusionado en Load3D)
  • Refactorizar entradas: Los nombres o tipos de las entradas cambiaron entre versiones
  • Corregir errores tipográficos: Corregir nombres de nodos sin romper los flujos de trabajo existentes

Dónde registrar los reemplazos

Registra los reemplazos durante el hook del ciclo de vida on_load de tu extensión. Crea un archivo dedicado (por ejemplo, node_replacements.py) en tu paquete de nodos personalizados:

Ejemplo completo

Aquí tienes un ejemplo completo que muestra cómo estructurar los reemplazos de nodos en un paquete de nodos personalizados:

Ejemplos principales

El núcleo de ComfyUI usa reemplazos de nodos para las migraciones de nodos integrados. Aquí hay ejemplos reales de comfy_extras/nodes_replacements.py:

Fusión simple de nodos

Cuando Load3DAnimation se fusionó con Load3D:

Corrección de un error tipográfico

Cómo corregir un error tipográfico en SDV_img2vid_Conditioning → SVD_img2vid_Conditioning:

Renombrar entradas con valores predeterminados

Cómo reemplazar ImageScaleBy por ResizeImageMaskNode:

Asignación de entradas con Autogrow

Para los nodos que usan Autogrow (entradas dinámicas), usa la notación con punto:

Parámetros de NodeReplace

Asignación de entradas

Cada entrada de la asignación define cómo se transfiere una entrada del nodo anterior al nuevo. Asignar desde la entrada anterior:
Establecer un valor fijo:
Asignar entradas dinámicas/autogrow (usa notación con punto):

Asignación de salidas

Las asignaciones de salidas usan referencias basadas en índices:

Vinculación de ID de widget

El campo old_widget_ids asigna los ID de widget a sus índices posicionales. Esto es requerido porque el JSON del flujo de trabajo almacena los valores de los widgets por posición, no por ID.

REST API

Recupera todos los reemplazos registrados:
Respuesta:

Comportamiento del frontend

Cuando un flujo de trabajo contiene un nodo obsoleto, el frontend:
  1. Obtiene los reemplazos desde GET /api/node_replacements
  2. Detecta los nodos que coinciden con old_node_id
  3. Pide al usuario que actualice
  4. Aplica las asignaciones de entrada y salida automáticamente
  5. Conserva las conexiones y los valores de los widgets
Consulta la implementación del frontend: