Automatizando el procesamiento de imágenes en ComfyUI con Python

Procesar múltiples imágenes en ComfyUI puede parecer tedioso si tienes que cargarlas manualmente una por una. Sin embargo, automatizar este flujo de trabajo permite ahorrar tiempo y esfuerzo, especialmente cuando trabajas con grandes volúmenes de archivos.

Ilustración técnica de un icono de script conectándose a una interfaz de IA
Visualización de la automatización del flujo de trabajo con ComfyUI y un script en Python para procesar imágenes sin recargar el modelo.

Una de las mejores formas de hacerlo es utilizar un script en Python que se conecte directamente a la API de ComfyUI. Esta estrategia tiene una gran ventaja técnica: al mantener tu workflow con el modelo (como el Checkpoint Loader) fijo, el sistema mantiene los pesos del modelo cargados en memoria.

Esto significa que no necesitas reiniciar ComfyUI ni recargar los modelos para cada archivo que proceses. El script simplemente itera sobre la carpeta de entrada, codifica las imágenes y las envía como input al pipeline ya preparado, aprovechando así la VRAM disponible sin incurrir en tiempos de espera innecesarios.

A continuación, puedes ver un ejemplo práctico de cómo implementar este flujo de trabajo. El código utiliza la librería `requests` para iterar sobre los archivos y enviarlos a la API local:

import os
import base64
import requests

# URL API ComfyUI
COMFY_URL = "http://127.0.0.1:8188"

# Carpeta de imágenes de entrada
INPUT_FOLDER = r"C:UsersTuUsuarioPicturesinput"
# Carpeta de salida de ComfyUI (ya configurada en tu workflow)
OUTPUT_FOLDER = r"C:UsersTuUsuarioComfyUIoutput"

# ID del nodo de tu workflow que recibe la imagen
IMAGE_INPUT_NODE_ID = "10"

def encode_image_to_base64(path):
    with open(path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")

def send_job(image_path):
    # Codificamos la imagen en base64
    img_b64 = encode_image_to_base64(image_path)

    # Payload con el workflow cargado
    payload = {
        "prompt": {
            "10": {  # nodo de imagen
                "inputs": {
                    "image": img_b64,
                },
                "class_type": "LoadImage"
            }
            # el resto de tu workflow va aquí...
        }
    }

    r = requests.post(f"{COMFY_URL}/prompt", json=payload)
    print(f"Enviado: {os.path.basename(image_path)} -> {r.status_code}")

def main():
    for fname in os.listdir(INPUT_FOLDER):
        if fname.lower().endswith((".png", ".jpg", ".jpeg", ".webp")):
            fpath = os.path.join(INPUT_FOLDER, fname)
            send_job(fpath)

if __name__ == "__main__":
    main()

Con este enfoque, obtienes un sistema de procesamiento robusto y eficiente que se integra perfectamente con el ecosistema de ComfyUI.