Communitygithub.com

Kinetic-Film-to-Resolve

Konvertiert einen mit dem Skill scenario-kinetic-film erstellten kinetischen Typografie-Film (ein Filmordner mit spec.js) in eine bearbeitbare DaVinci-Resolve-Zeitleiste mit einem eigenen Fusion-Comp pro Einstellung auf dem gleichen Beat-Raster.

Was ist Kinetic-Film-to-Resolve?

Dieser Skill wandelt eine kinetische Typografie-Film-Spezifikation (`spec.js`) in eine vollständig bearbeitbare DaVinci-Resolve-Zeitleiste um. Jede Einstellung wird zu einem eigenen Clip mit einem individuellen Fusion-Comp, der echte Text+- und Text3D-Elemente, keyframed Kameras und die exakte Beat-Timings des Originals enthält. Redakteure können so jede Einstellung auf der Fusion-Seite öffnen, Wörter ändern, kürzen oder Musik austauschen – ohne die ursprünglichen Engine-Dateien.<br><br>Der Skill unterstützt Resolve Studio (ab Version 21.2), benötigt das laufende Programm mit einem geöffneten Projekt und arbeitet über eine Python-Schnittstelle innerhalb von Resolve. Er führt Export-, Messungs- und Build-Schritte aus, erstellt eine neue Zeitleiste, platziert jeden Shot als Fusion-Clip und fügt optionale HUD-Overlays, Audio und Szenenmarkierungen hinzu. Die Build-Phase ist in Batches unterteilt, um das 60-Sekunden-Limit von `run_script_unsafe` zu umgehen; fehlgeschlagene Batches können fortgesetzt werden. Abschließend erstellt der Skill Review-Frames direkt aus der Zeitleiste und kann den Film rendern sowie die Bewegungsqualität messen. Wichtige Fallstricke (z. B. gesperrte Comps, veraltete Frame-Exporte, überlagerte Bewegungsunschärfe) sind in der Referenzdokumentation dokumentiert.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MusicProWorkshop/davinci-resolve-skills/tree/HEAD/plugins/davinci-resolve-timelines/skills/kinetic-film-to-resolve

In Ihrer bevorzugten KI fragen

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

Dokumentation

Kinetic Film zu DaVinci Resolve

Wandelt die spec.js eines kinetischen Films in eine Resolve-Zeitleiste um, in der jede Einstellung ein eigener Clip mit eigenem Fusion-Comp ist: echte Text+- und Text3D-Elemente, keyframed Kameras, das gleiche Beat-Timing. Ein Redakteur kann dann jede Einstellung auf der Fusion-Seite öffnen, ein Wort umschreiben, es trimmen oder die Musik austauschen.

Es handelt sich um einen Nachbau in den Resolve-Werkzeugen, nicht um einen Pixelabgleich. Gib an, was sich gegenüber dem Original geändert hat (setup gibt die Liste als notes zurück), und melde es dem Benutzer.

Bevor du beginnst

  • Resolve Studio läuft mit einem geöffneten Projekt. Überprüfe mit get_resolve_status und rufe get_whats_new einmal auf, da der Resolve-Server dies verlangt.
  • Der Filmordner enthält spec.js und die Engine-Dateien, und npm install playwright wurde darin ausgeführt.
  • Python mit Pillow ist außerhalb von Resolve installiert, um die Schriftbreiten zu messen. ffmpeg muss im PATH sein.

Frage den Benutzer

