Communitygithub.com

Moh4696/film-cinématographique

Crée des films cinématographiques narrés entièrement à partir de code, sur n'importe quel sujet. Une caméra continue glisse sur un monde conçu de photos, documents, cartes, routes et grands nombres, avec chaque tampon, surlignement et nombre qui tombe au mot du narrateur, puis des effets sonores, une musique optionnelle et des sous-titres incrustés. Pour documentaires et histoires, lancements de produits, histoires de marques et de fondateurs, explications scientifiques et techniques, biographies et true crime. Couvre le script, le voiceover depuis n'importe quel TTS divisé en prises.

Qu'est-ce que film-cinématographique ?

Ce skill permet de générer automatiquement des films cinématographiques narrés à partir d'un script, d'images et de code, sans nécessiter de montage vidéo traditionnel. L'ensemble du film est produit par un moteur Python (Skia) qui orchestre un mouvement de caméra unique survolant un vaste plateau contenant tous les éléments visuels : photos, documents, cartes, nombres et annotations, synchronisés avec la narration mot pour mot. Idéal pour les documentaires, les histoires de marques, les explications scientifiques ou les biographies, le skill prend en charge plusieurs styles visuels (mur, studio, plan bleu, nuit) et gère la génération d'effets sonores, le mixage audio et l'incrustation de sous-titres. Il nécessite Python 3.9+, skia-python, ffmpeg et quelques dépendances, et propose un workflow structuré en 11 étapes avec quatre points d'approbation utilisateur. Compatible avec macOS, Linux et Windows, il inclut des scripts pour la recherche d'images (Wikimedia Commons), la création de cartes, la synthèse vocale et le rendu parallélisé MP4.

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

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Film cinématographique

Un film réalisé de cette façon est un seul mouvement de caméra sur un seul monde. Chaque photo, carte, découpage, carte géographique et nombre vit sur un grand plateau, et la caméra se déplace entre eux le long de ficelles, d'itinéraires et de flèches au fur et à mesure que l'histoire avance. Chaque point visuel est chronométré sur le mot que le narrateur prononce. Tout est du code (Skia en Python), donc le rendu est identique à chaque fois, n'importe quel sujet convient, et une nouvelle voix retime l'ensemble du film automatiquement.

Construit à partir d'un documentaire de 5:22 sur Al Capone, puis ouvert à n'importe quel sujet. Les règles ici ont été écrites à partir de ce qui a cassé pendant sa fabrication.

Outils

