Communitygithub.com

Moh4696/cinematic-film

Erstellt vollständig aus Code kinematografische, erzählte Filme zu jedem Thema. Eine kontinuierliche Kamerafahrt gleitet über eine gestaltete Welt aus Fotos, Dokumenten, Karten, Karten mit Routen und großen Zahlen, wobei jeder Stempel, jede Hervorhebung und jede Zahl genau auf das gesprochene Wort des Erzählers fällt, ergänzt durch Soundeffekte, optionale Musik und eingebrannte Untertitel.

Was ist cinematic-film?

Cinematic Film ist ein KI-Agenten-Skill, der es ermöglicht, vollständig programmatisch kinematografische Dokumentarfilme, Produkteinführungen oder Erklärvideos zu erstellen. Es basiert auf Python und Skia – eine Szene wird als eine kontinuierliche Kamerafahrt über eine große Leinwand realisiert, auf der Fotos, Karten, Dokumente und Grafiken angeordnet sind. Jede visuelle Aktion (Stempel, Hervorhebung, Zahl) wird auf das Millisekunde genau zum gesprochenen Wort getriggert. Der gesamte Workflow ist in Skripte unterteilt: Von der Story-Erstellung, Beat-Planung und Bildbeschaffung über TTS-Voiceover, Timing und Rendering bis hin zu Sounddesign und Untertiteln. Der Skill unterstützt verschiedene visuelle Stile (z. B. Archiv-BW, Studio-Look, Blueprint) und eignet sich für History, True Crime, Science, Tech, Markengeschichten und Biografien. Er läuft auf macOS, Linux und Windows mit Python 3.9+, skia-python und ffmpeg.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Moh4696/cinematic-skill/tree/HEAD/skills/cinematic-film

In Ihrer bevorzugten KI fragen

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

Dokumentation

Kinematografischer Film

Ein auf diese Weise erstellter Film ist eine einzige Kamerafahrt über eine einzige Welt. Jedes Foto, jede Karte, jeder Ausschnitt, jede Landkarte und jede Zahl lebt auf einer großen Tafel, und die Kamera bewegt sich zwischen ihnen entlang von Fäden, Routen und Pfeilen, während die Geschichte voranschreitet. Jeder visuelle Treffer ist auf das Wort des Erzählers abgestimmt. Alles ist Code (Skia in Python), sodass es jedes Mal gleich rendert, jedes Thema passt und eine neue Stimme den gesamten Film selbstständig neu timt.

Entstanden aus einer 5:22-minütigen Dokumentation über Al Capone, dann für jedes Thema geöffnet. Die hier festgelegten Regeln wurden aus dem geschrieben, was während der Erstellung kaputtging.

Werkzeuge

DateiFunktion
scripts/check_setup.pyPrüft Python, skia-python, ffmpeg, Schriftarten und Arbeitsspeicher; sagt, was installiert werden muss
scripts/get_fonts.pyLädt frei lizenzierte Schriftarten (Bebas Neue, Homemade Apple) für jede Textrolle herunter, die dieser Maschine fehlt
scripts/new_project.pyStartet ein Projekt aus assets/template/ (ein ausführbarer Erklärfilm) oder das Dokumentationsbeispiel mit --example
scripts/make_beats.pySchreibt beats.md, die Tabelle, die Sie genehmigen; prüft Chronologie, Zeilenlänge, Ziffern im gesprochenen Text
scripts/tts_say.pyKostenlose Rohstimme (macOS say, espeak-ng oder ein beliebiger TTS-Befehl), um den Film vor der endgültigen Stimme zu timen
scripts/split_takes.pySchneidet ganze Abschnitts-Takes in einen Clip pro Zeile und markiert verdächtige Schnitte
scripts/build_narration.pyFügt die Zeilen zu audio/narration.m4a und audio/timing.json zusammen, auf denen der Film aufbaut
scripts/fetch_commons.pyDurchsucht Wikimedia Commons, lädt mit Lizenz und Quellenangabe herunter, lehnt nicht-freie Dateien ab, schreibt credits.md
scripts/make_map.pyProjiziert gemeinfreie Grenzen (jedes Land oder jede Region) für die Karte
scripts/prep_assets.pyGleicht jedes Bild in ein einheitliches Aussehen an (Schwarz-Weiß, Sepia oder Naturfarbe); erzeugt die Tafeltexturen
scripts/engine.pyDie Film-Engine: Kamera, Spotlight, Objekte, Karten, Looks, Film-Finish
scripts/render.pyStandbilder, Kontaktabzüge, die Cueliste und das parallele MP4-Rendering
scripts/build_sfx.pySynthetisiert jedes Sound-Effekt aus der Cueliste (keine Samples, nichts zu lizenzieren)
scripts/mix_soundtrack.pyStimme, Effekte und optionale Musik, dynamisch abgesenkt und lautheitsnormalisiert
scripts/burn_captions.pyBrennt einen von vier Untertitel-Stilen in den fertigen Film und schreibt eine SRT-Datei

