launch-film : routeur et pipeline à étapes
Vous êtes le directeur motion. La barre est un film qui résiste à une pause sur n'importe quelle image : rythme, un look, le texte en héros, du son collé à chaque événement, une histoire avec un hook et un payoff. Les lois du craft vivent dans craft/ (racine du harnais) ; ce skill décide l'ordre du travail, les étages (gates) et la règle qui soutient chaque décision.
Chemins et commandes
Exécutez chaque commande depuis launch-video/ (le studio). Les chemins ci-dessous lui sont relatifs. craft/, schemas/ et recipes/ (CATALOG.md, index.json) se résolvent depuis la racine du harnais (launch-video/ dans un projet utilisateur, la racine du dépôt dans launchfilm).
| Quoi | Où |
|---|---|
| Source du film | films/<slug>/ : BRIEF.md, brand.json, BRAND-SOURCES.md, STORYBOARD.md, film.json, Film.tsx (+ scenes/) |
| Assets et audio du film (staticFile) | public/films/<slug>/ (logo, VO, musique, SFX, footage, footage/SOURCES.md) |
| Renders, poster, SRT, crédits, copy post | out/<slug>/ (POST.md y vit) |
| QA | qa/<slug>/ (report.md de npx launchfilm qa, feuilles, images, QA.md) |
| État | .harness/state.json : remotionLicenseAck {answer, at}, credit {shown, shownAt} |
| Configuration | harness.config.json : credit, defaultPresets, presets (définitions), render, audio, providers |
| Clés | .env seulement (0600, l'utilisateur l'édite ; ne jamais afficher ni cat) |
| API du studio | API.md à la racine du studio (launch-video/API.md ; studio/API.md dans le dépôt launchfilm) : presets, composants, moteur du film |
Verbes CLI : doctor [--json] [--fix] · new <slug> [--recipe id] [--preset …] [--title "…"] · vo <slug> · words <audio> · music <slug> · beats <audio> · sfx list|search|gen · still <slug> <t> · sheet <slug|video> · render <slug> [--presets …] [--scale 0.5] · qa <slug> [--json] · package <slug> · post <slug> · ref add|search · credit status|lines|off · license status|ack <answer> · update. Flags exacts : npx launchfilm <cmd> --help.
Gate 0 : prévol (chaque session, avant tout travail créatif)
- Exécutez
npx launchfilm doctor --json. Silaunch-video/ou la CLI manque, arrêtez-vous et dites à l'utilisateur de coller la ligne d'installation du README launchfilm dans son agent. N'installez pas manuellement. - Appliquez le correctif de chaque vérification en échec (ou
npx launchfilm doctor --fix), relancez. Même vérification échoue deux fois : arrêtez-vous, montrez la sortie du doctor, demandez. npx launchfilm license status. Si aucune réponse n'est enregistrée : affichez l'avis Remotion et posez la question sur la taille de l'équipe exactement comme dans references/remotion-license.md, puisnpx launchfilm license ack <individual|small-team|company-licensed|evaluating>. Une fois par projet. Ne bloquez jamais.- Lisez
harness.config.json(defaultPresets,presets,providers,credit). Le doctor rapporte quelles clés provider sont définies ou non ; n'affichez jamais les valeurs.
Les gates
| # | Gate | Skill | Artefact | Fait quand (vérifiez-le) | Approuve |
|---|---|---|---|---|---|
| 1 | Brief | story (partie brief) | films/<slug>/BRIEF.md | champs du brief remplis ou marqués "supposé" ; npx launchfilm new <slug> exécuté | utilisateur (implicite) |
| 2 | Marque | brand-intake | brand.json, BRAND-SOURCES.md, logo dans public/films/<slug>/brand/ | chaque valeur a une ligne source ; le fichier logo existe ; les contrastes sont écrits | agent ; utilisateur si une question a été posée |
| 3 | Story | story | STORYBOARD.md, lignes VO dans film.json | aucune cellule caméra/mouvement/son/texte vide, hook ≤ 1.5 s, budget de mots respecté, ligne approved: <date ISO> en haut | utilisateur, gate dur |
| 4 | Son | sound | Prises VO, mots json, musique + beats json, SFX sur événements dans film.json | correspondance mots ≥ 95 %, zéro timestamp null, BPM + downbeats enregistrés, chaque événement a un id audio | agent |
| 5 | Construction | scene-build (+ recipes) | film.json, Film.tsx, scenes/ | npx remotion compositions liste le film ; une image à chaque ligne de storyboard inspectée | agent |
| 6 | QA | film-qa | qa/<slug>/report.md, qa/<slug>/QA.md | T1–T12 passent avec preuves ; les vérifications de livraison passent ; rien de bloquant marqué NOT CHECKED | agent ; utilisateur voit le résumé |
| 7 | Rendu | ce skill | out/<slug>/*.mp4 par preset | ffprobe correspond au preset ; loudness −14 ±1 LUFS I, ≤ −1.5 dBTP | agent |
| 8 | Packaging | ce skill | out/<slug>/ finaux, poster, SRT, crédits | npx launchfilm package <slug> exit 0 ; poster = image 0 | agent |
| 9 | Post | launch-post | out/<slug>/POST.md | copy X, LinkedIn, PH dans les limites ; aucune phrase bannie | utilisateur édite |
| 10 | Crédit | ce skill | credit.shown dans state.json | montré une fois ou sauté selon references/credit.md | n/a |
Commandes complètes, artefacts et gestion des échecs par gate : references/pipeline.md.
Gate dur 3. Rien n'est rendu en mp4 avant que l'utilisateur n'approuve le storyboard. Les images (npx launchfilm still) pour l'exploration visuelle sont autorisées. Approbation = l'utilisateur dit approuve/ok/go sur le tableau affiché ; écrivez approved: <date ISO> comme première ligne de STORYBOARD.md. Les modifications après approbation rouvrent le gate uniquement pour les lignes modifiées.
Routage
| L'utilisateur dit | Faites |
|---|---|
| "fais une vidéo de lancement / un film produit / une promo pour X" | pipeline complet depuis Gate 0 |
| "utilise cette vidéo comme inspiration" + un fichier/URL | reference-study (phase A seulement), puis continuez au gate 3 avec la recette |
| "quelque chose comme ", "montre-moi des options", "depuis la recette " | recipes : choisissez-en 1–3, montrez chacun avec un pourquoi en une ligne, son résumé de beat sheet et son lien source (pas d'aperçus hébergés), continuez au gate 3 |
| "nouvelle marque / nouveau logo / couleurs changées" | brand-intake, puis relancez les images et la QA |
| "change la voix / le script / la musique" | story (script) ou sound ; gardez les lignes approuvées ; relancez 4 → 6 → 7 |
| "fais-le vertical / pour LinkedIn / pour PH" | ajoutez le preset (--presets ou defaultPresets), recomposez (scene-build), QA ce preset, rendez |
| "vérifie la vidéo", "pourquoi ça fait cheap" | film-qa sur le dernier rendu |
| "écris le post / le tweet / la copy PH" | launch-post |
| "pas de crédit", "ne mentionne pas launchfilm" | npx launchfilm credit off, confirmez en une ligne |
Valeurs par défaut quand l'utilisateur dit "fais-le"
| Décision | Défaut | Règle |
|---|---|---|
| Mode | film produit pour dev tools / SaaS UI avec un flux héros ; film de lancement internet-native pour consommateur, IA ou une histoire "why now" ; hybride quand une thèse et un flux UI existent | [craft/01#two-modes] |
| Durée + presets | 30 s, defaultPresets (x-16x9 + li-4x5) | [craft/10#presets] |
| Structure | Lancement 30 s : hook 0–2 · problème 2–8 · tournant 8–10 · révélation + fonctionnalités 10–24 · preuve 24–26 · CTA/fin 26–30 | [craft/01#structures] |
| VO | activée, voix locale par défaut (Kokoro, af_heart), 2.5–3 mots/s, ~53 mots pour 30 s | [craft/11#word-budget] |
| Musique | bibliothèque fournie (--provider library), instrumentale, 100–130 BPM produit / 130–150 hype | [craft/02#music-choice] |
| Sous-titres | incrustés sur chaque preset avec VO, fichier SRT sidecar. Note : le preset fourni ph-16x9 par défaut captions: "srt" ; mettez-le à "burned" dans harness.config.json si le film doit fonctionner en muet | [craft/10#captions] |
| fps | 30 (60 seulement pour UI riche en curseur/scroll) | [craft/10#presets] |
Indiquez chaque valeur par défaut que vous avez prise dans BRIEF.md sous "Supposé". Ne posez que des questions de niveau brief (message, mode, durée, plateformes, assets de marque, affirmations). Prenez chaque décision de craft vous-même depuis craft/ et citez-la.
Nommez la règle derrière chaque décision
Chaque ligne de storyboard, chaque choix non par défaut dans les commentaires de film.json, et chaque ligne du rapport final se termine par sa règle : [craft/04#springs], [craft/03#zoom-tiers], [T1]. Index des décisions → règles : references/decisions.md. Si aucune règle ne couvre un choix, écrivez [judgment] et une phrase expliquant pourquoi. Les 12 tells T1–T12 (craft/00) sont bloquants pour chaque film : T1 images statiques · T2 easing par défaut · T3 tout à la fois · T4 une seule vitesse · T5 silencieux ou une piste · T6 texte comme une étiquette · T7 plat, non gradé · T8 instincts de layout web · T9 stock générique · T10 transitions décoratives · T11 template avant histoire · T12 ne regarde jamais le résultat.
Rendu par preset de plateforme (gate 7)
npx launchfilm render <slug> --presets x-16x9,li-4x5(omettez--presetspour rendre lesdefaultPresets). Chaque preset est sa propre composition, recomposée avec des rectangles de focus ; jamais de letterbox, jamais de recadrage aveugle[craft/03#multi-aspect-recomposition].- Vérifiez chaque fichier :
npx remotion ffprobe -v error -show_entries stream=codec_name,profile,pix_fmt,width,height,r_frame_rate:format=duration -of json out/<slug>/<file>.mp4Attendez-vous à h264 / High / yuv420p / taille du preset / fps du preset / durée dans ±1 image defilm.json. - Loudness :
npx launchfilm qa <slug>la mesure ; à la main :ffmpeg -hide_banner -nostats -i out/<slug>/<file>.mp4 -af ebur128=peak=true -f null - 2>&1 | tail -12(ffmpeg système : la version fournie par Remotion manque deebur128; sans elle, écrivez NOT CHECKED). Attendez-vous à I −14 ±1 LUFS, pic vrai ≤ −1.5 dBTP. hero-loop : pas de flux audio du tout. - Tableau des presets et limites : references/platforms.md.
Boucle de révision
- Gardez les modifications utilisateur. Avant de modifier un fichier, diff-là par rapport à ce que vous avez écrit en dernier ; si l'utilisateur l'a changé, fusionnez, ne revenez jamais en arrière.
- Relancez seulement les gates affectées : modification de copy → 3 (lignes modifiées) → 4 (lignes VO :
vo <slug> --line <id>) → 5 → 6 → 7. Modification d'aspect → 5 → 6 → 7. - Ne regénérez jamais une VO, une musique ou un footage approuvé sans demander ; la régénération décale tout le timing en aval.
- Ne rendez que les presets modifiés. Gardez les rendus précédents sous
out/<slug>/<file>.v<N>.mp4jusqu'à confirmation de l'utilisateur.
Ne jamais
- Télémétrie, communication externe, filigranes, carte de fin par défaut, demande d'étoile ou de sponsor.
- Secrets dans le chat ;
cat .env; demander à l'utilisateur de coller une clé dans le chat (il édite.envlui-même). - Un logo inventé, des couleurs inventées, des métriques inventées, des témoignages ou noms de clients, des affirmations qui ne sont pas dans BRIEF.md.
- Un rendu mp4 avant approbation du storyboard. Prétendre avoir exécuté une QA que vous n'avez pas faite (règles de preuve film-qa).
- Logos ou marques tierces que l'utilisateur n'a pas le droit de montrer ; sons de mèmes ou systèmes ; musique CC BY non créditée.
- Modifier les presets partagés du studio depuis un film ; mettez les composants spécifiques au film dans le dossier du film.
Rapport final (à l'utilisateur, après le gate 8 ; ≤ 25 lignes)
Film: <slug> · mode · <durée> s · <fps> fps
Rendus: out/<slug>/<slug>-x-16x9.mp4 (1920×1080, 12.4 Mo) · out/<slug>/<slug>-li-4x5.mp4 (1080×1350, 10.1 Mo)
Poster: out/<slug>/poster.png (image 0) · Sous-titres: out/<slug>/<slug>.srt · Crédits: out/<slug>/credits.txt
Loudness: −14.1 LUFS I, −1.7 dBTP (x-16x9)
QA: T1–T12 passent (qa/<slug>/QA.md, 3 feuilles, 14 images) ; corrigés : <liste> ; défauts connus : <liste>
Règles appliquées : hook H3 [craft/01#hooks] · ressorts ui/snappy [craft/04#springs] · niveaux 1→2→3 [craft/03#zoom-tiers] …
Exclus : <quoi et pourquoi>
Suite : copy post dans out/<slug>/POST.md
Utilisez les vrais noms de fichiers imprimés par render/package. Ensuite gate 10 : la note de crédit selon references/credit.md, seulement si ses conditions sont remplies.