Communitygithub.com

Rudywizz-motion

Erstellen Sie kinematografische Bewegtgrafiken aus Code – kinetische Typografie, 3D-Titel, Karten-Routenanimationen (Welt, Globus, türkische Provinzen), Social-Media-Vorlagen (Lower Thirds, Untertitel, Chat-Stories, Countdowns, Balkendiagramm-Rennen, Follow-CTA), Sepia-Historien-Dokumentationen, die Bilder als Gravuren zeichnen, und komplette Reels aus eigenen Clips mit Kamerafahrten, Shader-Übergängen, Farbkorrekturen und Filmeffekten.

Was ist Rudywizz-motion?

Rudywizz-motion ist ein deterministischer Renderer, der jede Szene pixelgenau berechnet (headless Chromium + WebGL2) und die Ergebnisse per ffmpeg zu einem Video zusammenfügt. Das Tool ist in einem eigenständigen Ordner organisiert und eignet sich für die Erstellung anspruchsvoller Bewegtgrafiken direkt aus Text, Bildern oder Videoclips. Es unterstützt eine breite Palette an Stilen, von kinetischer Typografie und 3D-Titeln über Kartenanimationen (Globus, flache Karte, türkische Provinzen) bis hin zu Social-Media-Vorlagen wie unteren Bilddritteln, Chat-Stories, Countdowns und Balkendiagramm-Rennen. Der Workflow ist klar strukturiert: Zuerst wird die Szene konfiguriert (Stil, Text, Format), dann ein günstiger Stillbild-Vorschau gerendert, um Fehler auszuschließen, und schließlich das finale Video ausgegeben. Rudywizz-motion ist für Claude Code, Cursor und andere KI-Agenten optimiert, die auf Node.js und ffmpeg zugreifen können. Es wird über die Kommandozeile gesteuert, verwendet JSON-Kompositionen für komplexe Szenen und bietet umfangreiche Optionen für Kameras, Übergänge, Looks (z. B. Gravur, Skizze) und Farbkorrekturen.

Funktioniert mit✓Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/Rudywizz/rudywizz-motion/tree/HEAD/skills/rudywizz-motion

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht Rudywizz-motion?

Ein deterministischer Renderer: Jeder Frame wird berechnet (headless Chromium + WebGL2) und an ffmpeg weitergeleitet, so dass die gleiche Eingabe immer das gleiche Video ergibt. Dieser Ordner ist in sich geschlossen:

engine/      cli.mjs (Einstieg), host.js, timeline.js, camera.js, gl/ (Shader), data/ (Karten), fonts/
styles/      ein Ordner pro Stil (style.js)
templates/   vorgefertigte Kompositionen (JSON)
assets/demo/ Original-Demo-Illustrationen (CC0)

1. Einmalige Einrichtung (vor dem ersten Rendern prüfen)

RM="${CLAUDE_SKILL_DIR}"                       # Der Ordner, der diese SKILL.md enthält
[ -f "$RM/engine/cli.mjs" ] || RM=$(ls -dt "${CLAUDE_PLUGIN_ROOT}/skills/rudywizz-motion" ~/.claude/plugins/cache/*/rudywizz-motion/*/skills/rudywizz-motion ~/.claude/skills/rudywizz-motion .claude/skills/rudywizz-motion 2>/dev/null | head -1)
TMP=$(node -p "require('os').tmpdir()")       # Ein temporäres Verzeichnis, das Bash und Node gemeinsam verwenden (auch unter Windows)
cd "$RM" && npm install --no-audit --no-fund   # Installiert playwright (die einzige Abhängigkeit)
node engine/cli.mjs doctor                    # Node ✓ ffmpeg ✓ browser ✓ WebGL2 ✓ — jedes ✗ gibt die Lösung aus

