Files
fn_registry/python/functions/ml/comfyui_batch_generate.md
T
egutierrez d3f05a19a5 feat(ml): auto-commit con 11 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-24 01:39:30 +02:00

3.7 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
comfyui_batch_generate function py ml 1.0.0 impure def comfyui_batch_generate(workflow: dict, *, seeds: list | None = None, server: str = "127.0.0.1:8188") -> dict Encola N variantes de un workflow ComfyUI, una por seed de la lista, parcheando el campo de semilla de los nodos sampler (KSampler.seed, KSamplerAdvanced/SamplerCustom.noise_seed) sin mutar el original (deepcopy), y recoge cada prompt_id. Compone comfyui_submit_workflow. Util para barridos de re-roll: misma escena, varias semillas, una sola llamada. Devuelve {ok, prompt_ids, count, error}. Impura: HTTP POST por variante, solo stdlib.
comfyui
ml
batch
seeds
queue
http
comfyui_submit_workflow_py_ml
false error_go_core
name desc
workflow dict en API format (resultado de un builder). No se muta: cada variante es una copia profunda con la semilla parcheada.
name desc
seeds Lista de semillas (int); cada una produce una variante encolada. None o vacia encola el workflow tal cual una sola vez. keyword-only.
name desc
server host:port del servidor ComfyUI sin esquema (default '127.0.0.1:8188'). keyword-only.
dict con ok (bool, True si TODAS las variantes se encolaron), prompt_ids (list[str] en orden de seeds, para comfyui_wait_result), count (int, variantes encoladas con exito), error (str, primer error; vacio si OK). Si una variante falla, detiene el barrido y devuelve los prompt_ids ya encolados. false
python/functions/ml/comfyui_batch_generate.py

Ejemplo

import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_build_txt2img_workflow import comfyui_build_txt2img_workflow
from ml.comfyui_batch_generate import comfyui_batch_generate

wf = comfyui_build_txt2img_workflow(
    ckpt_name="v1-5-pruned-emaonly-fp16.safetensors",
    positive="a red apple on a wooden table, sharp focus",
    negative="blurry, low quality",
)
res = comfyui_batch_generate(wf, seeds=[1, 2, 3])
# {'ok': True, 'prompt_ids': ['<id1>', '<id2>', '<id3>'], 'count': 3, 'error': ''}
for pid in res["prompt_ids"]:
    pass  # comfyui_wait_result(pid) para recoger cada resultado

O lanzable directo (build txt2img + encolar 2 seeds) con: ./fn run comfyui_batch_generate.

Cuando usarla

Para generar varias variantes de la misma escena cambiando solo la semilla (re-roll de calidad) en una sola llamada, en vez de editar el seed y reenviar a mano N veces. Aplica a cualquier workflow con nodo sampler: txt2img, img2img, video (parchea noise_seed del SamplerCustom de LTX), etc. Tras encolar, sigue cada prompt_id con comfyui_wait_result.

Gotchas

  • Parchea TODO input llamado seed o noise_seed en cualquier nodo. Si un workflow tiene varios samplers, todos reciben la misma semilla de la variante (normalmente lo deseado). Si necesitas semillas independientes por sampler, parchea a mano.
  • Encolar tiene efecto secundario: arranca trabajo de GPU. N seeds = N prompts en cola = N corridas de GPU en serie. En 8GB, no encoles 20 videos a la vez sin vigilar VRAM/tiempo.
  • seeds=None encola el workflow tal cual UNA vez (sin tocar la semilla): util como "submit con la firma de batch".
  • Fail-fast: si una variante es rechazada (HTTP 400), detiene el barrido, devuelve ok=False + error y los prompt_ids ya encolados (no hace rollback de los anteriores — ya estan en la cola del servidor).
  • Si necesitas cortar un barrido a medias, usa comfyui_interrupt_queue (corta el que se ejecuta) o POST /queue {"clear": true} para vaciar los pendientes.