Skip to main content
Go to Editor

Wissensdatenbank

Diese Anleitung hilft Ihnen, schnell mit dem JSON Optimizer zu starten. Projekt laden: Verwenden Sie den InputNode , um Ihre .json -, .atlas - und .png -Dateien

BeispieleBetrachterDatenFPSLeistungPipelinesPlusPremiumSocketsTypenUIVerbindungenVideoYouTubeabonnementanfängeranimationanleitungarbeitsablaufdiagrammeergebnisseexportguidekonzeptemetrikenoptimierungplaybackpreiserecorderrecordingspeicherstatistikensteuerungtabelletimelineverlustbehaftetverlustfreivideoviewer

Erste Schritte: Basis-Arbeitsablauf

anfängerarbeitsablaufanleitung

Diese Anleitung hilft Ihnen, schnell mit dem JSON Optimizer zu starten. Projekt laden: Verwenden Sie den InputNode , um Ihre .json -, .atlas - und .png -Dateien zu laden. Preset wählen (Plus-Modus): Im Plus-Modus wähl...

Read article

Socket-Typen & Datenfluss

SocketsTypenDatenVerbindungen

Dieser Artikel erklärt die Datentypen, die von Sockets im Node-Graph verwendet werden, und was womit verbunden werden kann. Socket-Typen Spine Payload — laufzeitfreundliche Darstellung des Spine-Projekts, die von den...

Read article

Abonnementpläne & Premium-Funktionen

abonnementPremiumPluspreise

re-polish bietet zwei Abonnementstufen für unterschiedliche Bedürfnisse. Free-Plan ✓ Basis-Knotengraph ✓ JSON-Viewer ✓ Timeline mit mehreren Tracks und anpassbarem Mix zwischen Animationen ✓ Begrenzte Optimierungen ✓...

Read article

Grundkonzepte: Verlustbehaftet vs. Verlustfrei

konzepteverlustbehaftetverlustfreianfänger

Alle Optimierungsmethoden werden in zwei Typen unterteilt: Verlustfrei: Diese Methoden entfernen nur redundante Daten... Beispiele: Spline-Optimierungsknoten , CleanupNode . Verlustbehaftet: Diese Methoden vereinfache...

Read article

Wie man Effizienz misst

anleitungmetrikenstatistiken

Um die Effektivität Ihrer Optimierung zu verstehen, achten Sie auf folgende Metriken: Dateigröße: Die endgültige Größe der .json -Datei ist das Hauptziel der Optimierung. Anzahl der Schlüsselbilder: Im "Statistiken"-T...

Read article

Viewer: Steuerungs-Panel

BetrachtersteuerungUI

Der Tab Ansicht legt ein Steuerungs -Panel über die Canvas. Es ist in drei Gruppen aufgeteilt: Animationssteuerung Animationen — wählt aus, welche Spine-Animationssequenz abgespielt wird. Skin — wählt aus, welcher Ski...

Read article

Viewer: Performance-Panel

LeistungFPSspeicherUI

