Communitygithub.com

Sticky Director – KI-Filmregie-Playbook

Baue, inspiziere und exportiere animierte stille emotionale Kurzfilme (Einsamkeit, soziale Ängste, Burnout, Disziplin) aus lokalen Fotos und Musik mittels der sticky-studio MCP-Tools oder `node cli.js`.

Was ist Sticky Director – KI-Filmregie-Playbook?

Sticky Director ist eine lokale Animations- und Stummfilm-Engine, die es dir ermöglicht, kinoreife emotionale Kurzfilme zu erstellen – ohne dass du ein Animations- oder Videobearbeitungsprogramm benötigst. Ein rigger schwarzer Silhouetten-Charakter mit grauem Hoodie agiert vor deinen eigenen Fotos (z. B. aus Google Flow), untermalt mit Musik, Umgebungsgeräuschen, Kamerabewegungen und Untertiteln. Du führst Regie entweder über MCP-Tools (definiert in `.mcp.json`, die `sticky-studio` registrieren und `node mcp-server.js` starten) oder über das CLI (`node cli.js …`). Beide Wege starten automatisch den Studio-Server; Canvas-Aktionen öffnen das Studio im Headless-Chromium, falls kein Display vorhanden ist. Der Workflow umfasst das Laden von Musik (Beat-Erkennung), das Importieren von Fotos, das Anwenden von Storyboard-Vorlagen, das Setzen von Emotionen, Gesten, Kamerafahrten und Übergängen, die visuelle Inspektion einzelner Frames und schließlich den Export als MP4 (60 fps H.264 + AAC). Alles arbeitet mit absoluten Dateipfaden und validierten IDs; unbekannte Werte werden als Warnungen zurückgegeben und nicht angewendet.

Funktioniert mit~Claude Code~Codex CLI~Cursor✓Antigravity
npx skills add https://github.com/sijanpaudel6-hash/stickyman/tree/HEAD/.agent/skills/sticky-director

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Was macht Sticky Director – KI-Filmregie-Playbook?

Dieses Repository ist eine lokale Animations- und Stummfilm-Engine. Ein rigger schwarzer Silhouetten-Charakter in einem grauen Hoodie agiert vor Fotos (z. B. Google Flow-Bilder), mit Musik, Umgebungsgeräuschen, Kamerabewegungen und Untertiteln. Du führst Regie über MCP-Tools (.mcp.json registriert sticky-studio → node mcp-server.js) oder über die CLI (node cli.js …). Beide starten server.js automatisch, und Canvas-Aktionen öffnen das Studio (Headless-Chromium, wenn kein Display vorhanden ist).

Verwende immer absolute Dateipfade. Jede unten stehende ID wird validiert. Unbekannte Werte werden als warnings zurückgegeben und nicht angewendet – lies also die Warnungen.

Ausführung von Antigravity: Falls die sticky-studio MCP-Tools nicht verfügbar sind, nutze die CLI aus dem Repository-Stammverzeichnis. Jedes MCP-Tool hat einen CLI-Zwilling (siehe Tabelle unten); node cli.js snapshot <t> <abs.png> schreibt ein PNG, das du mit Vision öffnen kannst. Alle Befehle starten den Studio-Server automatisch.


Tools (MCP) ↔ CLI

MCP-ToolCLIFunktion
sticky_statusnode cli.js statusModus, Seitenverhältnis, Dauer, BPM / Beat-Anzahl, verbundener Tab, Szenenliste
sticky_get_projectnode cli.js get-project [out.json]Vollständiges Projekt im flachen Agentenformat (Szenen, fxMarkers, mediaCards, audio.beats/strongBeats, Hintergründe + lightProfile)
sticky_load_audionode cli.js load-audio <pfad> --mode silentLade Musik/Sprachaufnahme → {duration, bpm, beats[], strongBeats[]}
sticky_import_photosnode cli.js import-photos <p1> <p2> … [--auto-build]Fotos registrieren → [{bgId, name, path, width, height, lightProfile}]
sticky_apply_templatenode cli.js template <id> [--no-photos]Lade ein Stummfilm-Storyboard, das an Audio und Fotos angepasst ist
sticky_set_projectnode cli.js set-project <datei.json | '{…}'>Lade ein vollständiges oder teilweises Storyboard (nur die gesendeten Schlüssel werden angewendet)
sticky_update_scenenode cli.js update-scene <index|id> '{…}'Ändere eine einzelne Szene
sticky_split_scenenode cli.js split <zeitSek> [--no-snap]Teile die Szene an einem Zeitpunkt, mit Snap zum nächsten Beat (±0,35 s)
sticky_add_fxnode cli.js add-fx <typ> <zeitSek> [--duration s]Kamera-Punch / SFX / card
sticky_render_framenode cli.js snapshot <zeitSek> [ausgabe.png]Exakter Frame als PNG (MCP gibt ihn auch als Bild zurück)
sticky_export_mp4node cli.js exportEchtzeit-Rendering → exports/sticky_video_*.mp4 (60 fps H.264 + AAC)

