Externalizando Previews de ComfyUI y MiniMax H3 con PHP y JavaScript

¿Alguna vez has sentido que tu proceso de generación con IA está completamente atrapado dentro del canvas de ComfyUI? Si estás trabajando con modelos como MiniMax H3, esa sensación de latencia y la imposibilidad de ver el progreso real sin tener la interfaz gráfica abierta puede ser frustrante. Pero hay una forma mucho más elegante de manejar esto: externalizar tu vista previa utilizando la potencia de PHP para la automatización de backend, mientras delegas la visualización en tiempo real a un frontend ligero.

Diagrama técnico de la arquitectura de automatización de ComfyUI usando WebSocket y separación de tareas entre PHP y JavaScript.
Arquitectura de comunicación entre PHP, ComfyUI y el frontend externo para el live preview.

La Arquitectura del Live Preview Externo

Lo primero que hay que entender es cómo comunicar entre dos mundos distintos. ComfyUI no necesita ser modificado para exponer sus datos; de hecho, ya lo hace a través de su WebSocket `/ws`. La clave está en la separación de responsabilidades: PHP se encarga de preparar el workflow JSON y modificar los parámetros del prompt, mientras que un script ligero en JavaScript del navegador se conecta directamente al socket.

Esta arquitectura es particularmente limpia. El frontend JavaScript recibe mensajes `progress` para mostrar cuánto falta por generar, calcula una ETA dinámica basada en la velocidad real de los steps, e interpreta los frames binarios que ComfyUI envía durante el sampling. Así, obtienes un monitor visual completo sin tener que mantener abierta la interfaz gráfica de ComfyUI ni automatizar clicks manuales.

Extrayendo los Últimos Frames para ref2va

Otro desafío común es la necesidad de extraer referencias específicas, como los últimos 20 frames de un video para una tarea de generación tipo ‘ref2va’. A primera vista, parece necesario usar herramientas pesadas como FFmpeg o generar archivos intermedios. Sin embargo, una revisión profunda del plugin VideoHelperSuite (VHS) revela un flujo mucho más eficiente.

Diagrama del flujo de trabajo de VideoHelperSuite mostrando la conexión compartida de ruta y cálculo matemático de frames.
Flujo de extracción de video: cómo calcular skip_first_frames usando el video_info para obtener los últimos 20 frames automáticamente.

El nodo `Load Video` es capaz de devolver metadatos cruciales como el conteo total de frames a través de su objeto `video_info`. Al extraer este número, restar 20 y utilizar ese resultado para calcular el parámetro `skip_first_frames`, puedes instruir al segundo nodo `Load Video` que cargue exactamente solo los últimos frames del archivo. Esto elimina la necesidad de llamar a FFmpeg o crear archivos temporales innecesarios.

Si prefieres mantenerlo 100% con nodos existentes, ComfyUI también ofrece el nodo nativo `Video Slice`, que permite cortar segmentos directamente desde un objeto VIDEO sin necesidad de cálculos externos. Esta flexibilidad hace que la automatización sea robusta y adaptable a diferentes formatos de video.

El Frontend de Monitoreo

Llegamos al resultado final: un frontend HTML/JS autónomo diseñado específicamente para monitorear el flujo de trabajo H3. Este sistema se conecta directamente a ComfyUI 0.31.x, aceptando el workflow en formato API y ejecutándolo con un solo clic.

Interfaz web mostrando el progreso dinámico, ETA calculado y preview activo de la generación H3.
El frontend autónomo recibiendo previews en vivo desde ComfyUI vía WebSocket.

Mientras la generación se lleva a cabo, el frontend actualiza en tiempo real el progreso de los pasos y muestra una ventana activa con los previews latentes decodificados. Además, incluye un botón de Stop que envía directamente una solicitud POST a `/interrupt`, permitiendo cancelar el proceso si es necesario.

En resumen, la combinación de PHP para la gestión de parámetros, la capacidad nativa de ComfyUI para transmitir datos vía WebSocket, y un frontend simple para visualizar el resultado, permite automatizar todo el flujo sin depender de herramientas externas o mantener interfaces gráficas abiertas manualmente. Es una solución limpia, potente y altamente escalable.