Skip to main content
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 actualizar automáticamente sus flujos de trabajo.

Cuándo usar

  • Cambiar nombres de clase de nodo: Cambiaste el nombre de clase de un nodo (usa DISPLAY_NAME para cambios de nombre para mostrar en su lugar)
  • 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 gancho de ciclo de vida on_load de tu extensión. Crea un archivo dedicado (p. ej., node_replacements.py) en el paquete de tu nodo personalizado:

Ejemplo completo

Aquí tienes un ejemplo completo de cómo estructurar los reemplazos de nodos en un paquete de nodo personalizado:

Ejemplos del núcleo

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

Fusión simple de nodos

Cuando Load3DAnimation se fusionó en Load3D:

Corrección de errata

Corrección de una errata en SDV_img2vid_Conditioning → SVD_img2vid_Conditioning:

Renombrar entradas con valores predeterminados

Sustituir ImageScaleBy por ResizeImageMaskNode:

Mapeo de entradas Autogrow

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

Parámetros de NodeReplace

Mapeo de entradas

Cada entrada del mapeo define cómo se transfiere una entrada del nodo antiguo al nuevo. Mapear desde una entrada antigua:
Establecer un valor fijo:
Mapear entradas dinámicas o autogrow (usa la notación con puntos):

Mapeo de salidas

Los mapeos de salidas usan referencias basadas en índices:

Vinculación de IDs de widget

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

API REST

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 los actualice
  4. Aplica las asignaciones de entrada/salida automáticamente
  5. Conserva las conexiones y los valores de los widgets
Consulta la implementación del frontend: