Pixel Crew Reel
Die Beispielvorlage zum Kopieren ist projects/ai-delivery-team (lies
docs/REFERENCE-BREAKDOWN.md für eine Erklärung, warum sie funktioniert). Lies CLAUDE.md für die Übersicht
und die Regeln, die uns gebissen haben.
1 · Skript zuerst (script.json)
Funktionierendes Format: Hook (≤5 s) → N identische Beats (~3,5 s pro Beat) → Payoff → Keyword CTA.
- Hook: eine überraschende Zahl + das gesamte System in einem Frame ("7 Mitarbeiter, keiner davon menschlich").
- Jeder Beat: "Die Rolle macht a, b und c." — drei konkrete Nomen, die du animieren kannst.
- Payoff: die eine Aufgabe des Menschen (genehmigen, entscheiden, überprüfen).
- CTA: "Kommentiere KEYWORD und ich sende dir …" (Keyword in
brand.keyword). - Schreibe
linesals 2–4-Wort-Untertitelphrasen; jede Zeile wird ein Untertitel. - Ziel: 30–45 s Gesamtlänge; Sprachgeschwindigkeit 1,3–1,4 hält Kokoro bei etwa 3,5 Wörtern/s.
- Frage den Benutzer nach Brand-Handle / Genehmiger-Name / Keyword, falls unbekannt; ansonsten behalte die
@yourhandle-Platzhalter und sage dies.
2 · Vorbereitung
node scripts/new.mjs reel <name>
python3 scripts/voice.py projects/<name> # Timings zuerst, dann Design darauf abstimmen
3 · Szenen (index.html + style.css + scenes.js)
- Ein
<section class="scene">pro Skriptszene, in derselben Reihenfolge (R.cuts()ordnet sieTIMING.sceneszu). - Jede Mitarbeiterszene:
.headmit.step[data-step][data-label]+.title(Größe, sodass es ≤ 980 px passt), dann eine oder zwei.cards, die die Aufgabe darstellen. - Gib jeder Szene ihren eigenen Akzent (
--accent: var(--rN)) und wechsle Hintergründe (is-paper,is-peri,is-lav,is-cobalt). - Animieren jedes gesprochene Nomen:
R.pop(el, R.word(scene, line, "noun")),R.tick,R.type,R.grow,R.slamfür Stempel. - Verwende
data-icon,data-bot,data-burst,data-face,data-presenter-Platzhalter;Sprites.hydrate()füllt diese aus. - Beende mit
R.captions(...)undR.register(); behalte die inline-Zeilewindow.__timelines["main"].
4 · Prüfen, dann rendern
node scripts/build.mjs projects/<name> --no-voice --no-render --snap <ein Mal pro Szene>
# lies projects/<name>/build/snaps/contact-sheet*.jpg, korrigiere, wiederhole
node scripts/hf.mjs lint projects/<name>
node scripts/build.mjs projects/<name> --no-voice # → renders/<name>.mp4
Überprüfe die MP4 selbst: ffmpeg -i renders/<name>.mp4 -vf fps=1,scale=180:-1,tile=8x5 sheet.jpg
und -af ebur128 (Ziel ≈ −14 LUFS). Achte auf: leeren ersten Frame, Text
berührt Ränder, Elemente unter Instagrams UI, Untertitel nicht synchron.
Swaps
- Stimme:
script.json → voice.voice(am_michael,am_puck,am_fenrir,af_heart,bf_emma, …) oder nimm deine eigene auf, speichere sie alsbuild/voice.wavund führevoice.py --from-wavaus. - Musik: Lege einen Track unter
build/music-override.wavab. - Host: Der Cartoon des Besitzers (
kit/brand.js,kit/avatars/) wird automatisch von[data-presenter]und[data-face]verwendet; skaliere Bild-Hosts nach Breite (.is-img), es ist das Oberkörperportrait. Zeichne keine andere Figur, es sei denn, es wird ausdrücklich danach gefragt.