Entscheide dies vor dem Bauen, wenn möglich aus dem Gespräch:

  1. Welches Projekt. Die Zeitleiste wird zum geöffneten Projekt hinzugefügt. Teile dem Benutzer mit, um welches Projekt es sich handelt. Ein Projektwechsel könnte ungespeicherte Arbeit verlieren lassen, also bitte den Benutzer, zu wechseln, falls es das falsche ist.
  2. Zeitleistenname. Standard: <Titel> (Fusion). Sieh dir die vorhandenen Zeitleisten an und wähle einen freien Namen. Verwende niemals eine Zeitleiste wieder, die du nicht in dieser Sitzung erstellt hast.
  3. Schriftart. Text+ sieht nur installierte Schriftarten, und die im Film verwendete Archivo ist meist nicht dabei. Verwende die Markenschriftart, falls das Projekt eine zeigt. Rufe fonts_available(resolve, 'Lato', 'Inter') auf, um zu prüfen; installiere keine Schriftarten ohne Nachfrage. Schwere Schriftschnitte lesen sich am besten: Black, Heavy, ExtraBold.
  4. Audio. Entweder die Musikbearbeitung einer vorhandenen Zeitleiste (audio_from_timeline), eine Datei (audio_from_file) oder keine. Wenn eine Zeitleiste diesen Film bereits mit Musik enthält, biete diese zuerst an, da die Bearbeitung des Benutzers erhalten bleibt.

Schritte

SKILL unten ist der Ordner dieses Skills und F der Filmordner. Jeder Resolve-Schritt erfolgt über run_script_unsafe, das auf 60 s pro Aufruf begrenzt ist, und beginnt mit:

SKILL = r'<dieser Skill-Ordner>'; F = r'<Filmordner>'
exec(open(SKILL + r'\scripts\resolve_build.py', encoding='utf-8').read())

1. Exportiere die Spec (in einer Shell):

node "<SKILL>/scripts/export_film.mjs" "<F>"

Schreibt <F>/resolve/film.json und das Logo als transparente PNGs und gibt die gefundenen Blöcke aus.

2. Erstelle die Zeitleiste:

result = setup(resolve, project, F, 'My Film (Fusion)', 'Lato', 'Black', 'Inter', 'Medium')

Die letzten beiden Schriftarten sind für kleine Zeilen und Mock-UI. Es erstellt die Zeitleiste, einen Kinetic Films / <Titel>-Behälter und einen schwarzen Platzhalter-Clip und gibt die Anzahl der Einstellungen sowie notes zurück. Zeitleistengröße und Bildrate stammen aus dem Projekt, sodass ein mit 60 fps erstellter Film auf eine 30-fps-Zeitleiste landen kann. Es ist nur für 1920x1080, 60 fps getestet – überprüfe andere Formate genau.

3. Messe die Schrift (in einer Shell mit Python, das Pillow hat):

python "<SKILL>/scripts/measure_fonts.py" "<F>" Lato Black

Ohne diesen Schritt werden Wortbreiten geschätzt und füllen das Bild möglicherweise nicht gut aus. Wenn kein Schriftartdatei gefunden wird, fahre fort und prüfe die Rahmung genau.

4. Baue. Wiederhole, bis done wahr ist; es setzt dort fort, wo es aufgehört hat:

result = build_batch(project, F, 40)

Füge dann das HUD (nur wenn der Film eines hat), das Audio und die Szenenmarkierungen hinzu:

result = dict(hud=add_hud(project, F), audio=audio_from_timeline(project, F, 'Music Edit'), markers=add_markers(project, F))

Das HUD ist ein einzelner Fusion-Clip auf Spur 2 über den gesamten Film. Ein Redakteur kann diesen Clip deaktivieren, um ihn zu entfernen.

5. Betrachte Einzelbilder. Ab Resolve 21.2 exportiert dies in wenigen Sekunden beschriftete Blätter der Mitte jeder Einstellung direkt aus der Zeitleiste, ohne Rendern und ohne Änderung der Render-Einstellungen. Sie landen in <F>/resolve/review/. Prüfe, dass nichts schwarz ist, Wörter im Bild bleiben, Kicker ihre Wörter freigeben und Bilder das Bild ausfüllen. Behebe Fehler vor dem Rendern. frame_grid(project, F, seconds=[4.2, 9.35]) liefert ausgewählte Momente in voller Größe, z. B. das Ende eines Whips.

result = frame_grid(project, F)

Die Einzelbilder entsprechen einem Render des gleichen Frames (getestet unter Version 21.2). Bei älteren Resolve-Versionen ohne ExportThumbnails gibt es einen Fehler – beurteile stattdessen anhand des Renders.

