Communitygithub.com

smasikurr/RemotionMaster

Untertitel, die in einem 3D-Raum um einen sprechenden Kopf leben: Die Kamera fliegt zwischen Sprecher und Wörtern (Whip-in, Parallax-Truck, Push), Untertitelgruppen sitzen in verschiedenen Tiefen, sodass Kamerabewegungen sie auseinanderziehen, Heldenwörter verstecken sich HINTER dem Sprecher durch eine Alpha-Maske, ein Wortring umschließt den Sprecher und dreht sich vor ihm, Fokuswechsel zwischen Tiefen und Text bei 15 fps mit Geisterbewegungsunschärfe. Funktioniert in jedem Schriftstil (editoriale Serife, fette Grotesk) oder handgezeichnet (p5.brush Write-On). Auslöser: „3D-Text“, „3D-Kamera-Untertitel“, „Text um / hinter dem Sprecher“, „Kamerafahrten durch den Text“, „Tiefenuntertitel auf meinem Avatar-Video“. Deckt Vorbereitung (Portion, gepolsterte Platte, Maske, Wortuhr, Schriftmetriken), die Aufnahmegrammatik, Tiefenregeln, Qualitätskontrolle und Grenzen ab.

Was ist RemotionMaster?

RemotionMaster ist ein deterministischer, frame-basierter Maler für HyperFrames, der den After-Effects-3D-Kamera-Effekt (Tiefenschärfe, Text auf Pfad, Posterize Time 15 fps, Bewegungsunschärfe) nachbildet. Die Fähigkeit eignet sich für statische Kameraaufnahmen von sprechenden Köpfen (Avatare oder echte Personen) im Querformat, mittlere oder weitere Einstellungen, typischerweise 5–20 Sekunden. Sie erstellt Untertitel, die im 3D-Raum um den Sprecher angeordnet sind, mit verschiedenen Tiefenebenen, die durch Kamerafahrten (Whip-ins, Parallax-Trucks, Pushs) dynamisch getrennt werden. Zu den Kernfunktionen gehören Heldenwörter, die sich hinter dem Sprecher verstecken, ein sich drehender Wortring vor dem Sprecher und Fokuswechsel zwischen Tiefen. Das Tool arbeitet plattformunabhängig über die HyperFrames-CLI (Node 22+), benötigt ffmpeg und Python (mit Fonttools, Brotli, NumPy, Pillow) und führt die Personensegmentierung lokal durch (Herunterladen eines ~170 MB großen Modells). Die Schrifteinbettung erfolgt benutzerseitig, und die handgezeichnete Option erfordert die separate Installation der p5-paint-animation-Fähigkeit. Es sind keine Anmeldedaten, keine kostenpflichtigen Aufrufe und kein Hochladen erforderlich – alle Dateien verbleiben lokal im Projektverzeichnis.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/smasikurr/RemotionMaster/tree/HEAD/.agents/skills/camera-3d-captions

In Ihrer bevorzugten KI fragen

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

Dokumentation

3D-Kamera-Untertitel

Der After-Effects-Effekt (3D-Kamera, Tiefenschärfe, Text auf einem Pfad, Posterize Time 15, Bewegungsunschärfe), neu aufgebaut als deterministischer Frame-für-Frame-Maler für HyperFrames. Eine Uhr malt Platte, Maske und jedes Glyphen. Nichts ist eine CSS-Animation.

Wann verwenden / wann nicht

  • Verwenden für eine statische Kameraeinstellung eines sprechenden Kopfes (Avatar oder echt), Querformat, mittlere Einstellung oder weiter, 5–20 s pro Stück. Die Wörter müssen in der Tiefe um den Sprecher herum performen.
  • Nicht verwenden für einfache Untertitel, eine bewegte oder Handkamera (die Maske und die Platten-Transformation gehen von einer fixierten Einstellung aus), extreme Nahaufnahmen (kein Platz hinter oder um den Kopf) oder ein Motiv, das ein Person-Masking-Modell nicht trennen kann.

