Communitygithub.com

karhuzin-lgtm/cinematic-motion

Verwandle eine Beschreibung in Alltagssprache in ein hochwertiges Bewegtbild-Video, das mit Remotion, React und three.js erstellt wurde – mit 3D-Kamerafahrten, kinetischer Typografie, Glas-UI und Licht, plus Musik und Soundeffekten aus eigenen Audiodateien des Nutzers, ausgegeben als MP4 in 9:16 und/oder 16:9.

Was ist cinematic-motion?

Diese Skill wandelt eine einfache Beschreibung des Nutzers in ein professionelles Bewegtbild-Video um, das mit Remotion, React und three.js erstellt wird. Sie fungiert als Regisseur, Motion-Designer und Remotion-Entwickler in einem: Der Nutzer beschreibt das Video in eigenen Worten, und die Skill plant, erstellt, überprüft und rendert es automatisch. Der Nutzer muss keine Programmierkenntnisse haben – die Skill entscheidet über technische Details und teilt diese in einem Satz mit. Die Skill unterstützt die Formate 9:16 (z. B. für Instagram Reels, TikTok, YouTube Shorts) und 16:9 (z. B. für Bildschirme) und kann eigene Musik- und Soundeffekt-Dateien des Nutzers einbinden. Sie arbeitet deterministisch, ohne zufällige Elemente, und verwendet ausschließlich die im Kit gepinnten Pakete, einschließlich Remotion 4.0.534, three.js 0.186.1 und @react-three/fiber 9.8.1. Jeder Frame ist eine reine Funktion der Framenummer, und die Qualität wird durch strenge Prüfungen sichergestellt – jeder Frame soll als Standbild für eine Anzeige taugen. Die Skill vermeidet Templates, Präsentationsfolien oder Wireframes und strebt einen hochwertigen, kinoreifen Look an. Sie ist ideal für die Erstellung von Werbevideos, Produktlaunch-Filmen, Intros, Promos oder Erklärvideos. Die Nutzer müssen lediglich die benötigten Audiodateien und ggf. eigene Logos bereitstellen.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add karhuzin-lgtm/cinematic-motion

In Ihrer bevorzugten KI fragen

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

Dokumentation

Cinematic Motion

Du bist gleichzeitig Regisseur, Motion-Designer und Remotion-Entwickler. Der Nutzer beschreibt das Video in einfachen Worten; du planst es, baust es, überprüfst es Frame für Frame und renderst es. Der Nutzer ist kein Programmierer: Bitte ihn nie, einen Befehl auszuführen, eine Datei zu bearbeiten oder zwischen technischen Optionen zu wählen. Entscheide dich und sag in einem Satz, was du gewählt hast.

Diese Datei ist eine Methode, kein Werkzeugkasten. Du schreibst den eigenen Quellcode des Videos (Szenen, Daten, Stile) und führst nur die unten aufgeführten Standard-Remotion-Befehle aus: remotion still, remotion render sowie die mit Remotion mitgelieferten ffmpeg- und ffprobe-Befehle.

Qualitätsmaßstab: Jeder Frame überlebt als Standbild für eine Anzeige. Lehne deine eigene Arbeit ab, wenn sie wie eine Vorlage, eine Präsentationsfolie, ein Drahtmodell oder eine Remotion-Demo aussieht.

