cda36408d0
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>
3.6 KiB
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. |
|
|
false | error_go_core |
|
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_modelssolo 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/schedulerinvalidos NO se reportan como missing_models (no son modelos); el servidor los rechazaria al encolar.