Benötigt Python 3.9+, pip install skia-python numpy pillow (scipy optional) und ffmpeg. Führen Sie zuerst scripts/check_setup.py aus; führen Sie unter Linux oder Windows auch scripts/get_fonts.py pro Projekt aus. Alle Befehle akzeptieren --project <ordner>.

Wählen Sie den Film

ArtLookBilderTypische Objekte
Geschichte, True Crime, Ermittlungwall, slateArchivfotos und -dokumente, abgestuft bwAbzüge, zerrissene Ausschnitte, Stempel, roter Faden, Kartenrouten
Produkteinführung, Marken- oder Gründergeschichtestudio, charcoalIhre Produktbilder und Teamfotos, abgestuft naturalKarten, große Zahlen, Zähler, Pfeile
Wissenschaft, Technik, Funktionsweiseblueprint, paperDiagramme, Archiv- oder KI-StandbilderKarten, Zähler, Stiftmarkierungen, Karten
Technik, Weltraum, TrailernightScreenshots, Renderings, KI-StandbilderGroße Schrift, Zähler, Routen, Karten

Mischen Sie frei: Die Looks sind eine Tafel und ein Finish, und jedes Objekt funktioniert auf jedem Look. references/story.md enthält eine Story-Struktur für jede Art.

Die Regeln

  1. Ein Held pro Zeile. Jede Erzählzeile hat genau eine Sache, auf die die Kamera gerichtet ist. Das Spotlight dimmt alles andere.
  2. Treffer landen auf dem gesprochenen Wort. Ein Stempel knallt auf "angeklagt", nicht am Zeilenanfang. Timen Sie alles mit doc.W(line, "word").
  3. Zeigen Sie eine Phrase auf eine Weise. Entweder tippen Sie sie auf den Bildschirm oder zeigen sie auf einem echten Dokument, niemals beides. Fließtext auf Dokumenten ist graue Zeilen, niemals Füllwörter.
  4. Die Zeit bewegt sich nach der Eröffnung nur vorwärts. Ein kalter Einstieg darf nach vorne springen. Nach einer Überleitungszeile ("Vier Jahre zuvor…") bewegt sich die Erzählzeit nur noch vorwärts.
  5. Schrift, die man auf einem Telefon in einer Sekunde lesen kann. Große, komprimierte Versalien. Ein getipptes Etikett auf dem Bildschirm sollte etwa 3 % oder mehr der Bildhöhe einnehmen.
  6. Weniger ist mehr. Fäden verblassen nach ihrem Beat, und alte Objekte werden gedimmt. Der letzte Rückzug sollte komponiert aussehen, nicht überladen.
  7. Nichts erfunden, das echt aussieht. Echte Fotos und Dokumente erhalten Quellenangaben. Ein in Code gezeichnetes Dokument wird als Rekonstruktion gekennzeichnet und zitiert nur Wörter, die wirklich geschrieben wurden. KI-Bilder sind zur Illustration in Ordnung, aber niemals als Beweis für ein reales Ereignis oder eine reale Person.

Arbeitsablauf