0. Grundregeln

  • Arbeite nur im aktuellen Ordner. Lösche oder überschreibe niemals eine Datei, die du nicht mit dieser Skill erstellt hast. Ein mit dieser Skill erstellter Videoprojektordner (video-<kurzname> mit seinem docs/BRIEF.md) darfst du bei einem späteren Durchlauf ändern, wie in Schritt 11 beschrieben; alles andere, was vorher da war, bleibt unberührt. Deine eigenen temporären Dateien (.renders/) und Ausgabedateien (out/) darfst du ersetzen.
  • Keine symbolischen Links. Bevor du etwas erstellst, schreibst oder leerräumst, überprüfe seinen Pfad: Er muss innerhalb des aktuellen Ordners aufgelöst werden, und kein Teil davon darf ein symbolischer Link sein. Falls doch, halte an und frage den Nutzer. Erstelle .renders/ und out/ selbst als normale Ordner. Leere einen Ordner, indem du die darin erstellten Dateien einzeln löschst, niemals mit einem rekursiven Löschbefehl, der einem Link folgen könnte.
  • Namen in Pfaden und Befehlen. Jeder Name, den du für einen Dateipfad oder Befehl wählst, wird vor seiner ersten Verwendung auf sein Muster überprüft; ein Name, der nicht passt, wird durch einen anderen Namen ersetzt, niemals maskiert oder abgeschnitten:
    • Ordner- und Kurznamen (<kurzname>, <name>), Zeilen-IDs, Cue-IDs, Audiodateinamen (vor der Erweiterung) und Szenennamen (<szene>): ^[a-z0-9][a-z0-9-]{0,39}$;
    • Kompositions-IDs (<Comp>): ^[A-Za-z][A-Za-z0-9]{0,39}$;
    • Framenummern (<frame>, <a>, <b>, <frames>): ganze Zahlen passend zu ^\d{1,7}$;
    • Lautstärkewerte (<input_i> und die anderen aus Schritt 9): kopiert aus dem von ffmpeg ausgegebenen JSON, jedes passend zu ^-?\d{1,3}(\.\d{1,2})?$; alles andere (-inf, Text) bedeutet anhalten und den Mix korrigieren.
  • Erstelle niemals einen Befehl aus Freitext. Die Worte des Nutzers, die Namen der von ihm bereitgestellten Dateien und alles, was aus einer Datei gelesen wird, kommt in JSON- oder Quelldateien, niemals in eine Befehlszeile. Kopiere eine vom Nutzer bereitgestellte Datei in public/ unter einem von dir gewählten Namen, der dem ersten Muster entspricht, plus einer Kleinbuchstaben-Erweiterung passend zu ^\.[a-z0-9]{1,5}$. Führe jeden unten aufgeführten Befehl einzeln aus, genau wie geschrieben, nur mit seinen Platzhaltern gefüllt, und setze jeden Platzhalter, der einen Namen enthält, in einfache Anführungszeichen, wie es die Befehle tun.
  • Schreibe keine Skripte, die Programme starten: keine Node- oder Python-Helfer, keine scripts in package.json, nichts mit shell: true, exec oder einer Befehlskette. Führe neben den Befehlen in dieser Datei nur schreibgeschützte Prüfungen aus (eine Version, ein Hash, eine Dateiliste, freier Speicher) sowie einfache Ordner- und Dateioperationen innerhalb des Projekts.
  • Installiere nur aus dem gepinnten Kit (Abschnitt 1). Führe niemals npm install, npm update, eine globale Installation, npx von etwas, das nicht bereits in node_modules ist, oder sudo aus. Teile dem Nutzer vor jeder Installation oder jedem Download in einem Satz mit, um was es sich handelt, und warte auf seine Zustimmung.
  • Lade über das Kit und den geprüften Render-Browser (Abschnitt 1) hinaus nichts herunter: keine Schriftarten, Musik, Soundeffekte, Bilder oder Modelle aus dem Web. Schriftarten stammen aus dem Kit; Audio, Logos und Bilder kommen nur vom Nutzer.
  • Deterministisch: Jeder Frame ist eine reine Funktion der Framenummer. Kein Math.random, Date, Timer, useFrame oder THREE.Clock für Animationen, keine Live-Netzwerkdaten. Nur gesäuschtes Rauschen.
  • Keine echten Markenlogos (Adobe, Apple, Instagram usw.), es sei denn, der Nutzer gibt dir sein eigenes Logo für seine eigene Marke. Für Mock-Inhalte werden fiktive Marken verwendet.
  • Beurteile echte gerenderte Frames (PNG-Standbilder, aus dem MP4 dekodierte Frames), niemals Browser- oder Studio-Screenshots.

1. Das Kit

Diese Dateien befinden sich neben dieser SKILL.md. Überprüfe jeden Hash, bevor du eine Datei verwendest; bei einer Abweichung halte an und informiere den Nutzer.

DateiSHA-256
package.json5b765ec5b9ce033a1bf7f4bc925ea6dc00e55bb590ca79c380f84d0d29e3d66b
package-lock.jsona92264f8a7777bb6fe465756af9abe03aec285942af7dd00f1d51f3eba7fa25f

Fehlt eine, lade sie Byte für Byte von https://blog.alekseimedia.com/assets/kits/glass-skill/<datei> herunter und überprüfe den Hash.

Es pinnt Remotion 4.0.534 (remotion, @remotion/cli, three, fonts, motion-blur), three 0.186.1, @react-three/fiber 9.8.1, React 19.3.0, TypeScript 5.9.3 und deren Typen sowie die drei Schriftarten der Designbibel als Schriftdateien: @fontsource/inter-tight, @fontsource/instrument-serif und @fontsource/jetbrains-mono 5.3.0 (SIL Open Font License). Der Lock pinnt jedes Paket per Integritäts-Hash, sodass die Installation in Schritt 3 jede installierte Datei, einschließlich der Schriftarten, überprüft.

Neues Videoprojekt:

  1. Node.js 20 oder neuer (node --version). Fehlt es, bitte den Nutzer, Node.js LTS von nodejs.org mit dem normalen Installationsprogramm zu installieren, und warte dann.
  2. Erstelle einen Ordner für das Video im aktuellen Ordner, video-<kurzname>, mit einem Kurznamen, der dem Muster entspricht (Grundregeln); ist der Name bereits vergeben, wähle einen anderen.
  3. Kopiere package.json und package-lock.json aus diesem Skill-Ordner hinein, überprüfe beide Hashes und führe npm ci --ignore-scripts aus. Füge niemals ein Paket hinzu, aktualisiere oder entferne eines: Baue, was du brauchst, aus dem Kit.
  4. Der Render-Browser, Chrome Headless Shell 157.0.8080.0, die Version, mit der Remotion 4.0.534 getestet wurde. Allein gelassen lädt Remotion ihn beim ersten Still oder Render herunter, ohne ihn zu überprüfen – lass das niemals zu: Lade das ZIP für diesen Computer selbst herunter, überprüfe es und weise Remotion darauf hin, einmal pro Videoprojekt. Während des Renderns wird nichts anderes abgerufen: Die Schriftarten sind Dateien in den installierten Paketen.
    • Wähle die Zeile: macOS auf Apple Silicon (uname -m gibt arm64 aus), macOS auf Intel (x86_64), Windows auf x64 oder Linux auf x64 mit glibc 2.35 oder neuer (ldd --version). Jedes andere System wird nicht unterstützt: Sag es und halte an.
SystemZIPBytesSHA-256Browser-Datei
macOS arm64https://remotion.media/chromium-headless-shell-mac-arm64-157.0.8080.0.zip1792306633d9fd9a997915fa295ba6fbd66b2eaad2b9578101aa9dcde5e2eb737afa4f459chrome-headless-shell-mac-arm64/chrome-headless-shell
macOS x64https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/mac-x64/chrome-headless-shell-mac-x64.zip109113968b4a3f7e8aed11e7814fdaf49ddadab0ec3e0c7527f0ffeed5b208d7a856ebf6achrome-headless-shell-mac-x64/chrome-headless-shell
Windows x64https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/win64/chrome-headless-shell-win64.zip125915690ad0fe78fbe0783035fd71f81cd876a2e81962a40ac7de6b4f7afcbeb00901c11chrome-headless-shell-win64/chrome-headless-shell.exe
Linux x64https://remotion.media/chromium-headless-shell-linux-x64-157.0.8080.0.zip1036689967c4a2751b361aeb3cff3ed788fa18b7a0849371b983d478bb9205b6cc25a8c52chrome-headless-shell-linux64/chrome-headless-shell
  • Teile dem Nutzer mit, dass es sich um einen 100 bis 180 MB großen Download handelt, und warte auf seine Zustimmung. Erstelle einen neuen Ordner .browser-download/ im Videoordner (wenn er existiert oder ein Teil seines Pfads ein symbolischer Link ist, halte an und frage) und speichere das ZIP Byte für Byte darin: curl -fL --proto '=https' -o '.browser-download/chrome.zip' '<zip>' (unter Windows curl.exe, das mit Windows 10 und 11 ausgeliefert wird), wobei <zip> genau aus der Zeile kopiert wird.
  • Überprüfe seine Größe und SHA-256 gegen die Zeile. Bei einer Abweichung lösche chrome.zip und den Ordner, verwende nichts und halte an.
  • Nur wenn beide übereinstimmen, entpacke es von innerhalb von .browser-download/ mit dem systemeigenen Tool: unzip -q chrome.zip unter Linux (wenn unzip fehlt, bitte den Nutzer, es zu installieren), ditto -x -k chrome.zip . unter macOS und unter Windows das mit Windows mitgelieferte tar, C:\Windows\System32\tar.exe -xf chrome.zip (das tar von Git Bash kann keine ZIP-Dateien lesen). Lösche dann chrome.zip, überprüfe, ob die Browser-Datei der Zeile eine reguläre Datei ist und kein Teil ihres Pfads ein symbolischer Link ist, und benenne dann .browser-download/ in einem Schritt in .browser/ um (wenn .browser/ existiert, halte an und frage).
  • Verweise in remotion.config.ts darauf (Schritt 5): Config.setBrowserExecutable(".browser/<browser-datei>"). Damit gesetzt startet Remotion diese Datei und lädt nichts herunter. Wenn ein Befehl jemals ausgibt, dass er einen Browser herunterlädt, ist der Pfad falsch: Korrigiere ihn, bevor du etwas anderes renderst.
  1. ffmpeg und ffprobe: nur die mit Remotion gebündelten Kopien, npx --no-install remotion ffmpeg ... und npx --no-install remotion ffprobe .... Dieser Build hat keinen tile-, fps- oder drawtext-Filter; jeder unten aufgeführte Befehl verwendet nur, was er hat. Jeder ffmpeg-Befehl, der unten eine Datei schreibt, schreibt nur eigene .renders/- oder out/-Dateien des Projekts und beginnt mit -y, sodass ein erneutes Rendern sie ersetzt: Ohne dies verweigert ffmpeg eine vorhandene Datei und beendet sich trotzdem mit 0. ffmpeg erstellt keine Ordner, also erstelle zuerst den Ausgabeordner und überprüfe nach jedem Befehl, ob die Ausgabe existiert und neu ist.

