Communitygithub.com

yt-film

Erstelle einen kompletten, erzählten YouTube-Dokumentar- oder Erklärfilm – von der Titelidee bis zur fertigen MP4 – mithilfe einer Python-Film-Engine.

Was ist yt-film?

Dieses Skill verwandelt einen einfachen Titel in einen vollständigen, erzählten YouTube-Dokumentar- oder Erklärfilm. Es nutzt eine Python-basierte Film-Engine, um aus Standbildern einen lebendigen Film zu erstellen: Claude recherchiert die Geschichte, erstellt eine verifizierte Faktenliste und schreibt eine Bildanleitung für das vom Benutzer gewählte Bildtool (ChatGPT, Codex, Google Flow/Whisk, Gemini API, Midjourney u. a.) – inklusive Stil- und Figurenkonsistenz. Aus den Bildern wird ein Sprechertext verfasst, der mit Gemini TTS oder einer eigenen Aufnahme (über Whisper getimt) vertont wird. Die Engine bringt jedes Bild mit Kamerafahrten, Rauch, Atem, Flammen, Licht, Wetter, schwebenden Objekten, Rissen, Scherben, Live-Zeichnungen, Schreibmaschinen-Beschriftungen, sprechenden Gesichtern, Comicseiten, einer lebendigen Karte, Fußnotenkarten und synthetisierten Geräuschen zum Leben. Alles läuft lokal auf macOS und Windows, nutzt Lyria oder eigene Musik, rendert parallel an die Maschinengröße angepasst und erzeugt am Ende eine −14 LUFS laute MP4 mit synchronisierten Audiospuren und Thumbnails. Der Benutzer entscheidet bei jedem Schritt (Story, Bilder, Stimme, Musik, Shots, Render, finaler Film), und das Skill fragt vor aufwändigen Render-Vorgängen explizit um Erlaubnis.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/AGBOOLA-JOEL/yt-film/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

yt-film: Erzählte Filme aus Standbildern