get_status, get_project, set_project und update_scene funktionieren auch ohne geöffneten Studio-Tab: Sie lesen und schreiben projects/live_state.json, und das Studio lädt diese Datei, wenn es sich verbindet.


Referenz-IDs

Emotionen (10)

idVerwendung
neutralStandard, ruhig
happyWärme, Erleichterung, kleine Erfolge
tired3 Uhr morgens, Burnout, Erschöpfung
cryingTrauer, Zusammenbruch (kombinieren mit silentMouth: quiver)
angryFrustration
shockedPanik, Erkenntnis
skepticalZweifel, Seitenblick
confused„?“-Momente
excitedAufregung (Sternenaugen)
deadpanLeere, Taubheit

Gesten (18) — gesture

idBeschreibungbeste Ansicht
pocketHände in der Hoodie-Tasche (chilliger Standard)beliebig
idleentspannte Arme (schwingen beim Gehen)beliebig
talkingaudio-reaktive Handbewegungen (Sprachaufnahme)vorne
explainbeide Handflächen nach außenvorne
point_screenzeigt seitwärts (auf eine Medienkarte)vorne
point_viewerzeigt auf die Kameravorne / 3/4
crossedverschränkte Armevorne
facepalmHand über dem Gesichtvorne
hands_headHände auf dem Kopf (Panik)vorne
shrugAchselzucken, Handflächen nach obenvorne
wavewinkenvorne
typingsitzt an einem Schreibtisch und tippt (Schreibtisch + Hocker werden automatisch gezeichnet)auto 3/4–Seite
slouch_lonelytiefes Einknicken, hängender Kopf, langsamer schwerer Atemvorne / 3/4
heavy_sigh4,5-Sekunden-Zyklus: einatmen → halten → zusammensacken (automatisches Atemgeräusch)vorne / 3/4
check_phone_darkhält ein leuchtendes Telefon; blauer Lichtkegel auf Gesicht und Hoodievorne / 3/4
sit_curb_hug_kneessitzt auf dem Boden, umfasst die Knie, Kopf gesenktauto 3/4
look_back_horizonsteht und blickt auf die Weite, Wind im Hoodieback / 3/4
pull_hood_upAktion: greift nach hinten und zieht die Kapuze hoch (~2,3 s ab Szenenbeginn)vorne

Körper- & Pose-Schlüssel

SchlüsselWerte
poserig (gegliedert, Standard) · v1 Sprites: front, bust, side, back
viewfront, threeQuarter, side, back
hoodUptrue / false (Kapuze wird in jeder Ansicht gezeichnet; Rückansicht standardmäßig hoch)
walkSpeed0 still · 0.1–1.0 gehen · 1.1–2.5 joggen → sprinten
walkDirleft, right
walkInPlacetrue (Laufband) / false (bewegt sich über den Bildschirm, umlaufend)
wind0..1 (Saum, Kordeln, Kapuze)
silentMouthclosed (Standard) · sigh · quiver (Weinen/Angst)
handLeft, handRightauto, relaxed, open_palm, pointing, fist, holding_prop, in_pocket
propnone, phone, mug, mic, controller, book
spineLean, headTilt, headNodGrad (≈ −25…25; headNod + = nach unten schauen)
ikPins{ rightHand|leftHand|rightFoot|leftFoot|head: {x, y} } in Rig-Einheiten (Ursprung = Boden zwischen den Füßen, +x = Blickrichtung, oben = negatives y; der Kopf ist bei y ≈ −300, Hände hängen bei y ≈ −130). {} löscht
x, y, scale, flipXPosition 0..1 (x 0,5 = Mitte; y ≈ 0,55 = stehend im unteren Drittel), Größe (1 = Standard), spiegeln
motionbreathe (Standard für stumm), talk_bounce, walk, shake (zittern), float, none
emotionsiehe Tabelle oben

Hintergründe — background

Standardhintergründe: paper_sketch, cozy_night, rainy_window, streetlight (Mitternachtslampe), classroom (Sonnenuntergangs-Schreibtisch), dark_spotlight, rooftop_dusk, green_screen. Fotos: Verwende die bgId, die von sticky_import_photos zurückgegeben wird, oder setze einfach den absoluten Fotopfad in background (wird automatisch importiert).

Fotokamera & Tiefe

