Reel-Builder
Engine: $(reelsmith root)/engine/ (build.py, template.html, music.py, pull_vo.py, capcut.py, fonts/). Ein Ordner pro Reel: <reel-dir>/reel.json → <reel-dir>/out/reel.mp4. Wenn reelsmith sagt, dass es nicht eingerichtet ist, führe einmal reelsmith setup aus.
reelsmith new reels/my-reel # Ordner mit src/, vo/ und einer Vorlage reel.json
reelsmith sheet reels/my-reel/src/* # Kontaktabzüge → wähle `ss` für jedes Segment
reelsmith build reels/my-reel --stills # ~1 Min: Frames, Wortzeiten, Untertitel, out/qa_sheet.jpg
reelsmith stills reels/my-reel 0.5,7.8,21.3 # zusätzliche Kontrollframes
reelsmith build reels/my-reel # vollständiger Render (~4–5 Min für 60 s)
Führe immer zuerst --stills aus: Lies die gedruckte Untertitelliste und sieh dir out/qa_sheet.jpg an (rot = Reels/TikTok UI-Zonen; nichts Wichtiges darf in Rot liegen). Korrigiere reel.json, dann baue. Überprüfe die Lautstärkezeilen am Ende (−14 LUFS ±1, Spitze ≤ −1 dB). Sieh dir dann Frames des endgültigen MP4 um jeden Effekt und Übergang herum an, bevor du es übergibst.
Arbeitsablauf (Zeitaufwand des Erstellers ≈ 10 Min pro Reel)
- Skript:
reel-script-Fähigkeit → Ersteller genehmigt. Markiere Akzentwörter mit<em>…</em>; behalte Zahlen als Ziffern für die Anzeige. - Stimme: entweder die eigene Aufnahme des Erstellers (
vo/vo.mp3) oder ElevenLabs (siehedocs/voice.md): TTS-Text = Skript ohne Tags, Zahlen ausgeschrieben, Markennamen phonetisch geschrieben. Im kostenlosen Plan im ElevenLabs Web-UI generieren (Claude in Chrome kann es steuern), dannreelsmith voice <reel-dir>zieht die 2 neuesten Takes invo/mit Dauer. Transkribiere beide, behalte den saubereren alsvo/vo.mp3. Langsame Stimmen:"speed": 1.07invo. - Filmmaterial:
footage-scout-Fähigkeit — nur frische Clips (prüfeused_footage.md), Kontaktabzüge, Datenschutzprüfung. Die Segmentdauern müssen sich zum Voice-Ende + ~2 s summieren. - Schnittplan:
reel-director-Fähigkeit wählt die 3–5 Effekte für diese Geschichte und wo die Übergänge hingehen. - Schreibe reel.json →
--stills→ korrigieren → bauen → liefereout/reel.mp4+out/cover.jpg+out/caption.txt. - Optionaler Sound-Durchgang in CapCut:
reel-capcut-Fähigkeit (Bibliotheks-Soundeffekte + nach Gehör ausgewählte Musik).
reel.json
{
"vo": {"file": "vo/vo.mp3", "offset": 0.25, "speed": 1.07, "gaps": [[5.73, 0.8]]},
"script": "Ich schreibe meinen Leitfaden seit drei Monaten um und gestern habe ich die Cover-Schriftart <em>zum vierten Mal</em> geändert. …",
"hook": {"tag": "das Ewige-Entwurf-Szenario", "lines": ["der Leitfaden ist fast fertig.", "<em>seit drei Monaten jetzt</em>"], "out": 5.55},
"end": {"from": 55.6, "lines": ["wie lange wartet", "<em>deiner schon?</em>"], "lines_at": [55.75, 56.6],
"sub": "sag es mir in den Kommentaren", "sub_at": "@comments", "handle": "@yourhandle", "handle_at": 58.6},
"cover": {"from": 0, "to": 4.35, "title": "ENTWURF", "left": "Nr.4 · Oktober", "right": "@yourhandle", "top": 330},
"cover_t": 2.0,
"stamps": [{"seg": ["I", "J"], "text": "tanya · 2 Jahre in Entwürfen"}],
"punch": [[3.02, 4.4], ["@thousand", 9.0]],
"segments": [
{"id": "A", "clip": "src/night_desk.mp4", "ss": 9.5, "dur": 2.5, "crop": [0, 0.196, 0.75], "cut": true},
{"id": "B", "clip": "src/keys.mp4", "ss": 1.3, "dur": 1.9, "move": "none"},
{"id": "E", "clip": "src/phone_walk.mov", "ss": 0.8, "dur": 4.5, "cut": true, "in": "zoom"},
{"id": "I", "clip": "src/cafe.mp4", "ss": 0.3, "dur": 3.2, "look": "bw"},
{"id": "K", "clip": "src/walk.mov", "ss": 14.0, "dur": 4.95, "look": "burst"},
{"id": "N", "clip": "src/breakfast.mov", "ss": 0.0, "dur": 3.45, "rate": 0.4},
{"id": "Q", "clip": "src/meadow.mov", "ss": 13.2, "dur": 9.1, "move": "pull-out", "in": "zoom"}
],
"caption": "…",
"music": "synth"
}
Ein vollständiges reales Beispiel (Ukrainisch, 61 s, 17 Segmente, jeder Effekt unten) befindet sich in $(reelsmith root)/examples/chernetka/reel.json; ein minimales in examples/template/reel.json.
Stimme und Untertitel
- lang: Whisper-Sprache des Voice-Over (
"uk","en", …); weggelassen = automatische Erkennung (oderREELSMITH_LANG). - vo.gaps
[vo_time, extra_s]: ein Atemzeichen, das an der leisesten Stelle nahe dieser Zeit der (beschleunigten) Stimme eingefügt wird — Platz für eine Fotomontage. vo.speed: atempo-Faktor. - "@word"-Anker: jede Zeit in Hook / End / Doodles / Glass / Checklist / Cover / Orbit / Wall / Punch / subs_skip kann
"@thousand"sein (Start dieses Skriptworts; exakte Übereinstimmung zuerst, sonst Präfix),"@again#2"(2. Vorkommen),"@twice+0.3". Von Whisper falsch gehörte Wörter erhalten interpolierte Zeiten — verwende dort Sekunden.out/words.jsonenthält die tatsächlichen Zeitangaben nach--stills. - subs / punch: weggelassen = automatisch aus
script+ Wortzeiten (5–7 Wörter, 1–2 Zeilen, Akzentwörter in kursiver Akzentfarbe, kein abschließender Punkt, eine Zeile endet nie auf "und/in/von…"; Punch-Ins auf bis zu 4 Akzentphrasen ≥ 3 s Abstand). Überschreibe mit"subs": [[a, b, "html"]],"punch": [[a, b]]. Untertitel werden ausgeblendet, während die Hook-Karte sichtbar ist, unter Glas-Titeln und Checklisten, und sobald die Endkarte beginnt (subs_from/subs_until/subs_skip [[a, b]]zum Anpassen).
Karten und Text
- hook: Papierkarte ab Frame 0 sichtbar (
at: [t…]enthüllt Zeilen nacheinander,size,top). end: Karte abfrom, Zeilen beilines_at,sub,handle. - stamps: einfarbige Pille oben links über den aufgelisteten Segmenten (Ort, Datum, Charaktername).
- cover (Cover Story + Frame Break): Magazin-Mastkopf auf Breite angepasst, Buchstaben fallen ein; auf Segmenten mit
"cut": truesteht die Person vor dem Titel. Wähle/beschneide eine Aufnahme, bei der die Kopfoberseite 40–80 px unter der Mastkopf-Oberseite sitzt — niemals über den Augen.colorfür den Mastkopf,topzum Verschieben.cover_t≈ 2, damitout/cover.jpgdas fertige Cover zeigt. - glass (Glas-Typ):
{"from", "to", "lines", "at", "top"}mattierter Glastitel. - checklist:
{"from", "to", "title", "items": [{"text", "sub", "at", "sub_at"}]}Karte, die Element für Element wächst, Häkchen werden beiatgezeichnet. - wall (Headline Wall):
{"from", "to", "items": [...], "every": 0.06}Dateiname-/Schlagzeilen-Kacheln stapeln sich; platziere einen Glastitel darauf. - orbit:
{"from", "to", "seg", "text": "1000 FOLDS · ", "speed", "scale", "tilt", "lift"}Textring um den Kopf auf einemcut-Segment; die hintere Hälfte geht hinter der Person vorbei. Am besten auf einem engen Selfie. - doodles (Doodle Boil):
{"kind": "text"|"circle"|"underline"|"strike"|"arrow", "at", "to", "x", "y", …}— text:text, size, rot, write; circle/strike:w, h(strikenZickzacks; 3 lässt das Wort lesbar); underline:w; arrow:x2, y2, bend;color,width. Akzentschrift mit cremefarbenem Halo, geschrieben von links → rechts, wackelt alle 3 Frames. Halte sie über y ≈ 1000, während die Hook-Karte oben ist, und vermeide Gesichter.
Segmente
- Pfade: relativ zum Reel-Ordner, dann zum aktuellen Verzeichnis, dann zum Repository. HEIC/JPG-Fotos via
imgsind in Ordnung. ssStart im Clip,durSekunden;pos0–1 horizontaler Rahmen für breite Quellen;crop [x, y, size]= Punch-In-Beschneidung des Hochformatrahmens (bleibt von 4K scharf);rate< 1 = Zeitlupe, wenn nur ein kurzer Teil verwendbar ist.- cut:
true= macOS Vision Person-Masken für dieses Segment (reelsmith masks, ~0,2 s/Frame, zwischengespeichert). Erforderlich für Cover und Orbit. - in:
"zoom"(ausgehender Shot rauscht mit Weichzeichner herein, neuer landet von einem Zoom) oder"whip"(schneller verwischter Schwenk, keine schwarzen Ränder). Verwende bei 4–6 wichtigen Schnitten, nicht bei jedem Schnitt. - look:
""warmer Film ·"memory"verblasster Zoom-Durchflug für Fotomontagen (datefügt einen orangefarbenen Kamera-Datumsstempel hinzu) ·"bw"Schwarz-Weiß (Musik gedämpft) ·"burst"Grau → Farbaufblühen (Musik öffnet sich). - move:
push(standardmäßige langsame Hereinbewegung) ·tilt-up·pull-out·none.
Sound und Farbe
- music:
"synth"(ein generiertes Lo-Fi-Bett, geformt durch die Looks — als Platzhalter in Ordnung, Ersteller bevorzugen normalerweise einen echten Track), ein Pfad zu einer Audiodatei, für die du die Rechte hast, odernull. Original-Clip-Sound wird nie verwendet. - music_gain: Standard 0,16 unter der Stimme (Sidechain-Ducking).
- colors:
{"accent": "#D4573A", "cream": "#F4EFE6", "ink": "#1F1A17"}(Standard: Beige / Terrakotta).
Regeln aus echtem Feedback
- Effekte müssen bei Telefongröße beim ersten Anschauen lesbar sein: groß, akzentfarben, animiert. Kleine cremefarbene Doodles und eine schwache Glasscheibe waren "wo sind die Effekte?".
- Keine wiederholten weißen Blitze an Schnitten. Original-Clip-Sound stummschalten. 3–5 Techniken pro Reel, nicht alle.
- Text, Karten oder Doodles niemals über die Augen setzen; verschiebe die Karte oder rahme den Shot neu.
- Überprüfe die Bildschirme und Hintergründe von Clips in voller Auflösung: Nachrichten anderer Personen, Autokennzeichen, Straßennamen, private Dashboards → überspringe diese Sekunden.
- Jedes Reel frisches Filmmaterial (
used_footage.md). Frage nach, bevor du Aufnahmen mit Gesichtern anderer Personen verwendest.