promo-video
Un film se réalise en six étapes. Chaque étape se termine par quelque chose que l'humain vérifie. N'allez pas en avance : l'étape coûteuse (la construction) n'est bon marché que si les précédentes sont réglées, car chaque événement image est placé par rapport à la musique et à la voix.
Expliquez le plan à l'humain une fois au début (le README.md contient la version destinée à l'humain), puis exécutez les étapes dans l'ordre. Parlez-lui dans son langage. Conservez tous les fichiers du projet dans un seul répertoire (<projet>/ : audio/, vo/, PLAN.md, elevenlabs.md, le projet Remotion dans video/).
| # | Étape | Vous faites | L'humain fait | Référence |
|---|---|---|---|---|
| 1 | Musique | analysez le morceau, trouvez le tempo réel et les marques fortes | choisit le morceau sur Epidemic Sound, utilise Create a cut pour la durée, vous donne le fichier | references/01-music.md |
| 2 | Storyboard | posez les questions directrices, écrivez PLAN.md (tableau de plans minuté sur la musique) | répond, approuve | references/02-storyboard.md |
| 3 | Script voix | écrivez les répliques + la prise étiquetée ElevenLabs | la génère dans ElevenLabs, envoie le fichier | references/03-voiceover.md |
| 4 | Couper la voix | ouvrez cut_ui.py sur la prise, puis découpez, nivelez, placez chaque réplique | clique entre les lignes dans la page navigateur, appuie sur Terminé ; vérifie le tableau de placement | references/03-voiceover.md |
| 5 | Construction | projet Remotion depuis template/, scène par scène, vérifiez chaque image fixe | examine les images fixes / un rendu provisoire | references/04-build.md |
| 6 | Révision + polissage | rendu, vérification du volume sonore, ouvrez review_ui.py sur le rendu, lisez ses notes + images, corrigez, re-rendez | regarde dans la page de révision, laisse des notes sur l'image, choisit Approuvé / Modifications nécessaires | references/05-review.md |
Automatisation du navigateur : proposez-la, ne la présumez jamais
Les étapes 1 et 3 se déroulent sur des sites web (Epidemic Sound, ElevenLabs). Si une compétence ou un outil d'automatisation de navigateur est disponible (par exemple ego-browser, une configuration Playwright, un MCP navigateur), proposez d'effectuer ces parties vous-même, et expliquez clairement ce que cela implique avant de demander un accord :
- Comptes : les deux sites nécessitent un compte (Epidemic Sound est un abonnement payant avec un essai ; ElevenLabs a un niveau gratuit avec un quota mensuel de caractères). Si l'humain n'en a pas, c'est lui qui s'inscrit : vous ne créez pas de comptes.
- Coût : ElevenLabs facture au nombre de caractères ; un film de 40 à 60 secondes représente environ 600 à 1000 caractères, et chaque nouvelle génération est facturée à nouveau. Les téléchargements Epidemic sont déduits du forfait. Indiquez à l'humain le coût prévu et demandez son accord d'abord.
- Connexion et paiement sont de la responsabilité de l'humain : passez la main au navigateur (
task.handOff()dans ego-browser) pour la connexion, l'authentification à deux facteurs, les captchas et tout écran de paiement ; reprenez la main après qu'il a dit avoir terminé. Ne tapez jamais son mot de passe, n'entrez ni ne stockez jamais les informations de carte bancaire, ne collez jamais sa clé API dans une page ou un fichier. - Ce que vous pouvez faire après un accord : chercher/filtrer les morceaux selon l'ambiance et le BPM convenus et ouvrir des candidats pour qu'il les écoute (c'est lui qui choisit), cliquer sur Create a cut avec la durée cible et télécharger le résultat ; coller la prise
elevenlabs.md, appliquer la voix et les réglages qu'il a choisis, générer une fois, télécharger le mp3. - Sans un tel outil, ou s'il refuse : donnez-lui les étapes exactes (documents des étapes 1 et 3) et attendez le fichier.
Les choix restent les siens : le morceau et la voix ne sont jamais choisis à sa place.
Règles de base (apprises à la dure)
- Tout ce qui est montré est réel. Maillages d'exemple réels (tesselez le CAO/STEP réel), code et API réels dans les panneaux de code, l'interface utilisateur reconstruite à partir des propres composants frontend du produit. Un contenu qui semble faux est la seule chose que les spectateurs remarquent. Si vous ne pouvez pas obtenir le vrai, dites-le et demandez — ne l'inventez pas.
- La musique est l'horloge. Mesurez le tempo réel (
scripts/music_analyze.pyl'ajuste ; un BPM estimé qui est à 1,2 % de décalage place une coupe à un tiers de temps de retard et l'humain entend un faux pas). Tous les temps vivent danssrc/marks.ts; les scènes les importent, ne codent jamais en dur les secondes. - Confirmez les étapes tournées vers l'extérieur ou coûteuses : le fichier musical et la voix sont à choisir par l'humain ; vous ne les choisissez jamais à sa place. N'imprimez jamais les clés API ou les jetons de connexion qui apparaissent dans le produit que vous filmez.
- Vérifiez les images avec des images fixes, pas par foi : faites le rendu des images aux marques (temps forts, coupes, le logo) et regardez-les avant un rendu complet. Un rendu complet prend des minutes ; une image fixe prend des secondes.
- Conservez l'ancienne version. Lorsque l'humain demande une version raccourcie ou une variante, copiez le répertoire du projet et modifiez la copie (
cp -R video video_court, lien symboliquenode_modules). - Rapportez en éditeur : ce qui a changé, le chemin du fichier, ce qu'il faut écouter/regarder et à quelle seconde.
Outils de cette compétence
Tous les scripts Python s'exécutent avec uv run (les dépendances sont déclarées dans chaque fichier ; rien à installer).
| Script | Objectif |
|---|---|
scripts/music_analyze.py track.wav --out beats.json | BPM réel (ajusté), grille temps/temps forts, sections, drop, silences |
scripts/music_splice.py track.wav out.wav --beats beats.json --keep a:b --keep c:d | raccourcir un morceau par un saut aligné sur les temps forts avec fondu enchaîné ; vérifie la jonction |
scripts/cut_ui.py take.mp3 --mode cuts --script elevenlabs.md --out vo/cuts.json | page de découpe dans le navigateur (forme d'onde, script affiché ligne par ligne, parole vs silences, zoom, annuler/rétablir) : l'humain joue et clique là où une ligne se termine, appuie sur Terminé, l'onglet se ferme et cuts.json arrive pour vous. --mode marks --beats beats.json marque le drop/coupure/pont de la musique sur la grille des temps forts |
scripts/vo_cut.py take.mp3 --regions vo/cuts.json --out vo/ | découper une prise ElevenLabs en clips nivelés + clips.json (ou --lines N --ends t1,... si l'humain préfère taper les temps) |
scripts/review_ui.py out/promo.mp4 --out review/review.json [--overlay overlay.json] | page de révision dans le navigateur : moniteur en haut, bande de timeline en bas (filmstrip + forme d'onde du mix final + temps forts / marques / lignes voix optionnels). L'humain laisse des notes à un instant ou sur une plage ; chaque note porte l'image exacte ; ils terminent par Approuvé / Modifications nécessaires et review.json arrive pour vous |
scripts/new_project.sh <dir> [--link-modules path] | Projet Remotion depuis template/ (scène métal, horloge des temps forts, mix VO, caméra virtuelle) |
template/tools/mesh.py | Formes STEP/OCC -> maillage compact + arêtes B-rep pour three.js |
template/tools/refold.py | vider les énormes chaînes de métadonnées STEP que OCC ne peut pas lire |
template/tools/variants.py, stages.py | variantes de paramètres du maillage / chaque solide intermédiaire d'un carnet CAO (pour les scènes « glisser un curseur, le modèle suit » et « cellule par cellule ») |
Nécessite : ffmpeg, node 20+, uv. Pour three.js dans Chrome sans tête : playwright's chrome-headless-shell (new_project.sh l'installe).