Führen Sie Renderings aus dem Benutzerordner mit node "$RM/engine/cli.mjs" ... aus, damit relative Pfade dort aufgelöst werden. Wenn die Browser-Prüfung fehlschlägt: npx playwright install chromium (oder setzen Sie RM_CHROME=/pfad/zu/chrome). Wenn ffmpeg fehlt, sagen Sie dem Benutzer, wie er es installieren kann (macOS brew install ffmpeg, Windows winget install ffmpeg, Linux apt install ffmpeg).

2. Wählen Sie die Art des Auftrags

Benutzer möchteTun Sie dies
Ein animierter Text/Titelrender <stil> --text "…"
Eine Karten-/Routenanimationrender map-route --set 'route=["İstanbul","Konya"]'
Sein Bild als Gravur gezeichnetrender image --image foto.jpg --look engrave --grade sepia --film 0.6
Kamerafahrten auf seinem Cliprender clip --clip in.mp4 --camera handheld --set speed='"ramp-mid"'
Eine transparente Überlagerung für seinen Editor (unteres Drittel, Untertitel, CTA)render lower-third --text "Name / Rolle" --alpha --out name.mov
Ein Multi-Szenen-Reel / Dokument / Teaser / Introinit reel.json oder starten Sie von einer Vorlage, dann bearbeiten (Abschnitt 4)

Vorlagen: node engine/cli.mjs templates listet alle mit einer einzeiligen Beschreibung auf. Kopieren Sie eine neben die Assets des Benutzers (cp "$RM/templates/<name>.json" .), bearbeiten Sie Texte/Pfade, rendern Sie sie.

3. Arbeitsablauf (immer)

  1. Stil(e), Text, Format (Standard 9:16 1080×1920), Kamera, Farbkorrektur festlegen.
  2. Zuerst Standbilder prüfen – günstig und erkennt Layout-Probleme: node "$RM/engine/cli.mjs" still <stil|comp.json> --at 2.5 --size 540 --out "$TMP/check.png" → PNG öffnen und ansehen. 2–3 Zeitpunkte prüfen (Anfang, Mitte, Ende jeder Szene). Lesen Sie alle warning/error-Zeilen: sie nennen Tippfehler und schlagen den richtigen Schlüssel vor.
  3. Rendern: node engine/cli.mjs render … --out out.mp4
  4. Überprüfen: ffprobe -v error -show_entries format=duration -of csv=p=0 out.mp4 und ein oder zwei Frames extrahieren.
  5. Datei mit einer Zeile Kontext übergeben.

Faustregeln

  • Kurzer Text gewinnt: 1–6 Wörter pro Zeile, max. ~4 Zeilen. Verwenden Sie " / " oder \n für Zeilenumbrüche.
  • Die türkische Groß-/Kleinschreibung erfolgt automatisch, wenn der Text ğ/ş/ı/İ enthält; andernfalls übergeben Sie --lang tr für türkischen Text (i → İ).
  • Renderings sind CPU-intensiv: ~0,2–0,5 s pro 1080p-Frame. Vorschau mit --size 540 und Endrender mit 1080.
  • Laden Sie niemals Bilder/Clips aus dem Web ohne Zustimmung des Benutzers herunter; verwenden Sie seine Dateien.
  • Transparente Überlagerungen: --alpha --out datei.mov (ProRes 4444) oder .webm.
  • Musik: --audio song.mp3 und --bpm N, damit beat-cut, lyric-video und die beat-punch-Kamera den Takt treffen.

4. Kompositions-JSON

