---
name: comfyui_curated_styles_catalog
kind: function
lang: py
domain: ml
version: "1.0.0"
purity: pure
signature: "def comfyui_curated_styles_catalog(category: str | None = None) -> dict"
description: "Catalogo curado de ~190 estilos para el selector WAS de ComfyUI (Prompt Styles Selector / Prompt Multiple Styles Selector), en el formato exacto {nombre: {prompt, negative_prompt}}. Cada prompt son MODIFICADORES de estilo potentes (camara, lente, iluminacion, render engine, medio artistico, paleta, mood), no descripcion de sujeto y sin el placeholder {prompt} (el selector multiple concatena los prompts). Organizado en 13 categorias (photography, render3d, painting, anime, pixel, illustration, comic, lighting, camera, material, scifi, fantasy, mood) construidas desde estructuras compactas con un negative compartido por familia, garantizando prompt+negative no vacios en toda entrada. Pensado para alimentar comfyui_append_styles (merge+dedup sobre el styles.json real). Pura: solo devuelve datos."
tags: [comfyui, ml, comfyui-styles, styles, was, catalog, presets]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: category
    desc: "None (default) devuelve TODOS los estilos como dict plano {nombre: {prompt, negative_prompt}}. Una categoria valida (photography, render3d, painting, anime, pixel, illustration, comic, lighting, camera, material, scifi, fantasy, mood) filtra a esa categoria. El valor especial '__categories__' devuelve {categories: {cat: count}, total} para discovery. Categoria desconocida -> ValueError."
output: "Si category None: dict {nombre: {prompt, negative_prompt}} con los ~190 estilos. Si category valida: mismo formato filtrado. Si '__categories__': dict {categories: {cat: count}, total: int}."
tested: true
tests: ["golden: catalogo completo >=180 estilos", "edge toda entrada tiene prompt y negative_prompt no vacios", "edge ningun prompt contiene el placeholder literal {prompt}", "edge nombres unicos (total plano == suma de categorias)", "edge filtrar por categoria valida devuelve subset no vacio", "error categoria desconocida -> ValueError", "edge discovery __categories__ devuelve conteos coherentes"]
test_file_path: "python/functions/ml/comfyui_curated_styles_catalog_test.py"
file_path: "python/functions/ml/comfyui_curated_styles_catalog.py"
---

## Ejemplo

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

# Discovery: que categorias hay y cuantos estilos
print(comfyui_curated_styles_catalog("__categories__"))
# {'categories': {'photography': 25, 'render3d': 18, ...}, 'total': 190}

# Todos los estilos, listos para fusionar
todos = comfyui_curated_styles_catalog()
print(len(todos), "estilos")                  # 190

# Solo una categoria
foto = comfyui_curated_styles_catalog("photography")
print(foto["photo-golden-hour"]["prompt"])
```

O lanzable: `./fn run comfyui_curated_styles_catalog` (imprime conteos por categoria + total).

## Cuando usarla

Cuando quieras AMPLIAR el repositorio de estilos del selector WAS de ComfyUI con un set grande,
curado y organizado por categoria, sin depender de un LLM ni inventarlos a mano. Es la fuente de
DATOS del flujo de ampliacion: llamala, pasa el dict a `comfyui_append_styles` (merge+dedup
preservando los existentes) y reinicia comfyui. Tambien util para inspeccionar/elegir estilos por
categoria. Para generar estilos NUEVOS no incluidos aqui, usa `comfyui_generate_styles_llm`.

## Gotchas

- Es PURA: solo devuelve el catalogo como datos. La escritura al styles.json real (con backup) la
  hace `comfyui_append_styles`; el reinicio del server lo haces tu.
- Los `prompt` son MODIFICADORES de estilo, no sujetos. El selector multiple los CONCATENA, asi que
  estan pensados para combinarse entre si y con el sujeto del workflow.
- Los nombres usan prefijos por categoria (`photo-`, `render-`, `paint-`, ...) para agrupar y
  reducir colisiones con los estilos que ya viven en el styles.json (que usan otros nombres). El
  dedup final por nombre lo garantiza `comfyui_append_styles`.
- Anadir un estilo = una linea `(nombre, modificadores)` en la categoria correspondiente de
  `_CATEGORIES`. El negative se hereda de la familia.

## Capability growth log

(v1.0.0 — sin cambios todavia.)
