394221f8c7
Nueva capacidad del grupo comfyui: dado el id/URL de una imagen de Civitai, extrae cómo se generó (prompt, modelo, sampler, LoRAs) vía los endpoints tRPC image.getGenerationData + image.get (la API v1 da meta=null), reconstruye el workflow y lo replica en nuestro ComfyUI, sustituyendo el checkpoint ausente por el más parecido instalado y reportando lo que falta en missing_models sin bajar nada a ciegas. Respeta SFW. Funciones nuevas (registry-first, componen 8 funciones existentes): - comfyui_fetch_civitai_image_meta_py_ml (impura): observa la receta por id/URL. - comfyui_map_a1111_params_py_ml (pura): traduce meta A1111 -> params ComfyUI, familia del modelo y LoRAs. - comfyui_replicate_civitai_oneshot_py_pipelines: orquesta fetch_meta -> map_a1111_params -> build/embebido -> run_foreign_workflow_oneshot -> judge. Probado en vivo (imagen SFW 23526611): receta extraída + réplica 1024x1024 generada + panel de jueces. 12 tests unitarios verdes. Capability page comfyui.md actualizada. Report 0127. 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_map_a1111_params | function | py | ml | 1.0.0 | pure | def comfyui_map_a1111_params(meta: dict, resources: list | None = None) -> dict | Traduce la metadata de generacion de Civitai/A1111 a parametros de ComfyUI. Mapea el sampler A1111 ('DPM++ 2M Karras') a (sampler_name='dpmpp_2m', scheduler='karras') de ComfyUI, normaliza steps/cfg/dims/seed/positive/negative a las claves que consumen los builders del registry, infiere la familia del modelo (sd15|sdxl|flux|unknown) por nombre/baseModel/recursos/dimensiones, y extrae los LoRAs tanto de los resources de Civitai como de las etiquetas <lora:nombre:peso> del prompt (sintaxis A1111, que ademas limpia del prompt). Funcion pura: sin red ni I/O. |
|
false |
|
|
dict {sampler_name, scheduler, steps, cfg, width, height, seed, positive, negative, family, checkpoint_hint, loras, clip_skip}. Los numericos son None cuando la meta no los aporta (el caller pone defaults por familia). family in {sd15, sdxl, flux, unknown}. loras = [{name, weight, source}]. positive viene SIN las etiquetas <lora:..> (que pasan a loras). | true |
|
python/functions/ml/comfyui_map_a1111_params_test.py | python/functions/ml/comfyui_map_a1111_params.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_map_a1111_params import comfyui_map_a1111_params
meta = {"prompt": "knight <lora:detail:0.6>", "negativePrompt": "blurry",
"Model": "juggernautXL_v11", "sampler": "DPM++ 2M Karras",
"steps": 30, "cfgScale": 5.5, "seed": 12345, "Size": "832x1216"}
p = comfyui_map_a1111_params(meta)
print(p["sampler_name"], p["scheduler"]) # dpmpp_2m karras
print(p["family"]) # sdxl
print(p["loras"]) # [{'name': 'detail', 'weight': 0.6, 'source': 'prompt_tag'}]
Cuando usarla
Cuando tengas la meta de una imagen de Civitai/A1111 (p.ej. de
comfyui_fetch_civitai_image_meta) y necesites construir un workflow ComfyUI que la
reproduzca: traduce sampler/scheduler/dims/loras al vocabulario de ComfyUI y te dice la familia
del modelo para elegir un checkpoint compatible. Es el puente entre observar una receta y
construir el workflow en comfyui_replicate_civitai_oneshot.
Gotchas
- El mapeo de sampler cubre los comunes; un sampler raro o mal escrito cae a
('euler','normal')(fallback seguro, no falla). familypor dimensiones es heurística: si no hay pistas en nombres, dimensión mayor >=900 →sdxl, si nosd15. Puede equivocarse con modelos atípicos.- Los nombres de LoRA salen como los nombra Civitai (modelName o tag del prompt), NO como el
filename
.safetensorsinstalado — el caller debe casarlos contra los modelos del servidor. - Pura: no consulta el servidor ComfyUI ni valida que el checkpoint exista; eso lo hace el pipeline.