{
  "format": "9:16",
  "lang": "tr",
  "bpm": 96,
  "audio": "song.mp3",
  "look": { "grade": "teal-orange", "bloom": 0.3, "grain": 0.05, "leak": 0.2, "aberration": 0.3,
            "vignette": 0.3, "film": 0, "weave": 0, "distortion": 0 },
  "motionBlur": 1,
  "scenes": [
    { "style": "map-route", "route": ["İstanbul", "Kapadokya"], "duration": 6, "camera": "drift",
      "transition": { "type": "whip", "duration": 0.45, "dir": "left" } },
    { "clip": "strand.mp4", "in": 3.2, "duration": 2.5, "speed": "ramp-mid", "camera": "handheld",
      "overlay": { "style": "captions", "text": "Kaş, Antalya" },
      "transition": { "type": "burn", "duration": 0.8 } },
    { "image": "portrait.jpg", "look": { "type": "engrave", "reveal": 3 }, "duration": 4, "camera": "push-in" },
    { "style": "neon-sign", "text": "See you / soon", "duration": 3 }
  ],
  "overlays": [ { "style": "captions", "text": "…", "from": 0, "to": 5 } ]
}
  • Szenentypen: style (beliebige Stil-ID + ihre Optionen), image (image-Pfad, oder layers: [{src, depth}] für 2,5D-Parallaxe), clip (clip, in, speed: Zahl | ramp-in | ramp-out | ramp-mid), color.
  • Pfade sind relativ zur JSON-Datei.
  • transition befindet sich in der Szene, die verlassen wird. Die nächste Szene beginnt duration Sekunden, bevor diese endet.
  • overlay = ein Stil, der über die Szene gelegt wird (bewegt sich mit ihrer Kamera). overlays = fixiert über allem, unkorrigiert.
  • Kamera: Name einer Voreinstellung oder { "preset": "drift", "amount": 0.6, "shake": 0.5, "keys": [{ "at": 0, "zoom": 1 }, { "at": 1, "zoom": 1.3, "ease": "outExpo" }] }.

5. Katalog

Kameras — static, drift, push-in, pull-out, punch-in, crash-zoom, whip-from-left, whip-from-right, whip-from-top, spin-in, rise, orbit, tilt-reveal, tilt-left, tilt-right, vertigo, handheld, float, beat-punch. Kamerabewegungen werden automatisch mit Bewegungsunschärfe versehen.

Übergänge — cut, fade, flash, dip, whip, zoom, spin, glitch, ink, burn, liquid, iris, wipe, blinds, pixelate, leak, cube, ripple, doors, stretch, luma.

Looks (Bilder/Clips) — engrave (Tinte zeichnet → Schraffur → Sepia-Waschung), sketch, oldphoto, duotone, halftone, posterize, noir. Optionen: { "type": "engrave", "reveal": 3, "delay": 0.2, "paper": "#ece0c4", "ink": "#33210f" }.

Farbkorrekturen — none, teal-orange, kodak, fuji, sepia, noir, bleach, cyber, sunset, matte (+ gradeAmount 0–1).

Stile — führen Sie node engine/cli.mjs list für die aktuelle Liste aus. Die Optionen jedes Stils sind am Anfang von styles/<id>/style.js dokumentiert (defaults + options).