SchlüsselWerte
kenBurnsnone, push_in, pull_out, drift_left, drift_right, breathing (Foto bewegt sich 100 %, der Charakter 30 % → Parallaxe)
foregroundnone, bokeh, rain_streaks, window_reflection
camerastatic, zoom_in, zoom_out, pan_right, handheld (wird auf kenBurns angewendet)
atmospheredust (leuchtet im Musikbeat), rain, none
dutchScene / spotlightScenegesamte Szene: geneigter Horizont / Hintergrund um 60 % abgedunkelt

Lichtanpassung (Fotoharmonisierung) — lightMatch

true = empfohlen (tint 0,35, rim 0,55, exposure 0,5) · false = aus · eine Zahl 0..1 = Gesamtstärke · oder { tint, rim, exposure, side } mit side = auto (vom Foto) | left | right | back (Gegenlicht, beide Kanten). Verwende true bei jeder Fotoszene. Erhöhe rim (0,7–0,9) für Sonnenuntergänge und Gegenlichthorizonte; verwende side: "back" für look_back_horizon.

Übergänge (wie eine Szene EINTRITT) — transitionType, transitionDur (0–2 s)

cut · dissolve (beide Aufnahmen werden live gerendert und überblendet) · fade_black (Zeitsprung, Einsamkeit) · fade_white (Rückblende, Erkenntnis, Hoffnung). Szene 0 mit dissolve oder fade_black blendet aus Schwarz ein. fadeOutEnd: true blendet den Film am Ende auf Schwarz aus.

Atmosphären (kontinuierlich, pro Szene) — ambientBed, ambientVol 0..1

idStimmung
none—
rain_windowsanfter Regen + ferner Donner (macht auch Schritte nass)
night_windeinsamer Mitternachtswind
vinyl_cracklewarmer Lo-Fi-Staub
clock_ticking60 BPM nachhallender Tick: 3 Uhr morgens, Schlaflosigkeit, Leere
heartbeattiefer gedämpfter Herzschlag: Angst, Panik
crowd_muffletiefpassgefiltertes Gemurmel: allein in einem überfüllten Raum

FX-Marker — sticky_add_fx / fxMarkers: [{type, timeSec, …}]

  • Kamera-Punches: snap_zoom (1,0→1,25× springt auf das Gesicht), dutch_tilt, shake, spotlight (+ duration, intensity 0..3, dir ±1 für Dutch) |
  • SFX / Geräusche (10): whoosh, pop, vine_boom, record_scratch, shutter, typing, footstep_wet, heavy_sigh_breath, phone_vibrate, door_close_echo (+ volume) |
  • Szenen können auch transitionSfx (ein SFX, das am Schnitt abgespielt wird) und foley: true setzen (automatische Schritte bei jedem Fersenauftritt + Seufzer; im Stummmodus standardmäßig an) |
  • Medienkarten: type: "card" mit card: {kind: image|meme|post|note, text, imagePath, side: auto|left|right, hold, size} |

Projekt-Schlüssel (sticky_set_project)

SchlüsselWerte
modesilent (nur Musik, der Mund synchronisiert nie Lippen) · voiceover
aspectRatio16:9 · 16:9-letterbox (2,35:1 Kino-Balken) · 9:16 (Shorts / Reels / TikTok, 720×1280)
fadeOutEndtrue oder Sekunden
masterAmbientVol0..1
captionStylecinematic (Stummfilm-Serife), pop, karaoke, classic, off, oder {mode, highlight, position: bottom|middle|top, chunk, uppercase, size}
snapToBeatsStandard true: Schnitte rasten zum nächsten Beat ein
scenesflache Szenenobjekte. Timing: gib start/end für alle Szenen an, oder keine und verwende duration / weight (verteilt über die Musik)
fxMarkerssiehe oben
mediaCards[{sceneIndex | timeSec, kind, text, imagePath, appear, hold, side}]

Vorlagen — sticky_apply_template

loneliness_3am (Telefon im Dunkeln → Hoodie-Regen-Spaziergang → Knie umarmen auf dem Bordstein → Morgendämmerungshorizont) · social_anxiety (Ecke zusammengesunken + Menschengemurmel → Panik mit Herzschlag → nach draußen treten in den Wind → erleichterter Seufzer) · burnout (Tippen am Schreibtisch → leerer Blick mit Uhr → Überblendung auf Schwarz → Regenspaziergang) · discipline (müdes Aufwachen → Kapuze hochziehen → 1,2× joggen → 2,0× Sprint in den Sonnenaufgang).


