Skip to main content
Go to Editor

Documentación

Esta guía te ayudará a empezar rápidamente con el JSON Optimizer. Cargar proyecto: Usa el InputNode para cargar tus archivos .json , .atlas y .png . Elegir un p

FPSPlusPremiumUIYouTubeanimationcon pérdidaconceptosconectoresconexionescontrolesdatosejemplosestadísticasexportflujo de trabajoflujosgráficasguideguíamemoriamétricasoptimizaciónplaybackpreciosprincipianterecorderrecordingrendimientoresultadossin pérdidasuscripcióntablatimelinetiposvideoviewervisorvídeo

Primeros pasos: Flujo de trabajo básico

principianteflujo de trabajoguía

Esta guía te ayudará a empezar rápidamente con el JSON Optimizer. Cargar proyecto: Usa el InputNode para cargar tus archivos .json , .atlas y .png . Elegir un preset (modo Plus): En modo Plus, usa el panel derecho par...

Read article

Tipos de sockets y flujo de datos

conectorestiposdatosconexiones

Este artículo explica los tipos de datos que usan los sockets en el grafo de nodos y qué se puede conectar con qué. Tipos de socket Spine Payload — representación del proyecto Spine apta para runtime, usada por la may...

Read article

Planes de suscripción y funciones Premium

suscripciónPremiumPlusprecios

re-polish ofrece dos niveles de suscripción para distintas necesidades. Plan Gratis ✓ Gráfico de nodos básico ✓ Visor JSON ✓ Línea de tiempo con múltiples pistas y mezcla ajustable entre animaciones ✓ Optimizaciones l...

Read article

Conceptos básicos: Con pérdida vs. Sin pérdida

conceptoscon pérdidasin pérdidaprincipiante

Todos los métodos de optimización se dividen en dos tipos: Sin pérdida: Estos métodos solo eliminan datos redundantes... Ejemplos: Nodo de optimización Spline , CleanupNode . Con pérdida: Estos métodos simplifican las...

Read article

Cómo medir la eficiencia

guíamétricasestadísticas

Para entender la efectividad de tu optimización, presta atención a las siguientes métricas: Tamaño del archivo: El tamaño final del archivo .json es el objetivo principal de la optimización. Número de fotogramas clave...

Read article

Viewer: Panel de controles

visorcontrolesUI

La pestaña Visor superpone un panel de controles sobre el lienzo. Se divide en tres grupos: Controles de animación Animación — selecciona qué animación de Spine se reproduce. Skin — selecciona qué skin se aplica. Velo...

Read article

Viewer: Panel de rendimiento

rendimientoFPSmemoriaUI

El panel Performance muestra métricas de runtime en tiempo real para el/los esqueleto(s) que se están reproduciendo. Tiempo real FPS — fotogramas por segundo medidos por el monitor. Frame Time — tiempo por fotograma e...

Read article

Viewer: Línea de tiempo

viewertimelineanimationplaybackguide

El panel Timeline es un secuenciador de animaciones acoplable en la parte inferior del Visor. Permite organizar clips de animación en múltiples pistas, controlar la reproducción y previsualizar transiciones. Pistas &a...

Read article

Viewer: Grabador

viewerrecorderrecordingexportvideoguide

El Recorder captura animaciones Spine del visor como vídeo, imágenes animadas o secuencias de imágenes. Modos de grabación ⚡ Grabación rápida — captura en tiempo real usando MediaRecorder + captureStream() . Produce s...

Read article

Pestaña Resultados

resultadostablaoptimización