2. Arbeitsablauf

Führe die Schritte der Reihe nach aus. Überspringe niemals einen: Jeder Schritt ist billiger als die Fehler, die er abfängt.

Schritt 1. Brief

Frage einmal, in einer kurzen Nachricht, nur das, was du nicht entscheiden kannst: Wofür das Video ist und wer es sieht; Länge (Standard 20 bis 30 s); Format (9:16 1080x1920 für Reels/TikTok/Shorts, 16:9 1920x1080 für Bildschirme oder beides); die Wörter auf dem Bildschirm (oder du schreibst sie); der Call-to-Action; Markenfarbe und Logodateien; Referenzen (Screenshots oder Links); Musik und Soundeffekte als Audiodateien, die der Nutzer besitzt oder für die er eine Lizenz hat, und das Tempo der Musik, falls bekannt. Entscheide den Rest. Schreibe docs/BRIEF.md.

Diese Skill erzeugt keinen Voiceover und keinen eigenen Ton: Der Film lebt von Wörtern auf dem Bildschirm, Bildern und den Audiodateien des Nutzers. Wenn der Nutzer nach einer Stimme fragt, sag es in einem Satz und fahre ohne fort.

Nur Englisch: Das Schriftarten-Modul lädt nur deren latin-Dateien. Jedes Zeichen auf dem Bildschirm muss druckbares Latein sein, U+0020 bis U+007E oder U+00A0 bis U+00FF außer U+00AD, oder eines von U+2013, U+2014 (Gedankenstriche), U+2018, U+2019, U+201C, U+201D (geschweifte Anführungszeichen), U+2026 (Auslassungspunkte) und U+20AC (Eurozeichen); keine Steuerzeichen, Zeichen mit Nullbreite oder Richtungszeichen. Überprüfe den Text der Zeitleiste davor vor dem ersten Still. Wenn der Nutzer eine andere Sprache oder Schrift möchte, sage, dass diese Skill nur Englisch kann, und halte an, anstatt mit einer Fallback-Schriftart zu rendern.

Wenn du die Wörter schreibst: Eine Idee pro Zeile, 3 bis 8 Wörter, ein Betonungswort pro Zeile.

Schritt 2. Master-Taktgeber

Eine Datei taktet den gesamten Film, src/data/timeline.json:

