CommunityCodierung & Entwicklunggithub.com

RolynTrotter/vibe-podcast

Erstelle pro Episode Grafiken für den Podcast aus den Apple Motion-Vorlagen (Titelkarten, Zitate-Einblendungen) und platziere sie per FCPXML in Final Cut Pro.

Was ist vibe-podcast?

Dieses Skill automatisiert die Erstellung von Motion-Grafiken für Podcast-Episoden, indem es Apple Motion-Dateien (`.motn`/`.moti`) als XML (`ozml`) manipuliert und per FCPXML in Final Cut Pro importiert. Es ist speziell für den Workflow des Podcasts „Tiresias Foundation“ ausgelegt: Es ermöglicht das Setzen von Text in Titelkarten und Zitat-Einblendungen, das Inspizieren von Schichtbäumen und Keyframes sowie die automatische Generierung eines FCPXML-Projekts mit allen cue-basierten Titeln. Das Skill arbeitet mit der integrierten Bibliothek `motionkit.py` und dem Generator `titles_fcpxml.py`. Es unterstützt den Benutzer dabei, Motion-Dateien zu inspizieren, Text zu setzen, Keyframes auszulesen, Vorschauen zu rendern und Vorlagen in Final Cut Pro zu installieren. Der Workflow ist getestet unter FCP 11.0.1 und Motion 5.9. Der Fokus liegt auf einer nahtlosen Integration in die bestehende Podcast-Produktionspipeline, ohne dass der Benutzer manuell Motion öffnen muss. Das Skill kann sowohl für die finale Produktion als auch für schnelle Vorschauen oder Thumbnails verwendet werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/RolynTrotter/vibe-podcast/tree/HEAD/.claude/skills/motion-graphics

Installed? Explore more Codierung & Entwicklung skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

In Ihrer bevorzugten KI fragen

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

Dokumentation

Motion-Grafiken für den Podcast

Motion 5.9 hat kein AppleScript-Wörterbuch und keinen CLI-Renderer. Alles hier funktioniert, indem Motion-Dateien als XML (ozml) behandelt werden und indem Final Cut Pro FCPXML übergeben wird, das die installierten Titelvorlagen referenziert. Final Cut übernimmt das Rendering.

Die Werkzeuge liegen in agent-motion/:

ToolFunktion
motionkit.py inspect DATEI [--json]Schichtbaum, Textebenen (Text/Schriftart/Größe/Position), Zeitangaben in Sekunden, was an FCP veröffentlicht wird, Medienreferenzen
motionkit.py set-text EIN AUS --set "SCHLÜSSEL=TEXT" ...Textebenen umschreiben. SCHLÜSSEL = Ebenen-ID, Ebenenname oder aktueller Text. \n für Zeilenumbrüche. Korrigiert styleRun-Längen (UTF-16), damit Motion nicht abstürzt
motionkit.py keyframes DATEI [--grep X] [--all]Jeder animierte Parameter mit Keyframe-Zeiten/-Werten (Rotation in Radiant)
motionkit.py preview DATEI --at 1.9 3.2 [--open]Schreibt Kopien, die zu diesen Zeiten platziert sind; --open öffnet sie im Hintergrund in Motion (open -g) für einen app_screenshot
motionkit.py install DATEI --name NAMEKopiert ein Projekt in den Titelordner von Motion als FCP-Titelvorlage
titles_fcpxml.py SPEZIFIKATION.json -o AUSGABE.fcpxmlCue-Liste → FCPXML-Projekt mit Titeln zu den richtigen Zeiten und ausgefüllten Texten

Die Vorlagen der Show