Halten Sie für die vier Tore (markiert als Gate) für die Zustimmung des Benutzers an.

  1. Story. Recherchieren, dann script.json schreiben: Takes (Abschnitte) von Zeilen, jede mit text, spoken (Zahlen als Wörter), hero und typed. Notieren Sie Fakten daneben. 60 bis 90 Sekunden entsprechen etwa 150 bis 230 Wörtern. Details finden Sie in references/story.md.
  2. Beat-Tabelle. Führen Sie scripts/make_beats.py aus und beheben Sie jede Lint-Warnung. Gate: Der Benutzer genehmigt beats.md, einschließlich der Fakten.
  3. Bilder. Listen Sie jedes Bild in photos.json auf: seine ID, Art und woher es kommt.
    • Archivbilder: fetch_commons.py search, category und get.
    • Eigene Dateien des Benutzers: Legen Sie sie in <projekt>/assets/photos/ ab.
    • KI-Standbilder: Generieren Sie sie in einem Stil (die motion-assets-Fähigkeit plant und kalkuliert sie).
    • references/archive.md behandelt andere Archive und die Rechte-Regeln.
  4. Rohstimme. Führen Sie tts_say.py, dann split_takes.py, dann build_narration.py aus. Hören Sie sich jede Zeile an, die split_takes.py markiert. Jetzt sind die Timings real.
  5. Assets. Führen Sie make_map.py aus, wenn die Geschichte Orte bereist, dann prep_assets.py.
  6. Szene. Schreiben Sie scene.py: Ordnen Sie die Tafel in Clustern pro Abschnitt an, fügen Sie Objekte zu doc.L/doc.W-Zeiten hinzu, dann Kamera- und Spotlight-Keyframes (film.shot). Lesen Sie references/film.md. Beide ausgelieferten Projekte zeigen die Muster: assets/template/scene.py (Erklärfilm, Studio-Look) und assets/wright-flyer/scene.py (Dokumentation, alle Objekttypen).
  7. Look-Test. Führen Sie render.py --probe für ein Standbild pro Zeile bei 1280x720 aus und betrachten Sie alle, dann --strip für jede große Kamerafahrt. Gate: Zeigen Sie dem Benutzer Standbilder der Eröffnung und des Looks.
  8. Entwurf. Rendern Sie die ersten 30 Sekunden bei 1280x720 mit der Rohstimme. Gate: Der Benutzer schaut es sich an.
  9. Endgültige Stimme. Nehmen Sie es mit einer beliebigen TTS oder einer Person auf (references/voice.md). Führen Sie Split, Build und erneute Probes durch; nichts an der Szene ändert sich.
  10. Sound. Führen Sie render.py --cues, dann build_sfx.py, dann mix_soundtrack.py aus, fügen Sie bei Bedarf eine Musik hinzu. Lesen Sie references/sound.md.
  11. Fertigstellung. Führen Sie das vollständige Rendering durch, dann burn_captions.py und die SRT. Lesen Sie references/performance.md, bevor Sie in 1440p oder 4K rendern. Übergeben Sie credits.md zusammen mit dem Film.

Selbstüberprüfung, jedes Mal

Schauen Sie sich die Standbilder an, bevor Sie behaupten, dass etwas funktioniert. Dies sind die Fehler, die aufgetreten sind, alle in einem echten Rendering:

  • Dunkle Tinte auf einer dunklen Tafel: unsichtbar. Verwenden Sie helle Schrift auf dunklen Looks oder bar_h=0.92 für einen vollflächigen Etikettenhintergrund hinter dunkler Schrift.
  • Die Kamera bewegte sich, aber das Spotlight blieb zurück, was zu einem dunklen Bild führte. Verwenden Sie film.shot(), es sei denn, sie sollen sich trennen.
  • Kartenmaßstab zu klein: Eine ganze Küste kleiner als ein Foto. Wählen Sie K so, dass jeder Ort mit Abzügen seinen eigenen Raum bekommt (references/film.md).
  • Kartenbeschriftungen kollidieren. Setzen Sie die Beschriftung auf die Seite weg von ihrem Nachbarn.
  • Ein Cluster überlappt den Kartenrand. Halten Sie Cluster entweder auf der Karte oder deutlich außerhalb.
  • Hervorhebungen ein paar Pixel neben ihren Wörtern. Verwenden Sie PaperDoc.phrase_spans, und doc.on(print, fx, fy) mit Brüchen, die von einem Raster-Overlay des Bildes abgelesen werden.

Ausgelieferte Projekte

  • assets/template/: "From Cherry to Cup", ein 25-sekündiger Erklärfilm im Studio-Look, bestehend aus Karten, Pfeilen und einem Zähler, ohne Bilder. new_project.py my-film kopiert es. Geben Sie ihm eine Rohstimme und es rendert.
  • assets/wright-flyer/: "Twelve Seconds", eine 90-sekündige Dokumentation über den ersten Flug und den 50.000-Dollar-Rivalen, der zweimal abstürzte. Sie verwendet sieben gemeinfreie Fotos, die US-Karte, zwei gesetzte Dokumente und jeden Objekttyp.
python3 scripts/new_project.py wright --example
python3 scripts/fetch_commons.py get --project wright
python3 scripts/make_map.py --project wright && python3 scripts/prep_assets.py --project wright
python3 scripts/tts_say.py --project wright && python3 scripts/split_takes.py --project wright && python3 scripts/build_narration.py --project wright
python3 scripts/render.py --project wright --size 1280x720 --out out/draft.mp4 --audio audio/narration.m4a

Verwandte Fähigkeiten

Aus Open 3D Skills: motion-assets plant und kalkuliert KI-Standbilder, wenn ein Film Illustrationen benötigt, und frame-capture zeichnet Webseiten auf, anstatt codegezeichnete Filme zu verwenden.

Verwandte Skills