Files
fn_registry/python/functions/ml/comfyui_read_png_metadata.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

2.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_read_png_metadata function py ml 1.0.0 impure def comfyui_read_png_metadata(png_path: str) -> dict Lee los parametros de generacion de un PNG generado por ComfyUI: extrae el chunk 'prompt' (API format) y resume modelo, seed, steps, cfg, sampler, scheduler, denoise y los prompts positivo/negativo siguiendo las conexiones del KSampler. Comparte el lector de chunks PNG con comfyui_import_workflow_png. Impura: lectura de disco, solo stdlib.
comfyui
ml
png
metadata
workflow
stable-diffusion
false error_go_core
name desc
png_path Ruta local del PNG generado por ComfyUI.
dict {ok, prompt, parameters, error}. prompt = workflow API format embebido (dict); parameters = {model, seed, steps, cfg, sampler_name, scheduler, denoise, positive, negative} extraido del KSampler y nodos conectados; error = motivo si ok=False. false
python/functions/ml/comfyui_read_png_metadata.py

Ejemplo

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

res = comfyui_read_png_metadata(os.path.expanduser("~/ComfyUI/output/comfy_00001_.png"))
# res["ok"] == True
# res["parameters"]["seed"]            # ej. 20260623
# res["parameters"]["model"]           # ej. "IMG_dreamshaper_8.safetensors"
# res["parameters"]["positive"]        # el prompt positivo usado

O lanzable directo con: ./fn run comfyui_read_png_metadata <ruta.png>.

Cuando usarla

Cuando quieras saber con que parametros se genero una imagen (que seed, modelo o prompt) sin abrir el grafo entero: para reproducir una imagen que te gusto, para catalogar outputs, o para comparar generaciones. Si necesitas el workflow completo para relanzarlo usa comfyui_import_workflow_png (devuelve el dict entero).

Gotchas

  • Impura: lee el archivo del disco. Un path inexistente o un PNG sin chunk 'prompt' devuelve {ok: False, error: ...} (no lanza).
  • parameters se extrae del primer nodo cuyo class_type acaba en "KSampler" y de los CLIPTextEncode conectados a sus inputs positive/negative. Workflows muy custom (varios samplers, sin CheckpointLoaderSimple) pueden dar parameters parcial; el prompt completo siempre se devuelve para inspeccion manual.
  • Lee chunks tEXt/zTXt/iTXt; los PNG de la API REST solo traen 'prompt' (no 'workflow'), suficiente para los parametros.
  • Marcada impura (no pura) porque hace I/O de disco, segun la regla de pureza del registry; la logica de parseo en si es determinista.