Communitygithub.com

Video Reel Studio

Orchestrator, der einen Satz in ein fertiges vertikales Video verwandelt: Brief schreiben, Modus wählen, Pipeline von video-ad-editor ausführen und Auslieferung verweigern, solange eine automatisierte Prüfung fehlschlägt.

Was ist Video Reel Studio?

Video Reel Studio ist ein Orchestrator, der fünf spezialisierte Skills (`video-ad-editor`, `montage-video`, `podcast-video`, `motion-video`, `thumbnail-video`) koordiniert, um aus einem einzigen Satz ein fertiges vertikales Video zu produzieren. Es unterstützt die Modi Talking Reel, Montage, Podcast, Motion Film, Web/App Demo und Cover Only. Der Skill läuft auf Windows und macOS, wobei er automatisch plattformspezifische Befehle und Pfade wählt. Ein `preflight.py`-Check stellt sicher, dass alle Abhängigkeiten (Python, ffmpeg, Chrome, etc.) vorhanden sind. Der Workflow ist streng in 10 Gate-Phasen unterteilt (von der Umgebungsprüfung bis zum Abschlussbericht), und jedes Gate muss bestehen, bevor das Video ausgeliefert wird. Der Orchestrator führt den Prozess selbstständig, prüft technische Parameter wie Länge, Lautstärke und Safe Zone, und delegiert nur die sprachliche und visuelle Überprüfung an Unter-Agenten mit frischem Kontext. Der Benutzer gibt lediglich eine Eingabe wie „منتج الفيديو ده“ oder „اعمله كاب كت“ und der Orchestrator schließt daraus den Modus. Auch das Branding (Farben, Schriftart, Ton) wird einmalig eingerichtet und dann in allen Projekten verwendet.

Funktioniert mit✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/MostaDaoud/video-reel-studio/tree/HEAD/skill/video-reel-studio

In Ihrer bevorzugten KI fragen

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

Dokumentation

Video Reel Studio — Ein Orchestrator mit strengen Prüfungen

Dieser Skill zeichnet und schneidet nicht selbst. Er ist ein Orchestrator über fünf vorhandene Skills:

SkillWird vom Orchestrator verwendet für
video-ad-editorAlle Skripte (scripts/), Talking Reels, Untertitel, Cover
montage-videoMontage von Clips ohne Sprache auf den Takt
podcast-videoZwei Kameras → Reels oder 16:9-Episode
motion-videoMotion Film aus Text (Motor motion/)
thumbnail-videoCover des Reels und YouTube-Thumbnail

Wurzel der Skripte: .opencode/skills/video-ad-editor/ — vollständige Pfade übergeben.

Plattformen: Windows und Mac

Der Skill ist für beide geschrieben. Der Unterschied liegt nur in der Art, wie Werkzeuge aufgerufen werden, nicht in der Logik:

WindowsMac
Pythonpythonpython3
.sh-Skripte& "C:\Program Files\Git\bin\bash.exe" … (⛔ nicht bash normal = WSL)bash …
ChromeC:\Program Files\Google\Chrome\Application\chrome.exe/Applications/Google Chrome.app/Contents/MacOS/Google Chrome
3DGL=gpu (ANGLE/D3D11)Metal automatisch
PfadeD:/work/x or D:\work\x/Users/you/work/x

Vor jeder Arbeit, einmal pro Sitzung:

python scripts/preflight.py        # Mac: python3

Überprüft: Python, ffmpeg/ffprobe, node, bash, Chrome, numpy/scipy, die Schwester-Skills, Schriftart und Identitätsordner — und gibt den korrekten Installationsbefehl für jedes System aus (winget auf Windows, brew auf Mac). Das Gate G-2.

Die Skripte erkennen die Plattform selbst: _vision.py wählt Apple-Tools auf Mac und offene Alternativen auf Windows, _chrome_flags.js wählt Metal auf Mac und SwiftShader auf anderen, und 31_device3d.js und motion/render.js suchen Chrome in den Pfaden beider Systeme.

Der Vertrag: Ein Satz → fertige Datei

Der Benutzer gibt dir eine Datei oder einen Link und einen Satz. Du hältst alle Schritte. Gib ihm keine Befehle und frage nicht nach Dingen, die du selbst überprüfen kannst. Frage nur eine einzige Frage, wenn die Entscheidung geschmacklich und nicht technisch ist (welcher Winkel, welcher Hook, welcher Satz soll weg).

Ägyptische Befehle — wenn er das sagt, ist das der Modus

Wenn er sagtModus
«منتج الفيديو ده» · «حوّله لريل» · «اقصّ السكتات» · «هات الكابشن»talking-reel
«اعمل مونتاج من المقاطع دي» · «ركّبهم على الأغنية»montage
«اعمل ريلات من الحلقة» · «عندي كاميرتين» · «الحلقة كاملة»podcast
«اعمل فيديو موشن من النص ده» · «اشرح بالحركة» · «موشن جرافيكس»motion
«اشرح الموقع ده بفيديو» · «ديمو للتطبيق» · «اللينك ده»web-demo
«اعمل كوفر» · «ثمبنيل يوتيوب» · «صورة مصغرة»cover-only
«عايز أعدّل بنفسي» · «اعمله كاب كت» · «افتح الاستوديو»Basis-Modus + CapCut / Studio

