Reel – Split-Edit (45 % Panel über Sprecher)
Ein permanent cremefarbenes Panel füllt den oberen Teil des Bildes (1080 × split.panel_height, Standard 864 = 45 %) mit UI-artigen Widgets – Karten, Messgeräte, Umschalter, Terminals, Chips – die genau das veranschaulichen, was gerade gesagt wird. Der Sprecher befindet sich darunter im Maßstab 1 und bewegt sich nie. Ende: Das Kommentar-Keyword groß auf dem Bildschirm, dann eine Folgekarte. Arbeitsbeispiel: examples/split/ (Plan + Szenenmodul eines echten 100-Sekunden-Videos über fünf Claude-Skills).
Argumente: $ARGUMENTS
Standardwerte (nur ändern, wenn der Nutzer es sagt)
Zuerst reel.config.json lesen (fällt zurück auf reel.config.example.json).
| Sache | Standardwert |
|---|---|
| Split | "split": split.panel_height (864 → Panel 45 %, Sprecher 55 %; 960 = 50/50) |
| Sprecher | Maßstab 1, kein Zoom, keine Bewegung; Gesicht zentriert im Sprecherbereich (speaker_y) |
| Sicherheitsbox | "safe": split.safe = [64, 160, 64, 32] → Szeneninhalt befindet sich in 952 × 672, beginnend 160 px von oben (Instagram-Header / Telefon-Statusleiste verdecken den oberen Rand) |
| Untertitel / SFX / Musik | Keine hinzugefügt. Audio = eigener Mix des Takes, von finish.py in denselben Container gemuxt |
| Take | Wir gehen davon aus, dass er bereits geschnitten, farblich korrigiert und mit Musik versehen ist – also unverändert verwenden. Rohmaterial/unbearbeitet → vorher fragen |
| CTA | Kommentar-Keyword (Wort oder Zahl) riesig in einer Sprechblasenkarte; Folgekarte "handle": creator.handle, nur Text, niemals ein Gesichtsausschnitt |
| Palette | split_palette: cremefarbenes Panel, tintenfarbener Text, Akzentfüllungen; Text auf Creme verwendet accent_deep (Kontrast) |
Eingaben
Name des Takes und Thema kommen aus den Argumenten. Einmal, in einer Nachricht, nur das fragen, was fehlt: Ist der Take bereits geschnitten/farbkorrigiert/mit Musik versehen? Das Kommentar-Keyword? Namen oder Fachbegriffe, die Whisper falsch verstehen könnte (Tool- und Produktnamen).
Pipeline
PY = .venv/Scripts/python.exe -X utf8 (Windows) oder .venv/bin/python -X utf8 (macOS/Linux). Lange Schritte im Hintergrund.
| # | Schritt | Befehl / Aktion | Prüfung |
|---|---|---|---|
| 1 | Ansehen | ffprobe; Kontaktabzug ffmpeg -i raw/<take> -vf fps=1/5,scale=216:384,tile=9x2 -frames:v 1 work/<take>/sheet.jpg ansehen | Leere Wand über dem Kopf? Bereits bearbeitet? |
| 2 | Transkribieren | $PY tools/transcribe.py <take> --prompt "<Namen, Fachbegriffe>" | Toolnamen Korrektur lesen; Lücken > 3 s → Fenster neu transkribieren |
| 3 | Gesicht | $PY tools/face_track.py <take> --split <panel_height> | gibt speaker_y aus |
| 4 | Beat-Plan | eine Szene pro Idee, typisch 3–7 s, jedes Widget an ein gesprochenes Wort geheftet (Cue = Wortanfang). Szenen ändern den Inhalt, nie das Layout | |
| 5 | Plan-Datei | work/<take>/showcase.json basierend auf examples/split/showcase.json: video ("../../raw/<file>"), split, speaker_y, safe, scenes_module, scenes[] {kind, start, end, cue{...}}, handle in der Folge-Szene; _note speichert die Gesichtsnummern | |
| 6 | Szenen | tools/scenes_<slug>.py basierend auf examples/split/scenes_5skills.py: eine sc_<kind>(i, s) -> (html, js) pro Kind, RENDER-Dict, optional CSS/JS. Koordinaten innerhalb der Sicherheitsbox (952 breit); IDs s{i}-*; Cue-Zeiten absolut. sc_comment, sc_follow sind der CTA | |
| 7 | Bauen | $PY tools/showcase_build.py <take>; in work/<take>/sc: npx hyperframes lint public → 0 Fehler; npx hyperframes snapshot public -o ../snaps --no-end --describe false --at <Mitte jeder Szene>; Blätter lesen, korrigieren | Text innerhalb des Panels, nichts unter dem Header |
| 8 | Schnell rendern | $PY tools/finish.py <take> --seconds 12; work/<take>/sc/quick_sheet.jpg lesen | |
| 9 | Voll rendern | $PY tools/finish.py <take> (Hintergrund) → final/<take>/, verifizieren, qa/sheet.jpg | das Blatt lesen |
| 10 | Bericht | Pfad, Länge, Szenen, Überprüfungsergebnis. Falls etwas Neues gelernt wurde, zu diesem Skill hinzufügen |
Panel-Regeln
- Widgets veranschaulichen den Satz, der gerade jetzt gesprochen wird: eine Repo-Karte, wenn das Repo genannt wird; ein Messgerät, wenn verglichen wird; eine Durchstreichung, wenn „nicht dies“ gesagt wird.
- Jede Szene blendet 0,25 s vor der nächsten aus (der Builder tut dies); innerhalb einer Szene erscheinen Elemente zu ihren Cue-Wörtern.
- Zahlen auf dem Bildschirm müssen echte Zählwerte aus dem Take sein.
- Die in
showcase_build.pyeingebauten Szenenarten (hook,repo,cta, …) stammen aus der Zeit vor der 45 %-Sicherheitsbox und können überlaufen; schreibe stattdessen Arten intools/scenes_<slug>.pybasierend aufexamples/split/scenes_5skills.py. - Persischer / arabischer Text:
.fa-Klasse (RTL auf dem Element, niemalsdir="rtl"auf<html>),letter-spacing: 0, Ziffern mittelsfa(), eine große Null als lateinisches0. - Keine überlappenden Tweens auf einer Eigenschaft, kein
Math.random/from:"random", Einschübe tragenautoAlpha:0im Ausgangszustand. - Falls ein Quellclip HDR (HLG) ist, zuerst tonemappen (
TONEMAPintools/story_assets.py) –finish.pystoppt bei „HDR auto-promotion“. hyperframes snapshotist kein Beleg für das Rendering – Schritt 8 ist es.