---
name: comfyui_get_gamedev_style_preset
kind: function
lang: py
domain: ml
version: "1.0.0"
purity: pure
signature: "def comfyui_get_gamedev_style_preset(name: str | None = None) -> dict"
description: "Devuelve la receta de un STYLE PRESET gamedev curado y reutilizable (gameboy, ghibli, pixel-art-retro) o el catalogo de nombres si name es None. Un preset empaqueta como DATOS puros el look de un juego entero (subject_prefix/suffix, style, negative, checkpoint recomendado, lora + strength, size, transparent, post-proceso pixelize) para que cualquier builder/pipeline del grupo gamedev-2d lo aplique via comfyui_apply_style_preset y todos los assets salgan coherentes en ese estilo. Pura, sin red ni I/O; devuelve copias profundas. Extensible: anadir un estilo = una entrada en _PRESETS."
tags: [comfyui, ml, gamedev-2d, style, preset, theme, lora]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: name
    desc: "Identificador del estilo: 'gameboy', 'ghibli' o 'pixel-art-retro'. Insensible a mayusculas y a '_' vs '-'. Si es None o cadena vacia devuelve el catalogo {names, count} en vez de una receta (discovery)."
output: "Si name es None/'': dict {names: list[str], count: int} con el catalogo. Si name es valido: copia profunda de la receta del estilo con campos {name, subject_prefix, subject_suffix, style, negative, checkpoint, lora, lora_strength, size, transparent, post, notes}. Es una COPIA — mutarla no afecta al registro interno."
tested: true
tests: ["golden: los 3 presets (gameboy/ghibli/pixel-art-retro) devuelven recetas con todos los campos requeridos, checkpoint .safetensors, size>0", "golden gameboy: lora None + post pixelize paleta game-boy 4 colores", "golden pixel-art-retro: lora SDXL_pixel-art SDXL + checkpoint juggernaut + size>=768 + post pixelize", "golden ghibli: degrada a SD15_watercolor_style + sin post pixelize", "edge name None/'' -> catalogo de 3 nombres", "edge insensible a mayusculas y '_'/'-'", "edge devuelve copia profunda (mutar no afecta), error name desconocido -> ValueError listando disponibles"]
test_file_path: "python/functions/ml/comfyui_get_gamedev_style_preset_test.py"
file_path: "python/functions/ml/comfyui_get_gamedev_style_preset.py"
---

## Ejemplo

```python
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

# Discovery: que estilos hay
print(comfyui_get_gamedev_style_preset())  # {'names': ['gameboy', 'ghibli', 'pixel-art-retro'], 'count': 3}

# Receta de un estilo concreto (copia segura de mutar)
preset = comfyui_get_gamedev_style_preset("gameboy")
print(preset["checkpoint"], preset["lora"], preset["post"]["pixelize"]["palette"])
# IMG_dreamshaper_8.safetensors None game-boy

# Aplicarlo a un asset con el helper hermano (ver comfyui_apply_style_preset):
#   ap = comfyui_apply_style_preset(preset, "knight character")
#   wf = comfyui_build_enemy_creature_workflow(ap["subject"], size=ap["size"],
#                                              transparent=ap["transparent"], **ap["builder_kwargs"])
```

O lanzable directo con: `./fn run comfyui_get_gamedev_style_preset` (imprime catalogo + receta gameboy).

## Cuando usarla

Cuando quieras que TODOS los assets de un juego salgan en un MISMO look coherente sin
repetir a mano el `style`/`checkpoint`/`lora`/`negative` ni el post-proceso en cada
builder. Llama una vez al principio para fijar el estilo del proyecto ("todo en Game Boy",
"estilo Ghibli", "pixel-art retro 16-bit"), pasa la receta a `comfyui_apply_style_preset`
y de ahi a cualquier builder de sujeto (`item_icon`, `enemy_creature`, `prop_object`,
`structure`, ...) o al pipeline `comfyui_generate_asset_pack_oneshot`. Usa `name=None`
para descubrir los estilos disponibles.

## Gotchas

- Es una funcion **pura**: solo devuelve datos (la receta). La generacion real (GPU) y el
  post-proceso (pixelize) los hacen los builders + `comfyui_apply_style_preset` +
  `comfyui_submit_workflow`/`comfyui_wait_result`/`comfyui_fetch_output_image` +
  `comfyui_pixelize_image`.
- **El checkpoint y el LoRA deben casar de base**: `pixel-art-retro` usa el LoRA SDXL
  `SDXL_pixel-art` -> exige `checkpoint` SDXL (`IMG_juggernaut_xl_v11`) y `size` 768. Aplicar un
  LoRA SDXL sobre un checkpoint SD1.5 da basura. Si anades un estilo con LoRA nuevo,
  descargalo a `models/loras` y verifica su base antes.
- **ghibli no usa un LoRA Ghibli dedicado**: no hay ninguno instalado y no se descargo
  ninguno gated/de pago. Degrada a `SD15_watercolor_style` (gratis, ya instalado) +
  prompt Ghibli para el look pintado/acuarela. Un LoRA Ghibli especifico de Civitai
  mejoraria el parecido facial — pendiente humano.
- **gameboy se resuelve por POST, no por LoRA**: sin LoRA; el look DMG de 4 tonos verde lo
  da `comfyui_pixelize_image` con la paleta builtin `game-boy` + dithering. El caller DEBE
  aplicar el post (`preset["post"]["pixelize"]`) o solo vera un sprite monocromo-ish sin
  la paleta sellada.
- **Modelos verificados en el servidor** (8GB lowvram, modelos en `/mnt/2tb`): si cambias
  de PC valida que `IMG_dreamshaper_8`, `IMG_juggernaut_xl_v11`, `SDXL_pixel-art` y
  `SD15_watercolor_style` existan (`GET /object_info/CheckpointLoaderSimple` y `/LoraLoader`).

## Capability growth log

(v1.0.0 — sin cambios todavia.)
