Cómo interceptar errores y controlar flujos en ComfyUI

¿Alguna vez te has encontrado en ComfyUI con un error que detiene toda la ejecución del prompt y no tienes forma de controlarlo? Es frustrante, porque a pesar de ser una herramienta potente para el diseño generativo, la interfaz basada en nodos no cuenta con un sistema nativo tipo ‘try/catch’. Por lo general, cuando un nodo lanza una excepción, el flujo se detiene inmediatamente.

No obstante, existe una solución elegante: crear tus propios nodos personalizados. Al escribir código Python dentro de ComfyUI, puedes implementar lógica robusta para manejar excepciones y decidir qué hacer cuando algo sale mal.

Ilustración técnica de una interfaz basada en nodos con puntos de integración de Python resaltados.
Diagrama del flujo de trabajo en ComfyUI mostrando la integración de nodos personalizados.

Para demostrar esto en la práctica, podemos crear un nodo que cuente los archivos de una carpeta específica. Este ejemplo es perfecto porque nos permite ver cómo se define el nodo, cómo maneja errores si la ruta no existe, y cómo devuelve un resultado seguro para usarlo en condicionales.

Escribiendo nuestro propio nodo

La clave está en definir una clase Python que herede de los requisitos básicos de ComfyUI. Vamos a crear algo llamado CountFilesNode. Este nodo tomará una ruta de carpeta como entrada y devolverá un entero con el número de archivos.

class CountFilesNode: @classmethod def INPUT_TYPES(cls): return { «required»: { «folder_path»: («STRING», {«default»: «»}), } } RETURN_TYPES = («INT»,) RETURN_NAMES = («file_count»,) FUNCTION = «count_files» CATEGORY = «utils» def count_files(self, folder_path): try: files = [ f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f)) ] return (len(files),) except Exception as e: print(f»Error: {e}») return (0,) # Fallback para no romper el flujo

Observa la función count_files. Envuelve la lógica principal dentro de un bloque try/except. Si todo sale bien, devuelve la longitud de la lista. Pero si ocurre cualquier excepción—como una ruta inválida o permisos denegados—el código captura el error y retorna 0 en su lugar.

Esto es fundamental: con este nodo personalizado, hemos interceptado un potencial fallo antes de que pueda detener tu workflow completo. Ahora que tenemos este nodo funcionando, ¿cómo lo usamos para controlar la ejecución?

Ventana de editor de código mostrando una clase Python con resaltado de sintaxis.
Visualización del código fuente de la clase CountFilesNode y su manejo de errores.

Controlando el flujo del trabajo

El verdadero poder de estos nodos personalizados radica en la lógica condicional. Puedes conectar este CountFilesNode a un sistema de decisiones dentro de tu workflow.

Puedes configurar una rama que diga: «Si el conteo es mayor a cero, continúa con el resto del proceso». Por otro lado, si el valor devuelto es 0, puedes redirigir la ejecución hacia otra ruta o abortar completamente el gráfico. De esta manera, pasas de ser un usuario pasivo ante los errores a tener control total sobre cómo se comporta tu sistema.

En resumen, aunque ComfyUI no tenga un manejo de errores visual nativo, crear nodos en Python te otorga esa capacidad instantáneamente. Ya sea para validar entradas, contar recursos o manejar excepciones complejas, escribir tus propios nodos es la forma más limpia y efectiva de asegurar que tu flujo de trabajo funcione exactamente como lo necesitas.