6. Rendere und messe die Bewegung.

result = start_render(project, F, 'my_film')    # wählt einen GPU-H.264-Encoder, wenn vorhanden
# bei späteren Aufrufen: result = wait_render(project, result_job_id, 50)

Erwarte etwa 2 bis 4 Minuten für 30 s bei 1080p60 auf einer starken GPU. Entferne danach nur deinen eigenen Job mit remove_job. Die Warteschlange könnte die Jobs des Benutzers enthalten. start_render ändert die Render-Einstellungen des Projekts – teile dies mit.

Bewegung kann nur aus dem Video gemessen werden. Führe holds.py und dyn.py aus den Skripten von scenario-kinetic-film auf dem Render aus, falls sie installiert sind. Die Ziele: höchstens 40 % Standbilder, kein Halten länger als 0,6 s vor der Endkarte, und eine mediane Bewegung von 2,5 oder mehr. Melde die Zahlen, inklusive Abweichungen.

Um etwas zu ändern, behebe den Fehler und baue mit setup(..., replace=True) neu – nur bei einer Zeitleiste, die dieser Skill erstellt hat – und wiederhole dann die Schritte 4 bis 6. Für eine Korrektur weniger Einstellungen ersetzt rebuild_shots(project, F, [8.2, 13]) nur die Comps der Einstellungen zu diesen Zeitpunkten (in Sekunden) oder nach Einstellungsindex und behält alles andere bei. Falls sich die Wörter des Films geändert haben, führe Schritt 3 erneut aus.

7. Abschließen. Überlasse das Speichern dem Benutzer, es sei denn, er bittet darum: Speichern übernimmt auch alle anderen ungespeicherten Änderungen, die der Benutzer offen hat. Melde den Zeitleistennamen, die Notizen, die Renderzeit und die Prüfzahlen. Erwähne, dass der Platzhalter-Clip in seinem Behälter bleiben muss, da sonst die Einstellungen möglicherweise als offline angezeigt werden.

Was du nicht tun darfst – und warum

Jeder dieser Punkte kostet echte Zeit, um ihn zu finden. Die Details sind in references/fusion-traps.md; lies sie, bevor du fusion_lib.py änderst oder wenn etwas schiefgeht.

  • Sperre keinen Comp während des Bauens. Der Clip wird dann schwarz dargestellt. Sperre nur um das Erstellen eines Loaders herum, wie Shot.loader es tut; andernfalls öffnet das Setzen des Loader-Clips einen modalen Dateiauswahldialog auf dem Bildschirm des Benutzers, der alle Skriptaufrufe stoppt.
  • Verwende nicht ExportCurrentFrameAsStill zur Überprüfung. Es überholt Fusion und liefert schwarze oder veraltete Einzelbilder. frame_grid (mit Timeline.ExportFrame und ExportThumbnails) ist zuverlässig, aber nur auf der aktuellen Zeitleiste: Eine nicht geöffnete Zeitleiste exportiert schwarze Einzelbilder, obwohl ein Erfolg gemeldet wird.
  • Staple keine Bewegungsunschärfe. Unschärfe durch die eigene Bewegung eines Wortes und durch die Kamera vervielfacht die Arbeit. Nur die Kamera wird unscharf, und nur während schneller Bewegungen.
  • Gehe nicht davon aus, dass ein schnellerer Encoder ein langsames Rendern behebt. Die Fusion-Bildgenerierung ist meist der Engpass. Messe, bevor du Einstellungen änderst.

Referenz

  • references/block-map.md: wie jeder der 14 Blöcke konvertiert wird und was approximiert wird. Lies dies, wenn ein Film Graph, Counters, Progress, Chain, Prompt, Notes oder Rewind verwendet oder der Benutzer fragt, wie nah eine Einstellung am Original sein wird.
  • references/fusion-traps.md: API-Verhalten, das auf die harte Tour gefunden wurde, und wie man eine festgefahrene Resolve-Instanz wiederherstellt.

Individual skills in this repo

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

Verwandte Skills