Installiert unter ~/Library/Containers/com.apple.motionapp/Data/Movies/Motion Templates.localized/Titles.localized/Templates/ (FCP-UID-Form: ~/Titles.localized/Templates/<Name>/<Name>.moti). Schnappschüsse der zwei Hauptvorlagen liegen in agent-motion/*.motn.

  • TF_Podcast_title: Haupttitelkarte, 5 s, 29,97, 1080p. Textebenen: Tiersias Foundation Podcast (zeigt „Tiresias Foundation Podcast“; der Ebenenname hat einen Tippfehler, ihn weiterhin als Schlüssel verwenden) und Episode 4: Carl Schmitt (die zeilenspezifische Zeile, Futura Medium). Veröffentlicht eine Drop Zone.
  • Citation v2: Unteres Drittel für Zitate und Quellen, PT Serif. Textebenen: ~Autor Nachname (kursiv; die Show stellt ein ~ voran), Person Schreibt Alberne Schlagzeile zu (Titel des Werks, kann zwei Zeilen umfassen), 20. Apr. 1969 (Datum), Veröffentlichung.
  • Citation v2 ohne Veröffentlichung: Gleiche Vorlage ohne die Veröffentlichungszeile. Ebenfalls Citation v1, Black/Orange/Yellow/PeeTitle, Minister_Types.

Bisherige Verwendung (aus den Podcast3/4-Bibliotheken): Timothy Snyder, Carl Schmitt, Xunzi, ~Eric L. Hutton, übers., ~Armando Iannucci, Reg., 95 U.S. 602. Übersetzer und Regisseure erhalten einen Rollensuffix. Gerichtsfälle kommen in das Autorenfeld.

Arbeitsablauf

  1. python3 agent-motion/motionkit.py inspect "<Vorlage>.moti", um die Textebenen-Schlüssel zu erhalten.
  2. Schreibe eine Cue-JSON (siehe agent-motion/examples/ep_demo.json): Vorlage, at (Sekunden auf der Episoden-Zeitachse), optional duration, texts-Zuordnung.
  3. python3 agent-motion/titles_fcpxml.py cues.json -o titles.fcpxml, dann validieren: xmllint --noout --dtdvalid <Kopie von FCPXMLv1_11.dtd> titles.fcpxml. Die DTDs befinden sich in /Applications/Final Cut Pro.app/Contents/Frameworks/Interchange.framework/Versions/A/Resources/. Zuerst eine Kopie erstellen, da xmllint bei Pfaden mit Leerzeichen fehlschlägt.
  4. Übergabe: --library <Bündel> --push hinzufügen (kein Klick erforderlich). Ohne --library zeigt FCP einen Bibliothekswähler an; dies dem Benutzer überlassen. Die Titel werden über einer Lücke verbunden platziert, sodass sie in den echten Schnitt kopiert werden können.

Für eine einmalige eingebrannte Karte (z. B. ein Thumbnail oder eine Karte mit einer Stiländerung, die FCP nicht überschreiben kann) set-text auf der .motn verwenden und open -g -a Motion AUSGABE.motn für den Benutzer, um sie zu begutachten oder zu exportieren.

Verifiziert in FCP 11.0.1 (2026-10-18)

  • Nullklick-Import funktioniert: titles_fcpxml.py cues.json -o x.fcpxml --library Pfad/Zu.fcpbundle --push fügt <import-options> hinzu (Bibliotheksort, Assets verknüpfen, Warnungen unterdrücken) und sendet es mit open -g. FCP importiert im Hintergrund und erstellt die Bibliothek, falls sie fehlt. Eine Wegwerf-Bibliothek unter scratch/fcp-test/ für Tests verwenden und niemals die echten Bibliotheken des Benutzers ohne Nachfrage.
  • <text>-Reihenfolge = Reihenfolge der Textebenen im Motion-Dokument. Bestätigt: Citation v2's Autor, Überschrift, Datum und Veröffentlichung landen alle in den richtigen Feldern.
  • Reinen Text senden (Standard --style none). Dann behält die Vorlage ihre eigene Schriftart, Größe, Farbe und Schatten. --style font sendet eine text-style-def mit Schriftfamilie/Schnitt/Größe. Jede Stildefinition überschreibt die Vorlage, und Ebenen ohne Size-Parameter (Motion-Standard 48) kamen winzig heraus, bevor der 48-Fallback hinzugefügt wurde. --style font nur zur bewussten Neugestaltung verwenden.
  • Die Haupttitelkarte (TF_Podcast_title) wird mit ihrer Animation importiert.
  • FCP-Zustand durch app_screenshot auf com.apple.FinalCut lesen: Auf das Ereignis klicken, dann auf das Projektsymbol im Browser (Doppelklick auf den Namen startet eine Umbenennung, also Escape drücken), dann auf das Lineal.

Anzeige und Rendering (verifiziert 2026-10-18)

  • Vorschaubilder: motionkit.py preview DATEI --at Z --open, dann Computer-Use app_screenshot auf Motion (Bündel com.apple.motionapp), dann auf die Leinwand zoomen. Das Fenster über app_menu File > Close schließen. Die Eingabe in das Playhead-Feld von Motion aus dem Hintergrund BEWEGT den Playhead NICHT. Die <currentFrame>-Kopie ist der zuverlässige Weg.
  • Rendering: Computer Use kann nicht auf File > Share klicken (Export Movie, Save Current Frame). Den Benutzer bitten, auf Export zu klicken. Shell screencapture fehlt die Bildschirmaufnahmeberechtigung.
  • Niemals open -a ohne -g verwenden. Der Benutzer arbeitet auf demselben Bildschirm.

Animation (was das XML preisgibt)

Keyframes sind curve > keypoint{Zeit, Wert, Eingangs-/Ausgangs-Tangenten} unter jedem Parameter (Transform-Position/Rotation/Skalierung, Deckkraft, Filterparameter). Behaviors (Gather In, Pen Speed/Pressure) sind eigene Knoten mit Timing- und Control-Parametern. So kann die gesamte Choreografie gelesen, zeitlich neu angeordnet, verschoben oder programmatisch Keyframes hinzugefügt werden. Dann Vorschau und Screenshot zur Überprüfung. TF_Podcast_title-Choreografie: Tiresias-Figuren (Gruppe 1/2) gleiten von ±400 px auf 1,5 s ein, dann schwingen sie ±10 px / ±2° bis 4,87 s. Das Schlangenbildpaar erscheint bei 1,74 s (Skalierung 0,17→0,62 bei 2,1 s, maskiert durch abgerundete Rechtecke) und stößt zwischen Keyframes bei 2,1/3,17/4,14/4,87 s. Die Titelzeile blendet bei 1,5–1,7 s mit Gather In ab 1,0 s ein, und die Episodenzeile führt Gather In bei 2,37 s aus.

ozml-Notizen

  • Zeiten sind "value timescale flags epoch"; Sekunden = value/timescale.
  • Textinhalt: scenenode[factory=Text] > parameter[name=Object] > parameter[id=369] > text. Styling ist styleRun style=ID offset length, daher bricht eine Längenabweichung das Styling.
  • Fabriken oben ordnen factoryID → Art zu (Text, Shape, Replicator, Image...). Die IDs unterscheiden sich pro Datei, daher immer über die Fabriktabelle auflösen.
  • Apples (alte, immer noch meist korrekte) Referenz: Motion XML Guide im developer.apple.com-Archiv.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Verwandte Skills