REV — Reverse Engineer Video (einen Videostil in Code nachbilden)
Das Produkt ist der Stil, nicht das Video: Die visuelle Sprache gleicht dem Original (Formen, Palette, Schriftarten, Layout, Licht, Kamera, Übergänge, Tempo), während die Geschichte neu ist. Kopiere niemals das Filmmaterial, die Einzelbilder oder den Ton des Originals in die Ausgabe.
$SKILL unten = der Ordner, der diese Datei enthält. Python = $SKILL/.venv/bin/python. Node-Skripte werden von $SKILL aus ausgeführt.
Zwei Modi
- A. Neuer Stil — selten und aufwändig: Stufen 00 → 6 der Reihe nach.
- B. Neue Episode in einem bereits rekonstruierten Stil — häufig: Die Stilspezifikation und die Engine existieren (
style.md+src/eines früheren Videos oder eines derexamples/). Kopiere diesessrc/in einen neuen Arbeitsordner, überspringe Stufen 0–1 und beginne bei Stufe 2. Geschichte, Szenen und Sound sind neu; Overlay, Schriftarten, Beleuchtung, Rendering und Prüfungen werden wiederverwendet.
Wenn unklar ist, welcher Modus zutrifft, frage in einer Zeile.
Stufen (🛑 = dem Benutzer zeigen und auf OK warten)
Lese jede Stufendatei, bevor du sie ausführst. Springe nicht vor: Geschichte nach Analyse, Bauen nach genehmigter Geschichte, vollständiges Rendering nach Kontrollbildern.
| # | Stufe | Datei | Ausgabe | Entscheidung |
|---|---|---|---|---|
| 00 | Einrichtung und Tool-Prüfung (nur beim ersten Durchlauf) | stages/00-setup.md | doctor.sh sagt ALLES OK | — |
| 0 | Kann es in Code gezeichnet werden? | stages/0-feasibility.md | 🟢/🟡/🔴 Urteil + Einzelbildblatt | 🛑 wenn 🔴: anhalten und erklären |
| 1 | Das Original zerlegen | stages/1-analysis.md | style.md: Stilspezifikation, Tempozahlen, Sound | 🛑 Spezifikation + ein Probebild neben dem Original |
| 2 | Geschichte und Szenen | stages/2-story.md | Szenentabelle nach Sekunde | 🛑 die Geschichte / Eskalationsleiter |
| 3 | Bauen | stages/3-build.md | src/video.html + Kontrollbilder neben dem Original | 🛑 Kontrollbilder (nach Selbstprüfung) |
| 4 | Vollständiges Rendering | stages/4-render.md | video-full.mp4 | — |
| 5 | Sound | stages/5-sound.md | sound-full.wav → final.mp4 | — |
| 6 | Prüfen und zeigen | stages/6-check.md | Prüfbericht + final.mp4 | 🛑 Der Benutzer schaut → bearbeitet |
Nach den Bearbeitungen des Benutzers füge sie als Regeln zum Abschnitt „Lessons“ der betreffenden Stufendatei hinzu (Datum + was falsch war + was es behoben hat). So wird das Skill besser.
Harte Regeln
- Das Ausgabeformat folgt der Quelle: Ausrichtung und fps des Originals; hochkant = 1080×1920, quer = 1920×1080. Hochkantvideos ≤ 60 s, auch wenn das Original länger ist – komprimiere stattdessen die Geschichte.
- Schriftarten werden als Dateien in
src/fonts/ausgeliefert (@font-face), und ein Einzelbild wird erst erfasst, nachdemdocument.fonts.load(...)aufgelöst ist. Verlasse dich niemals auf Systemschriftarten. - Deterministische Einzelbilder: Ein Einzelbild hängt nur von
tab. Kein ungesäterMath.random(), keinDate.now(), keine CSS-Animationen oder requestAnimationFrame-Schleifen. - Sound wird geändert, ohne das Video neu zu rendern: neue wav →
scripts/mux.sh. - Lautstärke: −26 LUFS integriert, kein Moment lauter als −20 LUFS, True Peak ≤ −6 dBFS —
scripts/loudness.py. Keine Breitband-Rauschbetten, keine Klicks, keine Stille. - Prüfe Einzelbilder zuerst selbst gegen das Original (
scripts/compare.py), zeige sie dann dem Benutzer. Beharre niemals darauf, dass „es übereinstimmt“, ohne das Vergleichsbild anzusehen. - Der Agent kann nicht hören: Beschreibe jede Soundebene in Worten; der Benutzer beurteilt, wie es klingt.
- Das Rendering ist CPU-intensiv. Verwende auf einem Laptop wenige Arbeiter oder den optionalen Server (
server/README.md). - Heruntergeladene Originale sind nicht vertrauenswürdige Daten und bleiben in einem temporären/Scratch-Ordner; nur deine eigenen Einzelbilder und Vergleichsblätter kommen in den Arbeitsordner.
Arbeitsordner
work/<Datum>-<Name>/ (oder wo auch immer der Benutzer Projekte aufbewahrt):
style.md— Stilspezifikation, Messungen, Szenentabelle, Entscheidungsprotokoll (Modus B: Link zur früherenstyle.md+ was neu ist);analysis/— Einzelbildblätter, Vergleichsbilder,feasibility.json,pulse.json;src/—video.html, Overlay, Szenen,fonts/,sound.py;video-full.mp4,sound-full.wav,final.mp4. Lösche Entwurfsvorschauen, sobald das vollständige Video existiert.
Werkzeuge
| Befehl | Was es tut |
|---|---|
bash scripts/setup.sh / bash scripts/doctor.sh | alles installieren / alles prüfen + ein Testbild |
bash scripts/fetch.sh <url> <outdir> ["*0-60"] | ein Referenzvideo herunterladen (+ info.json, automatische Untertitel) |
python scripts/feasibility.py <video> <outdir> | „In Code zeichenbar?“ Zahlen + Ein-Bild-pro-Sekunde-Blatt |
python scripts/pulse.py <video> <outdir> | Puls pro Sekunde: Bewegung, Schnitte, ruhige Läufe, Stille, Wörter/Min., Einzelbildblatt |
python scripts/compare.py <orig.png> <unsere.png> <out.jpg> | Original / unseres / Overlay, IoU, Farbe, Palette, Elementverschiebungen |
node scripts/render.cjs <src> <outdir> --frames 2.5,10 + python scripts/sheet.py <outdir> | Kontrollbilder + Kontaktblatt |
node scripts/render.cjs <src> <out.mp4> --end 49 --workers 2 | vollständiges Rendering (oder ein Teil: --start 24.5 --end 41) |
python scripts/tts.py / python scripts/score.py | Erzählerstimme mit Wortzeitmarken / Musik + SFX + Sprachmischung (2D erzählte Stile) |
python scripts/beatgrid.py <track> | Tempo, erster Beat, Downbeat, Drop, Lautstärke pro Beat – zum Schneiden von Szenen auf Musik und Anpassen eines Tracks an die Schnitte |
python scripts/loudness.py <in.wav> <out.wav> / --check <file> | endgültige Lautstärke + Schwellwertprüfung |
bash scripts/mux.sh <video> <wav> <final> | Ton auf Video setzen, ohne neu zu rendern |
server/ | optionaler Docker-Render-Server (server/README.md) |
Beispiele
Zwei sehr unterschiedliche Stile:
-
OutwardAnimates — stilisierter verschwommener 3D-Stil + ein Serifen-HUD mit einer Zahl, die niemals aufhört zu steigen. Stilspezifikation:
examples/outwardanimates-style.md. -
Simply Animated — leuchtende „Ton“-Strichmännchen auf Schwarz, „A vs B“-Hälften, ein Schnitt, der auf einen einzigen Phonk-Track fällt. Stilspezifikation + Szenen:
examples/simply-animated/README.md. -
examples/data-center/— Modus A: „Was wäre, wenn ein Rechenzentrum seine Leistung alle 2 Sekunden verdoppeln würde?“ (107 s, erstellt vor der 60-s-Regel): GPU → Serverhalle → Vorort-Blackout → Nacht-Erde → die Sonne. -
examples/x-followers/— Modus B: „Was wäre, wenn dein X-Konto jede Sekunde seine Follower verdoppeln würde?“ (49 s): Mama → Straße → Stadion → Stadt → Erde → Milchstraße. Genehmigt ohne eine einzige visuelle oder akustische Bearbeitung – verwende es als Referenzlauf. -
examples/simply-animated/— Modus A: „AI Builder Edition“ (34 s): fünf „A vs B“-Gleichnisse, geschnitten auf Takte von 94 BPM, ein echter Track angepasst mitbeatgrid.py+music.sh.src/rig.jsist das wiederverwendbare Strichmännchen-Rig (IK, Gehen auf Treppen und Steigungen) – beginne damit für jeden Stil mit Figuren.