Files
fn_registry/python/functions/ml/comfyui_validate_workflow.md
T
egutierrez cda36408d0 feat(ml): modelos con prefijo de categoría (IMG_/VIDEO_/3D_) + refs actualizadas
Renombra los 13 checkpoints/diffusion models de ComfyUI prefijando la
categoría al inicio del nombre, para que en el dropdown de carga el usuario
distinga de inmediato imagen/vídeo/3D y no cargue un modelo en el nodo
equivocado. Misma operación que se hizo con los LoRAs (report 0197) pero
sobre los modelos.

Clasificación:
- IMG_: dreamshaper_8, juggernaut_xl_v11, v1-5-pruned-emaonly-fp16,
  flux1-dev-fp8-e4m3fn, flux1-schnell-fp8-e4m3fn
- VIDEO_: svd, ltx-video-2b-v0.9.5, wan2.1_t2v_1.3B_fp16
- 3D_: stable_zero123, sv3d_p, hunyuan3d-dit-v2-mini, hunyuan3d-dit-v2-mv,
  hy3dgen/hunyuan3d-dit-v2-0-fp16 (mantiene subcarpeta)

A diferencia de los LoRAs aquí solo se PREFIJA la categoría conservando el
nombre completo (versión/arquitectura). Archivos físicos renombrados en
~/ComfyUI/models/checkpoints, /mnt/2tb/comfyui_models/{checkpoints,
diffusion_models} y la subcarpeta hy3dgen/. Mapa de reversión en
~/ComfyUI/models/checkpoints/_ckpt_rename_map.json.

Actualiza todas las refs (ckpt_name/unet_name + defaults + prosa) en los
builders gamedev/vídeo/3D, style presets, pipelines, tests y los workflows
de ComfyUI. Arregla de paso el default roto de comfyui_text_to_3d_oneshot
(apuntaba a v1-5-pruned-emaonly.safetensors inexistente; ahora al real
IMG_v1-5-pruned-emaonly-fp16.safetensors).

No tocados (justificado): repo-paths de HuggingFace en comfyui_install_3d_model
(<repo>/model.fp16.safetensors son rutas de descarga, no nombres de dropdown)
y el mock de stable-diffusion.cpp en test_genconfig_to_sdcpp_args.

Verificado: dropdowns CheckpointLoaderSimple + UNETLoader listan los nombres
con prefijo; 1 generación real con IMG_juggernaut_xl_v11 (node_errors vacío,
pixelart_00003_.png); 327 tests comfyui verdes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 18:24:52 +02:00

3.6 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_validate_workflow function py ml 1.0.0 impure def comfyui_validate_workflow(workflow: dict, server: str = "127.0.0.1:8188", timeout: float = 30.0) -> dict Valida un workflow ComfyUI (API format) contra el catalogo /object_info de un servidor vivo: cruza los class_type contra los nodos disponibles y los nombres de modelos (ckpt/lora/vae/controlnet/...) contra los combos enumerados de cada nodo. Devuelve nodos y modelos faltantes ANTES de encolar, evitando un HTTP 400. Compone comfyui_object_info. Impura: HTTP GET.
comfyui
ml
validation
workflow
stable-diffusion
comfyui_object_info_py_ml
false error_go_core
name desc
workflow dict en API format ({node_id: {class_type, inputs}}) a validar.
name desc
server host:port del servidor ComfyUI sin esquema. Debe estar vivo para consultar /object_info.
name desc
timeout Timeout de la consulta HTTP en segundos.
dict {ok, valid, missing_nodes, missing_models, error}. ok = se pudo consultar el servidor; valid = sin nodos ni modelos faltantes; missing_nodes = class_type ausentes; missing_models = lista de {node, input, value} con valores de modelo fuera del combo; error = motivo si ok=False. false
python/functions/ml/comfyui_validate_workflow.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_validate_workflow import comfyui_validate_workflow

wf = comfyui_build_txt2img_workflow("IMG_dreamshaper_8.safetensors", "a cat")
res = comfyui_validate_workflow(wf)            # server 127.0.0.1:8188 vivo
# res == {"ok": True, "valid": True, "missing_nodes": [], "missing_models": [], "error": ""}

bad = comfyui_build_txt2img_workflow("no_existe.safetensors", "a cat")
res2 = comfyui_validate_workflow(bad)
# res2["valid"] == False
# res2["missing_models"] == [{"node": "4", "input": "ckpt_name", "value": "no_existe.safetensors"}]

El bloque de arriba se lanza con el python del venv. El if __name__ == "__main__" del archivo valida un txt2img de ejemplo contra el server local (python/.venv/bin/python3 python/functions/ml/comfyui_validate_workflow.py). Nota: ./fn run posicional no aplica porque el primer arg es un dict (workflow), no un escalar de CLI.

Cuando usarla

Siempre ANTES de comfyui_submit_workflow, sobre todo con workflows importados de internet (JSON/PNG ajenos) o que mezclen checkpoints/LoRAs que quiza no tengas descargados. Te dice exactamente que nodos custom faltan (a instalar) y que modelos faltan (a descargar) sin gastar un encolado fallido en el servidor.

Gotchas

  • Impura: hace HTTP GET a /object_info. Requiere el servidor vivo; si esta caido o reiniciandose, devuelve {ok: False, error: ...} (no lanza). Reintenta tu.
  • missing_models solo cubre inputs de modelo conocidos (ckpt_name, lora_name, vae_name, control_net_name, model_name, unet_name, clip_name, style_model_name, gligen_name) cuyo valor sea un string fuera del combo enumerado. No valida rangos numericos ni tipos de conexion.
  • Detecta nodos custom faltantes por class_type ausente en /object_info, pero NO resuelve de que repo instalarlos (eso es trabajo de resolve_workflow_deps, P1).
  • sampler_name/scheduler invalidos NO se reportan como missing_models (no son modelos); el servidor los rechazaria al encolar.