La pestaña Resultados muestra la salida detallada de optimización. Tabla de resultados — vista de una fila por cambio de los resultados de optimización JSON (p. ej., qué animación/hueso/propiedad/fotograma clave se mo...

Read article

Pestaña Estadísticas

estadísticasgráficasmétricas

La pestaña Estadísticas resume los resultados de optimización como gráficas y métricas agregadas. Gráfico de optimización — visualiza el impacto de la optimización a lo largo del conjunto de datos (cuando las optimiza...

Read article

Ejemplos de pipelines (Vídeo)

vídeoejemplosflujosYouTube

A continuación se muestran flujos completos y reales de la lista oficial de YouTube. Abrir la lista completa Ejemplos Spine2D Experiments 1: Optimización de curvas con el algoritmo RDP — demostración básica de optimiz...

Read article

Nodes

Input

Importa archivos de proyecto de Spine, entradas solo JSON, recursos de demostración y paquetes ZIP al grafo.

Propósito: Este es el punto de entrada principal para la mayoría de los flujos de trabajo. Lee JSON, atlas y texturas, y los normaliza en datos internos que los nodos posteriores pueden procesar.

Modos compatibles:
1. Proyecto completo: JSON + atlas + texturas
2. Solo JSON: procesa datos de esqueleto/animación sin atlas
3. Paquete ZIP: un zip empaquetado que contiene un proyecto completo
4. Recursos de demostración: datos de muestra integrados para pruebas rápidas

Salidas principales:
- **payload_out**: datos normalizados para los nodos de optimización
- **original_json_out**: JSON de origen para comparación o reconstrucción
- **atlas_project_out**: proyecto de atlas analizado cuando se proporcionan texturas

Video To Png Sequence

Convierte un clip de video en una secuencia de fotogramas PNG para flujos de trabajo de Spine.

Es una herramienta de entrada gratuita del menú Input pensada para flujos de producción. Admite chroma key para pantallas verdes y una limpieza de matte estilo unpremultiply para fondos negros. Las salidas se envían por payload_out y atlas_out.

Picture Input

Añade imágenes PNG/JPEG independientes al viewport para crear vistas previas y tomas de presentación más limpias.

Propósito: Usa este nodo para colocar imágenes directamente en el viewport como capas de presentación o elementos visuales auxiliares. Resulta útil cuando quieres decorar una escena, añadir gráficos de apoyo y hacer que las vistas previas del proyecto se vean más pulidas antes de grabar vídeos o demos.

Flujo de trabajo: Carga una imagen y luego utiliza las herramientas del viewport para escalarla, moverla y ajustar su z-index para que quede correctamente integrada en la composición. Así puedes montar capturas de showcase atractivas sin tocar los datos principales del proyecto Spine.

Este nodo es autónomo y no expone graph sockets.

Version: Formato de versión JSON de Spine para el esqueleto stub generado.
Blending: Modo de mezcla para el adjunto generado (normal, aditivo, multiplicar, pantalla).

Psd To Skeletons

Carga archivos PSD/PSB con capas y genera esqueletos de Spine vinculados que conservan el layout de Photoshop para previsualizaciones precisas.

Propósito: Usa este nodo cuando la escena ya estaba compuesta en Photoshop y quieres convertir esa pila de capas en un conjunto de esqueletos de Spine vinculados dentro del visor. Cada capa PSD visible se convierte en su propio esqueleto tipo imagen colocado según las coordenadas del PSD, lo que facilita mucho montar la preview y colocar objetos con precisión.

Flujo en el visor: Después de generar el resultado todavía puedes cambiar el draw order en el visor y colocar otros esqueletos entre las capas PSD importadas, de modo que personajes o props adicionales de Spine queden integrados dentro de la composición de Photoshop.

Disponibilidad: Nodo gratuito. Este nodo es independiente y no expone sockets del grafo.

Version: Formato de versión de Spine JSON usado para los esqueletos de capas generados.
Blending: Modo de mezcla usado para los attachments generados.
Load PSD: Abre el selector de PSD/PSB y genera esqueletos de capas vinculados a partir del archivo elegido.
File Info: Resumen de solo lectura del archivo PSD/PSB cargado actualmente.
Layer Count: Conteo de solo lectura de las capas visibles que se convertirán en esqueletos vinculados.
Preflight: Informe de solo lectura sobre problemas de nombres de capas detectados antes de la generación.

Project Input

Carga una carpeta o un archivo de proyecto de Spine en el grafo y expone un ProjectPayload a través del socket project_out para los nodos posteriores que trabajan con proyectos.

Propósito: Punto de entrada para flujos basados en proyectos. Escanea una carpeta o un archivo de proyecto de Spine, crea un ProjectPayload y mantiene metadatos en caché listos para nodos posteriores como Project Viewer, filtros, Static Bake y Deduplicator.

Controles:
- **Load Folder**: Abre el selector de carpetas del sistema mediante File System Access API, escanea el directorio seleccionado, actualiza el resumen, guarda metadatos en caché e inicia un file watcher para que los cambios posteriores puedan volver a escanearse.
- **Browse (Fallback)**: Usa una entrada **webkitdirectory** oculta en navegadores sin **showDirectoryPicker()**. Carga el proyecto, pero sin un identificador de directorio persistente, por lo que no hay vigilancia en vivo ni rescans fiables.
- **Load Archive**: Carga un archivo **.zip** o **.spine** como árbol de proyecto virtual. Los proyectos cargados desde archivo no conservan un identificador de directorio, así que **Rescan** no está disponible por diseño.
- **Rescan**: Vuelve a escanear la carpeta cargada anteriormente cuando hay un identificador de directorio disponible. Antes de escanear, vuelve a comprobar el permiso de lectura. Los proyectos cargados mediante fallback browse o modo archivo suelen indicar que no hay ningún directorio cargado.
- **Clear Project**: Detiene la vigilancia de archivos y limpia el payload actual, el resumen, la caché de ejecución y los metadatos del payload guardados en caché.
- **Reset to Defaults**: Restablece solo los controles genéricos del nodo. **No** descarga el proyecto actual y no sustituye a **Clear Project**.
- **Drop folder or .zip here**: Punto de entrada de arrastrar y soltar que acepta carpetas y archivos compatibles y los envía por la misma canalización de carga.

Salidas:
- **project_out**: ProjectPayload con el árbol escaneado, la lista plana de archivos, los totales de tamaño y el desglose por tipo para nodos posteriores que entienden proyectos.
- **stats**: Salida de diagnóstico solo para DEV.

Output

Reúne el resultado final y permite descargar los datos optimizados como archivos separados, conjuntos de archivos o archivos comprimidos.

Propósito: Actúa como centro de exportación para JSON optimizado, atlas, texturas y sprites. Puede procesar tanto un único conjunto de JSON/atlas/texturas como varios conjuntos de archivos. Si solo recibe sprites, también puede producir únicamente imágenes sin reconstruir un proyecto Spine completo.

Opciones de exportación:
- Descargar archivos por separado o como un único archivo comprimido
- Descargar resultados packed o un archivo con los archivos unpacked
- Exportar JSON en formato comprimido o en formato legible
- Exportar un proyecto Spine completo o solo resultados de sprites/imágenes

Encadenamiento: OutputNode no tiene por qué ser el final absoluto del gráfico. Puedes pasar sus salidas a otra etapa del pipeline y ejecutar los mismos archivos en rondas adicionales de optimización. En la práctica, la optimización de keys y curves se probó hasta en 3 iteraciones consecutivas.

Salidas principales:
- **reconstructed_json_out**: Spine JSON reconstruido
- **original_json_passthrough_out**: JSON original en passthrough
- **payload_out**: payload para seguir encadenando
- **changes**: cambios de optimización recopilados
- **atlas_assets**: recursos de atlas listos para exportar

RDP

Simplifica curvas de animación (RDP).

Propósito: Reduce el número de keyframes en segmentos de animación lineales o casi lineales eliminando puntos que están en una línea recta entre otros dos.

Regla de Oro: Desactivada por defecto. Protege curvas con forma marcada (área/curvatura) para que no se aplanen a lineales. Desactívala solo para una compresión más agresiva tras revisión visual.

Claves de socket: payload_in, payload_out, changes

Epsilon: Desviación máxima de la curva original. Valores más altos eliminan más keyframes pero pueden perder detalle.
Steep: Umbral de sensibilidad de curvatura. Protege curvas complejas de ser aplanadas a lineales.
Round Mode: Modo de redondeo para valores optimizados: ninguno (mantener original), décimas (1 decimal), enteros.
Golden Rule: Cuando está activado, protege curvas con forma/área significativa de ser simplificadas por RDP.
S Run Length: Número mínimo de curvas S estándar de Spine consecutivas requerido antes de activar este aplanado basado en plantilla. Establece 0 para desactivar la función.
S Deviation: Desviación normalizada permitida respecto a la plantilla estándar de curva S de Spine, en por mil (0-300). Los valores bajos exigen una coincidencia más cercana; los valores altos aplanan más secuencias cercanas a la plantilla.

Spline

Optimización de curvas con splines.

Propósito: Ajuste suave de curvas manteniendo la calidad visual.

Claves de socket: payload_in, payload_out, changes

Max Error: Error máximo de aproximación permitido para ajuste de spline. Menor = ajuste más preciso al original.
Min Group Size: Número mínimo de keyframes lineales consecutivos necesarios para formar un grupo eliminable.

Refit

Refit de curvas (Bezier) para reducir keyframes.

Propósito: Ajusta menos curvas manteniéndose dentro de una tolerancia.

Claves de socket: payload_in, payload_out, changes

Error Tolerance: Desviación máxima permitida entre curva original y Bézier ajustada. Menor = coincidencia más precisa.
Max Iterations: Número de iteraciones de optimización para ajuste de curvas. Más iteraciones = mejor ajuste pero más lento.

Quantizer

Reduce la precisión de valores numéricos en keyframes y curvas.

Propósito: Método simple pero efectivo para reducir el tamaño del archivo redondeando números a un número especificado de decimales.

Uso: Puede aplicarse a casi todos los datos de animación. Se vuelve más efectivo con mayor número de keyframes.

Precaución: Cuantización demasiado agresiva (baja precisión) puede causar temblores o artefactos visuales en animaciones.

Precision: Número de decimales para valores de keyframe. Menos = archivo más pequeño pero menor precisión.

Cleanup

Realiza varias tareas de limpieza para eliminar datos de animación redundantes o innecesarios.

Propósito: Herramienta especializada para eliminar tipos específicos de datos redundantes que otros optimizadores podrían pasar por alto.

Uso: Conecta tu payload a 'payload_in' y toma el resultado desde 'payload_out'. Si quieres un reporte por cambio, usa también 'changes'.

Claves de socket:
- Entradas: payload_in
- Salidas: payload_out, changes

Limpiezas soportadas actualmente:
1. **Remove Unused Color/Alpha Tracks**: Elimina timelines de color/alpha de slots que nunca son visibles durante la animación.
2. **Remove Redundant IK Rotations**: Elimina keyframes de rotación de huesos controlados completamente por una restricción IK con mix al 100%.
3. **Remove Path Constraint Keys**: Elimina keyframes de rotate/translate de huesos controlados completamente por una restricción de trayectoria (mix al 100%).
4. **Sanitize Non-English Characters**: Reemplaza caracteres no ingleses en nombres/identificadores para evitar problemas en herramientas posteriores.

Remove Unused Color Tracks: Eliminar componentes de color/alfa que nunca cambian del valor predeterminado.
Remove Redundant IKRotation: Eliminar keyframes de rotación de huesos completamente controlados por restricciones IK.
Remove Redundant Path Constraint Keys: Eliminar keyframes de restricción de ruta que duplican valores de configuración.

Scale

Escala todos los valores numéricos en keyframes de animación por un factor especificado.

Propósito: Escala uniformemente los datos de animación, útil para redimensionar proporcionalmente el esqueleto o ajustar la intensidad de la animación.

Uso: Conecta al payload y establece el factor de escala. Valores superiores a 1.0 agrandan, inferiores a 1.0 reducen.

Parámetros:
- **Scale Factor**: Multiplicador aplicado a todos los valores de posición y tamaño.
- **Include Rotations**: Si también escalar valores de rotación (normalmente deshabilitado).

Casos de uso:
- Redimensionar animaciones importadas para coincidir con nuevas dimensiones del esqueleto
- Crear variantes exageradas o sutiles de animaciones
- Escalado por lotes de múltiples animaciones para diferentes tamaños de personajes

Scale Bones: Escalar posiciones y tamaños de huesos.
Scale Attachments: Escalar posiciones y tamaños de adjuntos.
Scale Animations: Escalar keyframes de animación.
Scale Constraints: Escalar parámetros de restricciones.
Scale Path: Escalar datos de ruta.

Schneider

Ajusta curvas de Bézier suaves a keyframes de animación usando el algoritmo de ajuste de curvas de Schneider.

Propósito: Ajuste de curvas avanzado que produce curvas de Bézier de aspecto natural a partir de secuencias densas de keyframes.

Disponibilidad: **Nodo solo Plus**.

Cómo funciona: El algoritmo de Schneider analiza las posiciones y tangentes de keyframes para generar puntos de control de Bézier óptimos que coinciden estrechamente con el movimiento original.

Parámetros:
- **Error Tolerance**: Desviación máxima permitida de los keyframes originales. Menor = más preciso, mayor = curvas más suaves.
- **Corner Angle**: Ángulo umbral (grados) en el cual dividir la curva en segmentos.

Mejor para:
- Animaciones dibujadas a mano o importadas con muchos keyframes
- Convertir interpolación lineal a curvas de Bézier suaves
- Reducir número de keyframes manteniendo calidad de curva

Nota: Más intensivo computacionalmente que algoritmos más simples como RDP, pero produce calidad de curva superior.

Min Segment Size: Número mínimo de keyframes en un segmento para procesamiento.

Physics Constraint Bake

Bake Physics Constraints to Keys: convierte el movimiento de PhysicsConstraint en keyframes de rotación/traslación y elimina timelines de física.

Propósito: Convierte la simulación de física en tiempo de ejecución en keyframes explícitos para que las animaciones sean deterministas y editables sin PhysicsConstraints. Después del bake, se eliminan las PhysicsConstraints y las timelines de física del payload.

Disponibilidad: **Nodo solo Plus**.

Entradas/Salidas:
- **payload_in** → **payload_out** (bakeado)
- **changes** (lista opcional de cambios)

Controles:
- **Sample FPS**: Frecuencia de muestreo de la simulación.
- **Bake Rotation**: Escribe keyframes de rotación.
- **Bake Translation**: Escribe keyframes de traslación.
- **Bake Translation (Children)**: Aplica el bake de traslación a huesos hijos que dependen del movimiento físico.

Notas:
- Requiere el Spine JSON original para reconstruir los datos de simulación.
- Úsalo cuando quieras eliminar PhysicsConstraints pero conservar el movimiento.

Attachment Visibility

Optimiza el renderizado estableciendo el attachment de un slot a null cuando su alpha es cero.

Propósito: Previene que el motor del juego tenga que procesar o renderizar attachments invisibles.

Uso: Analiza tracks de alpha/color y añade o modifica automáticamente keyframes en el track 'attachment' correspondiente.

Parámetros:
- **Alpha Threshold**: Valor alpha por debajo del cual un attachment se considera invisible.
- **Auto Restore**: Si está habilitado, el nodo restaurará automáticamente el último attachment visible cuando el valor alpha supere el umbral.

Payload Merger

Fusiona múltiples payloads de animación procesados de vuelta a un único payload unificado.

Propósito: Esencial para pipelines de procesamiento paralelo donde diferentes animaciones o grupos de huesos se optimizan por separado y necesitan recombinarse.

Estrategia de fusión:
1. **Entrada base**: Proporciona la estructura del esqueleto (huesos, slots, skins, etc.)
2. **Entradas override**: Proporcionan tracks procesados que reemplazan tracks base
3. **Última escritura gana**: Cuando múltiples overrides proporcionan el mismo track, el último tiene prioridad

Detección de conflictos:
- Conflictos entre entradas override se detectan y reportan
- Reemplazo Base → Override es comportamiento normal (no es conflicto)
- Toast de advertencia mostrado cuando ocurren conflictos de tracks

Ejemplo de pipeline:
```
Input → AnimFilter('run') → Cleanup ───────┐
      → AnimFilter('idle') → Quantizer ────┤
      → (base) ────────────────────────────→ Merger → Output
```

Casos de uso:
- Diferentes optimizadores para diferentes animaciones
- Procesamiento separado de huesos/slots con recombinación
- Pruebas A/B de diferentes estrategias de optimización

Warn conflicts: Mostrar advertencias en conflictos de fusión de payload.

Animation Viewer

Herramienta visual para inspeccionar y comparar curvas de animación antes y después de la optimización.

Propósito: Proporciona una representación gráfica de keyframes y curvas para el track seleccionado.

Uso: Al conectar ambas entradas 'payload_before' y 'payload_after', superpondrá las curvas originales y optimizadas, facilitando la visualización del impacto de tus optimizaciones.

Show changed: Mostrar solo animaciones modificadas.
Animation: Selección de animación para visualización.
Target: Hueso/slot objetivo para visualización.
Property: Propiedad a mostrar (rotación, traslación, etc.).

Project Viewer

Displays a Spine project from the project_in socket for inspection and preview without mutating the incoming data.

Deduplicator

Deduplicates atlas projects by consuming project_inputs and returning payloads, atlas_projects, original_jsons, and shared_atlas_out for canonicalized downstream workflows.

The Deduplicator node scans all atlas regions for visually identical or near-identical sprites. It merges duplicates by choosing a canonical representative and remapping references. Several thresholds control detection sensitivity for different sprite types (glow, solid, alpha). Optionally constrains the output canonical atlas dimensions. A verification pass ensures the deduplicated result is visually equivalent to the original within the specified RMSE tolerance.

Repack mode: Modo de reempaquetado después de deduplicación.
Glow threshold: Umbral para detectar sprites con efecto de brillo.
Solid threshold: Umbral para detectar sprites sólidos.
Min sprite area: Área mínima de sprite para análisis (píxeles²).
Alpha hash threshold: Umbral de hash alfa para comparación.
Verification threshold: Umbral de verificación de duplicados.
Color rmse threshold: Umbral de RMSE de color para detección de duplicados.
Constrain canonical atlas size: Restringir tamaño de atlas canónico.
Max canonical atlas width: Ancho máximo de atlas canónico.
Max canonical atlas height: Alto máximo de atlas canónico.

Animation Filter

Filtra tracks de animación según el nombre de la animación (ej. 'run', 'idle').

Propósito: Útil para aplicar diferentes estrategias de optimización a diferentes animaciones.

Uso: Por ejemplo, puedes aplicar optimizaciones agresivas con pérdida (como DCT) a animaciones de personajes de fondo mientras usas optimizaciones sin pérdida (como Spline) para acciones del personaje principal.

Asset Filter

Filtra los recursos del atlas por nombre, funciona en dos modos: antes de desempaquetar (filtra el texto del atlas) o después de desempaquetar (filtra sprites).

Propósito: Controla qué recursos se incluyen en el flujo de trabajo - qué recursos desempaquetar del atlas o qué sprites desempaquetados incluir en el reempaquetado.

Modos:
1. MODO PRE-DESEMPAQUETADO (antes de AtlasUnpacker):
   - Entrada: atlas_in (atlas_project)
   - Salida: atlas_out (atlas_project filtrado)
   - Flujo: InputNode → AssetFilter → AtlasUnpacker
   - Caso de uso: Filtrar qué recursos desempaquetar del atlas (ahorra tiempo de procesamiento)

2. MODO POST-DESEMPAQUETADO (después de AtlasUnpacker):
   - Entrada: sprites_in (sprites)
   - Salida: sprites_out (sprites filtrados)
   - Flujo: AtlasUnpacker → AssetFilter → AtlasRepacker
   - Caso de uso: Filtrar qué sprites desempaquetados incluir en el atlas final

Comportamiento de la UI:
- En modo PRE-DESEMPAQUETADO: Analiza el texto del atlas para descubrir nombres de recursos
- En modo POST-DESEMPAQUETADO: Descubre nombres de recursos del array de sprites
- Interruptor 'Permitir todo': Cuando está marcado, pasa todos los recursos (lista mostrada pero deshabilitada)
- Casillas de verificación: Seleccionar recursos específicos para incluir (cuando 'Permitir todo' está desmarcado)

Ejemplos:
- Pre-desempaquetado: Seleccionar solo recursos 'char_*' para desempaquetar solo sprites de personaje
- Post-desempaquetado: Excluir sprites 'background_*' del atlas final reempaquetado
- Crear atlas solo de armas seleccionando el patrón 'weapon_*'

Bone Filter

Filtra tracks de animación de huesos según el nombre del hueso.

Propósito: Permite apuntar o excluir huesos específicos del proceso de optimización.

Uso: Podrías querer excluir huesos sensibles, como los usados para expresiones faciales, de optimización agresiva para preservar cada detalle mientras optimizas fuertemente huesos menos importantes.

Skin Filter

Filtra datos de animación y recursos basados en nombres de skin.

Propósito: Procesar solo skins específicos de un proyecto Spine multi-skin.

Uso: Cuando un proyecto Spine tiene múltiples skins (ej. 'default', 'armor', 'casual'), este nodo te permite filtrar qué skins incluir en el procesamiento.

Parámetros:
- **Skins List**: Casillas de verificación para cada skin disponible
- **Allow All**: Interruptor para incluir todos los skins (por defecto)

Casos de uso:
- Crear atlas separado por skin
- Aplicar diferente optimización a diferentes skins
- Excluir skins raramente usados del build optimizado

Nota: Los skins comparten la estructura del esqueleto pero pueden tener diferentes attachments.

Slot Filter

Filtra tracks de animación de slot según el nombre del slot.

Propósito: Útil para apuntar o excluir slots específicos que pueden tener requisitos particulares de temporización o visibilidad.

Uso: Puedes usarlo para excluir slots de armas o efectos que se cambian por código de ser afectados por optimizaciones de visibilidad de attachments.

Parameter Filter

Filtra tracks de animación según su tipo de propiedad (ej. rotation, scale, color).

Propósito: Permite aplicar optimizaciones posteriores solo a tipos específicos de datos de animación.

Uso: Coloca este nodo antes de un optimizador para limitar su alcance. Por ejemplo, puedes aplicar optimización RDP solo a tracks de 'translation' y 'scale'.

Atlas Unpacker

Extrae sprites individuales de un atlas de textura Spine.

Propósito: Descompone un archivo atlas en sus sprites componentes, permitiendo análisis o reempaquetado individual.

Uso: Conecte la salida 'atlas_project' de InputNode a la entrada 'atlas_project_in' de este nodo. La salida puede enviarse a AssetViewer para inspección o a AtlasRepacker para optimización.

⭐ Recorte de malla: Conecte la salida 'Original JSON' de InputNode a la entrada 'Skeleton JSON' para habilitar el recorte automático de sprites a los límites de su malla (en lugar de límites rectangulares). Esto reduce significativamente el uso de memoria de textura para sprites con adjuntos de malla al eliminar píxeles transparentes fuera del casco de la malla.

Salidas:
- **sprites_out**: Matriz estandarizada de sprites (para visor/repacker)
- **sprites_data_out**: Imágenes/metadatos de sprites extraídos (paquete estructurado)
- **atlas_out**: Paso directo del proyecto de atlas

Claves del socket: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out

Atlas Repacker

Reempaqueta sprites individuales en uno o más nuevos atlas de texturas optimizados.

Propósito: Optimiza la memoria de texturas y potencialmente reduce las llamadas de dibujo creando hojas de sprites eficientes.

Uso: Acepta 'sprites_data' (normalmente de AtlasUnpacker) y genera un nuevo diseño de atlas.

Parámetros:
- **Max Texture Size**: Ancho/alto máximo de las páginas de atlas de salida.
- **Padding**: Distancia en píxeles entre cada sprite.
- **Scale**: Redimensiona todos los sprites antes del empaquetado.
- **Power of Two**: Fuerza las dimensiones del atlas de salida a ser potencias de dos (ej. 1024, 2048), requerido por algunas plataformas.
- **Allow Rotation**: Permite rotar sprites 90 grados para mejor eficiencia de empaquetado.

Atlas Viewer

Herramienta ligera de visualización y análisis de atlas para inspeccionar la estructura del atlas antes de desempaquetar.

Propósito: Proporciona una forma rápida de previsualizar páginas y regiones del atlas sin realizar el desempaquetado pesado. Ayuda a validar la estructura del atlas e identificar regiones sin uso.

Uso: Conecta la salida 'atlas_project' de InputNode a la entrada 'atlas'. De forma opcional conecta 'original_json_out' a la entrada 'json' para analizar el uso de regiones.

Funciones:
- Vista previa visual de páginas de atlas con límites de región
- Resaltado de regiones: Verde = usado, Rojo = sin uso en el esqueleto
- Controles de navegación de páginas
- Estadísticas que muestran regiones totales y sin uso

Casos de uso:
- Validación rápida del atlas antes de la optimización
- Identificar peso muerto (regiones sin uso)
- Depurar problemas de empaquetado de atlas
- Comprender la estructura de recursos

Claves del socket: atlas_project, atlas_in, atlas, json

Page Info: Dimensiones e información de la página del atlas.
Stats: Estadísticas de uso de espacio y cantidad de sprites.

Atlas Merger

Combina múltiples fuentes de atlas en un único atlas unificado.

Propósito: Fusionar múltiples proyectos de atlas en uno.

Entrada:
- **atlas_inputs**: Array multi-entrada de proyectos de atlas

Salidas:
- **atlas_out**: Proyecto de atlas fusionado
- **merged_out**: Salida fusionada heredada
- **merged_atlas_out**: Salida fusionada heredada

Casos de uso:
- Combinar atlas de personaje con atlas de armas
- Fusionar sprites base con contenido DLC
- Recombinar después de procesamiento de atlas paralelo

Pipeline típico:
```
InputA → Unpacker → Repacker ─┐
                               ├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Antes del Repacker, los datos son sprites individuales; después del Repacker se convierten en un proyecto de atlas. Atlas Merger combina los proyectos de atlas, y un paso final Unpacker → Repacker reempaqueta todo más ajustadamente en un único atlas.

Asset Viewer

Muestra sprites individuales de un atlas desempaquetado.

Propósito: Herramienta de depuración visual para manipulación de atlas.

Uso: Acepta 'sprites_data' del nodo Atlas Unpacker y te permite visualizar cada imagen extraída, examinar sus propiedades (dimensiones, rotación, etc.), y verificar la exactitud visual después del desempaquetado.

Asset select: Selección de asset para visualización.
Pixel stats: Mostrar estadísticas de píxeles del asset.