Anforderungen und Nebenwirkungen (vollständige Liste)

  • Werkzeuge:
    • Node 22+ und die HyperFrames-CLI, festgepinnt auf die getestete Version, npx [email protected] (Download von registry.npmjs.org). Verwenden Sie genau diese Version für jeden folgenden Befehl.
    • ffmpeg im PATH.
    • Python 3 mit fonttools, brotli, numpy, pillow.
  • Maske: npx [email protected] remove-background läuft lokal. Beim ersten Start lädt es das Personensegmentierungsmodell herunter (~170 MB) nach ~/.cache/hyperframes/.
  • Renderzeit: Kompositionen laden GSAP 3.14.2 von cdn.jsdelivr.net zur Vorschau- und Renderzeit.
  • Wortuhr: Jeder wortgenaue Transkribierer, den der Benutzer bereits lokal ausführt. Onset-Genauigkeit ist wichtig; einfaches Whisper startet zu spät.
  • Schriftarten: Vom Benutzer bereitgestellte Dateien. Bestätigen Sie, dass die Lizenz die Einbettung erlaubt.
  • Handgezeichneter Stil (optional): Benötigt die installierte und eingerichtete p5-paint-animation-Fähigkeit (deren Setup lädt gepinntes Puppeteer, Chrome for Testing, p5 und p5.brush herunter). build-sprites.py führt es kopflos aus; Frames werden in das out/-Verzeichnis dieser Fähigkeit geschrieben und danach entfernt.
  • Nichts anderes: Keine Anmeldedaten, keine kostenpflichtigen Aufrufe, keine Uploads. Dateien werden nur in das Projekt geschrieben (assets/, renders/).

Vorbereitung (einmal pro Aufnahme)

  1. Portion und Platte. bash scripts/prep-take.sh <take.mp4> <start_s> <dur_s> <project>/assets erzeugt:
    • portion.mp4: die Audioquelle.
    • plate-tall.mp4: spiegeln-gepolstert, 240 px pro Seite, 480 px oben, 240 px unten, damit Whips, Trucks und Pull-backs niemals einen Rand zeigen.
    • person.webm: die Alphamaske, gleiche Frames.
    • Das Skript prüft dann die Platte und Masse gegen die Portion (Größe, Bildrate, Frame-Anzahl) und bricht bei Abweichung ab.
  2. Wortuhr. Wortzeitmarken für die Portion, in Sekunden ab ihrem Start.
  3. Schriftarten. Wählen Sie 2–3 Rollen (Untertitel / Held / Ring), dann python3 scripts/font-metrics.py assets/metrics.js key=font.woff2[@wght=…,opsz=…] ….
    • Eine variable Schriftart muss ihre Achsen hier übergeben UND in CSS fixieren (font-variation-settings, font-optical-sizing: none). Andernfalls folgt die Browser-Optical Size der Größe und Wörter überlappen.
  4. Silhouette. Lesen Sie die Kopfbox und Schulterlinie aus der person.webm-Alpha-Maske ab, bevor Sie etwas platzieren.

Build

  • Kopieren Sie assets/kit/{cam3d.js,tables.js,finish.js} und metrics.js in das Verzeichnis assets/ des Projekts.
  • references/worked-film.html ist der vollständige Referenzfilm. Er hat zwei Einstellungen, einen Body-Wipe, beide Ringtypen, einen Fly-Through, ein Finale und die Grading; seine Medien sind nicht enthalten.
  • references/recipes.md enthält die tiefengestaffelten Gruppen, den gewickelten Ring, die Treppe und handgezeichnete Wörter.
  • C3.init(metrics, {W, H}):
    • Die Linse behält das vertikale Sichtfeld des Tutorials (F = 1326.1·H/1080), sodass tables.js bei jeder Breite unskaliert angewendet wird.
    • Bei einem Frame breiter als 1440, addieren Sie (W − 1440) / 2 zu wipe.x.

Aufnahmegrammatik

Wählen Sie 4–6 Beats. Teilen Sie jede gesprochene Klausel in ihre eigene Gruppe.