Er muss den Modus nicht erwähnen. Wenn der Satz ein Verb + eine Datei enthält, leitest du den Modus aus dieser Tabelle ab und fährst fort.

Die schnelle Pipeline

#PhaseAusgabeGate
-2Umgebungsprüfung: preflight.py (Windows/Mac)Bericht über WerkzeugeG-2
-1Identität (optional): Frage zuerst — gespeichert / neu / Standardtheme.json + brand.mdG-1
0Lese die Anfrage und schreibe brief.jsonpromise + mode + lengthG0
1Quelle: Kopieren, Frames prüfen, Beleuchtungsrc.movG1
2Schneiden + Transkription + Korrektur + Untertitelcut.json a.json caps.jsonG2 · G3 · G3b
3Design: Bewegungen, Szenen, Vorschauscenes*.js + sheet.jpgG4b
4Vollständiges Rendernout/ = Dauer×30G4
5Kodierung + Master + Übersetzungad-master.mp4 .srtG5
6Cover + Thumbnail + Mobilvorschaucover.jpg …G6 · G6b
7Lieferberichtgates.mdG8

Details und genaue Befehle → references/pipeline.md. Rollen und wann an den Agenten übergeben wird → references/roles.md. Jede Gate-Bedingung und ihre Grenzen → references/gates.md. Künstlerische Richtung: Vor der ersten Szene wähle einen Stil aus styles/pack.json (10) — python scripts/style_pack.py apply "<work>" <id> — der Stil bestimmt Bewegung und Textur, die Marke bestimmt die Farbe → references/styles-adapted.md.

-1a) Der Agent und das Modell — vor der Identität

ai.json wird vor allem geschrieben: Der Agent ist aus der Umgebung bekannt (du arbeitest darin), also frage nicht danach. Frage nur eine Frage, wenn das Modell nicht klar ist:

„An welchem Modell arbeitest du? Nur der Name — damit ich die Szenengröße und den Review darauf abstimmen kann.“

AntwortSofortige Auswirkung
Modell stark + vision6–8 Szenen, Tiefenmomente, visueller Review durch Unteragenten
Stark ohne vision4–6 Szenen, Review nur Zahlen + Auge des Benutzers auf sheet.jpg
Schnell/günstig3–5 Szenen aus festen Mustern, eine Vorschau, jedes Gate einmal
Kleiner KontextTeile die Transkription in Fenster, lies nicht den gesamten Text
  • Der Agent: opencode · claude-code · codex · cursor · gemini-cli — und preflight.py vergleicht das Projekt-Tag mit ai.json.
  • Wenn die Fähigkeiten unbekannt sind, setze sie auf null → der Skill geht auf Nummer sicher (Zahlen + Auge).
  • Details und vollständige Matrix → references/ai-fit.md.

-1b) Identität — Optionales Onboarding (nicht aufzwingen)

Bei der ersten Videoanfrage, vor jedem Skript, stelle genau eine Frage:

„Bevor wir beginnen: Richten wir deine Identität einmalig ein (5 Minuten: Farben, Schriftart, Ton, Verbote), oder verwenden wir eine gespeicherte Identität, oder fahren wir mit dem Standard fort und ändern später?“

Seine AntwortTu das
„Es gibt eine gespeicherte Identität“python scripts/onboard.py list → nenne den Namen → apply <work> <slug>
„Richte sie ein“Die sieben Fragen → new → card → zeige die Karte → apply
„Mach mit Standard“Frage nicht noch einmal im selben Projekt; Standard #0B0C0C · #F4F2EE · #19C3AE · Cairo · chunk
„Ich bin beschäftigt“Starte das Video und biete die Identität nach der ersten Lieferung an
  • Die sieben Fragen (Name, Handle, Publikum, Ton, Call-to-Action, Farben, Verbote) → references/onboarding.md.
  • Hat er Bilder/Logos? Extrahiere die Palette mit scripts/00_theme_refs.py statt zu raten.
  • G-1: Kontrast ink/bg ≥ 4.5, acc/bg ≥ 3, onAcc/acc ≥ 4.5. onboard.py new verweigert das Speichern bei Fehlschlag.
  • Die Identität wird in ~/.config/opencode/brands/<slug>.json gespeichert und in jedem späteren Projekt verwendet.

⛔ Es ist verboten, das Onboarding zu starten, ohne zu fragen, das Projekt wegen Farben anzuhalten oder mehr als 7 Fragen zu stellen.

G0 — Der Brief (nicht überspringen)

