Reel prêt, rendu sur votre machine
Avec une demande comme « crée un reel sur les 3 erreurs des débutants en course à pied, pour mon profil de course », vous fournissez le reel prêt : accroche, script scène par scène, narration, musique et le MP4 vertical 1080×1920, rendu localement avec Remotion. Rien n'est envoyé à l'application de montage.
La vidéo est typographique : fond sombre avec un léger éclat, scènes avec titre large, liste numérotée, nombre animé, carte avant/après et bloc final « Commente MOT-CLÉ », avec la légende apparaissant mot par mot au centre, alternant gras et italique.
<skill> ci-dessous est le dossier de cette compétence (où se trouve ce SKILL.md).
Prérequis
- Node 18 ou plus récent (
node -v). Obligatoire. - ffmpeg (optionnel). Uniquement pour normaliser le volume de la musique. Sans lui, la musique reste telle quelle. Mac :
brew install ffmpeg. Windows :winget install ffmpeg. Linux :sudo apt install ffmpeg. - Clé ElevenLabs (optionnelle). Sans elle, le reel n'aura pas de voix, seulement une légende animée et une musique.
- Environ 600 Mo libres pour Remotion (installé une fois) et le navigateur qu'il télécharge lors du premier rendu. Connexion Internet nécessaire au premier rendu pour télécharger les polices Google Fonts.
Le processus, en 7 étapes
1. Entretien rapide (un seul message)
Posez toutes les questions en une fois, avec une suggestion standard entre parenthèses, pour que la personne réponde en une ligne. Si elle a déjà mentionné quelque chose dans la demande, ne reposez pas la question.
- Niche et profil : de quoi parle le profil ?
- Public : qui regarde ? (débutant dans le sujet)
- Objectif du reel : portée, enregistrement, ou générer un commentaire pour envoyer un contenu ? (commentaire)
- Appel à l'action (CTA) : quel mot la personne commente-t-elle et que reçoit-elle ? (ex. : « Commente GUIDE et je t'envoie le guide »)
- Ton : direct, didactique, provocateur, léger ? (direct)
- Voix et musique : avez-vous une clé ElevenLabs ? Avez-vous une musique (MP3 perso ou libre de droits) ? Voulez-vous des couleurs spécifiques ? (pas de voix, pas de musique, thème sombre avec surbrillance jaune)
Ne demandez jamais à la personne de coller sa clé dans le chat. Elle la mettra dans le fichier .env (étape 4).
2. Accroche et script
Écrivez avant tout code et montrez sous forme de bloc : accroche, scènes numérotées (type + ce qui apparaît à l'écran + la parole) et la durée estimée. Demandez l'accord avant de générer la narration, car la narration consomme du crédit ElevenLabs. Sans narration, vous pouvez continuer directement si la personne a demandé « fais-le simplement ».
Accroche (scène 1, jusqu'à 2 secondes)
- Au maximum 6 ou 7 mots prononcés. Si plus, ce n'est pas une accroche, c'est une introduction.
- L'écran affiche déjà l'accroche entière dès la première image (le type
accrochele fait). - Formats qui accrochent : question sur la douleur (« Tu t'entraînes tous les jours et rien ne change ? »), affirmation contre le sens commun (« Poster tous les jours te nuit »), nombre concret (« 3 erreurs qui bloquent ton premier 5 km »), conséquence (« Ceci te fait perdre un client en direct »).
- Pas de « Salut tout le monde », « Dans cette vidéo », « Savais-tu » ou présentation personnelle.
Script (20 à 45 secondes au total)
- De 4 à 8 scènes. Chaque scène entre 1,5 et 6 secondes : au rythme de 2,9 mots par seconde, cela donne de 5 à 17 mots de parole par scène.
- Parole continue, non hachée. Le texte de toutes les scènes, lu en séquence, doit sonner comme une personne parlant sans s'arrêter : chaque scène continue la phrase ou l'idée de la précédente. Pas de phrases d'un seul mot, de points de suspension pour « faire une pause » ou de listes sans verbe. Écrivez d'abord le texte fluide entier, puis découpez-le en scènes.
- Une idée par scène. L'écran montre la version courte (titre, éléments, nombre) ; la parole explique.
- Nombres courts en chiffres dans la parole (« 23 heures », « 1,6 gramme ») pour que la légende soit claire.
- Promesse seulement de ce qui est vrai. N'inventez pas de statistique : si vous n'avez pas de source, utilisez un autre type de scène.
- La dernière scène est toujours
cta, et la parole prononce le mot à voix haute (« Commente GUIDE et je t'envoie le pas à pas »).
3. Monter le studio (une fois) et le dossier du reel
Le studio est un dossier avec Remotion installé ; chaque nouveau reel est simplement un sous-dossier contenant son cenas.json, donc le npm install ne se fait qu'une seule fois.
# première fois
cp -R <skill>/template ~/reels-studio
cd ~/reels-studio && npm install
# pour chaque reel (remplacez <slug> par un nom court, ex. : 3-erreurs-course)
mkdir -p ~/reels-studio/reels/<slug>/public
Écrivez ~/reels-studio/reels/<slug>/cenas.json (format ci-dessous). Le cenas.json à la racine du studio est juste un exemple pour ouvrir le Studio ; nul besoin d'y toucher.
4. Narration (uniquement avec clé ElevenLabs)
La clé se trouve dans ~/reels-studio/.env (copiez depuis <skill>/.env.exemple) :
ELEVENLABS_API_KEY=votre_clé
ELEVENLABS_VOICE_ID=id_de_la_voix # optionnel
Les scripts lisent depuis l'environnement ou ce .env et n'impriment jamais la clé. Ne lisez pas, n'affichez pas et ne copiez pas la clé ailleurs.
cd ~/reels-studio
node <skill>/scripts/narrate.mjs --projet reels/<slug> --simuler # valide, affiche le coût, n'appelle pas l'API
node <skill>/scripts/narrate.mjs --voix-pt # voix pt-BR de la bibliothèque publique
node <skill>/scripts/narrate.mjs --projet reels/<slug> # génère pour de vrai
- Lancez
--simuleravant, toujours. Il valide lecenas.jsonet indique combien de caractères (crédits) la narration va consommer. - Voix : laissez la personne choisir.
--voix-ptliste les voix en portugais brésilien de la bibliothèque publique ; pour en utiliser une, la personne l'ajoute à son compte dans la Voice Library du site (« Add to my voices ») et vous passez--voix <id>ou mettezELEVENLABS_VOICE_IDdans le.env.--voixliste celles déjà présentes dans le compte. Sans choix, le script utilise une voix préconfigurée d'ElevenLabs qui parle portugais avec un accent non natif : prévenez-en. - Le texte entier passe dans un seul appel (
/v1/text-to-speech/{voix_id}/with-timestamps), pour que l'intonation soit continue. Les durées de chaque caractère deviennent la durée de chaque mot (légende synchronisée) et la durée de chaque scène. - Sortie :
reels/<slug>/public/narration.mp3etpublic/mots.json, et lecenas.jsonpointe désormais vers eux. Relancer avec le même texte et la même voix ne consomme pas de crédit ; pour un autre essai,--refaire.--vitesse 1.08accélère (0.7 à 1.2). - La parole a changé après la narration ? Relancez
narrate.mjs. La légende provient de l'audio.
Sans clé : passez cette étape. Le reel sort sans voix, avec la légende animée sur la durée estimée par la parole (2,9 mots par seconde) et la musique, si présente.
5. Musique (uniquement si la personne en fournit)
La musique vient de la personne : un morceau perso ou d'une bibliothèque libre (YouTube Audio Library, Pixabay Music), en respectant la licence de chaque morceau. Ne téléchargez jamais de musique depuis un site de « téléchargement MP3 », une vidéo YouTube ou toute source à la licence douteuse, ni ne suggérez cela. Sans musique, le reel sort sans son.
node <skill>/scripts/mixer.mjs /chemin/vers/musique.mp3 --projet reels/<slug>
node <skill>/scripts/mixer.mjs /chemin/vers/musique.mp3 --projet reels/<slug> --debut 12 # saute l'intro
Avec ffmpeg, le script coupe à la durée du reel (répète la musique si elle est courte), normalise le volume et ajoute un fondu d'entrée et de sortie. Sans ffmpeg, il copie telle quelle. Lors du rendu, la musique reste basse et baisse toute seule lorsqu'il y a de la parole (ducking simple dans la composition). Volume : volumeMusique dans cenas.json, de 0 à 1 (par défaut 0,3 avec narration, 0,8 sans).
Si la personne apporte la musique après la narration, lancez mixer.mjs après narrate.mjs pour que la coupe utilise la durée réelle.
6. Vérifier, visionner et rendre
cd ~/reels-studio
node <skill>/scripts/verifier.mjs --projet reels/<slug>
Corrigez tous les ✖ (erreur) et lisez les ! (avertissements). Ensuite, regardez 3 images avant le rendu (accroche, milieu, CTA). Récupérez les durées dans la sortie de narrate.mjs ou multipliez les secondes par 30 :
npx remotion still Reel out/<slug>-q1.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=30
npx remotion still Reel out/<slug>-q2.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=<milieu>
npx remotion still Reel out/<slug>-q3.png --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public --frame=<fin-20>
Ouvrez les images et vérifiez texte coupé, ligne orpheline et chevauchement. Puis rendez :
npx remotion render Reel out/<slug>.mp4 --props=reels/<slug>/cenas.json --public-dir=reels/<slug>/public
Un reel de 30 s prend de 1 à 4 minutes. Sur une machine peu puissante, ajoutez --concurrency=2. Pour un brouillon rapide, --scale=0.5 (sortie en 540x960).
7. Livrer avec la checklist
Livrez le chemin du MP4 (~/reels-studio/out/<slug>.mp4), le script final et la suggestion de légende pour le post. Avant, confirmez et dites que vous avez vérifié :
- Contraste : la légende se lit bien sur le fond (
verifier.mjsle mesure ; minimum 4,5:1). - Rien de statique plus de ~3 s : aucune scène au-dessus de 6 s et aucune longue pause sans légende.
- Accroche en moins de 2 s, déjà visible dès la première image.
- CTA à la fin, à l'écran et en parole, avec le bon mot.
- Durée entre 20 et 45 s.
- Avec voix : la légende correspond à la parole (visionnez un extrait au milieu du MP4).
- Les PNG de prévisualisation dans
out/peuvent être supprimés.
Le cenas.json
{
"couleurs": { "fond": "#0E0F12", "texte": "#F4F4F2", "surbrillance": "#FFC94A", "doux": "#9A9CA3", "surSurbrillance": "#0E0F12" },
"police": "Inter",
"policeItalique": "Instrument Serif",
"legende": true,
"narration": null,
"mots": null,
"musique": null,
"scenes": [
{ "type": "accroche", "titre": "Tu t'entraînes tous les jours et rien ne change ?", "surbrillance": "rien ne change",
"parole": "Tu t'entraînes tous les jours et rien ne change ?" },
{ "type": "titre", "titre": "Le problème n'est pas l'entraînement.", "sousTitre": "C'est ce qui se passe les autres 23 heures.",
"parole": "Le problème n'est presque jamais l'entraînement, c'est ce que tu fais les autres 23 heures." },
{ "type": "liste", "titre": "Les 3 ennemis",
"items": ["Dormir moins de 7 heures", "Manger peu de protéines", "Répéter la même charge"],
"parole": "Trois ennemis : dormir moins de sept heures, manger peu de protéines et répéter la même charge pendant des mois." },
{ "type": "nombre", "de": 0, "a": 1.6, "decimales": 1, "suffixe": " g", "etiquette": "de protéine par kilo de poids, par jour",
"parole": "Une référence courante pour qui s'entraîne est 1,6 gramme de protéine par kilo, chaque jour." },
{ "type": "avant-apres", "avant": "Nouvel entraînement chaque semaine", "apres": "Même entraînement, charge croissante",
"parole": "Au lieu de changer d'entraînement chaque semaine, gardez le même et augmentez la charge." },
{ "type": "cta", "appel": "Commente", "mot": "PLAN", "promesse": "et je t'envoie la checklist des 23 heures",
"parole": "Commente PLAN et je t'envoie la checklist des 23 heures." }
]
}
Le même exemple se trouve dans <skill>/exemples/scenes.exemple.json.
Types de scène
Toutes ont un champ parole (obligatoire) et un champ duree en secondes (optionnel ; valable uniquement sans narration).
| type | champs | usage |
|---|---|---|
accroche | titre, surbrillance | Première scène. Très gros titre ; surbrillance est le passage en italique dans la couleur de surbrillance. Si le titre est identique à la parole, la légende ne se répète pas. |
titre | titre, sousTitre, surbrillance | Une affirmation forte. Titre jusqu'à ~50 caractères. |
liste | titre, items (2 à 5) | Éléments numérotés qui apparaissent un par un. Chaque élément jusqu'à ~30 caractères. |
nombre | a, de, prefixe, suffixe, decimales, etiquette | Nombre qui compte jusqu'à la valeur. Ex. : "prefixe": "€ ", "suffixe": "%". |
avant-apres | avant, apres, etiquetteAvant, etiquetteApres | Deux cartes ; l'"après" apparaît au milieu de la scène, en surbrillance. |
cta | mot, appel, promesse | Dernière scène. « Commente » + MOT dans un bloc + ce que la personne reçoit. Mot jusqu'à 9 lettres. |
Couleurs et polices
couleurs: toute couleur#rrggbb. Le défaut est neutre sombre avec une surbrillance jaune. Pour un thème clair, inversezfondettexteet choisissez unesurbrillanceassez foncée. Leverifier.mjsrejette un contraste trop faible.policeetpoliceItalique: noms de familles Google Fonts (ex. :"Montserrat","Playfair Display"). Lapolicedoit avoir un poids de 900. Utilisez"systeme"pour ne rien télécharger. Si la famille n'existe pas ou qu'internet manque, le rendu utilise la police du système.legende: falsedésactive la légende mot par mot.
Problèmes courants
- « mots.json est d'une autre version du cenas.json » : la parole a changé après la narration. Relancez
narrate.mjs. - ElevenLabs 401 : clé erronée ou sans autorisation de text-to-speech. 404 : la voix n'est pas dans le compte ; ajoutez-la via la Voice Library.
- Texte qui dépasse de l'écran : raccourcissez le titre ou les éléments ; le
verifier.mjsprévient pour les longs. - Rendu lent ou bloqué :
--concurrency=2, fermez le navigateur, et vérifiez l'espace disque. - Premier rendu plus long : Remotion télécharge un navigateur headless (une seule fois).
Ce que cette compétence ne fait pas
- Elle ne filme ni n'utilise de vidéo enregistrée, d'image ou d'avatar : le reel est typographique (texte, nombre, cartes). Pour éditer une vidéo filmée, utilisez un autre outil.
- Elle ne clone pas de voix et ne génère pas de voix sans la clé ElevenLabs de la personne concernée.
- Elle ne choisit ni ne télécharge de musique : la musique est toujours fournie par la personne.
- Elle ne publie pas sur Instagram et ne programme pas de publication.
- Le ducking est simple (la musique baisse quand il y a de la parole) ; il ne remplace pas un mixage professionnel.