Usando PHP como operador de workflows en ComfyUI

Introducción

Hemos estado analizando cómo integrar la maquinaria de ComfyUI con un proyecto en PHP. La idea inicial es utilizar PHP para manejar toda la lógica de negocio, la gestión de archivos y la base de datos, mientras dejamos que ComfyUI se encargue del procesamiento pesado sobre la GPU.

Diagrama técnico mostrando la separación entre el código PHP y el software ComfyUI.
Arquitectura de capas: PHP como operador y ComfyUI como motor de procesamiento.

Aunque existen varios wrappers existentes escritos en Python o como APIs externas, la conclusión más práctica es construir una capa propia y pequeña. PHP no necesita entender qué hace ComfyUI internamente; su único trabajo es cargar un archivo de workflow JSON, modificar los inputs específicos que necesitamos para el prompt, enviarlo a través de la API HTTP, y luego consultar el historial para saber cuándo ha terminado el proceso.

El problema de construir workflows en PHP

Inicialmente, consideramos si era posible usar PHP para crear los nodos del workflow sobre la marcha. Sin embargo, al reflexionar sobre esto, nos damos cuenta de que sería una estrategia terrible. Si intentáramos reconstruir el flujo de trabajo nodo por nodo dentro del código, estaríamos creando una segunda implementación parcial de ComfyUI.

Esto implicaría tener que mantener un mapeo constante de los nombres de los nodos, sus tipos de entrada y su comportamiento. Cada vez que ComfyUI actualiza su API o cambia la estructura de un nodo, nuestro código PHP quedaría desfasado y necesitaría una actualización masiva.

Parametrizar en lugar de construir

La solución arquitectónica correcta es cambiar la filosofía: en lugar de construir el workflow desde cero, debemos parametrizarlo. Esto significa que mantenemos los archivos JSON del workflow directamente dentro de ComfyUI, y PHP simplemente conoce qué parámetros debe inyectar.

Representación visual de cómo una aplicación puede manejar múltiples versiones del mismo software.
Gestión de versiones paralelas: el PHP selecciona qué versión de ComfyUI ejecutar según los archivos disponibles.
$job = [ 'workflow' => 'minimax_h3_api.json', 'inputs' => [ 'prompt' => $prompt, 'seed' => $seed, 'image_1' => $image1 ] ];

PHP se encarga de cargar el archivo oficial, inyectar los valores en las claves del JSON y enviarlo a través de la solicitud POST /prompt. De esta manera, reducimos drásticamente el acoplamiento entre nuestra aplicación y el software de IA.

Manejo de versiones paralelas

Una consecuencia excelente de este enfoque es la capacidad de manejar versiones paralelas del software. Podríamos ejecutar simultáneamente diferentes versiones de ComfyUI, como una versión 0.37 y otra 0.38.

Nuestra aplicación PHP selecciona dinámicamente qué instancia usar basándose en los archivos de workflow que recibe. Esto nos permite actualizar ComfyUI sin tener que actualizar toda nuestra aplicación cada vez que sale un parche, manteniendo la arquitectura limpia y robusta frente a cambios internos del motor.

Flujo de datos donde ComfyUI proporciona información que PHP usa para generar una interfaz de usuario.
Generación dinámica de la interfaz: el software construye su propia UI basada en los nodos disponibles.

Generación dinámica de interfaces

Por último, podemos llevar esta integración un paso más allá. En lugar de escribir una interfaz estática, PHP puede preguntarle a ComfyUI qué nodos tiene disponibles mediante su API.

Al recibir esa información, la aplicación puede construir dinámicamente los controles y la interfaz de usuario necesarios para el trabajo actual. Esto transforma a PHP en un operador inteligente que decide qué cocinar, con qué ingredientes y dónde guardar las cosas, dejando que ComfyUI se encargue exclusivamente de cómo se cocina.