BeatBuildRegel
Whip-in Punch-incamA Tabelle (19 f von 502 px niedrig) dann ein linearer CreepPlattenskalierung S0 1.1–1.3; der Frame landet nie
Tiefengruppen2–3 Untertitelgruppen pro Klausel bei D 1250 / 1500 / 2200nah = größer mit größerem Schatten; der Creep und Truck zeigen die Parallaxe
Held hinterHeld-Wort in der Hinter-Ebene auf Plattentiefe, masthead-artig über den Kopfder Kopf versteckt die mittleren Buchstaben; ≥ 60 % bleiben lesbar; der Oberlängenbereich ist innerhalb des Frames
Parallax-Truckswing-Segment, tx 420das alte Layout verblasst über 3 Schritte; das nächste Layout kommt durch Parallaxe an
Body-Wipedie eigene Maske des Sprechers, brightness(0) blur(), Vorderkante von wipe.xEinstellung A clip links vom Band, Einstellung B rechts; Pull-out auf beiden Seiten
Gewickelter Ringhorizontaler Kreis VOR dem Sprecher (Zentrum Z 2000), 11–16° von oben, sich drehendWörter treten klein an der Seite ein, wenn gesprochen, schwingen um die Front, setzen sich; unterer Bogen klappt um, um aufrecht lesbar zu sein
Fly-ThroughPhrasen bei D 1500 / 2000 / 2500, Kamera schwingt zwischen ihnender Fokus folgt der Phrase
Treppen-FinalePush-Segment; Untertitelwörter jeweils tiefer und kleiner diagonalder Push treibt die nahen Wörter auseinander

Regeln

  • Bewegung:
    • Text wird auf 15 fps posterisiert (seine eigene Animation und die Kamera, die er sieht). Platte und Maske bewegen sich jedes Frame.
    • Bewegungsunschärfe ist 7 Geister über einen halben 15-fps-Schritt. Verwenden Sie shutter: 0.5 bei sich drehenden Ringen.
    • Untertitel gehen der Stimme um 0.2 s voraus, gesnappt auf das 15-fps-Raster: fr(t) = 2·round((t − 0.2)·15).
    • Eintritte steigen um ENTRY: Untertitel 30 px, Helden 110–260 px. Ringwörter erleichtern ihre letzten 30–44 px entlang des Pfades. Verwenden Sie den Überschwung von RING_ENTRY nur, wenn noch kein Nachbar platziert ist.
  • Tiefe:
    • Jede Gruppe bekommt ihr eigenes D. Platte 3000, Untertitel 1250–2400, gewickelter Ring ≈ 1100–2700.
    • Tiefenschatten [6, 16, 0.5, 1500] skaliert als 1500/(D − cz).
    • DOF σ = 6.7·|D − focus|/D px bei 1080 hoch. Flache Untertitel sind auf 1.2 px begrenzt; Ringglyphen erhalten die volle Unschärfe.
  • Größen: size / rise sind on-screen px bei der Zielkamera (tland). Sprites werden in ihrer on-screen-Größe gerendert.
  • Abstände:
    • Ringtext wird immer durch ringLine (on-screen-Vorrücken; Typ: track 1.10, Lücke 26–30; handgezeichnet: track 1.0, Lücke 28) geschickt.
    • Ein sich drehender Ring wird bei jeder Pose neu gelegt.
  • Okklusion:
    • Ringe zeichnen vor dem Sprecher.
    • Teilen Sie ein Wort in Hinter/Vorne-Instanzen (side, zSplit) nur, wenn es ABSICHTLICH hinter dem Kopf vorbeilaufen soll.
  • Lesbarkeit:
    • Untertitel gehen über die dunkle Seite des Frames.
    • Text, der Haut oder helle Kleidung kreuzt, erhält einen dunklen Halo.
    • Keine abschließenden Punkte auf dem Bildschirm.
  • Grading (optional): finish.js liefert Kurven, Sättigung 1.12 für Haut und Korn, das pro Frame neu gerollt wird. Setzen Sie die opake Szene (Platte + Hintergrundtext + Maske) in einen gefilterten Wrapper. Geben Sie dem Vordertext das gleiche Grading mit darübergelegtem Korn, damit ein in Hintergrund/Vorderteil geteiltes Wort eine Farbe behält (siehe references/worked-film.html).