Eine Produktionsstraße für Geschichtenfilme: Der Benutzer erstellt ~150 Standbilder anhand einer Anleitung, die Claude schreibt. Claude schreibt das Drehbuch anhand dieser Bilder, eine Stimme liest es vor, und die Python-Engine erweckt jedes Bild im Takt der Worte zum Leben. Der Referenzfilm ist das Chadwick-Beispiel (examples/chadwick/, Carnegie's Daughter: die Frau, die Millionen als Andrew Carnegies geheime Tochter lieh): Seine Bilder, sein Drehbuch, seine Stimme, seine Musik, seine Shot-Listen und das 70-Sekunden-Effekte-Testvideo (examples/chadwick/video/chadwick_effects_test.mp4) zeigen jede Technik.

REPO ist der Ordner dieses Skills (wo diese Datei liegt). PY ist sein Python: REPO/.venv/bin/python unter macOS/Linux, REPO\.venv\Scripts\python.exe unter Windows. Engine-Befehle immer mit PY aus dem tools/-Verzeichnis des Projekts ausführen. Wenn .venv nicht existiert, zuerst einrichten: Schritt für Schritt dem Installations-Runbook (für Claude) in references/install.md folgen (vor systemweiten Installationen fragen; der Benutzer fügt seinen eigenen API-Key ein).

Grundregeln

  • Nie ohne Zustimmung des Benutzers rendern. Vorher mit stills.py prüfen (ein Kontaktabzug in ~30 s). Batch-Renderings, Vorschauen, der Abspann und der finale Zusammenschnitt dauern Minuten bis Stunden: Sage, was gerendert werden soll und wie lange es dauern könnte, und warte auf ein Ja. Rendere nichts erneut, was bereits gerendert ist, es sei denn, es hat sich geändert und der Benutzer will es.
  • Frage die Präferenzen des Benutzers einmal pro Projekt ab: welches Bildtool (references/image-generation.md), welche Stimme (Gemini TTS oder eigene: references/voice.md), welche Musik (Lyria oder eigene: references/music.md), seine Nische und sein Kanalname sowie die drei Entscheidungen, die den Kanal zu seinem machen: der Bildstil (der Auftakt: Gouache, flach redaktionell, Noir, Kreide, Comic, Märchenbuch, Blaupause oder eigener; Figuren oder keine), der Engine-Look (YTF_LOOK: gouache, clean, noir, chalk, comic, storybook, blueprint; look.json für Einzelwerte) und das Format (story, explainer, countdown, rise-fall, storytime, kids, summary, case-study, news): references/art-styles.md, references/formats.md. Verwende nicht automatisch den pastellfarbenen True-Story-Stil des Beispiels; wenn der Benutzer keine Präferenz hat, zeige die Optionen in einer kurzen Tabelle und empfehle einen, der zu seiner Nische passt.
  • Die Nische des Benutzers gehört ihm: Lenke ihn nicht in Richtung Geschichte oder zum Thema des Beispiels. Das Beispiel ist eine Referenz für Techniken, nicht eine Vorlage für Themen.
  • Windows: Pfade mit Schrägstrichen funktionieren; lange Jobs laufen im Hintergrund; Geschwindigkeitseinstellungen in references/performance.md. Gehe nie von macOS-only Tools aus.
  • Keine API-Keys in anderen Dateien als .env. Lade echte Fotos oder Sound-Dateien nur nach Zustimmung des Benutzers herunter (gib Datei, Quelle, Größe und Lizenz an).

Der Stack

AufgabeWerkzeugWo
RechercheWebsuche, verifizierte Faktenliste mit Quellen; markiere, was nicht bestätigt werden kannOUTLINE.md
BilderDas Bildtool des Benutzers, anhand von Claudes AnleitungIMAGE_GUIDE.md (+ IMAGE_PROMPTS.jsonl für die API), incoming/
DrehbuchClaude, geschrieben anhand der Bildanleitung, ein ##-Abschnitt pro Beat, [SHOTS: …]-NotizenSCRIPT.md
StimmeGemini TTS (Stimme Orus, langsam vorgelesen → 1,25x, Pausen begrenzt) oder die eigene Audio des Benutzers via import_voice.pytools/voice.py, tools/import_voice.py
Wort-TimingsWhisper: mlx-whisper (Apple Silicon) oder faster-whisper (Windows/Intel/Linux)voice/<batch>_words.json
MusikLyria (Gemini API), ein Cue pro Abschnitt, oder lizenzierte Tracks des Benutzerstools/music.py → audio/music/
Film-EnginePython (OpenCV, Pillow, NumPy, SciPy), kein After Effectstools/film.py, fx2.py, seq.py, signature.py, wr.py, kit.py
Shot-Listeneine Datei pro Batch in seq.py, getaktet auf die Batch-Wortzeitentools/<story>.py + tools/shots_bN.py
Renderingsparallel, an die Maschine angepasst, niedrige Prioritättools/render_all.py
AbspannEigener animierter Abschluss des Benutzers (Beispiel: cta.py)renders/cta.mp4
Finaler ZusammenschnittBatches + Abspann, ein durchgehender Score, −14 LUFS / −2 dBTPtools/final.py
SynchronisationStandardmäßig Spanisch + Französisch: Gemini-Übersetzung + TTS in ~3-Minuten-Blöcken, angepasst an die englischen Slotstools/dub.py
ThumbnailsDas Bildtool des Benutzers, anhand einer Anleitungreferences/thumbnails.md

Projekte leben in YTF_WORKSPACE (Standard ~/yt-film-projects/<story>/), erstellt durch PY REPO/scripts/new_project.py <story>, das die Engine in tools/ kopiert und jeden Ordner anlegt. Einstellungen sind in .env (zuerst Projekt, dann REPO): GEMINI_API_KEY, YTF_CHANNEL, Sprach-/Modellnamen, Geschwindigkeitsknöpfe (.env.example listet alle). engine/ytf.py findet Schriftarten, den Key, Whisper und die gemeinsame Kunst auf jedem Betriebssystem.

Die Arbeitsreihenfolge

  1. Wähle die Geschichte, wenn nicht vorgegeben: 3–5 Kandidaten mit Lückenprüfung (references/story-finding.md). Starte das Projekt mit dessen Format und Look: PY REPO/scripts/new_project.py <name> --format <format> --look <look> (schreibt die Format-Vorlage in OUTLINE.md, YTF_FORMAT und YTF_LOOK in .env). Teste einen neuen Stil an zwei Bildern mit stills.py, bevor du die vollständige Anleitung schreibst (references/art-styles.md, letzter Abschnitt).
  2. Geschichte und Fakten: Recherche; OUTLINE.md mit Quellen. Markiere alles Unbestätigte und umschreibe es später („angeblich“), stelle es nie als Tatsache dar. Entscheide den Aufhänger (references/hooks.md: niemals denselben Typ wie die letzten drei Filme des Benutzers). Schreibe dann das Rückgrat oben in OUTLINE.md (references/storytelling.md): eine Frage, die der Film beantwortet, und 8–12 Beats, verbunden durch „also“ / „aber“; den ersten falschen Akt oder entscheidenden Moment bei etwa 15 % des Films; ein oder zwei Hintergrund-Abschnitte pro Hauptperson. Zeige es dem Benutzer vor der Bildanleitung.
  3. Bildanleitung zuerst (references/image-guide.md, geschrieben für den Weg des Benutzers). Sie folgt dem Rückgrat und der Art, wie der Film erzählt wird (zeigen, dann zeichnen: jede Zeile eines Beats nennt die Zeile, die sie bedient, und was auf oder nach ihr gezeichnet wird). Ziel: ~150 Bilder: Stilkarte, Casting-Blätter, ~100 Szenenaufnahmen mit Abdeckung (W weit, M mittel, F Gesicht nah als EDIT, D Detail, P Point-of-View), 6 Szenen mit _lines-Versionen, 12 Skizzenblätter + _lines, ~10 leere Story-Objekte („Bases“: ein Notizbuch, eine alte Karte, eine Karte, ein Hauptbuch, ein Umschlag, ein Telegramm, eine Zeitung). Exakte Dateinamen und Ordner. Konsistenzregeln: references/consistency.md.
  4. Überprüfe Bilder, sobald Gruppen eintreffen (Hände, Gesichter, Zeitdetail, kein Text, Form: Bilder kommen etwa 16:9 an und werden mittig auf 2:1 beschnitten, also nichts Wichtiges ganz oben/unten). Manuelle Downloads: scripts/sort_images.py. Dann Rasterblätter in Engine-Pixeln (COLS=4 PY tools/egrid.py out.png IMG ...) und kartiere die Schornsteine, Lampen, Kerzen, Atem und ruhigen Bereiche jedes Bildes, bevor du Shots schreibst.
  5. Drehbuch aus den Bildern. Jedes generierte Bild wird verwendet; ordne jeden Abschnitt seinen Shots zu und führe die Prüfung auf ungenutzte Bilder durch (Beispiel: examples/chadwick/tools/script_check.py), dann PY tools/story_check.py (gesprochene Daten, Szenenwechsel-Eröffnungen, wo der [DRIVE]-Abschnitt fällt, jede Batch-Naht) und die Prüfungen in references/storytelling.md (Nacherzählung, 15 %, aber/deshalb, keine gestapelten Erklärer, 5–7 gesprochene Daten, zeigen → zeichnen). Keine Längenbegrenzung: Erzähle die Geschichte vollständig und in Ruhe (~150 Wörter pro Minute; Chadwick: 1.780 Wörter → 12 Min). Beende mit der Like/Follow-Zeile des Benutzers.
  6. Stimme: Gemini (voice.py --test zuerst, dann Batches; --pace und SPEEDS, sodass jeder Batch bei ~140–160 wpm liegt) oder die eigene Audio des Benutzers (import_voice.py --full | --passages | --batches). Setze BATCHES (4–7 Abschnitte, ~65–100 s jeder, geschnitten mitten im Akt, wo die Geschichte sich bewegt; nur 2–3 Schnitte an Aktbrüchen; nichts wird am Batch-Start wieder eingeführt) und GAPS. Gib die Wörter jedes Batches aus, bevor du seine Shots schreibst (Whisper hört Namen falsch und schreibt Zahlen als Ziffern: Takte basierend darauf, was es geschrieben hat).
  7. Musik: 5–7 Cues (music.py, oder die Dateien des Benutzers in audio/music/); ordne Cues den Batches in final.py's MUSIC zu.
  8. Shot-Listen pro Batch mit seq.py (references/engine.md, examples/chadwick/tools/): Ein Film-Modul (<story>.py, wie chad.py) enthält die LIVE-Tabelle (die lebenden Schichten jedes Bildes) und die Karteneinstellungen; jede shots_bN.py ist ~60 Zeilen mit S.at(time, scene(...)/page(...)/drawin(...)/map_shot(...)). Prüfe jede mit PY tools/stills.py bN und sieh dir das Blatt an, bevor etwas gerendert wird.
  9. Renderings (mit Zustimmung des Benutzers): PY tools/render_all.py führt alle Batches parallel aus, so viele auf einmal, wie der freie Arbeitsspeicher der Maschine zulässt (ca. 1,5 GB pro Rendering; mehr auf einmal ist langsamer, sobald der Speicher ausgeht); nach Korrekturen render_all.py b3 b7 oder --changed. Starte es in einem eigenen Fenster, damit das Schließen von Claude es nicht stoppt, und folge references/performance.md, wenn ein Rendering langsam ist oder der Computer ruckelt (besonders Windows). Teste einen neuen Übergang oder Effekt zuerst an zwei Frames (ein später Absturz verschwendet das Rendering).
  10. Abspann einmal pro Kanal (references/cta.md), dann finaler Zusammenschnitt PY tools/final.py; überprüfe Länge, fps, Lautstärke auf der MP4 (−14 LUFS, Spitze ≤ −1,5 dB) und Beispiel-Standbilder (references/final-render.md).
  11. Synchronisation (references/dubs.md) und Thumbnails (references/thumbnails.md), falls gewünscht.

Der Look (die Standardeinstellung des Beispiels; jeder Kanal wählt seinen eigenen)

  • Das Beispiel: Eierköpfige Menschen (Eierkopf, zwei dunkle ovale Augen, Ein-Linien-Mund, keine Nase/Ohren/Brauen, einfache runde Hände) in einer zeitgetreuen realen Welt; Tuschelinie + matte Pastell-Gouache; Engine-Look gouache. Andere Kanäle wählen ihren eigenen Bildstil, ihre Figuren (oder keine) und ihren Engine-Look (references/art-styles.md); die folgenden Regeln gelten für jeden Stil.
  • Der Engine-Look bestimmt die hinzugefügten Schichten: Grading, Körnung, Vignette, Tusche, Etikettenpapier, Akzent, Schriftarten, Zeichengeräusch (engine/look.py: YTF_LOOK, look.json). Hartcodiere niemals eine Farbe oder Schriftart in einer Shot-Datei, wenn der Look eine hat (look.rgb("accent"), look.L.type_font); der Look eines Kanals muss an einer Stelle geändert werden können.
  • Kein 2.5D, keine Ausschnitte, kein AI-Video. Einzelne Bilder mit sanften Kamerafahrten (Reinfahrer, Schwenks, langsames Treiben).
  • Halte ein Bild nie zu lange: Schneide zur nächsten Aufnahme des Moments (W→M→F→D→P) oder zu einer gezeichneten Seite.
  • Skizzen-Erklärer sind echte Zeichnungen, keine Symbole: aus der Strichzeichnung der Blätter entnommen oder von der Engine gezeichnet, wo Code es gut kann (genaue Karten, Routen, Markierungen, einfache Figuren).
  • Leere Bases werden live in ihrem eigenen Medium bemalt: Graphit auf Papier, Kreide auf einer Tafel, Pinseltusche, Halbtonfotos, die in eine Zeitung gedruckt werden, Tuscherouten auf einer Karte.
  • Linien tragen Bedeutung: Strichlisten für Jahre, Schallringe, fallende Papierbahnen, Rauchlinien, durchgestrichene Figuren.
  • Beschriftungen (Daten, Orte, Namen) sind Stufen-getippter Text in der Typschriftart des Looks (Schreibmaschine bei gouache), ein Tastendruck nach dem anderen mit einem weichen Klick.
  • Schrift auf einem Objekt sitzt auf den realen Linien dieses Objekts in dessen Winkel; unleserlicher Druck darunter wird zuerst weggewischt (fx2.clean_text).
  • Immer Kontrast: nichts Dunkles auf Dunklem. Beschriftungen wählen automatisch Cremefarbe/Tusche mit einem Lichthof. Erzwinge nie color="ink", ohne zu prüfen, was darunter ist.
  • Das Tool-Sprite ist klein (0,28 Skalierung), damit es nie die Aufmerksamkeit auf sich zieht.

Signatur-Animation (alles im Code auf den Standbildern)

engine/signature.py, engine/fx2.py, Shot-Helfer engine/wr.py, engine/seq.py. Je ein Standbild davon in examples/chadwick/look/; jedes in Bewegung im Effekte-Testvideo.

  • Lebende Standbilder (das Bild bewegt sich nie; Schichten leben darauf): Partikelrauch aus jedem Schornstein, Atem in der Kälte, lebende Flammen und das Licht, das sie werfen, die eigenen Lampen des Bildes, die gefunden werden und atmen (fx2.lamps), Schnee, Regen, fallende Blätter, Glanzlichter. Keine Pixel-Verzerrung (sg.Flow) bei Rauch, Dampf, Feuer oder Wasser: Es verschmiert das Gemälde (look/flow_smear_avoid.png).
  • Gesichter, die nur dort spielen, wo es wichtig ist: kein automatisches Blinzeln oder Ausdrücke. Ein Gesicht spielt nur, wenn ein Shot act= / talk= übergibt, und nur ein Gesicht mit einem passenden Augenpaar (sg.face_audit([...], out.jpg): spiele nur, wo beide Augen grün umrandet sind). Cues: blinks, glances, widen, mouth_fx, expr (smile, grin, frown, o, laugh, closed eyes, squint...), talk=(ta, tb), Reaktionsmarkierungen (sweat, shake, !, ?, zzz). Eine Handvoll echter Beats pro Batch, niemals Dekoration.
  • Comicseiten auf der leeren Tafel (sg.Comic): Ränder tuschen sich selbst, jedes Panel tuscht sich dann bemalt hinein, die Kamera besucht Panels und taucht in das letzte ein. Zwei pro Film (der Aufhänger, die erste große Action-Sequenz). Jedes Panel hält ≥ 1,8 s.
  • Live-Zeichnungen (fx2.Draw): Ein Blatt tuscht seine Umrisszeichnung in der Strichreihenfolge ein (Stift-Sprite und -Geräusch), dann fließen seine Farblasuren hinein; card=True legt zuerst eine sanfte Cremefarbe auf belebten Bildern. Ein Blatt wird niemals als Seite mit vier gezeigt: Jede Zeichnung erscheint, wenn der Erzähler sie nennt, verbunden durch Pfeile und kurze getippte Beschriftungen.
  • Die Erklärerkarte (eine Base, wiederverwendet): Namen getippt und durchgestrichen, ein Mechanismus als Kette von Zeichnungen mit Pfeilen, drei Zeichnungen mit drei Wörtern.
  • Markierungsvokabular, nach Bedeutung gewählt, niemals dieselbe Markierung jedes Mal: unterstreichen, ankreuzen, durchstreichen, Klammer, Bewegungslinien, Schallringe, Route (gepunkteter Pfad + Pfeil), Führungslinie (Punkt, Linie, getippte Beschriftung), Strichliste; sg.Stamp (Gummistempel-Aufschlag: FORGED, CLOSED, 14 YEARS), sg.Tag (gerissenes Papieretikett), sg.Inset, sg.Flip (Fallblatt), sg.Pin, fx2.Counter (rollender Geldzähler).
  • Effekte mit Gewicht (einige wenige gefühlte Momente pro Batch): fx2.Lift (ein Objekt aus dem Bild ausschneiden und animieren, fill_from= füllt das Loch per Clone-Stamp), fx2.Tear (das Bild reißt in zwei Teile), der ("shatter", s, (cx, cy))-Übergang, sg.Papers (umherwirbelnde Papiere), Feuer + Schlag, Schütteln + Bums, Presseblitze + Verschluss, sg.Rays, sg.Haze.
  • Die lebende Karte (seq.map_shot): echte Küstenlinien tuschen sich ein, Wasser fließt hinein, Grenzen eilen hinein, Seen und Städte werden getippt, eine rote Reiseroute...

Verwandte Skills