---
name: godot_clean_asset_name
kind: function
lang: py
domain: core
version: "1.0.0"
purity: pure
signature: "def godot_clean_asset_name(filename: str, *, override: str | None = None) -> str"
description: "Normaliza el nombre de archivo de un asset salido de ComfyUI (patron <prefijo>_NNNNN_.<ext>) a un nombre limpio y seguro para res://: snake_case, minusculas, sin el sufijo numerico _NNNNN_, sin espacios ni caracteres raros, conservando la extension. Pura: solo manipula el string, no toca disco. Pensada para el puente ComfyUI -> Godot."
tags: [godot, gamedev-2d, core, assets, naming]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: filename
    desc: "nombre o ruta del asset de origen (se toma solo el basename)."
  - name: override
    desc: "nombre base deseado sin extension; si se pasa se usa en lugar del nombre de origen (igual se normaliza a snake_case y se le anade la extension del origen). keyword-only."
output: "nombre de archivo limpio 'snake_case.ext' (ext en minuscula; sin punto si el origen no tenia extension)."
tested: true
tests: [test_strips_comfyui_suffix, test_normalizes_spaces_and_case, test_takes_basename_from_path, test_override_name, test_empty_fallback]
test_file_path: "python/functions/core/godot_clean_asset_name_test.py"
file_path: "python/functions/core/godot_clean_asset_name.py"
---

## Ejemplo

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

godot_clean_asset_name("svd_motion_hi_00001_.webp")              # 'svd_motion_hi.webp'
godot_clean_asset_name("/x/ComfyUI/output/bench_00042_.png")      # 'bench.png'
godot_clean_asset_name("x.png", override="explosion loop")        # 'explosion_loop.png'
```

## Cuando usarla

Al exportar un asset de ComfyUI a Godot, para renombrar el `<prefijo>_NNNNN_.<ext>`
a un nombre semántico y seguro (lo usa `comfyui_export_asset_to_godot`). También
para limpiar cualquier nombre de archivo antes de meterlo en `res://`.

## Gotchas

- Solo quita el sufijo numérico `_NNNNN_` del **nombre de origen**; con `override`
  se respetan los dígitos finales (p.ej. `hero_v2` no pierde el `2`).
- Reduce cualquier carácter no `[a-z0-9_]` a `_` y colapsa repetidos; un nombre que
  quede vacío cae a `"asset"`.
- Conserva la extensión en minúscula; si el origen no tiene extensión, devuelve solo
  el nombre sin punto.