Stile

  • Editorial: eine kondensierte Display-Serife, kursiv für Helden; eine Text-Serife für Untertitel; Cremeweiß plus ein Akzent.
  • Fett: schwere Grotesk-Helden, leichte Untertitel, ein gesättigter Akzent (der Arbeitsfilm).
  • Handgezeichnet: p5.brush Write-On-Sprites von scripts/hand/build-sprites.py:
    • Jedes Wort schreibt sich selbst ab seinem Onset.
    • Ringe platzieren Wörter als Ganzes, rotiert zur Tangente und skaliert durch Tiefe, auf einem größeren, flacheren Ring.
    • Rezept in references/recipes.md.

Überprüfen

  1. npx [email protected] check . --no-contrast. Die Geisterebenen lösen die WCAG-Kontrastprüfung aus; die Whip- und Wipe-Nähte überlappen absichtlich.
  2. Fügen Sie in der Vorschauseite scripts/frame-bounds.js ein und führen Sie __frameBounds(0, dur) aus.
    • Es muss [] zurückgeben: keine Gruppe außerhalb des Frames für 5+ Schritte, während sichtbar.
  3. Fügen Sie scripts/glyph-gaps.js ein und führen Sie __glyphGaps(t) im Ruhezustand aus.
    • Keine Kreuzwortberührungen.
    • Flache Wörter messen als eine Box (Unterlängen führen zu falsch-positiven Ergebnissen). Ein kursives f’s Überhang liest negativ. Wörter auf gegenüberliegenden Seiten des Wipe-Bands zeigen beide.
  4. Wortabstände: Der gerenderte Abstand zwischen Wörtern ≈ ein Leerraum-Vorrücken.
  5. Machen Sie einen Snapshot von jedem Beat, rendern Sie mit npx [email protected] render . --crf 12 und überprüfen Sie die Frames in voller Auflösung pro Beat.

Grenzen

  • Maskenränder flackern bei feinen Haaren. Die gespiegelte Polsterung zeigt kurz während eines Whips.
  • Ein Sprecher, der das Bild füllt, lässt wenig Platz im Hintergrund: gehen Sie auf Masthead-Höhe oder verstecken Sie sich hinter einer Schulter.
  • snapshot --at teilt sich eine Seite, sodass Korn nicht zwischen Aufnahmen neu rollt. Beurteilen Sie Korn anhand eines Renderings.
  • Das Rendern mit Grading und vielen Geisterebenen kostet etwa das 2-fache eines einfachen Renderings.

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

smasikurr/RemotionMaster

Direct, build and render premium cinematic motion design from code — launch films, product and feature videos, looping feature animations for landing pages and social, logo stings and reveals, UI walkthroughs, app demos, kinetic type, teasers, trailers, intros and promo clips. Use this whenever the user wants any video, animation, motion graphic or animated demo made with Remotion, HyperFrames, HTML/GSAP or React, or asks to storyboard, time, score, render, polish or critique one — even if they only say "make a video about X", "animate this feature" or "we need a launch clip". It supplies concept and copy discipline, type and colour taste that defers to a supplied brand, a beat-locked timeline that drives both picture and a code-made soundtrack, choreography and transition craft, real product UI in motion, film-grade finishing (true motion blur, no banding, BT.709, sync-checked mux) and a measured self-critique loop on contact sheets and renders.

smasikurr/RemotionMaster

Product Launch: turn a product (a URL, an app the user can record, screenshots or a brief) into the kind of 20–60 s launch video SaaS teams post on X: kinetic headlines and the real product UI in floating windows, cut to a music grid, ending on the name and a call to action. Real UI only, never mocked. Works with whatever video tool the project uses (Hyperframes, Remotion, Motion Canvas, an editor); Hyperframes when starting fresh. A free local script makes a music bed authored to the cut. Every version is reviewed in FrameJam. Use for a product launch, feature announcement, "introducing X" video, promo for a website or app, or a landing-page hero video. Not for a founder talking to camera (founder-launch) or a short mystery teaser (launch-teaser).

smasikurr/RemotionMaster

Make an original, unconventional animated MP4 video with its own synthesised soundtrack: every frame drawn in code, beat-synced. Use when asked for a creative, unique or "crazy" video on any topic.

Verwandte Skills