Files
fn_registry/python/functions/ml/comfyui_critique_image_llm.md
T
egutierrez 974cc06bc7 feat(ml): panel multi-juez comfyui-judge (estetico + CLIP + LLM-vision)
Cuatro funciones impuras + pagina madre del grupo comfyui-judge, el gate
objetivo de calidad de imagen para tests/DoD y el bucle de mejora de skills:

- comfyui_score_aesthetic: estetico LAION-V2 (head MLP sobre CLIP ViT-L/14),
  subproceso al venv ComfyUI (torch+open_clip).
- comfyui_score_clip_alignment: fidelidad prompt-imagen via similitud coseno CLIP.
- comfyui_critique_image_llm: critica LLM-vision (compone ask_llm_vision), JSON
  verdict+score+reasons.
- comfyui_judge_image: agregadora, vota mayoria good/bad; degrada si un juez cae.

QuickGELU (ViT-L-14-quickgelu/openai) obligatorio: sin el, los embeddings se
degradan y el ranking de fidelidad se invierte en silencio.

Validado e2e sobre imagenes reales: golden 3 votos coherentes, asserts relativos
(nitida>ruido, alineado>desalineado), split 2-1 respeta mayoria en ambos sentidos,
degradacion ante 429/model invalido/path invalido sin crash.

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

3.5 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_critique_image_llm function py ml 1.0.0 impure def comfyui_critique_image_llm(image_path: str, prompt: str, *, model: str = 'claude-opus-4-8', max_tokens: int = 1024, token: str = '') -> dict Critica de un LLM-vision sobre una imagen generada: detecta artefactos, anatomia rota, texto ilegible, watermarks, incoherencias de composicion. Tercer juez del panel comfyui-judge. Compone ask_llm_vision (claude-direct, API directa) con un system prompt que obliga a devolver JSON {verdict good|bad, score 0-10, reasons}. Impura: red (API Anthropic) + lectura de imagen.
comfyui-judge
ml
llm
vision
critique
scoring
ask_llm_vision_py_core
false error_go_core
name desc
image_path Ruta a la imagen en disco local.
name desc
prompt Prompt original de la generacion (contexto para juzgar la fidelidad). Puede ir vacio si solo se evalua calidad intrinseca.
name desc
model id del modelo Anthropic con vision. Default 'claude-opus-4-8'. keyword-only.
name desc
max_tokens Maximo de tokens de la respuesta. keyword-only.
name desc
token Token OAuth; si vacio lo carga ask_llm_vision automaticamente. keyword-only.
dict {ok, verdict, score_0_10, reasons, error}. En exito ok=True, verdict 'good'|'bad', score_0_10 el score del modelo y reasons la lista de razones. En error (imagen invalida, API caida, 429, JSON no parseable) ok=False con error. Nunca lanza excepcion. false
python/functions/ml/comfyui_critique_image_llm.py

Ejemplo

import sys, os
sys.path.insert(0, os.path.join("python", "functions"))
from ml.comfyui_critique_image_llm import comfyui_critique_image_llm

img = os.path.expanduser("~/ComfyUI/output/comfy_sdxl_00001_.png")
res = comfyui_critique_image_llm(img, "a majestic lion standing on rocks at sunset, photorealistic")
print(res)
# {'ok': True, 'verdict': 'good', 'score_0_10': 8.0,
#  'reasons': ['anatomia del leon correcta', 'iluminacion coherente con el atardecer'], 'error': ''}

CLI directa:

python/.venv/bin/python3 python/functions/ml/comfyui_critique_image_llm.py ~/ComfyUI/output/comfy_sdxl_00001_.png "a majestic lion at sunset"

Cuando usarla

  • Cuando los scores numericos (estetico/CLIP) no bastan: el LLM ve defectos finos que el score global no penaliza (dedos de mas, ojos asimetricos, texto basura, watermarks).
  • Como el juez "humano" de comfyui_judge_image, para desempatar good/bad.
  • Para obtener razones LEGIBLES de por que una imagen es mala (feedback accionable al skill).

Gotchas

  • Cuesta tokens de API. Cada llamada va a api.anthropic.com (claude-direct). Usar con mesura; en validacion, pocas llamadas.
  • Rate limit (HTTP 429). Si el rate limit compartido esta saturado, devuelve ok=False con el error 429 — no crashea. El panel comfyui_judge_image sigue votando con los otros dos jueces. Reintentar mas tarde o bajar a un modelo con cuota (haiku).
  • El modelo puede no devolver JSON limpio. Se extrae el primer objeto {...} (tolera fences ```json). Si no hay JSON parseable, ok=False.
  • verdict conservador. Si el modelo responde algo ambiguo (ni 'good' ni 'bad'), se normaliza a 'bad' (ante la duda, no es producto).
  • NUNCA claude -p. Respeta la regla llm_invocation: solo claude-direct via ask_llm_vision (arranque 0, API directa).