Das Performance -Panel zeigt Laufzeitmetriken in Echtzeit für das/die aktuell abgespielte(n) Skeleton(s). Echtzeit FPS — Frames pro Sekunde, gemessen vom Monitor. Frame Time — Zeit pro Frame in Millisekunden (niedrige...

Read article

Viewer: Zeitleiste

viewertimelineanimationplaybackguide

Das Timeline -Panel ist ein andockbarer Animations-Sequenzer am unteren Rand des Viewers. Damit können Sie Animations-Clips auf mehreren Tracks anordnen, die Wiedergabe steuern und Übergänge in der Vorschau ansehen. T...

Read article

Viewer: Aufnahme

viewerrecorderrecordingexportvideoguide

Der Recorder nimmt Spine-Animationen aus dem Viewer als Video, animierte Bilder oder Bildsequenzen auf. Aufnahmemodi ⚡ Schnellaufnahme — Echtzeit-Aufnahme mit MediaRecorder + captureStream() . Erzeugt nur WebM-Ausgabe...

Read article

Ergebnisse-Tab

ergebnissetabelleoptimierung

Der Tab Ergebnisse zeigt detaillierte Optimierungs-Ausgaben. Ergebnistabelle — eine Zeile pro Änderung in den JSON-Optimierungsergebnissen (z. B. welche Animationssequenz/Knochen/Eigenschaft/Schlüsselbild geändert ode...

Read article

Statistiken-Tab

statistikendiagrammemetriken

Der Tab Statistiken fasst Optimierungsergebnisse als Diagramme und aggregierte Metriken zusammen. Optimierungsdiagramm — visualisiert den Optimierungseffekt über den Datensatz (wenn JSON-Optimierungen Änderungen erzeu...

Read article

Pipeline-Beispiele (Video)

VideoBeispielePipelinesYouTube

Unten finden Sie vollständige, praxisnahe Pipelines aus der offiziellen YouTube-Playlist. Vollständige Playlist öffnen Beispiele Spine2D Experiments 1: Kurvenoptimierung mit RDP-Algorithmus — grundlegende Spine‑2D‑Opt...

Read article

Nodes

Input

Importiert Spine-Projektdateien, reine JSON-Eingaben, Demo-Assets und ZIP-Pakete in den Graphen.

Zweck: Dies ist der Haupteinstiegspunkt für die meisten Workflows. Der Knoten liest JSON, Atlas und Texturen ein und normalisiert sie zu internen Daten, die nachgelagerte Knoten verarbeiten können.

Unterstützte Modi:
1. Vollständiges Projekt: JSON + Atlas + Texturen
2. Nur JSON: Skelett-/Animationsdaten ohne Atlas verarbeiten
3. ZIP-Paket: ein gepacktes Zip mit einem vollständigen Projekt
4. Demo-Assets: integrierte Beispieldaten für schnelle Tests

Hauptausgaben:
- **payload_out**: normalisierte Daten für Optimierungsknoten
- **original_json_out**: Quell-JSON zum Vergleichen oder Rekonstruieren
- **atlas_project_out**: geparstes Atlas-Projekt, wenn Texturen bereitgestellt werden

Video To Png Sequence

Wandle einen Videoclip in eine PNG-Bildsequenz für Spine-Workflows um.

Dies ist ein kostenloses Eingabewerkzeug im Input-Menü für produktive Workflows. Es unterstützt Chroma Key für Greenscreen-Aufnahmen und eine matteartige Bereinigung im Stil von Unpremultiply für schwarze Hintergründe. Die Ausgaben gehen über payload_out und atlas_out.

Picture Input

Fügt eigenständige PNG/JPEG-Bilder dem Viewport hinzu, damit Sie sauberere Vorschauen und Präsentationsaufnahmen erstellen können.

Zweck: Verwenden Sie diesen Knoten, um Bilder direkt im Viewport als Präsentationsebenen oder visuelle Hilfselemente zu platzieren. Er ist nützlich, wenn Sie eine Szene dekorieren, unterstützende Grafiken hinzufügen und Projektvorschauen vor Video- oder Demoaufnahmen hochwertiger wirken lassen möchten.

Ablauf: Laden Sie ein Bild und verwenden Sie dann die Viewport-Werkzeuge, um es zu skalieren, zu verschieben und seinen Z-Index anzupassen, damit es korrekt in Ihrer Komposition sitzt. So lassen sich ansprechende Showcase-Aufnahmen erstellen, ohne die eigentlichen Spine-Projektdaten zu verändern.

Dieser Knoten ist eigenständig und stellt keine Graph-Sockets bereit.

Version: Spine-JSON-Versionsformat für das generierte Stub-Skelett.
Blending: Mischmodus für den generierten Anhang (normal, additiv, multiplizieren, überlagern).

Psd To Skeletons

Lädt geschichtete PSD/PSB-Dateien und erzeugt verknüpfte Spine-Skelette, die das Photoshop-Szenenlayout für präzise Vorschauen erhalten.

Zweck: Verwenden Sie diesen Node, wenn eine Szene bereits in Photoshop aufgebaut wurde und Sie diesen Ebenenstapel als Satz verknüpfter Spine-Skelette im Viewer übernehmen möchten. Jede sichtbare PSD-Ebene wird zu einem eigenen bildartigen Skelett anhand der PSD-Koordinaten, wodurch der Vorschauaufbau und die exakte Platzierung von Objekten deutlich einfacher werden.

Viewer-Workflow: Nach der Generierung können Sie im Viewer weiterhin die Draw Order ändern und andere Skelette zwischen importierten PSD-Ebenen platzieren, sodass zusätzliche Spine-Charaktere oder Props direkt in der Photoshop-Komposition sitzen.

Verfügbarkeit: Kostenloser Node. Dieser Node ist eigenständig und stellt keine Graph-Sockets bereit.

Version: Spine-JSON-Versionsformat für die generierten Ebenen-Skelette.
Blending: Mischmodus für die generierten Attachments.
Load PSD: Öffnet den PSD/PSB-Dateidialog und erzeugt verknüpfte Ebenen-Skelette aus der gewählten Datei.
File Info: Schreibgeschützte Zusammenfassung der aktuell geladenen PSD/PSB-Datei.
Layer Count: Schreibgeschützte Anzahl sichtbarer Ebenen, die in verknüpfte Skelette umgewandelt werden.
Preflight: Schreibgeschützter Bericht über erkannte Ebenennamen-Probleme vor der Generierung.

Project Input

Lädt einen Spine-Projektordner oder ein Archiv in den Graphen und stellt über den Socket project_out ein ProjectPayload für nachgelagerte projektfähige Knoten bereit.

Zweck: Einstiegspunkt für projektbasierte Workflows. Scannt einen Spine-Projektordner oder ein Archiv, erstellt ein ProjectPayload und hält gecachte Metadaten für nachgelagerte Knoten wie Project Viewer, Filter, Static Bake und Deduplicator bereit.

Steuerelemente:
- **Load Folder**: Öffnet den System-Ordnerdialog über die File System Access API, scannt das ausgewählte Verzeichnis, aktualisiert die Zusammenfassung, speichert Metadaten im Cache und startet eine Dateibeobachtung, damit spätere Änderungen erneut gescannt werden können.
- **Browse (Fallback)**: Verwendet ein verborgenes **webkitdirectory**-Input für Browser ohne **showDirectoryPicker()**. Das Projekt wird geladen, aber ohne persistentes Verzeichnis-Handle, daher stehen Live-Beobachtung und verlässliche Rescans nicht zur Verfügung.
- **Load Archive**: Lädt ein **.zip**- oder **.spine**-Archiv als virtuellen Projektbaum. Archivbasierte Projekte behalten kein Verzeichnis-Handle, daher ist **Rescan** absichtlich nicht verfügbar.
- **Rescan**: Scannt den zuvor geladenen Ordner erneut, wenn ein Verzeichnis-Handle vorhanden ist. Vor dem Scan wird die Leseberechtigung erneut geprüft. Projekte aus Fallback-Browse oder Archivmodus melden normalerweise, dass kein Verzeichnis geladen ist.
- **Clear Project**: Beendet die Dateibeobachtung und leert die aktuelle Payload, die Zusammenfassung, den Ausführungs-Cache und die gecachten Payload-Metadaten.
- **Reset to Defaults**: Setzt nur allgemeine Node-Steuerelemente zurück. Das aktuelle Projekt wird **nicht** entladen und dies ist kein Ersatz für **Clear Project**.
- **Drop folder or .zip here**: Drag-and-drop-Einstiegspunkt, der Ordner und Archive akzeptiert und durch dieselbe Ladepipeline führt.

Ausgaben:
- **project_out**: ProjectPayload mit gescanntem Baum, flacher Dateiliste, Größen-Summen und Typaufschlüsselung für nachgelagerte projektfähige Knoten.
- **stats**: Nur für DEV verfügbare Diagnoseausgabe.

Output

Sammelt das Endergebnis und erlaubt den Download optimierter Daten als Einzeldateien, Dateisets oder Archive.

Zweck: Dient als Export-Zentrale für optimiertes JSON, Atlas-Daten, Texturen und Sprites. Der Node kann sowohl ein einzelnes JSON/Atlas/Texturen-Set als auch mehrere Dateisets verarbeiten. Wenn nur Sprites anliegen, kann er auch ausschließlich Bildresultate ausgeben, ohne ein vollständiges Spine-Projekt neu aufzubauen.

Exportoptionen:
- Dateien einzeln oder als ein einziges Archiv herunterladen
- Gepackte Ergebnisse oder ein Archiv mit entpackten Dateien herunterladen
- JSON kompakt oder in lesbarer Form exportieren
- Vollständige Spine-Projektdaten oder nur Sprite-/Bildresultate exportieren

Verkettung: OutputNode muss nicht das absolute Ende des Graphen sein. Sie können die Ausgänge in eine weitere Pipeline-Stufe einspeisen und dieselben Dateien erneut optimieren. In der Praxis wurde die Optimierung von Keys und Kurven mit bis zu 3 aufeinanderfolgenden Iterationen getestet.

Wichtige Ausgänge:
- **reconstructed_json_out**: Neu aufgebautes Spine-JSON
- **original_json_passthrough_out**: Original-JSON-Passthrough
- **payload_out**: Payload-Passthrough für weitere Verkettung
- **changes**: Gesammelte Optimierungsänderungen
- **atlas_assets**: Exportbereite Atlas-Assets

RDP

Vereinfacht Animationskurven (RDP).

Zweck: Reduziert die Anzahl der Schlüsselbilder in linearen oder nahezu linearen Animationssegmenten, indem Punkte entfernt werden, die auf einer Geraden zwischen zwei anderen liegen.

Goldene Regel: Standardmäßig deaktiviert. Sie schützt Kurven mit ausgeprägter Form (Fläche/Krümmung) davor, zu linearisiert zu werden. Nur für aggressivere Komprimierung nach visueller Prüfung deaktivieren.

Socket-Keys: payload_in, payload_out, changes

Epsilon: Maximale Abweichung von der Originalkurve. Höhere Werte entfernen mehr Keyframes, können aber Kurvendetails verlieren.
Steep: Schwellenwert für Krümmungsempfindlichkeit. Schützt komplexe Kurven vor dem Abflachen zu linear.
Round Mode: Rundungsmodus für optimierte Werte: keine (Original beibehalten), Zehntel (1 Dezimalstelle), Ganzzahlen.
Golden Rule: Wenn aktiviert, schützt Kurven mit signifikanter Form/Fläche vor der Vereinfachung durch RDP.
S Run Length: Minimale Anzahl aufeinanderfolgender standardmäßiger Spine-S-Kurven, bevor die vorlagenbasierte Linearisierung aktiviert wird. Auf 0 setzen, um die Funktion zu deaktivieren.
S Deviation: Zulässige normalisierte Abweichung von der standardmäßigen Spine-S-Kurvenvorlage in Promille (0-300). Niedrigere Werte verlangen eine genauere Übereinstimmung; höhere Werte glätten mehr vorlagennahe Folgen.

Spline

Spline-Optimierung für Animationskurven.

Zweck: Glättende Kurvenanpassung bei gleichbleibender visueller Qualität.

Socket-Keys: payload_in, payload_out, changes

Max Error: Maximal zulässiger Approximationsfehler für Spline-Anpassung. Niedriger = engere Anpassung an das Original.
Min Group Size: Mindestanzahl aufeinanderfolgender linearer Keyframes, die eine entfernbare Gruppe bilden.

Refit

Bezier-Refit: reduziert Schlüsselbilder durch Kurvenapproximation.

Zweck: Passt weniger Kurven an und bleibt dabei innerhalb einer Toleranz.

Socket-Keys: payload_in, payload_out, changes

Error Tolerance: Maximal zulässige Abweichung zwischen Originalkurve und angepasster Bézier-Kurve. Niedriger = genauere Übereinstimmung.
Max Iterations: Anzahl der Optimierungsiterationen für Kurvenanpassung. Mehr Iterationen = bessere Anpassung, aber langsamer.

Quantizer

Reduziert die Genauigkeit numerischer Werte in Schlüsselbilder und Kurven.

Zweck: Einfache, aber effektive Methode zur Reduzierung der Dateigröße durch Runden von Zahlen auf eine bestimmte Anzahl von Dezimalstellen.

Verwendung: Kann auf fast alle Animationsdaten angewendet werden. Wird effektiver bei höherer Schlüsselbild-Anzahl.

Vorsicht: Zu aggressive Quantisierung (geringe Genauigkeit) kann Zittern oder visuelle Artefakte in Animationen verursachen.

Precision: Anzahl der Dezimalstellen für Keyframe-Werte. Weniger = kleinere Datei, aber geringere Genauigkeit.

Cleanup

Führt verschiedene Bereinigungsaufgaben durch, um redundante oder unnötige Animationsdaten zu entfernen.

Zweck: Spezielles Werkzeug zum Entfernen bestimmter Arten redundanter Daten, die andere Optimierer möglicherweise übersehen.

Verwendung: Verbinden Sie Ihr Payload mit 'payload_in' und nehmen Sie das Ergebnis von 'payload_out'. Wenn Sie zusätzlich einen Report pro Änderung möchten, nutzen Sie auch 'changes'.

Socket-Schlüssel:
- Eingänge: payload_in
- Ausgänge: payload_out, changes

Derzeit unterstützte Cleanups:
1. **Remove Unused Color/Alpha Tracks**: Entfernt Color-/Alpha-Timelines für Slots, die während der Animationssequenz nie sichtbar sind.
2. **Remove Redundant IK Rotations**: Entfernt Rotations-Schlüsselbilder von Bones, die vollständig von einer IK-Constraint mit 100% Mix gesteuert werden.
3. **Remove Path Constraint Keys**: Entfernt Rotate-/Translate-Schlüsselbilder von Bones, die vollständig von einer Path-Constraint gesteuert werden (Mix-Werte bei 100%).
4. **Sanitize Non-English Characters**: Ersetzt nicht-englische Zeichen in Namen/Bezeichnern, um Probleme in nachgelagerten Tools zu vermeiden.

Remove Unused Color Tracks: Farb-/Alpha-Komponenten entfernen, die sich nie vom Standardwert ändern.
Remove Redundant IKRotation: Knochenrotations-Keyframes entfernen, die vollständig durch IK-Constraints gesteuert werden.
Remove Redundant Path Constraint Keys: Pfad-Constraint-Keyframes entfernen, die Setup-Werte duplizieren.

Scale

Skaliert alle numerischen Werte in Animations-Schlüsselbilder um einen angegebenen Faktor.

Zweck: Skaliert Animationsdaten gleichmäßig, nützlich für proportionale Skelett-Größenänderung oder Anpassung der Animationsintensität.

Verwendung: Mit Payload verbinden und Skalierungsfaktor einstellen. Werte über 1.0 vergrößern, unter 1.0 verkleinern.

Parameter:
- **Scale Factor**: Multiplikator für alle Positions- und Größenwerte.
- **Include Rotations**: Ob auch Rotationswerte skaliert werden (normalerweise deaktiviert).

Anwendungsfälle:
- Größenanpassung importierter Animationen an neue Skelettdimensionen
- Erstellen übertriebener oder subtiler Animationsvarianten
- Stapel-Skalierung mehrerer Animationen für verschiedene Charaktergrößen

Scale Bones: Knochenpositionen und -größen skalieren.
Scale Attachments: Anhangspositionen und -größen skalieren.
Scale Animations: Animations-Keyframes skalieren.
Scale Constraints: Constraint-Parameter skalieren.
Scale Path: Pfaddaten skalieren.

Schneider

Passt glatte Bézier-Kurven an Animations-Schlüsselbilder mit dem Schneider-Kurvenanpassungsalgorithmus an.

Zweck: Fortgeschrittene Kurvenanpassung, die natürlich aussehende Bézier-Kurven aus dichten Schlüsselbild-Sequenzen erzeugt.

Verfügbarkeit: **Nur Plus-Knoten**.

Funktionsweise: Der Schneider-Algorithmus analysiert Schlüsselbild-Positionen und Tangenten, um optimale Bézier-Kontrollpunkte zu generieren, die der Originalbewegung entsprechen.

Parameter:
- **Error Tolerance**: Maximal zulässige Abweichung von Original-Schlüsselbilder. Niedriger = genauer, höher = glattere Kurven.
- **Corner Angle**: Schwellenwinkel (Grad), bei dem die Kurve in Segmente aufgeteilt wird.

Ideal für:
- Handgezeichnete oder importierte Animationen mit vielen Schlüsselbilder
- Konvertierung linearer Interpolation in glatte Bézier-Kurven
- Reduzierung der Schlüsselbild-Anzahl bei Erhaltung der Kurvenqualität

Hinweis: Rechenintensiver als einfachere Algorithmen wie RDP, erzeugt aber bessere Kurvenqualität.

Min Segment Size: Mindestanzahl von Keyframes in einem Segment zur Verarbeitung.

Physics Constraint Bake

Bake Physics Constraints to Keys: wandelt PhysicsConstraint-Bewegung in Rotations-/Translations-Schlüsselbilder um und entfernt Physik-Timelines.

Zweck: Wandelt Laufzeit-Physiksimulation in explizite Schlüsselbilder um, damit Animationen deterministisch und ohne PhysicsConstraints editierbar sind. Nach dem Bake werden PhysicsConstraints und Physik-Timelines aus dem Payload entfernt.

Verfügbarkeit: **Nur Plus-Knoten**.

Ein-/Ausgänge:
- **payload_in** → **payload_out** (gebacken)
- **changes** (optionale Änderungs-Liste)

Steuerungen:
- **Sample FPS**: Abtastrate der Simulation für das Bake.
- **Bake Rotation**: Schreibt Rotations-Keys.
- **Bake Translation**: Schreibt Translations-Keys.
- **Bake Translation (Children)**: Wendet Translation-Bake auf Kindknochen an, die von Physik abhängen.

Hinweise:
- Benötigt das ursprüngliche Spine-JSON zur Rekonstruktion der Simulation.
- Verwenden, wenn PhysicsConstraints entfernt werden sollen, die Bewegung aber erhalten bleiben soll.

Attachment Visibility

Optimiert das Rendering, indem der Attachment eines Slots auf null gesetzt wird, wenn sein Alpha null ist.

Zweck: Verhindert, dass die Game-Engine unsichtbare Attachments verarbeiten oder rendern muss.

Verwendung: Analysiert Alpha-/Farb-Tracks und fügt automatisch Schlüsselbilder auf dem entsprechenden 'attachment'-Track hinzu oder ändert diese.

Parameter:
- **Alpha Threshold**: Alpha-Wert, unter dem ein Attachment als unsichtbar betrachtet wird.
- **Auto Restore**: Wenn aktiviert, stellt der Node automatisch den letzten sichtbaren Attachment wieder her, wenn der Alpha-Wert den Schwellenwert überschreitet.

Payload Merger

Führt mehrere verarbeitete Animations-Payloads wieder zu einem einzigen vereinheitlichten Payload zusammen.

Zweck: Wesentlich für parallele Verarbeitungspipelines, bei denen verschiedene Animationen oder Knochengruppen separat optimiert werden und wieder zusammengeführt werden müssen.

Zusammenführungsstrategie:
1. **Basis-Eingang**: Liefert die Skelettstruktur (Knochen, Slots, Skins usw.)
2. **Override-Eingänge**: Liefern verarbeitete Tracks, die Basis-Tracks ersetzen
3. **Letzter Schreiber gewinnt**: Wenn mehrere Overrides denselben Track liefern, hat der letzte Priorität

Konflikterkennung:
- Konflikte zwischen Override-Eingängen werden erkannt und gemeldet
- Basis → Override-Ersetzung ist normales Verhalten (kein Konflikt)
- Warnmeldung bei Track-Konflikten

Beispiel-Pipeline:
```
Input → AnimFilter('run') → Cleanup ───────┐
      → AnimFilter('idle') → Quantizer ────┤
      → (base) ────────────────────────────→ Merger → Output
```

Anwendungsfälle:
- Verschiedene Optimierer für verschiedene Animationen
- Separate Knochen-/Slot-Verarbeitung mit Wiederzusammenführung
- A/B-Tests verschiedener Optimierungsstrategien

Warn conflicts: Warnungen bei Payload-Merge-Konflikten anzeigen.

Animation Viewer

Visuelles Werkzeug zur Inspektion und zum Vergleich von Animationskurven vor und nach der Optimierung.

Zweck: Bietet eine grafische Darstellung von Schlüsselbilder und Kurven für den ausgewählten Track.

Verwendung: Durch Verbinden beider Eingänge 'payload_before' und 'payload_after' werden die Original- und optimierten Kurven überlagert, was die Visualisierung der Auswirkungen Ihrer Optimierungen erleichtert.

Show changed: Nur geänderte Animationen anzeigen.
Animation: Animationsauswahl zur Ansicht.
Target: Zielknochen/-slot zur Ansicht.
Property: Anzuzeigende Eigenschaft (Rotation, Translation usw.).

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: Neupack-Modus nach Deduplizierung.
Glow threshold: Schwellenwert für die Erkennung von Glow-Effekt-Sprites.
Solid threshold: Schwellenwert für die Erkennung von Vollfarb-Sprites.
Min sprite area: Minimale Sprite-Fläche für die Analyse (Pixel²).
Alpha hash threshold: Alpha-Hash-Schwellenwert für den Vergleich.
Verification threshold: Schwellenwert für die Duplikat-Verifizierung.
Color rmse threshold: Farb-RMSE-Schwellenwert für Duplikaterkennung.
Constrain canonical atlas size: Kanonische Atlas-Größe einschränken.
Max canonical atlas width: Maximale kanonische Atlas-Breite.
Max canonical atlas height: Maximale kanonische Atlas-Höhe.

Animation Filter

Filtert Animations-Tracks basierend auf dem Animationsnamen (z.B. 'run', 'idle').

Zweck: Nützlich für die Anwendung unterschiedlicher Optimierungsstrategien auf verschiedene Animationen.

Verwendung: Zum Beispiel können Sie aggressive verlustbehaftete Optimierungen (wie DCT) auf Hintergrund-Charakter-Animationen anwenden, während Sie verlustfreie Optimierungen (wie Spline) für Hauptcharakter-Aktionen verwenden.

Asset Filter

Filtert Atlas-Assets nach Namen, funktioniert in zwei Modi: vor dem Entpacken (filtert Atlas-Text) oder nach dem Entpacken (filtert Sprites).

Zweck: Steuert, welche Assets in den Arbeitsablauf einbezogen werden - welche Assets aus dem Atlas entpackt oder welche entpackten Sprites in das Repacken einbezogen werden.

Modi:
1. VOR-ENTPACK-MODUS (vor AtlasUnpacker):
   - Eingang: atlas_in (atlas_project)
   - Ausgang: atlas_out (gefiltertes atlas_project)
   - Arbeitsablauf: InputNode → AssetFilter → AtlasUnpacker
   - Anwendungsfall: Filtern, welche Assets aus dem Atlas entpackt werden (spart Verarbeitungszeit)

2. NACH-ENTPACK-MODUS (nach AtlasUnpacker):
   - Eingang: sprites_in (sprites)
   - Ausgang: sprites_out (gefilterte sprites)
   - Arbeitsablauf: AtlasUnpacker → AssetFilter → AtlasRepacker
   - Anwendungsfall: Filtern, welche entpackten Sprites in den endgültigen Atlas aufgenommen werden

UI-Verhalten:
- Im VOR-ENTPACK-MODUS: Analysiert Atlas-Text, um Asset-Namen zu erkennen
- Im NACH-ENTPACK-MODUS: Erkennt Asset-Namen aus dem Sprite-Array
- 'Alle zulassen'-Schalter: Wenn aktiviert, werden alle Assets durchgelassen (Liste angezeigt, aber deaktiviert)
- Kontrollkästchen: Wählen Sie bestimmte Assets aus (wenn 'Alle zulassen' deaktiviert ist)

Beispiele:
- Vor Entpacken: Nur 'char_*'-Assets auswählen, um nur Charakter-Sprites zu entpacken
- Nach Entpacken: 'background_*'-Sprites vom endgültigen neu verpackten Atlas ausschließen
- Nur-Waffen-Atlas erstellen, indem 'weapon_*'-Muster ausgewählt wird

Bone Filter

Filtert Knochen-Animations-Tracks basierend auf dem Knochennamen.

Zweck: Ermöglicht das Zielen oder Ausschließen spezifischer Knochen vom Optimierungsprozess.

Verwendung: Sie möchten möglicherweise sensible Knochen, wie die für Gesichtsausdrücke verwendeten, von aggressiver Optimierung ausschließen, um jedes Detail zu bewahren, während weniger wichtige Knochen stark optimiert werden.

Skin Filter

Filtert Animations- und Asset-Daten basierend auf Skin-Namen.

Zweck: Verarbeitet nur bestimmte Skins aus einem Multi-Skin Spine-Projekt.

Verwendung: Wenn ein Spine-Projekt mehrere Skins hat (z.B. 'default', 'armor', 'casual'), können Sie mit diesem Node filtern, welche Skins verarbeitet werden sollen.

Parameter:
- **Skins List**: Kontrollkästchen für jeden verfügbaren Skin
- **Allow All**: Schalter, um alle Skins einzubeziehen (Standard)

Anwendungsfälle:
- Separate Atlas pro Skin erstellen
- Verschiedene Optimierungen auf verschiedene Skins anwenden
- Selten verwendete Skins vom optimierten Build ausschließen

Hinweis: Skins teilen die Skelettstruktur, können aber unterschiedliche Attachments haben.

Slot Filter

Filtert Slot-Animations-Tracks basierend auf dem Slot-Namen.

Zweck: Nützlich zum Zielen oder Ausschließen spezifischer Slots, die besondere Timing- oder Sichtbarkeitsanforderungen haben können.

Verwendung: Sie können dies verwenden, um Waffen- oder Effekt-Slots, die per Code gewechselt werden, davon auszuschließen, von Attachment-Sichtbarkeitsoptimierungen betroffen zu werden.

Parameter Filter

Filtert Animations-Tracks basierend auf ihrem Eigenschaftstyp (z.B. Rotation, Scale, Color).

Zweck: Ermöglicht die Anwendung nachfolgender Optimierungen nur auf bestimmte Arten von Animationsdaten.

Verwendung: Platzieren Sie diesen Node vor einem Optimierer, um seinen Umfang zu begrenzen. Zum Beispiel können Sie RDP-Optimierung nur auf 'translation'- und 'scale'-Tracks anwenden.

Atlas Unpacker

Extrahiert einzelne Sprites aus einem Spine-Texturatlas.

Zweck: Zerlegt eine Atlas-Datei in ihre Einzelsprites, um individuelle Analyse oder Neupackung zu ermöglichen.

Verwendung: Verbinden Sie den 'atlas_project'-Ausgang vom InputNode mit dem 'atlas_project_in'-Eingang dieses Knotens. Die Ausgabe kann an AssetViewer zur Inspektion oder an AtlasRepacker zur Optimierung gesendet werden.

⭐ Mesh-Zuschnitt: Verbinden Sie den 'Original JSON'-Ausgang vom InputNode mit dem 'Skeleton JSON'-Eingang, um automatisches Zuschneiden von Sprites auf ihre Mesh-Grenzen (anstelle rechteckiger Grenzen) zu aktivieren. Dies reduziert den Texturspeicherverbrauch für Sprites mit Mesh-Anhängen erheblich, indem transparente Pixel außerhalb der Mesh-Hülle entfernt werden.

Ausgänge:
- **sprites_out**: Standardisiertes Sprite-Array (für Viewer/Repacker)
- **sprites_data_out**: Extrahierte Sprite-Bilder/Metadaten (strukturiertes Bundle)
- **atlas_out**: Atlas-Project-Durchleitung

Socket-Schlüssel: atlas_project, atlas_project_in, skeleton_json_in, sprites_out, sprites_data_out, atlas_out

Atlas Repacker

Packt einzelne Sprites in einen oder mehrere neue, optimierte Textur-Atlanten.

Zweck: Optimiert Texturspeicher und reduziert potenziell Draw Calls durch Erstellen effizienter Spritesheets.

Verwendung: Akzeptiert 'sprites_data' (normalerweise von AtlasUnpacker) und erzeugt ein neues Atlas-Layout.

Parameter:
- **Max Texture Size**: Maximale Breite/Höhe der Ausgabe-Atlas-Seiten.
- **Padding**: Abstand in Pixeln zwischen jedem Sprite.
- **Scale**: Skaliert alle Sprites vor dem Packen.
- **Power of Two**: Erzwingt, dass die Ausgabe-Atlas-Dimensionen Zweierpotenzen sind (z.B. 1024, 2048), von einigen Plattformen erforderlich.
- **Allow Rotation**: Erlaubt Sprites um 90 Grad zu drehen für bessere Packeffizienz.

Atlas Viewer

Leichtgewichtiges Atlas-Visualisierungs- und Analysewerkzeug zur Prüfung der Atlasstruktur vor dem Entpacken.

Zweck: Ermöglicht eine schnelle Vorschau von Atlas-Seiten und Regionen, ohne den aufwändigen Entpackvorgang auszuführen. Hilft, die Atlas-Struktur zu prüfen und ungenutzte Regionen zu erkennen.

Verwendung: Verbinden Sie den 'atlas_project'-Ausgang vom InputNode mit dem 'atlas'-Eingang. Optional den 'original_json_out'-Ausgang mit dem 'json'-Eingang verbinden, um die Regionsnutzung zu analysieren.

Funktionen:
- Visuelle Vorschau der Atlas-Seiten mit Regionsgrenzen
- Regionshervorhebung: Grün = genutzt, Rot = ungenutzt im Skeleton
- Seiten-Navigation
- Statistiken zu Gesamt- und ungenutzten Regionen

Einsatzfälle:
- Schnelle Atlas-Prüfung vor der Optimierung
- Erkennen von Ballast (ungenutzte Regionen)
- Fehlersuche bei Atlas-Packproblemen
- Verständnis der Asset-Struktur

Socket-Schlüssel: atlas_project, atlas_in, atlas, json

Page Info: Atlas-Seitenabmessungen und Informationen.
Stats: Speicherplatznutzungsstatistiken und Sprite-Anzahl.

Atlas Merger

Kombiniert mehrere Atlas-Quellen zu einem einzigen vereinheitlichten Atlas.

Zweck: Mehrere Atlas-Projekte zu einem zusammenführen.

Eingang:
- **atlas_inputs**: Multi-Input-Array von Atlas-Projekten

Ausgänge:
- **atlas_out**: Zusammengeführtes Atlas-Projekt
- **merged_out**: Veralteter zusammengeführter Ausgang
- **merged_atlas_out**: Veralteter zusammengeführter Ausgang

Anwendungsfälle:
- Charakter-Atlas mit Waffen-Atlas kombinieren
- Basis-Sprites mit DLC-Inhalten zusammenführen
- Nach paralleler Atlas-Verarbeitung wieder zusammenführen

Typische Pipeline:
```
InputA → Unpacker → Repacker ─┐
                               ├→ Atlas Merger → Unpacker → Repacker → Output
InputB → Unpacker → Repacker ─┘
```
Vor dem Repacker sind die Daten einzelne Sprites; nach dem Repacker werden sie zu einem Atlas-Projekt. Atlas Merger kombiniert die Atlas-Projekte, und ein abschließender Unpacker → Repacker-Durchlauf packt alles dichter in einen einzigen Atlas.

Asset Viewer

Zeigt einzelne Sprites aus einem entpackten Atlas an.

Zweck: Visuelles Debugging-Tool für Atlas-Manipulation.

Verwendung: Akzeptiert 'sprites_data' vom Atlas Unpacker-Node und ermöglicht es Ihnen, jedes extrahierte Bild zu visualisieren, seine Eigenschaften (Dimensionen, Rotation usw.) zu untersuchen und die visuelle Genauigkeit nach dem Entpacken zu überprüfen.

Asset select: Asset-Auswahl zur Ansicht.
Pixel stats: Pixelstatistiken für das Asset anzeigen.