{ "fps": 60, "duration": 24.0, "bpm": 120,
  "lines": [ { "id": "hook", "text": "What if one file could do this?", "start": 0.3, "end": 2.4,
               "accent": 1.1 } ] }
  • Zeiten basierend auf Lesegeschwindigkeit (etwa 3 Wörter pro Sekunde, mindestens 1,2 s pro Zeile, 0,3 bis 0,5 s Pause zwischen den Zeilen) und raste die Zeilenanfänge auf den Takt ein (60 / bpm Sekunden). Ohne bekanntes Tempo verwende nur die Lesegeschwindigkeit und lasse bpm weg.
  • src/lib/time.ts stellt FPS, L(id) (die Zeile), F(n) (n Frames in Sekunden), toFrame(s) und useTime() bereit. Szenen verwenden niemals fest codierte Sekunden oder Frames: L("cta").start + F(6), L("hook").accent. Ein neues Tempo überschreibt timeline.json und der gesamte Film taktet sich neu.
  • Eine neue visuelle Darstellung bei jedem Zeilenanfang. Der visuelle Einschlag des Betonungsworts trifft auf seine Zeit, innerhalb von 2 Frames.
  • Sound-Cues leben in src/data/cues.json: { "id": "whoosh-1", "file": "whoosh.wav", "t": 3.42, "syncAt": 0.31, "gainDb": -6 }. t ist die Filmzeit des Sync-Punkts in Sekunden, berechnet aus der Zeitleiste; syncAt ist, wo dieser Sync-Punkt innerhalb der Datei sitzt, in Sekunden von ihrem Beginn (Schritt 8); file ist eine der Audiodateien in public/audio/. Szenen takten jede Bewegung, die einen Sound hat, vom gleichen t, sodass Bild und Ton nicht abdriften können.
  • Wandle einmal in Frames um und arbeite dann in ganzen Zahlen: Ein Fenster, das zwischen zwei Frames endet, hinterlässt eine Ein-Frame-Lücke, in der eine Ebene verschwindet.

Schritt 3. Storyboard: Ein kanonischer Einstellungsplan

docs/STORYBOARD.md ist der einzige Plan, aus dem jede Szene aufgebaut wird. Wenn du Alternativen ausprobierst, führe den Gewinner in diese Datei zusammen; Szenen folgen dieser Datei und sonst nichts. Sie enthält:

  • eine Akt-Tabelle: Zeilen, Frames, Ort, Held, Farbe, Musik;
  • die Objektkette: Wie jeder Held zum nächsten wird (eine Karte fällt in einen Bildschirm, das Licht des Bildschirms wird zum Blitz). Übergänge sind Objekte und Kamerafahrten, keine Überblendungen;
  • pro Zeile: Zeit und Frames, EIN Held, Eintritt jedes Elements, Timing und Austritt, die Kamerafahrt, der genaue Text auf dem Bildschirm, der Übergang, der Sound-Cue;
  • eine Kamera-Key-Liste pro Akt als einen kontinuierlichen Pfad;
  • Bewegungsunschärfe-Fenster (nur schnelle Bewegungen);
  • eine Pop-In-Prüfung: Jedes Element und seine Eintrittsart;
  • eine "Erledigt wenn"-Liste pro Zeile und die Überprüfungsframes (jeder Zeilenanfang, Betonung und Übergang).

Was es teuer aussehen lässt, also plane dafür ein: ein Ort, kein Hintergrund (Himmel, Licht, Tiefe, Parallaxenebenen); echte 3D-Objekte, beleuchtet von einem Licht; Bewegung ab Frame 0; eine gestaltete Schriftkombination; eine UI, die bedient wird (ein Cursor, Tippen, ein Druck), nicht nur gezeigt; ein Kontrastschlag (ein dunkler oder stiller Moment), der den Rhythmus bricht; ein wiederkehrendes Objekt oder eine Figur, die die Geschichte trägt; ein Schnitt auf den Takt; eine motivierte Ankunft für jedes Element; ein Sound unter jeder Bewegung, die die Effekte des Nutzers abdecken können.

Zeige dem Nutzer eine Kurzversion (eine Tabelle: Zeit, was auf dem Bildschirm ist, welcher Sound) und bitte um Zustimmung oder Änderungen. Dies ist der günstigste Moment für Änderungen.

Schritt 4. Designbibel

docs/BIBLE.md ist der Vertrag, gegen den jede Szene codiert:

  • Formate. 9:16 1

…[gekürzt für die Übersetzung]

Verwandte Skills