Regie-Workflow

  1. Schauen und hören. Betrachte die Fotos des Nutzers mit Vision (lies die Bilddateien) und entscheide den emotionalen Bogen (z. B. Isolation → Bruchpunkt → Befreiung → Hoffnung). Lade die Musik mit sticky_load_audio {path, mode: "silent"} und notiere duration, bpm und strongBeats (die besten Schnittpunkte).
  2. Fotos importieren und zuordnen. sticky_import_photos {paths: [...]} in Story-Reihenfolge. Verwende jedes lightProfile (tone warm/kühl, brightness, lightFrom), um den Beat auszuwählen. Dunkle kühle Räume eignen sich für check_phone_dark / slouch_lonely + clock_ticking. Regenstraßen eignen sich für Hoodie-pocket-Spaziergänge + rain_window + rain_streaks. Sonnenuntergänge und Skyline eignen sich für look_back_horizon (Rückansicht, lightMatch {rim: 0.8, side: "back"}) + night_wind.
  3. Das Storyboard erstellen mit einem einzigen sticky_set_project-Aufruf: mode: "silent", captionStyle: "cinematic", fadeOutEnd: true und eine Szene pro Foto. Gib jeder Szene background (den Pfad oder die bgId), gesture, emotion, view, hoodUp, kenBurns, lightMatch: true, ambientBed, transitionType (erste Szene fade_black, meist dissolve 1,0–1,5 s, fade_black für Zeitsprünge, fade_white für die Wende zur Hoffnung), kurze poetische subtitles (≤ 8 Wörter oder leer) und weight für Betonung. Füge einige fxMarkers hinzu (phone_vibrate, door_close_echo, einen snap_zoom auf dem emotionalen Höhepunkt). Überprüfe die warnings im Ergebnis.
  4. Visuell prüfen. sticky_render_frame an 2–3 wichtigen Zeitpunkten: innerhalb der ersten Szene (nach der Einblendung, ~1,5 s), in der Mitte des Films und am Höhepunkt. Stelle sicher, dass der Charakter vollständig im Bild und auf dem Boden steht (passe y, scale, x an), dass der Rand und die Farbtönung zum Foto passen (passe lightMatch an), dass Untertitel lesbar und nicht verdeckt sind und dass Gesichter nicht von Karten verdeckt werden. Korrigiere mit sticky_update_scene und rendere erneut.
  5. Exportieren mit sticky_export_mp4, sobald der Nutzer bereit ist. Es dauert etwa die Filmlänge plus Codierung. Melde den mp4Path.

Geschmacksführer für stille emotionale Kurzfilme

  • Weniger, längere Aufnahmen (4–8 s). Schneide auf strongBeats. Lass heavy_sigh und slouch_lonely mindestens einen vollständigen Zyklus (≥ 4,5 s) wirken.
  • hoodUp: true = Rückzug / Regen / Angst; Kapuze unten = Offenheit, Erleichterung.
  • Halte walkSpeed bei 0,4–0,6 für melancholische Spaziergänge, 1,2 für einen entschlossenen Jogging-Schritt, 2,0+ nur für klimaktische Sprints.
  • Kombiniere Emotion und Mund: crying + quiver, tired + sigh. Verwende im Stummmodus niemals talking.
  • Verwende eine Atmosphäre pro Szene mit Lautstärke 0,4–0,8. Wechsle die Atmosphäre an Schnitten, um einen neuen Ort zu markieren.
  • Für 9:16 halte x ≈ 0,5 und scale 0,9–1,1. Untertitel und Karten positionieren sich automatisch neu.

Beispiel-Storyboard

{
  "mode": "silent", "aspectRatio": "16:9-letterbox", "captionStyle": "cinematic", "fadeOutEnd": true,
  "scenes": [
    { "title": "3 Uhr morgens", "background": "/abs/photos/schlafzimmer.jpg", "gesture": "check_phone_dark", "emotion": "tired",
      "kenBurns": "push_in", "lightMatch": true, "ambientBed": "clock_ticking", "transitionType": "fade_black", "transitionDur": 1.2, "subtitle": "3:07 Uhr." },
    { "title": "Regenspaziergang", "background": "/abs/photos/strasse.jpg", "gesture": "pocket", "view": "threeQuarter", "hoodUp": true,
      "walkSpeed": 0.55, "walkInPlace": false, "x": 0.25, "foreground": "rain_streaks", "ambientBed": "rain_window",
      "lightMatch": true, "transitionType": "dissolve", "transitionDur": 1.2, "weight": 1.2 },
    { "title": "Morgendämmerung", "background": "/abs/photos/sonnenuntergang.jpg", "gesture": "look_back_horizon", "view": "back", "wind": 0.6,
      "lightMatch": { "rim": 0.8, "side": "back" }, "kenBurns": "pull_out", "ambientBed": "night_wind",
      "transitionType": "fade_white", "subtitle": "Aber die Sonne ging trotzdem auf." }
  ],
  "fxMarkers": [ { "type": "phone_vibrate", "timeSec": 0.8 } ]
}

Verwandte Skills