Schreibe <work>/brief.json vor jedem Skript. Vorlage: assets/brief.template.json.

  • promise = Das, was der Zuschauer in den ersten 3 Sekunden versteht. Ein Satz. Wenn du ihn nicht schreiben kannst, hast du die Anfrage nicht verstanden.
  • mode aus den sechs. Wenn die Anfrage zwei Modi zulässt, wähle den der Benutzerabsicht am nächsten und sag ihm in einem Satz, was du verstanden hast.
  • length_s = realistischer Bereich (Reel 45–90 Sek.; lange Clips → mehrere Reels, nicht ein Reel).
  • must_keep = Namen und Zahlen, die nicht gelöscht oder geändert werden dürfen.

Gate G0: Sind alle drei vorhanden? Wenn nicht, eine Frage und dann weiter.

Führung: Wer entscheidet

Du führst. Warte nicht auf Erlaubnis für jeden Schritt und übergib die Arbeit nicht an einen Agenten, der dich steuert.

  • Überprüfe selbst alles Technische: Dauer, Frames, Audio, Größe, Safe Zone.
  • Gib die Bewertung ab nur wenn die Bewertung mit frischem Speicher besser ist: Arabisch-Review, Bild-Review.
  • Der Agent liest und bewertet nur — schreibt nicht und zeichnet nicht. Prompt-Vorlage in references/roles.md.

Die Gates: Fail-closed

python scripts/gate_runner.py "<work>" --safe
  • Gibt eine Tabelle aus, schreibt gates.json + gates.md und beendet mit 1, wenn es einen Blocker gibt.
  • Keine Lieferung bei offenem Blocker. Und kein „Versuch es und schau, ob es klappt“.
  • Budget von zwei Versuchen pro Gate. Beim dritten Mal = Grund nicht verstanden → stoppen und Benutzer mit Beweis fragen (Screenshot + Gattertext).
  • Verboten, ein Gate zu deaktivieren, --maxmb zu erhöhen oder eine Warnung zu ignorieren „weil sie klein ist“. Das ist Fälschung.

Strenge Regeln

  1. Untertitel sind eine getreue Kopie seiner Rede — erfinde nichts, lösche kein Wort ohne Grund, und die Korrektur behält die Wortanzahl bei.
  2. Zuerst die Safe Zone — kein Text in y 0–150 oder y 1620–1920, und nicht in der rechten Buttone-Spalte.
  3. Farben nur aus theme.json; Null farbliche Änderung an seinem Bild ohne Zustimmung.
  4. Jede Zahl auf dem Bildschirm aus facts.md oder seiner Rede — keine Zahl von dir.
  5. Kein Veröffentlichen oder Planen. Lieferung als Dateien.
  6. Cover ist Pflicht — erster Frame, und lesbar in Handygröße (cover_phone.jpg).
  7. Größe und Lautstärke sind Teil der Qualität: ≤29 MB, −14 LUFS, Peak ≤ −1.0 dBTP.

Betriebsmodi

  • Talking Reel (Standard): talking-reel — das gesamte Video wird Vollbild, Grafiken im oberen Bereich oder dahinter.
  • Clips ohne Sprache: montage — benötigt 10–20 Clips + Audiospur. Keine Wiederholung von Aufnahmen.
  • Podcast: podcast — zwei Kameras. Geschriebener Hook ist Pflicht.
  • Motion Film: motion — standardmäßig ohne Kommentar (audio.py --no-bed --lufs -20). 3D benötigt GL=gpu.
  • Website/App: web-demo — 27_web_capture.js dann 30_demo.js (oder 31_device3d.js).
  • Nur Cover: cover-only.

Lieferbericht

Zwei Zeilen, dann eine kurze Tabelle:

Dauer · Schnitte · Größe · Lautstärke · Peak
Gates 7/7 ✅ (oder akzeptable Warnung + Grund)
Dateien: mp4 · srt · txt · cover.jpg
Nichts veröffentlicht.

Token-Ökonomie

  • Ein Befehl pro Phase, nicht 41 einzelne Befehle.
  • Ein Blatt mit Aufnahmen (sheet.jpg) statt 6 Bilder.
  • Nicht ganze Dateien lesen: grep -n für die Funktion, tail -5 für das Log.
  • Referenzen nur bei Bedarf — diese Datei + eine Referenz für die jeweilige Phase.
  • Zeige kein Bild, außer für eine visuelle Frage, die nicht anders beantwortet werden kann.

Erwartete Fehler (keine Überraschung)

SymptomeGrundLösung
UnicodeEncodeErrorSchreiben ohne utf-8 auf WindowsPYTHONUTF8=1 setzen (Skripte sind gefixt, aber verlasse dich nicht darauf)
3D hängtChrome-Pfad/Pfad /workCHROME korrekt + GL=gpu (in 31_device3d gefixt)
Untertitel zu spät/abgeschnittenSchnitt hat sich nach den Untertiteln geändert02_captions.py erneut ausführen, dann G3
Hoher Peak nach KompressionAAC hebt den Peak analimiter im Cover-Pfad oder 06c_loudfix.sh
Transkription halluziniertUmgangssprache/englischer Begriff02a_whisper_check.py --fix dann mit konstanter Wortanzahl korrigieren

Verwandte Skills