StilWas er tutWichtige Optionen
map-routeRoutenflug auf Globus / flacher Karte / türkischen Provinzen, Pins + Beschriftungenroute, mode globe·flat·turkey·auto, theme dark·atlas·light, icon, highlight
history-titleVergoldeter Jahreszähler + Kapiteltiteltext "1453 / Titel / Untertitel", from
parchment-letterVerbrannter Pergament, Handschrift + Feder + Wachssiegelplace, signature, seal
murmurationStarenschwarm faltet sich zu den Wortenbirds, Himmelsfarben
led-marqueeShop/Minibus LED "kayan yazı"-Tafelneine Tafel pro Zeile, colors
receiptThermodrucker druckt die Nachricht, reißt abheader, items, total, date
ink-bleedTintentropfen breiten sich in den Buchstaben ausink, paper
halftone-pressZweifarbiger Riso-DruckinkA, inkB, dot
signal-tuneAlter Fernseher: Schnee → Testbild → auf Sendungchannel, station
inflateY2K Chrom-Ballonbuchstabenchrome, face
orbit-ringTextringe um einen Planetenein Ring pro Zeile
beat-cutEin gestempelter Wort pro Schlag, Schweizer Plakatbpm, offset
lyric-videoSongtexte leuchten Wort für Wort auf den Takt aufbpm, times, credit
captionsReel-Untertitel, aktives Wort auf einer Tablette (verwenden Sie --alpha)times, maxWords, pill, position
split-flapAbflugtafel dreht sich (türkische Trommel)title, cols
neon-signNeonröhren auf Ziegel, eine defektcolors, broken
odometerRollende Ziffern zählen zu einer Zahltext "10000 takipçi", prefix, suffix
pixel-quest8-Bit-Titelbildschirmpixel, subtitle
vhs-memoryHomevideo-Band-Lookdate, clock
Kinetische Typografie
word-stackBlocksatz-Poster-Stapel, jede Zeile knallt in voller Breite einaccent, beat, kicker
typewriterTippt Taste für Taste mit blinkendem Cursortheme paper·terminal, speed, prompt
scrambleZufällige Zeichen dekodieren den Textfont mono·display, resolve, hud
ticker-rowsRiesige Zeilen scrollen abwechselndrows, tilt, speed, accent
highlight-quoteZitat blendet ein, ein Marker streicht die Schlüsselwörter anauthor, highlight (Wörter), marker
glitch-titleRGB-Split + Datamosh setzen sich zu einem sauberen Titel zusammensubtitle, colors, every
3D
extrude-3dMassive extrudierte Buchstaben schwingen ein und drehen sichface, side, bg, depth
cube-spinWürfel dreht sich Seite für Seite, eine Zeile pro Seitecolors, ink, floor
text-tunnelFliege durch Textringe zum TitelZeile 1 = Titel, rings, ring, colors
retro-gridSynthwave-Raster, gestreifte Sonne, Chrome-TitelZeile 1 Chrome, Rest Skript, sky, sun, speed
particle-spherePartikelkugel verwandelt sich in die Wortecount, morphAt, colors
card-carousel3D-Kartenring landet auf der letzten Zeileimages (lokale Dateien), turns, colors
Social & Broadcast
countdown3·2·1 mit Ring-Sweeps, dann der Textfrom, tick, accent
lower-thirdNews/YouTube-Namensleiste (verwenden Sie --alpha)Zeile 1 Name, Zeile 2 Rolle, theme solid·glass·minimal, position
chat-storyNachrichten-Chat mit Schreibpunkteneine Nachricht pro Zeile, > = ich, name, theme
bar-chartBalkendiagramm-Rennen, Werte zählen hochitems: [["A",10],…], unit, note, source
cta-followCursor klickt auf Folgen, Haken + KonfettiZeile 1 Handle, Zeile 2 Button, Zeile 3 Untertitel, done

Stiloptionen kommen in --set schlüssel=wert (JSON-Werte: --set 'route=["A","B"]') oder als Schlüssel des Szenenobjekts.

6. Fehlerbehebung

  • unknown place "X" (map-route): verwenden Sie "lat,lon" oder { "name": "X", "lat": 0, "lon": 0 }.
  • Text durch eine Kamerafahrt abgeschnitten: reduzieren Sie die Kameradrehung amount oder verwenden Sie drift/float.
  • Langsame Renderings: --size 540 für Entwürfe. Vermeiden Sie --motion-blur über 4, es sei denn, der Benutzer wünscht die beste Qualität.
  • Ausgabe weiß/leer: führen Sie still aus und lesen Sie den Fehler; doctor prüft WebGL2.
  • Windows PowerShell / cmd entstellt --set 'route=["A","B"]': schreiben Sie die Optionen in eine Datei und verwenden Sie --params opts.json, oder verwenden Sie ein Kompositions-JSON.
  • Englischer Text, der einen türkischen Namen enthält (ı, ş…) erhält automatisch die türkische Groß-/Kleinschreibung; übergeben Sie --lang en, um dies zu stoppen.

Verwandte Skills