FichierRôle
scripts/check_setup.pyVérifie Python, skia-python, ffmpeg, polices et mémoire ; indique quoi installer
scripts/get_fonts.pyTélécharge des polices libres (Bebas Neue, Homemade Apple) pour tout rôle textuel manquant sur cette machine
scripts/new_project.pyDémarre un projet à partir de assets/template/ (un explicatif exécutable), ou de l'exemple documentaire avec --example
scripts/make_beats.pyÉcrit beats.md, le tableau que vous approuvez ; vérifie la chronologie, la longueur des lignes, les chiffres dans le texte parlé
scripts/tts_say.pyVoix de brouillon gratuite (macOS say, espeak-ng, ou toute commande TTS) pour chronométrer le film avant la voix finale
scripts/split_takes.pyDécoupe les prises de section entière en un clip par ligne et signale les coupes suspectes
scripts/build_narration.pyAssemble les lignes en audio/narration.m4a et audio/timing.json, sur lesquels le film est construit
scripts/fetch_commons.pyRecherche sur Wikimedia Commons, télécharge avec licence et crédit, refuse les fichiers non libres, écrit credits.md
scripts/make_map.pyProjette les frontières du domaine public (n'importe quel pays ou région) pour la carte
scripts/prep_assets.pyUniformise chaque image en un seul look (noir et blanc, sépia ou couleur naturelle) ; génère les textures du plateau
scripts/engine.pyLe moteur du film : caméra, projecteur, éléments, cartes, looks, finition du film
scripts/render.pyImages fixes, bandes contact, la liste de repères, et le rendu MP4 parallélisé
scripts/build_sfx.pySynthétise chaque effet sonore à partir de la liste de repères (pas d'échantillons, rien à licencier)
scripts/mix_soundtrack.pyVoix, effets et musique optionnelle, avec ducking et normalisation du volume
scripts/burn_captions.pyIncruste un des quatre styles de sous-titres dans le film terminé et écrit un fichier SRT

Nécessite Python 3.9+, pip install skia-python numpy pillow (scipy optionnel) et ffmpeg. Exécutez scripts/check_setup.py en premier ; sur Linux ou Windows, exécutez aussi scripts/get_fonts.py par projet. Toutes les commandes prennent --project <dossier>.

Choisir le film

GenreLookImagesÉléments typiques
Histoire, true crime, enquêtewall, slatePhotos d'archives et documents, gradés bwTirages, découpages déchirés, tampons, ficelle rouge, itinéraires cartographiques
Lancement de produit, histoire de marque ou de fondateurstudio, charcoalVos photos de produit et d'équipe, gradés naturalCartes, grands nombres, compteurs, flèches
Science, ingénierie, comment ça marcheblueprint, paperDiagrammes, images d'archives ou d'IACartes, compteurs, marques de stylo, cartes géographiques
Tech, espace, bandes-annoncesnightCaptures d'écran, rendus, images d'IAGrands caractères, compteurs, itinéraires, cartes

Mélangez librement : les looks sont un plateau et une finition, et chaque élément fonctionne sur chaque look. references/story.md contient une structure narrative pour chaque genre.

Les règles

  1. Un héros par ligne. Chaque ligne de narration a exactement une chose sur laquelle la caméra se concentre. Le projecteur assombrit tout le reste.
  2. Les impacts tombent sur le mot parlé. Un tampon claque sur « inculpé », pas au début de la ligne. Chronométrez tout avec doc.W(line, "word").
  3. Montrez une phrase d'une seule manière. Soit tapez-la à l'écran, soit montrez-la sur un vrai document, jamais les deux. Le corps du texte sur les documents est constitué de lignes grises, jamais de mots de remplissage.
  4. Le temps n'avance qu'après l'ouverture. Un début à froid peut sauter en avant. Après une ligne de transition (« Quatre ans plus tôt... »), le temps de l'histoire n'avance que.
  5. Du texte lisible sur un téléphone en une seconde. Grandes capitales condensées. Une étiquette tapée à l'écran doit représenter environ 3% ou plus de la hauteur du cadre.
  6. Moins, c'est plus. Les ficelles s'estompent après leur temps fort, et les anciens éléments s'assombrissent. Le plan de recul final doit sembler composé, pas encombré.
  7. Rien d'inventé qui semble réel. Les vraies photos et documents reçoivent des crédits. Un document dessiné en code est étiqueté comme une reconstitution et ne cite que des mots qui ont réellement été écrits. Les images d'IA sont acceptables pour l'illustration, mais jamais comme preuve d'un événement réel ou d'une personne réelle.

Flux de travail

Faites une pause pour l'approbation de l'utilisateur aux quatre portes (marquées Porte).

  1. Histoire. Recherchez, puis écrivez script.json : prises (sections) de lignes, chacune avec text, spoken (nombres en toutes lettres), hero et typed. Gardez les notes factuelles à côté. 60 à 90 secondes correspondent à environ 150 à 230 mots. Les détails sont dans references/story.md.
  2. Tableau des temps. Exécutez scripts/make_beats.py et corrigez chaque avertissement. Porte : l'utilisateur approuve beats.md, y compris les faits.
  3. Images. Listez chaque image dans photos.json : son identifiant, son type et sa provenance.
    • Images d'archives : fetch_commons.py search, category et get.
    • Fichiers propres à l'utilisateur : déposez-les dans <projet>/assets/photos/.
    • Images d'IA : générez-les dans un seul style (le skill motion-assets les planifie et les estime).
    • references/archive.md couvre les autres archives et les règles de droits.
  4. Voix de brouillon. Exécutez tts_say.py, puis split_takes.py, puis build_narration.py. Écoutez chaque ligne que split_takes.py signale. Maintenant les timings sont réels.
  5. Ressources. Exécutez make_map.py si l'histoire voyage, puis prep_assets.py.
  6. Scène. Écrivez scene.py : disposez le plateau en clusters par section, ajoutez des éléments sur les temps doc.L/doc.W, puis les clés caméra et projecteur (film.shot). Lisez references/film.md. Les deux projets livrés montrent les motifs : assets/template/scene.py (explicatif, look studio) et assets/wright-flyer/scene.py (documentaire, tous les types d'éléments).
  7. Test du look. Exécutez render.py --probe sur une image fixe par ligne en 1280x720 et regardez-les toutes, puis --strip sur chaque grand mouvement de caméra. Porte : montrez à l'utilisateur les images fixes de l'ouverture et du look.
  8. Brouillon. Rendez les 30 premières secondes en 1280x720 avec la voix de brouillon. Porte : l'utilisateur le regarde.
  9. Voix finale. Enregistrez-la avec n'importe quel TTS ou une personne (references/voice.md). Exécutez split, build et probes à nouveau ; rien dans la scène ne change.
  10. Son. Exécutez render.py --cues, puis build_sfx.py, puis mix_soundtrack.py, en ajoutant une musique si souhaité. Lisez references/sound.md.
  11. Finition. Effectuez le rendu complet, puis burn_captions.py et le SRT. Lisez references/performance.md avant de rendre en 1440p ou 4K. Remettez credits.md avec le film.

Auto-évaluation, à chaque fois

Regardez les images fixes avant de prétendre que quoi que ce soit fonctionne. Voici les erreurs qui sont apparues, chacune dans un rendu réel :

  • Encre foncée sur un plateau foncé : invisible. Utilisez des caractères clairs sur les looks sombres, ou bar_h=0.92 pour un bloc d'étiquette complet derrière des caractères sombres.
  • La caméra s'est déplacée mais le projecteur est resté, laissant un cadre sombre. Utilisez film.shot() sauf s'ils doivent se séparer.
  • Échelle de carte trop petite : une côte entière plus petite qu'une photo. Choisissez K pour que chaque lieu avec des tirages ait sa propre pièce (references/film.md).
  • Étiquettes de carte qui se chevauchent. Placez l'étiquette du côté opposé à son voisin.
  • Un cluster à cheval sur le bord de la carte. Gardez les clusters soit sur la carte, soit clairement en dehors.
  • Surlignages décalés de quelques pixels par rapport à leurs mots. Utilisez PaperDoc.phrase_spans, et doc.on(print, fx, fy) avec des fractions lues sur une grille superposée à l'image.

Projets livrés

  • assets/template/ : « From Cherry to Cup », un explicatif de 25 secondes en look studio, composé de cartes, flèches et un compteur, sans images. new_project.py mon-film le copie. Donnez-lui une voix de brouillon et il se rend.
  • assets/wright-flyer/ : « Twelve Seconds », un documentaire de 90 secondes sur le premier vol et le rival à 50 000 $ qui s'est écrasé deux fois. Il utilise sept photos du domaine public, la carte des États-Unis, deux documents typographiés et tous les types d'éléments.
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

Skills associés

De Open 3D Skills : motion-assets planifie et estime les images d'IA lorsqu'un film a besoin d'illustrations, et frame-capture enregistre des pages web au lieu de films dessinés en code.

Skills associés