0eefb7cfcd
Calidad por ESTILO en vez de por tipo: un dev fija el look del juego una vez y todos los assets salen coherentes. Diseño (A) datos puros + helper, no pipeline monolítico (issue 0087, crecer por composición). - comfyui_get_gamedev_style_preset(name=None): recetas curadas o catálogo. gameboy (sin LoRA, post pixelize paleta game-boy 4 tonos), ghibli (degrada a watercolor_style_sd15 gratis instalado, sin LoRA Ghibli gated), pixel-art-retro (reutiliza pixel-art-xl SDXL + juggernaut + post pixelize 16 colores). Extensible. - comfyui_apply_style_preset(preset, subject): traduce a kwargs **spread-ables para cualquier builder de sujeto + size/transparent/post. Pura, no muta. - 16 tests offline verdes. Validado e2e GPU: mismo 'knight character' en 3 estilos visiblemente distintos (4 vs 78552 vs 16 colores). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.2 KiB
5.2 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_apply_style_preset | function | py | ml | 1.0.0 | pure | def comfyui_apply_style_preset(preset: dict, subject: str, *, style: str | None = None, negative: str | None = None) -> dict | Traduce un STYLE PRESET gamedev (de comfyui_get_gamedev_style_preset) + un subject del usuario a lo que necesita un builder de sujeto del grupo gamedev-2d: el subject combinado con el prefijo/sufijo del estilo, los kwargs comunes (style, checkpoint, lora, lora_strength, negative) listos para **spread, la resolucion y el recorte recomendados (size, transparent) y la spec de post-proceso (post, p.ej. pixelize) que el caller aplica al PNG. Asi el mismo estilo se aplica a CUALQUIER builder (item_icon, enemy_creature, prop_object, ...) y al pipeline comfyui_generate_asset_pack_oneshot sin acoplar firmas. Pura, sin red ni I/O; no muta el preset. |
|
|
false |
|
dict con: name (estilo aplicado), subject (combinado con prefijo/sufijo), builder_kwargs ({style, checkpoint, lora, lora_strength, negative} para **spread en el builder), size (resolucion recomendada), transparent (recorte recomendado), post (post-proceso CPU: {'pixelize': {...}} o {}). | true |
|
python/functions/ml/comfyui_apply_style_preset_test.py | python/functions/ml/comfyui_apply_style_preset.py |
Ejemplo
import sys, os
sys.path.insert(0, os.path.join(os.environ["HOME"], "fn_registry", "python", "functions"))
from ml.comfyui_get_gamedev_style_preset import comfyui_get_gamedev_style_preset
from ml.comfyui_apply_style_preset import comfyui_apply_style_preset
from ml.comfyui_build_enemy_creature_workflow import comfyui_build_enemy_creature_workflow
# 1. Elegir estilo + aplicarlo a un subject
preset = comfyui_get_gamedev_style_preset("gameboy")
ap = comfyui_apply_style_preset(preset, "knight character")
# 2. Construir el workflow con cualquier builder de sujeto (kwargs por **spread)
wf = comfyui_build_enemy_creature_workflow(
ap["subject"], size=ap["size"], transparent=ap["transparent"], **ap["builder_kwargs"]
)
# 3. Generar (submit/wait/fetch) y, si el estilo lo pide, post-proceso:
# if ap["post"].get("pixelize"):
# comfyui_pixelize_image(raw_png, dst_png, **ap["post"]["pixelize"])
O lanzable directo con: ./fn run comfyui_apply_style_preset (aplica pixel-art-retro a "knight character").
Cuando usarla
Justo despues de elegir un estilo con comfyui_get_gamedev_style_preset, para convertir
esa receta en los argumentos exactos de un builder. Es el puente entre "que estilo quiero"
y "como lo paso a item_icon/enemy_creature/prop_object/...". El mismo ap sirve para
generar N assets distintos en el MISMO estilo (varia solo el subject). Para overrides
puntuales sin tocar el preset, usa style=/negative=.
Gotchas
- Devuelve
builder_kwargscon EXACTAMENTE las 5 claves comunes a los builders de SUJETO (style,checkpoint,lora,lora_strength,negative). Builders que NO las acepten todas (p.ej.seamless_tile,parallax_backgroundno tienentransparent/loraigual) exigen filtrar las claves; este helper esta pensado para los builders de sujeto cuadrado. sizeytransparentvan FUERA debuilder_kwargs(son recomendaciones del estilo): el caller los pasa explicitos o decide otros.transparent=Falseen los presets de demo es para que el look (paleta/pintura) cubra todo el frame; para un sprite con alpha pontransparent=True(el recorte es ortogonal al estilo).- El
postNO se aplica solo: el caller debe llamarcomfyui_pixelize_image(raw, dst, **ap["post"]["pixelize"])tras descargar el PNG siap["post"].get("pixelize"). Sin eso, estilos como gameboy/pixel-art-retro no sellan su grid/paleta. - Es pura: no llama a ningun builder ni toca la GPU; solo arma kwargs. No muta el
presetde entrada (lo que devuelve es independiente).
Capability growth log
(v1.0.0 — sin cambios todavia.)