recipes
Une recette est un film de lancement publié, étudié et retranscrit pour qu'un agent puisse reconstruire son savoir-faire pour un autre produit.
Elle se trouve dans <studio>/src/recipes/<id>/ :
| Fichier | Toujours | Ce qu'il vous donne |
|---|---|---|
recipe.md | oui | quand l'utiliser, la feuille de beats (temps, images, image, caméra, mouvement, transition, son), les techniques liées au savoir-faire, ce qu'il faut adapter, les pièges, les composants manquants |
recipe.json | oui | les mêmes données au format structuré (schéma schemas/recipe.schema.json) : structure[], techniques, audio, inputs, components, source |
Recipe.tsx + index.tsx | uniquement si status: "built" | code prêt : un composant paramétré par brand + content, enregistré avec une marque de démonstration |
La plupart des recettes sont uniquement textuelles (status: "studied"), ce qui suffit pour construire : vous rédigez les scènes à partir de la feuille de beats en utilisant les préréglages et les composants du studio. Une recette ne contient jamais le film source, ses images ou son texte ; le lien source permet à l'utilisateur de visionner la référence.
Exécutez les commandes depuis launch-video/ (utilisateur) ou studio/ (dépôt launchfilm). recipes/ et schemas/ se trouvent à la racine du harnais (launch-video/ dans un projet utilisateur, la racine du dépôt dans launchfilm).
1. Savoir ce dont vous avez besoin (d'après BRIEF.md / STORYBOARD.md)
Notez avant la recherche : le(s) préréglage(s) (format), la durée cible, le mode (film produit / film de lancement / hybride), le thème (sombre/clair d'après brand.json), voix off oui/non, les beats à couvrir (hook, feature, logo…), et les entrées réelles de l'utilisateur (logo, captures d'écran, enregistrement d'écran, UI reconstruisible, statistiques, URL).
2. Rechercher
Parcourez recipes/CATALOG.md (une ligne par recette, regroupée par famille : format, techniques principales, entrées, source, texte/code), ou recherchez :
npx launchfilm ref search "statement vertical dark" # recherche libre sur titre, résumé, tags, techniques
npx launchfilm ref search "launch aspect:9:16 max:30 theme:dark" # filtres : family: aspect: tech: theme: max: min: status:
Ou filtrez recipes/index.json directement (champs : references/index-format.md) :
node -e '
const idx=JSON.parse(require("fs").readFileSync("recipes/index.json","utf8")).recipes;
const want={aspect:"9:16",dur:30,techniques:["statement-sequence","end-card"],theme:"dark"};
for(const r of idx){const t=r.techniques.filter(x=>want.techniques.includes(x)).length;
if(r.format.aspect===want.aspect||t>0) console.log(r.id,r.format.aspect,r.format.duration_s+"s",r.theme,r.vo?"vo":"-",t,r.code?"code":"text");}'
Pas d'index ? Parcourez src/recipes/*/recipe.json et lisez-les.
3. Noter et sélectionner 1 à 3
| Critère | Points |
|---|---|
format.aspect correspond au format du préréglage principal | +3 (une recomposition est possible mais coûte du travail) |
format.duration_s est à ±30 % de la durée cible (ou la recette couvre le beat nécessaire) | +2 |
| chaque technique chevauchant les besoins du story-board | +1 (max +4) |
chaque entrée inputs dont la recette a besoin est disponible chez l'utilisateur | +2 ; toute entrée manquante qui ne peut pas être créée |
theme correspond au thème de brand.json | +1 |
vo correspond au plan | +1 |
code: true (Recipe.tsx prêt) et l'utilisateur est pressé | +1 ; status: "reviewed" |
render_cost élevé alors que l'utilisateur est sur un ordinateur portable ou pressé | −1 |
Le texte par rapport au code est un bonus de rapidité, pas un filtre de qualité : une recette textuelle qui correspond au brief est meilleure qu'une recette codée qui ne correspond pas. Prenez la meilleure pour un film complet, ou jusqu'à 3 pour différents beats (accroche de A, fonctionnalités de B, carte de fin de C).
4. Afficher les sélections
Pour chaque sélection, montrez à l'utilisateur :
- title (
id), ettextoucode; - une ligne expliquant pourquoi elle correspond à son brief (format, durée, beat couvert, entrées disponibles) ;
- la feuille de beats en 3 à 6 lignes courtes (
0–3.1 s hook: name blurs in word by word…), résumée à partir de recipe.md ; - le lien source (
source.url) pour qu'il puisse regarder l'original lui-même. Il n'y a pas d'aperçus hébergés.
Dans une session accompagnée, laissez-le choisir. S'il a dit « décide toi-même », prenez la meilleure note et indiquez-le en une ligne.
5. Lire la recette
Lisez intégralement le fichier recipe.md choisi : la feuille de beats, le mouvement en images et les ressorts nommés, les transitions, le son sur chaque événement, « Ce qu'il faut adapter », « Pièges », « Composants manquants ». Lisez recipe.json structure[], audio, inputs, components. Ces nombres sont le savoir-faire que vous réutilisez ; l'image et le texte seront ceux de l'utilisateur.
6. Échafauder
npx launchfilm new <slug> --recipe <id> --preset x-16x9 [--title "Produit"] [--dry-run]
- Recette avec code :
films/<slug>/Film.tsxobtient une scènerecipequi affiche le composant de la recette avec ses valeurs par défaut ; vous modifiez ses propriétéscontent(recipe.jsonparams) et transmettez la marque. - Recette textuelle :
film.jsonobtient un plan par ligne de la feuille de beats (les temps de la recette, ses transitions et effets sonores), etFilm.tsxobtient unTodoScenepar plan avec l'image, la caméra, le mouvement et le son de la ligne sous forme de commentaires. Le CLI affiche la liste des TODOs. Un TodoScene affiche un espace réservé étiqueté, etnpx launchfilm qaéchoue (B1) tant qu'il en reste un. - Les deux copient
recipe.mdversfilms/<slug>/RECIPE.mdet pré-remplissentSTORYBOARD.mdavec les lignes de la recette. - Combinaison de recettes : échafaudez à partir de celle qui possède le plus de temps d'exécution, puis ajoutez les lignes des autres recettes en tant que plans (leur composant
Recipeen tant que scène si elles ont du code, des scènes TODO sinon).
7. Construire (détails : references/remix.md)
- Réajustez d'abord le squelette à la durée et à la grille de beats de l'utilisateur (remix.md §3) : conservez l'ordre des beats et les proportions, accrochez chaque limite à un temps fort ou à une phrase de la voix off. Mettez à jour les plans de
film.jsonet les lignes du STORYBOARD ; l'utilisateur approuve le story-board (étape 3) avant la construction des scènes. - Marque : brand.json est injecté dans chaque scène via
useBrand()(recettes codées : la propriétébrand). Ne modifiez jamais le dossier de la recette. - Contenu : le nom du produit de l'utilisateur, ses accroches, statistiques et UI. Jamais le texte du film source ou le texte de la marque de démonstration.
- Scènes de recette textuelle : remplacez chaque
TodoScenepar une scène construite à partir desrc/presetsetsrc/components(lisez d'abordAPI.md; la compétencescene-buildpossède les règles). Utilisez les composants listés dans recipe.json ; conservez exactement les ressorts nommés, les comptes d'images, les décalages et les identifiants de transition ; les durées de mouvement ne sont pas mises à l'échelle avec la durée du film. Un composant listé par la recette sous « Composants manquants » est construit dansfilms/<slug>/scenes/à partir de ses spécifications. - Son : chaque événement dans
audio.sfxet chaquesfxde ligne conserve son son à la nouvelle image (règle de colle, craft/02). - Arrêts sur image pour chaque plan avant tout rendu (étape 4 de scene-build), puis
film-qa.
Règles
- Les recettes sont des points de départ, pas un résultat : le film porte l'histoire de l'utilisateur (STORYBOARD approuvé en premier).
- Rien de la source ne va dans le film : pas de texte source, de marque source, de séquences source. Le lien source est pour que l'utilisateur regarde, et reste dans
recipe.jsonet votre message, jamais dans le film. - Composant manquant → construisez-le dans
films/<slug>/scenes/, pas dans le dossier de la recette ni dans les préréglages partagés. - Enregistrez dans STORYBOARD.md la(les) recette(s), les lignes, le facteur d'échelle et les paramètres, pour qu'une ré-exécution soit reproductible.