Depuración de un Workflow de ComfyUI: De Errores a la Solución

Depuración de un Workflow de ComfyUI: De Errores a la Solución

Hoy vamos a analizar cómo solucionamos un problema persistente en un script PHP que automatiza workflows de ComfyUI. El proceso comenzó con un error HTTP 500, y tras un análisis profundo del traceback de Python, pudimos identificar el culpable.

Infografía técnica mostrando la comparación entre un nodo JSON con inputs como lista y el archivo fuente de ComfyUI Manager.
Resumen visual del proceso de depuración: desde el error inicial hasta la corrección en ComfyUI Manager.

El Primer Crash

Al ejecutar el script PHP, recibíamos un error HTTP 500. Al investigar la consola de ComfyUI, encontramos un traceback de Python que indicaba un AttributeError: 'list' object has no attribute 'items'. El problema estaba claramente en el nodo 141:138, que es un MiniMaxH3TurboSampler.

Determinamos que este nodo tenía una propiedad inputs representada como una lista vacía ([]). ComfyUI Manager 0.33.1 no estaba preparado para procesar esa estructura en su método apply_replacements, lo que provocaba el fallo al intentar iterar sobre los inputs.

El Parche Rápido y un Nuevo Problema

Para solucionar esto, aplicamos una corrección dinámica directamente desde PHP antes de enviar el workflow. Convertimos la lista vacía en un objeto JSON vacío utilizando new stdClass():

$job['141:138']['inputs'] = new stdClass();

Luego, ejecutamos el script nuevamente. El error HTTP 500 desapareció y ComfyUI aceptó la petición. Sin embargo, al ejecutar el prompt, notamos algo muy extraño: el proceso terminaba en apenas 0.10 segundos.

La Realización Final

Analizando el grafo del workflow, confirmamos que las conexiones eran correctas y que el nodo estaba conectado a la cadena de ejecución. Esto nos hizo darnos cuenta de que MiniMaxH3TurboSampler está diseñado para no tener entradas; originalmente tenía [] intencionalmente.

En lugar de forzar un cambio en el JSON, decidimos abordar la raíz del problema: ComfyUI Manager. ChatGPT sugirió inspeccionar y modificar directamente el archivo fuente I:ComfyUI.33.1appnode_replace_manager.py. El plan es editar las líneas 55 a 90 para que la función apply_replacements() salte automáticamente cualquier nodo cuyo inputs sea una lista, evitando así el error de iteración.

Ahora vamos a aplicar ese parche al código fuente y volver a probar el workflow para ver si se ejecuta correctamente sin la necesidad de modificar el JSON manualmente.