Court métrage programmatique (short-film)
Transforme un thème en un court métrage : environ 30 secondes (15–90 secondes possibles), vertical 1080×1920, 24 fps ; plans alternant entre un style « papier » (paper plate) au trait manuscrit et un style « blueprint » (blueprint plate) sur fond bleu ; chaque événement est calé sur une grille de temps (bpm → temps → image) ; chaque pixel et chaque échantillon audio sont calculés en pur JavaScript dans le navigateur. La livraison se compose de dist/<slug>.html (un lecteur autonome), exports/<slug>.mp4 (ainsi que ses versions mobile et aperçu), et d'un pack de publication : une image de couverture TikTok (capture d'écran HTML), un titre et une description recommandés.
Ce skill encapsule un pipeline éprouvé. Il embarque trois éléments :
foundation/— le moteur et les outils, qui sont copiés dans le nouveau projet :src/core.js,src/lib.js,src/player.js,src/music.js(moteur + une musique d'exemple), ettools/(construction, vérification, capture d'écran, rendu, génération de stubs, analyse audio, pack de publication, fixtures de test). Tout est piloté parsrc/timeline.js, donc chaque film n'a pas besoin de modifier le code des outils.templates/— quatre documents de planification qui servent de point de départ pour chaque film.reference/— à consulter si nécessaire : types de plans, anatomie d'une scène, musique, presets plateforme ; regardez d'abord les trois images de référence.
Consultez reference/ : contact-sheet.jpg est la feuille de contact complète du film d'exemple (examples/llm-evolution, un style « ATLAS » personnalisé) — ce niveau de détail et de finition est la ligne directrice ; paper-frame.jpg et blueprint-frame.jpg sont une image entière de chaque style par défaut (rendues par tools/fixtures), et les films utilisant le style par défaut les prennent comme cible visuelle.
Un exemple complet se trouve dans examples/llm-evolution/ : un film de 24 plans allant du neurone aux grands modèles d'IA, avec documents de planification, code source, dist/ et pack de publication. Notez qu'il s'agit d'un résultat personnalisé (ayant dévié du style papier×blueprint par défaut via une analyse de référence), montrant toute la capacité de ce skill. Quand un template vous laisse incertain sur l'apparence d'un document rempli, allez voir son équivalent là-bas.
Le portail (The gate)
node tools/check.cjs est le portail : six vérifications (analyse des médias, déterminisme, analyse du code source, timeline, dessin, temps par image) ; un code de sortie 0 signifie succès. À partir de l'étape des stubs, si le portail est rouge, aucune étape n'est considérée comme terminée. Pour un vrai film, cela prend moins d'une minute — laissez-le finir.
Pipeline
0. Brief
Une seule série de questions : quel est le sujet, que doit contenir impérativement le film à son sujet, durée (30 secondes par défaut), et sur quelle plateforme publier (détermine le format et la zone de sécurité, voir reference/platform-presets.md). Le reste est inventé, et vous expliquez ce que vous avez inventé.
Critère de complétion : le sujet est reformulé en une phrase que l'utilisateur a vue, et la durée ainsi que la plateforme sont déterminées.
1. Configuration (Setup)
Créez un dossier de projet nommé avec le slug du film, copiez foundation/ dedans. Lancez npm install dans tools/ (Playwright ; si le navigateur manque, ajoutez npx playwright install chromium), vérifiez que ffmpeg est dans le PATH, ou définissez la variable FFMPEG avec le chemin du binaire. Copiez les templates dans docs/, écrivez le sujet dans le Goal de docs/CONTRACT.md.
Critère de complétion : node tools/smoke.cjs passe, node tools/check.cjs --fixtures est vert, et node tools/render.cjs --fixtures --scale 0.5 produit exports/fixtures.mp4 avec son. Ce mini-film fixtures prouve que la chaîne d'outils fonctionne avant d'investir du temps dans la planification.
2. Recherche (Research)
Listez les étapes de l'histoire du sujet, faites une recherche web pour chaque question non résolue, capturez deux à quatre sources complètes et autoritaires dans .tmp/research/. La recherche aboutit finalement à deux endroits aval : les références thématiques de la bible artistique, et la section Subject de chaque plan.
Critère de complétion : chaque étape de l'histoire peut être retracée jusqu'à une source capturée.
3. Bible artistique (Art bible)
Remplissez docs/art-bible.md selon le template. Les sections 1 à 9 sont le style existant — déjà définies ; la section 2.2 (palette thématique, chaque couleur avec un nom hexadécimal, et miroir vers le bloc annoté dans src/lib.js), la teinte d'identité de la section 2.3, et la section 10 (références thématiques) sont réécrites pour chaque film. La section 10 se termine par une liste d'« erreurs à éviter », chaque erreur accompagnée d'une illustration correcte.
Si l'utilisateur veut un aspect différent du style existant, commencez par une analyse de référence selon templates/reference-analysis.md, puis mettez à jour les sections 1 à 9 en conséquence.
Critère de complétion : chaque élément que le storyboard dessinera a des règles de dessin et un nom de palette ; src/lib.js est cohérent avec la section 2.2 ; la liste d'erreurs existe ; et vous avez exécuté node tools/snap.cjs --fixtures --shot palette --samples 5 --sheet.
4. Storyboard
Lisez reference/shot-types.md, remplissez docs/storyboard.md selon le template : logline ; chiffres (choisissez d'abord le bpm, temps = 60/bpm secondes, durée sur un nombre entier de mesures) ; tableau récapitulatif ; actes mappés sur les mesures ; une table de géométrie partagée pour chaque forme qui survit à travers les cuts assortis ; puis une entrée par plan — 1 à 3 secondes, limites sur la grille de temps, alternance des deux styles — contenant les huit sous-sections, les indications Sound horodatées sur la grille.
Critère de complétion : les plans s'enchaînent parfaitement sur [0, duration] ; chaque plan a les huit sous-sections ; chaque forme de cut assorti a une table de géométrie partagée ; le document résiste à un auto-examen critique (les chiffres dans le texte correspondent aux tableaux, le contenu essentiel est dans la zone de sécurité — les éléments arithmétiques aussi). Les erreurs de storyboard se propagent dans chaque scène ; c'est le moment le moins coûteux pour les attraper.
5. Timeline
Écrivez src/timeline.js selon le storyboard (format décrit dans le template du storyboard) : titre, bpm, durée, tableau shots (id, file, start, end, mode, title, transitionIn, brief), et une liste plate de cues issues de chaque section Sound. L'étape des stubs est le test de cette étape — un format de timeline incorrect échouera bruyamment.
6. Stub pass
node tools/stubgen.cjs génère des scènes factices pour chaque plan, lancez le portail, puis node tools/render.cjs --scale 0.5 --out exports/draft-stubs.mp4 et regardez le brouillon du début à la fin. C'est la balle traçante : avant que toute scène réelle soit dessinée, prouvez que la timeline, les scènes, le portail, le rendu et l'audio fonctionnent.
Critère de complétion : le portail est vert, et le MP4 brouillon affiche chaque plan dans l'ordre, chaque transition sur la grille.
7. Scènes
Un agent par fichier de scène — la propriété du fichier fait loi (docs/CONTRACT.md). Chaque agent de scène lit reference/scene-anatomy.md, l'entrée correspondante du storyboard, la bible artistique et la géométrie partagée, puis écrit src/scenes/NN-<id>.js, capture une feuille de contact (node tools/snap.cjs --shot <id> --samples 6 --sheet) et examine chaque image, itère jusqu'à ce que le brief soit respecté. snap --only peut rendre un seul plan quand les fichiers voisins ne sont qu'à moitié écrits, donc les agents de scène peuvent travailler en parallèle librement.
Les plans peuvent aussi partager un module de dessin commun (disposition centralisée, voir docs/CONTRACT.md « Deux dispositions pour le code de scène ») — dans ce cas, chaque src/scenes/NN-*.js n'est qu'un wrapper d'enregistrement de quelques lignes, et le dessin est centralisé dans FILM.art. L'exemple examples/llm-evolution utilise cette approche ; elle est plus efficace quand les plans partagent la même géométrie et ne diffèrent que par les paramètres.
Critère de complétion : la feuille de contact de chaque plan a été inspectée visuellement et jugée conforme au brief, et le portail est vert.
8. Musique (Music)
Écrivez src/music.js selon reference/music.md : conservez le moteur, remplacez le tableau CH, l'automation MIX.ride et toute la fonction score(), implémentez chaque cue de FILM.TIMELINE.cues aux moments exacts, en faisant en sorte que les accents tombent sur les transitions.
Critère de complétion : après node tools/audio/render-audio.cjs, node tools/audio/analyze.cjs .tmp/audio/score.wav --cues montre que les départs et les cues correspondent à moins de 10 ms, node tools/audio/peaks.cjs .tmp/audio/score.wav montre que la marge est sous la limite du limiteur, et le portail est vert.
9. Vagues de critique (Critic waves)
D'abord, mettez le film entier sur une seule feuille : node tools/snap.cjs --samples 24 --sheet --scale 0.25. Les plans illisibles à cette échelle sont des P1 — corrigez la composition, n'ajoutez pas de détails.
Ensuite, examinez chaque plan basé sur les images rendues : recapturez une feuille de contact, utilisez un sous-agent critique pour noter la composition, la fidélité au storyboard, le mouvement, la densité. Le critique doit mesurer les proportions clés au niveau pixel (bande, règle des tiers, arithmétique de zone de sécurité, positions de géométrie partagée), et non se fier seulement aux yeux ; et capturez les deux côtés de chaque cut assorti pour comparaison.
Corrigez par vagues — priorité aux P1, chaque correction cite la preuve (image), conservez la propriété du fichier (restaurez l'agent propriétaire), recapturez après chaque correction. Le réalisateur vérifie chaque correction P1 sur les nouvelles images, de manière aléatoire. Vérifiez le déterminisme en capturant la même image dans deux ordres différents et en comparant les hachages.
Critère de complétion : chaque correction P1 et P2 a été vérifiée sur les nouvelles images, et le portail est vert.
10. Livraison (Deliver)
node tools/render.cjs écrit la version master (crf 16). Puis transcodez :
ffmpeg -i exports/<slug>.mp4 -vf scale=720:1280 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k exports/<slug>-phone.mp4
ffmpeg -i exports/<slug>.mp4 -c:v libx264 -crf 23 -preset medium -c:a copy exports/<slug>-preview.mp4
node tools/build.cjs écrit dist/<slug>.html. Puis visionnez le master du début à la fin avec le son, et ouvrez une fois le lecteur HTML (clic ou espace pour jouer, flèches pour avancer image par image, ?shot=<id> pour boucler un seul plan).
Écrivez exports/<slug>-shots.md : une ligne par plan, décrivant ce qu'il montre.
Critère de complétion : le master, la version mobile, le fichier HTML, et exports/<slug>-shots.md existent, le portail est vert, et le visionnage final n'a révélé rien à corriger.
11. Pack de publication (Publish pack)
Utilisez tools/publish.cjs pour générer une image de couverture et un squelette de texte prêts à publier :
node tools/publish.cjs # Prend par défaut l'image d'accroche du 1er plan
node tools/publish.cjs --at 2.5 --title "D'un neurone à une machine de langage" --platform tiktok
Il fait deux choses :
- Image de couverture (capture d'écran HTML, 1080×1920 par défaut) : rend une image du film au moment
--atcomme visuel principal, superpose titre/sous-titre/logo, sortexports/<slug>-cover.png. La page de couverture peut utiliser des polices système et des images, car elle n'entre pas dans le HTML livré et ne viole pas la règle « sans médias ». - Squelette de texte
exports/<slug>-publish.md: suggestions de titres, description, hashtags, liste des plans, durée/format/plateforme, etc. : le titre et la description sont un point de départ, que vous peaufinez en recommandation finale selon les règles dereference/publish.md.
Critère de complétion : exports/<slug>-cover.png a été généré et examiné visuellement (titre dans la zone de sécurité, lisible, accrocheur) ; le titre et la description dans exports/<slug>-publish.md ont été peaufinés par vous en recommandation finale ; la plateforme et le format correspondent au brief de l'étape 0.