Files
fn_registry/python/functions/infra/generate_app_icon.md
T
egutierrez a03675113a chore: auto-commit (286 archivos)
- .claude/agents/fn-orquestador/SKILL.md
- .claude/commands/fn_claude.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- .claude/rules/ids_naming.md
- CHANGELOG.md
- apps/dag_engine/README.md
- apps/dag_engine/api.go
- apps/dag_engine/dags_migrated/example.yaml
- apps/dag_engine/dags_migrated/example_lineage_tracking.yaml
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 16:33:22 +02:00

4.1 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
generate_app_icon function py infra 1.0.0 impure generate_app_icon(phosphor_icon_name: str, accent_hex: str, out_ico_path: str, *, weight: str = 'fill', sizes: list[int] = None, phosphor_root: str = None) -> str Rasteriza un icono Phosphor SVG sobre un fondo redondeado del color accent y exporta un .ico multi-resolucion (default 16,24,32,48,64,128,256). Devuelve el path absoluto del .ico escrito. El glyph se renderiza en blanco al 70% del canvas sobre fondo con esquinas redondeadas al 16%.
cpp-windows
icon
windows
phosphor
ico
pillow
cairosvg
false error_go_core
cairosvg
PIL
name desc
phosphor_icon_name Nombre del icono Phosphor sin sufijo de weight (ej. 'chart-bar', 'tree-structure', 'gauge'). Ver https://phosphoricons.com para el catalogo.
name desc
accent_hex Color de fondo en formato hexadecimal '#RRGGBB' (ej. '#0ea5e9', '#7c3aed'). Define la identidad visual de la app.
name desc
out_ico_path Ruta de salida del .ico. Absoluta o relativa al cwd. El directorio padre se crea si no existe. Colocar en <app_dir>/appicon.ico para que add_imgui_app lo detecte automaticamente.
name desc
weight Variante Phosphor: 'fill' (default), 'regular', 'bold', 'light', 'thin', 'duotone'.
name desc
sizes Lista de resoluciones a incluir. Default [16,24,32,48,64,128,256]. Cada tamano se renderiza independientemente para crispness.
name desc
phosphor_root Carpeta raiz de assets phosphor-core (contiene subdirs fill/, regular/, etc.). Default: <registry_root>/sources/phosphor-core/assets.
Ruta absoluta (str) del archivo .ico generado y escrito a disco. false
python/functions/infra/generate_app_icon.py

Ejemplo

from infra import generate_app_icon

# Generar icono para una app C++ del registry
ico_path = generate_app_icon(
    phosphor_icon_name="chart-bar",
    accent_hex="#0ea5e9",
    out_ico_path="apps/chart_demo/appicon.ico",
)
print(ico_path)  # /home/lucas/fn_registry/apps/chart_demo/appicon.ico
# Desde la CLI directa para prueba rapida
import sys
sys.path.insert(0, "python/functions")
from infra import generate_app_icon

generate_app_icon("gauge", "#059669", "/tmp/registry_dashboard.ico")
# Generar iconos para todas las apps del registry con el script batch
python dev/gen_app_icons.py

Cuando usarla

Cuando una app C++ del registry necesita un .ico de Windows para distinguirse en el escritorio y taskbar. El macro add_imgui_app de cpp/CMakeLists.txt detecta <app_dir>/appicon.ico y lo enlaza al .exe via windres automaticamente en builds Windows. Ejecutar esta funcion antes de compilar en Windows o antes de fn run redeploy_cpp_app_windows <app>.

Gotchas

  • Requiere sources/phosphor-core/: el repo debe estar clonado. Si falta: git clone --depth=1 https://github.com/phosphor-icons/core.git sources/phosphor-core desde la raiz del registry. La funcion lanza FileNotFoundError con el comando exacto si el SVG no existe.
  • cairosvg y Pillow en el venv: deben estar instalados en python/.venv. Si faltan: cd python && uv pip install cairosvg pillow. Ya presentes en el venv por defecto del registry.
  • El .ico se sobreescribe sin warning: si ya existe appicon.ico se reemplaza silenciosamente. Hacer backup si se necesita preservar la version anterior.
  • Re-build del .exe necesario: Windows no refleja el icono nuevo hasta que se recompila el ejecutable. Tras generar el .ico ejecutar fn run redeploy_cpp_app_windows <app> o compilar manualmente con CMake.
  • Solo formato #RRGGBB: accent_hex debe tener exactamente 6 digitos hex. Formatos con alpha o notacion corta #RGB lanzan ValueError.
  • Peso "fill" por defecto: Phosphor "fill" tiene las formas mas solidas y visibles en tamanos pequeños (16x16). Para iconos lineales usar weight="regular" pero verificar legibilidad a 16px.

Capability growth log

(sin cambios desde v1.0.0)