feat(ml): auto-commit con 11 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
---
|
||||
name: comfyui_batch_generate
|
||||
kind: function
|
||||
lang: py
|
||||
domain: ml
|
||||
version: "1.0.0"
|
||||
purity: impure
|
||||
signature: "def comfyui_batch_generate(workflow: dict, *, seeds: list | None = None, server: str = \"127.0.0.1:8188\") -> dict"
|
||||
description: "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."
|
||||
tags: [comfyui, ml, batch, seeds, queue, http]
|
||||
uses_functions: ["comfyui_submit_workflow_py_ml"]
|
||||
uses_types: []
|
||||
returns: []
|
||||
returns_optional: false
|
||||
error_type: "error_go_core"
|
||||
imports: []
|
||||
params:
|
||||
- name: workflow
|
||||
desc: "dict en API format (resultado de un builder). No se muta: cada variante es una copia profunda con la semilla parcheada."
|
||||
- name: seeds
|
||||
desc: "Lista de semillas (int); cada una produce una variante encolada. None o vacia encola el workflow tal cual una sola vez. keyword-only."
|
||||
- name: server
|
||||
desc: "host:port del servidor ComfyUI sin esquema (default '127.0.0.1:8188'). keyword-only."
|
||||
output: "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."
|
||||
tested: false
|
||||
tests: []
|
||||
test_file_path: ""
|
||||
file_path: "python/functions/ml/comfyui_batch_generate.py"
|
||||
---
|
||||
|
||||
## Ejemplo
|
||||
|
||||
```python
|
||||
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.
|
||||
Reference in New Issue
Block a user