Bild zu animierter Pixelgrafik
Das Ergebnis muss originalgetreu bleiben: Repariere, was die Pixelschrumpfung beschädigt hat, aber erfinde niemals Details. Der Feind in der Bewegung ist Bruch: Jedes Pixel, das springt, reißt, aufpoppt oder flackert. Claude kann kein GIF betrachten, daher wird jeder gezeigte Schritt von gemessenen Prüfungen begleitet, niemals von „es sieht im Standbild gut aus".
Wenn der Benutzer Pixelkunst-Präferenzen hat (in seiner CLAUDE.md oder einer darin referenzierten Datei), lies sie zuerst; sie überschreiben die hier vorgegebenen Standardeinstellungen. Benötigt das Aseprite MCP: references/aseprite-mcp.md. Lies, wenn du diese Phase erreichst: references/still-recipe.md, references/motion-and-breaks.md.
Arbeitsablauf
Jeder Check-in ist eine Nachricht: ein nebeneinander angeordnetes Bild (Quelle | vorher | nachher, oder ein GIF plus ein beschnittener Daumenkino) und eine Frage. Kopiere die aktuelle Datei vor jeder Änderung in _vN, damit eine abgelehnte Runde daraus zurückgesetzt werden kann. Jede Runde führt genau die angeforderte Änderung aus und nichts anderes.
- Briefing. Frage, was gewünscht ist, bevor du planst: welche Teile sich bewegen, wie viel und wie schnell, was still steht, was geschützt ist. Schreibe einen kurzen Plan (eine halbe Seite) und hole ein Ja. Beendet, wenn der Benutzer den Plan genehmigt hat.
- Quelle. Beschneide oder skaliere die Quelle so, dass ihre Größe genau das 3-fache des Ziel-Sprites beträgt (ca. 200–260 px breit). Die Skripte gehen von 3x aus.
- Standbild (
1_still.lua, dann Korrekturen mit2_local_rerender.lua,3_join_outline.lua). Miss die Parameter in still-recipe.md für dieses Bild. Check-ins in der Reihenfolge: Hände, dann Gesicht und Augen, dann Konturen, Metall und Hintergrund. Beendet, wenn jeder Teil genehmigt und das Standbild als*_still_FINALgespeichert ist. - Blinzelposen (
4_blink_poses.lua, Augenabstände von Hand bei 14x nachgezeichnet). Zeige alle vier Posen nebeneinander plus ein Blinzel-GIF in einem Check-in, erstellt wie in motion-and-breaks.md. Beendet, wenn genehmigt. - Bewegung (
5_animation_frames.lua). Fülle seinen SETTINGS-Block mit Messungen am Standbild, führe es zuerst mitBF_ZERO = trueaus (muss 0 px ändern), dann den echten Durchlauf, dann6_deflicker_metrics.lua. Bestehe die unten stehenden Prüfungen, dann zeige das vollständige GIF plus einen beschnittenen Daumenkino des bewegten Teils. - Effekte (
8_effects.lua, nur Farbe, nach dem De-Flickern). Prüfen, dann zeigen. - Extras eine Anfrage nach der anderen (Arme, Wasser, …), jede mit einem eigenen Check-in.
- Final. Kopieren nach
*_FINAL(.aseprite+ 3x GIF), wobei frühere Finals erhalten bleiben.
Prüfungen vor jedem Animations-Check-in
| Prüfung | Bestehen | Wo |
|---|---|---|
| Null-Offset-Render entspricht der Pose | 0 px geändert mit BF_ZERO | 5 |
| Starre Teile (Hände) exakt | Jeder Frame-Box, zurückversetzt um seinen Ganzpixel-Hub, entspricht dem Standbild: 0 px | eigener Lua-Vergleich |
| Ein-Frame-Pops (A→B→A) | keine außerhalb des Blinzels und der Effekte | 6 gibt sie aus |
| Sprünge | Schritt-Frames in BA_STEPS aufgelistet sind ausgeschlossen; jeder andere Frame ≤ ~2x Median geänderter px, und jeder Frame darüber hat eine benannte Ursache | 6 |
| Heatmap | kein Rot (≥ 8 Änderungen pro Schleife) auf Konturen, Trägern, Wimpern, Augen | 7_flicker_heatmap.lua |
| Effekte | Jedes Effektpixel hält ≥ 2 Frames; die Anzahl geänderter px liegt über 0 (eine schwache Mischung kann zur gleichen Palettenfarbe zurückspringen) | 8 gibt Anzahl aus |
| Geschlossenes Auge | keine Irisfarbe mehr auf den geschlossenen Frames | view_sprite bei 12x |
| Daumenkino | 8–16 Frames von Händen, Gesicht und jeder bewegten Kante bei 6x+ sehen durchgehend aus | view_sprite Region + Frames |
Skripte (scripts/)
Jedes Skript benötigt PA_DIR (Projektordner, endet mit Pfadtrenner: \ unter Windows, / unter macOS) und
PA_SRC (Quellbilddateiname) zuerst gesetzt, plus seine eigenen globalen Variablen, die im Header aufgelistet sind. Führe sie über
run_lua_script mit einem kurzen Starter aus; <skill> ist das Basisverzeichnis dieses Skills, das beim Laden des Skills angegeben wird:
PA_DIR, PA_SRC = [[/pfad/zum/projekt/]], "reference.jpg"
BF_POSES, BF_OUT, BF_PUSH = "blink_poses.aseprite", "frames", true
dofile([[<skill>/scripts/5_animation_frames.lua]])
| Skript | Macht |
|---|---|
1_still.lua | 3x3 linienbewahrende Verkleinerung, k-Means-Palette + Akzente, Sommersprossen-Durchlauf, Waisen-Verschmelzung |
2_local_rerender.lua | Kästchen mit einem anderen Linienschwellwert oder mit zusätzlichen Farben neu rendern (Hände, Lippen) |
3_join_outline.lua | Gepunktete Konturen verbinden, wo die Quelle eine dünne Linie hat |
4_blink_poses.lua | Offene, halbe, nahe, geschlossene Posen (Augenabstände in der Datei sind pro Bild) |
5_animation_frames.lua | Alle Frames; jede Koordinate lebt in seinem SETTINGS-Block (Beispielwerte enthalten) |
6_deflicker_metrics.lua | De-Flickern, Pops, Sprung-Prüfung (BA_SKIP starre Kästchen, BA_STEPS Schritt-Frames) |
7_flicker_heatmap.lua | Heatmap-PNG |
8_effects.lua | Quetschlicht, Glitzern, Meeresglitzer, Sandfunken (SETTINGS-Block pro Bild) |
checkin_sheet.lua | Quelle / vorher / nachher-Blatt für einen Bereich |
example_metal_rerender.lua | Nur Arbeitsbeispiel: Metall mit Schattierungsbändern aus der Quelle neu gerendert |
5_animation_frames.lua enthält die bisher getroffenen Bewegungstypen (Atemband, weiche Kuppeln, Schwingkästen, starre Ganzpixel-Verschiebung, Gliedmaßenabschnitte, Meer). Ein neues Bild mit anderen bewegten Teilen fügt dort ein Feld hinzu.