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 seinemdocs/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/undout/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.
- Ordner- und Kurznamen (
- 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
scriptsin package.json, nichts mitshell: true,execoder 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,npxvon etwas, das nicht bereits innode_modulesist, odersudoaus. 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,useFrameoderTHREE.Clockfü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.
| Datei | SHA-256 |
|---|---|
| package.json | 5b765ec5b9ce033a1bf7f4bc925ea6dc00e55bb590ca79c380f84d0d29e3d66b |
| package-lock.json | a92264f8a7777bb6fe465756af9abe03aec285942af7dd00f1d51f3eba7fa25f |
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:
- 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. - 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. - Kopiere
package.jsonundpackage-lock.jsonaus diesem Skill-Ordner hinein, überprüfe beide Hashes und führenpm ci --ignore-scriptsaus. Füge niemals ein Paket hinzu, aktualisiere oder entferne eines: Baue, was du brauchst, aus dem Kit. - 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 -mgibtarm64aus), 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.
- Wähle die Zeile: macOS auf Apple Silicon (
| System | ZIP | Bytes | SHA-256 | Browser-Datei |
|---|---|---|---|---|
| macOS arm64 | https://remotion.media/chromium-headless-shell-mac-arm64-157.0.8080.0.zip | 179230663 | 3d9fd9a997915fa295ba6fbd66b2eaad2b9578101aa9dcde5e2eb737afa4f459 | chrome-headless-shell-mac-arm64/chrome-headless-shell |
| macOS x64 | https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/mac-x64/chrome-headless-shell-mac-x64.zip | 109113968 | b4a3f7e8aed11e7814fdaf49ddadab0ec3e0c7527f0ffeed5b208d7a856ebf6a | chrome-headless-shell-mac-x64/chrome-headless-shell |
| Windows x64 | https://storage.googleapis.com/chrome-for-testing-public/157.0.8080.0/win64/chrome-headless-shell-win64.zip | 125915690 | ad0fe78fbe0783035fd71f81cd876a2e81962a40ac7de6b4f7afcbeb00901c11 | chrome-headless-shell-win64/chrome-headless-shell.exe |
| Linux x64 | https://remotion.media/chromium-headless-shell-linux-x64-157.0.8080.0.zip | 103668996 | 7c4a2751b361aeb3cff3ed788fa18b7a0849371b983d478bb9205b6cc25a8c52 | chrome-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 Windowscurl.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.zipund 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.zipunter Linux (wennunzipfehlt, 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(dastarvon Git Bash kann keine ZIP-Dateien lesen). Lösche dannchrome.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.tsdarauf (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.
- ffmpeg und ffprobe: nur die mit Remotion gebündelten Kopien,
npx --no-install remotion ffmpeg ...undnpx --no-install remotion ffprobe .... Dieser Build hat keinentile-,fps- oderdrawtext-Filter; jeder unten aufgeführte Befehl verwendet nur, was er hat. Jeder ffmpeg-Befehl, der unten eine Datei schreibt, schreibt nur eigene.renders/- oderout/-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
bpmweg. src/lib/time.tsstelltFPS,L(id)(die Zeile),F(n)(n Frames in Sekunden),toFrame(s)unduseTime()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 }.tist die Filmzeit des Sync-Punkts in Sekunden, berechnet aus der Zeitleiste;syncAtist, wo dieser Sync-Punkt innerhalb der Datei sitzt, in Sekunden von ihrem Beginn (Schritt 8);fileist eine der Audiodateien inpublic/audio/. Szenen takten jede Bewegung, die einen Sound hat, vom gleichent, 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]