Was macht Stickman Story Reels?
Verwandle eine Prämisse in ein fertiges 60–90 s langes Vertical-Reel: ein auf Wiedersehenszeit optimiertes Skript mit Haken zu Beginn, Strichmännchen-Szenen, die in Code gezeichnet werden, Sprachausgabe mit wortgenauen Untertiteln, Sounddesign und einer Zwei-Optionen-Abstimmung, die die Leute zum Kommentieren und für Teil 2 zurückkommen lässt. Basierend auf dem Workflow hinter den interaktiven PlotVote-Geschichten (@plotvote).
Die Pipeline ist deterministisch: Du schreibst episode.json (Skript, Timing, Bewegung) und scenes.js (Zeichnungen), und scripts/reel.py erledigt den Rest (Sprache → Sound → Bauen → Prüfen → Rendern). Keine Bildmodelle, kein Stockmaterial, keine kostenpflichtigen Tools außer der Stimme.
Einrichtung (einmal pro Maschine)
Überprüfe python3 --version (3.9+), ffmpeg -version und node --version (18+). Der erste Rendervorgang lädt HyperFrames und einen Headless Chrome über npx herunter; das ist normal und dauert eine Minute. Für die Stimme setzt der Benutzer ELEVENLABS_API_KEY=... in eine .env-Datei in seinem Projektordner (oder exportiert sie). Gib den Schlüssel niemals aus. Ohne Schlüssel funktioniert alles trotzdem im --draft-Modus (stumm, in Echtzeit getaktet).
Definiere diese Shell-Funktion einmal pro Terminalsitzung (eine Funktion, keine String-Variable, damit sie sowohl in zsh als auch in bash funktioniert). Die folgenden Befehle verwenden sie:
reel() { python3 "<Pfad zu diesem Skill>/scripts/reel.py" "$@"; }
Workflow
1. Die Anfrage verstehen
- „Erzähle diese Geschichte“ mit einer klaren Prämisse → schreibe ein starkes Skript und baue es.
- „Gib mir Optionen“ oder „Skript-Ideen“ → präsentiere 3 vollständige Optionen (siehe das Playbook §10), lass sie wählen, dann baue.
- „Nächster Teil“ oder „X hat die Abstimmung gewonnen“ → setze die Serie fort: beginne mit der Konsequenz, löse den letzten Hinweis ein, gib eine echte Antwort, steigere die Spannung, neue Abstimmung (Playbook §9). Lies die Serienbibel, falls vorhanden.
- Nur Skript (oder keine Shell verfügbar) → liefere die Skripttabelle sowie
episode.jsonundscenes.js, wenn sie es selbst rendern möchten.
2. Das Skript schreiben
Lies jedes Mal zuerst references/viral-script-playbook.md. Es enthält die Regeln, die entscheiden, ob die Leute länger als 3 Sekunden bleiben. Wenn du eine Prämisse, eine Serie oder eine Staffel erfindest, lies auch references/story-engines.md.
Schreibe das Skript als Tabelle (# · Stimme · Gesprochen · Auf dem Bildschirm), ziele auf etwa 210–230 Wörter (etwa 85 s im Haus-Tempo). Führe die Vor-Sprach-Checkliste aus dem Playbook durch. Die Fehler, die am häufigsten gemacht werden: Frame 1 muss sich bewegen; wo, wann und wer innerhalb von 5 s; jede Entscheidung besteht den 12-Jährigen-Test; Charaktere sagen ihre eigenen Enthüllungen in der ersten Person; die Abstimmung besteht aus zwei physischen Ein-Wort-Aktionen mit Kosten auf beiden Seiten; ein geflüsterter Hinweis nach der Abstimmung zeigt auf etwas, das früher platziert wurde.
Wenn der Benutzer nach Optionen gefragt hat oder möglicherweise zustimmen möchte, bevor Credits ausgegeben werden, zeige die Skripttabelle und warte. Ansonsten mach weiter.
3. Das Reel aufsetzen
reel new reels/<slug>-part1 --title "<Titel> — Teil 1"
Dies erstellt episode.json und scenes.js aus einem kleinen funktionierenden Starter. Ersetze beide durch deine Geschichte.
4. Die Szenen zeichnen (scenes.js)
Lies references/drawing-kit.md und öffne examples/sundown-part1/scenes.js als Musterbibliothek (eine Kreatur, die sich hinauslehnt, eine Rückwärtspans-Karte, eine Regeln-Wand, die Zeile für Zeile enthüllt wird, Stop-Motion-Kreaturen, ein Fenster-Knapp-Vorbei, ein sprechendes Radio, eine Taschenlampe in den Bäumen, die Entscheidungsspalte, ein Cover).
Eine Funktion pro Szene aus deiner Skripttabelle. Jede gibt ein 1080×1920 SVG zurück, das mit Kit-Hilfsfunktionen (defs(), sky(), forest(), cabin(), room(), water(), stick(), kid(), creature(), phone(), radio(), chip(), ring(), splitChoice(), …) aufgebaut ist. Eine Umgebung, die das Kit nicht hat (ein Wasserpark, ein Zug, eine Wüste), ist normal: zeichne sie mit rects, paths und den Hilfsfunktionen, gemäß dem Abschnitt „Eine neue Umgebung bauen“ des Zeichenkits. Gib allem, das sich bewegen oder zu einem Wort erscheinen soll, eine id. Halte Gesichter aus dem Untertitelsbereich (y 1180–1380) und den rechten 140 Pixeln heraus. Füge einen mode für das Cover (Subjekt unter dem Titel platziert) und für Abstimmungskarten-Einschübe hinzu.
5. Die Episode verknüpfen (episode.json)
Lies references/episode-format.md. Für jede Szene: draw, say-Zeilen, kenburns und animate-Einträge, die auf gesprochenen Wörtern landen ("at": "faster"). Dann: Stimmen (mit fx und Bildunterschriften-tags für andere Charaktere), HUD-Pillen mit einer Uhr, handgesetzte sfx auf Wörtern, bed-Hinweise, die Abstimmungsszene (zwei Optionen, Einschübe, die Hinweiszeile), cover und post (Bildunterschrift mit {vote_line}, angehefteter Kommentar, posts_at). Für Stimmen, Sounds und Bildunterschriften siehe references/sound-voice-posting.md.
6. Entwurfsdurchlauf (kostenlos)
reel voice reels/<slug> --draft # stumm, Echtzeit-Timing
reel sound reels/<slug>
reel build reels/<slug>
reel check reels/<slug>
reel snap reels/<slug> --at scenes # zwei Standbilder pro Szene (oder --at 0.5,12,30.5 Sekunden)
Sieh dir jedes Standbild in reels/<slug>/snaps/ an. Behebe, wovor die Lesbarkeitsregeln des Zeichenkits warnen: Dinge, die zu dunkel zum Lesen sind, Gesichter unter Bildunterschriften, zu kleine Motive, eine zeitlich falsch platzierte Enthüllung. check muss „Check passed“ melden (all stoppt vor dem Rendern, wenn nicht). Diese Warnungen sind erwartet und in Ordnung: „nested structure“, „track too dense“, „composition file too large“ und Einschübe, die ihre Begrenzung „overflowing“ haben.
7. Sprachaufnahme und Rendern
reel all reels/<slug> # Sprache (ElevenLabs) → Sound → Bauen → Prüfen → Rendern
reel frames reels/<slug> --every 2 # Kontaktabzug des gesamten Reels zur Überprüfung
Überprüfe die gedruckte Länge (60–90 s; kürze die Einleitung, wenn sie überschritten ist). Sieh dir renders/review.png an: Das Motiv ist lesbar, die Bildunterschriften sind klar, das genannte Ding bewegt sich bei seinem Wort, und die Abstimmungskarte sowie der Hinweis-Einschub erscheinen. Höre Zeile 1 an; wenn ein Wort falsch verstanden werden könnte, ändere das Wort und nimm die Sprachaufnahme erneut vor (nur geänderte Zeilen kosten Credits).
8. Ausliefern
Gib dem Benutzer renders/<slug>.mp4, renders/cover.png und POST.md (Bildunterschrift, angehefteter Kommentar, Alternativtext, Zeitpunkt des Abstimmungsendes). Erstelle für eine Serie oder aktualisiere bible.md neben dem Reel-Ordner: Besetzung, Regeln, Kanon, der Hinweis und eine Zeile pro Abstimmungsoption, die beschreibt, wie der nächste Teil beginnt (story-engines §4).
Befehle
| Befehl | Was er tut |
|---|---|
reel new <verz> --title "…" | Reel-Ordner aufsetzen |
reel voice <verz> [--draft] | Sprachaufnahme + Wortzeiten → timing.json, assets/audio/narration.wav |
reel sound <verz> | 19 Soundeffekte + die Umgebungs-Atmosphäre synthetisieren |
reel build <verz> | index.html, cover/, POST.md kompilieren |
reel check <verz> | HyperFrames-Lint-, Layout- und Kontrastprüfung (bricht mit Fehler ab) |
reel snap <verz> --at scenes | PNG-Standbilder aus der Komposition, zwei pro Szene (oder --at 1,5.5,9 Sekunden) |
reel render <verz> [--draft] | MP4 bei −14 LUFS + cover.png + Kontaktabzug |
reel all <verz> [--draft] | Sprache → Sound → Bauen → Prüfen → Rendern (stoppt, wenn die Prüfung fehlschlägt) |
reel frames <verz> --every 2 | Überprüfungsbogen des gesamten gerenderten MP4 |
Fehlerbehebung
"Wort"wird dort nicht gesprochen: die Zeitreferenz verwendet die Bildunterschrifts-Schreibweise und wird nur innerhalb dieser Szene gesucht; der Fehler gibt aus, was die Szene sagt. VerwendeWort#1für das zweite Vorkommen,sN:Wortfür eine andere Szene,start+0.2für einen Offset oder12.5sfür eine absolute Zeit.- Stimme nicht gefunden: verwende einen vorgefertigten Namen (Liam, Brian, George, Daniel, Callum, Bill, Roger, Chris, Eric, Will, Harry, Charlie, River, Adam, Sarah, Matilda, Jessica, Alice, Lily, Laura, Bella) oder die Stimmen-ID.
- Credits aufgebraucht: bereits vertonte Zeilen werden zwischengespeichert; lade Guthaben auf und führe
voiceerneut aus. - Ein leeres oder schwarzes Bild: ein JavaScript-Fehler in diesem Set.
checkzeigt es; teste die Funktion, indem du nach der Reparatur erneut baust. - Über 90 s: kürze Einleitungszeilen und Adjektive; behalte den Haken, die Wendung, die Abstimmung und den Hinweis.
npx- odernode-Fehler: installiere Node 18+; lassnpxbeim ersten Durchlauf HyperFrames und Chrome herunterladen.
Was dieses Skill enthält
scripts/reel.py: die CLI.scripts/synth.py: 19 Soundeffekte und die Atmosphäre (Dröhnen, Wind, Puls, Summen, Wasser), alle synthetisiert.assets/kit.js: das Zeichenkit.assets/runtime.js,assets/base.css: Bildunterschriften, HUD und die Abstimmungskarte.references/:viral-script-playbook.md(immer),story-engines.md(Prämissen, Serien, Bibel),episode-format.md(die Spezifikation),drawing-kit.md(Zeichnen),sound-voice-posting.md(Stimmen, Sound, Bildunterschriften, Posten, Sicherheit).examples/sundown-part1/: ein vollständiger 89-Sekunden-Teil 1 (episode.json+scenes.js).examples/starter/: der 4-Szenen-Starter, der vonnewverwendet wird.examples/script-pitches.md: fünf weitere vollständige Teil-1-Skripte (THE WHEEL, LAST CAR, LOW TIDE, 3:33, ROW ONE).