recipes
Uma receita é um filme de lançamento publicado, estudado e documentado para que um agente possa reconstruir sua técnica para outro produto.
Ela fica em <studio>/src/recipes/<id>/:
| Arquivo | Sempre | O que fornece |
|---|---|---|
recipe.md | sim | quando usar, a ficha técnica (tempos, quadros, imagem, câmera, movimento, transição, som), técnicas vinculadas ao ofício, o que adaptar, armadilhas, componentes ausentes |
recipe.json | sim | os mesmos dados (esquema schemas/recipe.schema.json): structure[], techniques, audio, inputs, components, source |
Recipe.tsx + index.tsx | apenas status: "built" | código pronto: um componente parametrizado por brand + content, registrado com uma marca demo |
A maioria das receitas são apenas texto (status: "studied"), e isso é suficiente para construir a partir delas: você escreve as cenas a partir da ficha técnica usando os presets e componentes do estúdio. Uma receita nunca contém o filme original, seus quadros ou seu texto; o link da fonte é como o usuário vê a referência.
Execute comandos a partir de launch-video/ (usuário) ou studio/ (repositório launchfilm). recipes/ e schemas/ ficam na raiz do harness (launch-video/ em um projeto do usuário, a raiz do repositório no launchfilm).
1. Saiba o que você precisa (de BRIEF.md / STORYBOARD.md)
Anote antes de pesquisar: preset(s) (aspecto), duração alvo, modo (filme de produto / filme de lançamento / híbrido), tema (escuro/claro de brand.json), narração sim/não, os beats que você precisa cobrir (hook, feature, logo…), os inputs que o usuário realmente tem (logotipo, capturas de tela, uma gravação de tela, uma UI reconstruível, estatísticas, uma URL).
2. Pesquise
Folheie recipes/CATALOG.md (uma linha por receita, agrupada por família: formato, principais técnicas, inputs, fonte, texto/código), ou pesquise:
npx launchfilm ref search "statement vertical dark" # texto livre sobre título, resumo, tags, técnicas
npx launchfilm ref search "launch aspect:9:16 max:30 theme:dark" # filtros: family: aspect: tech: theme: max: min: status:
Ou filtre recipes/index.json diretamente (campos: 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");}'
Sem índice? Faça glob em src/recipes/*/recipe.json e leia-os.
3. Pontue e escolha de 1 a 3
| Critério | Pontos |
|---|---|
format.aspect igual ao aspecto do preset principal | +3 (recomposição é possível, mas custa trabalho) |
format.duration_s dentro de ±30 % do alvo (ou a receita cobre o beat que você precisa) | +2 |
| cada técnica que se sobrepõe às necessidades do storyboard | +1 (máx +4) |
todo inputs que ela precisa é algo que o usuário tem | +2; qualquer input ausente que não pode ser criado |
theme corresponde a brand.json theme | +1 |
vo corresponde ao plano | +1 |
code: true (Recipe.tsx pronta) quando o usuário está com pressa | +1; status: "reviewed" |
render_cost pesado enquanto o usuário está em um laptop ou com pressa | −1 |
Texto vs código é um bônus de velocidade, não um filtro de qualidade: uma receita de texto que se encaixa na brief supera uma com código que não se encaixa. Pegue a melhor para um filme inteiro, ou até 3 para diferentes beats (hook da A, features da B, cartão final da C).
4. Mostre as escolhas
Para cada escolha, mostre ao usuário:
- título (
id), etextoucode; - uma linha sobre por que se encaixa na brief (aspecto, duração, o beat que cobre, os inputs que eles têm);
- a ficha técnica em 3–6 linhas curtas (
0–3.1 s hook: nome aparece palavra por palavra…), resumida de recipe.md; - o link da fonte (
source.url) para que possam assistir ao original. Não há prévias hospedadas.
Em uma sessão assistida, deixe-os escolher. Se eles disseram "decida você", pegue a maior pontuação e diga em uma linha.
5. Leia a receita
Leia o recipe.md escolhido por completo: a ficha técnica, movimento em quadros e molas nomeadas, transições, o som em cada evento, "O que adaptar", "Armadilhas", "Componentes ausentes". Leia recipe.json structure[], audio, inputs, components. Esses números são o ofício que você está reutilizando; a imagem e o texto serão do usuário.
6. Estrutura inicial
npx launchfilm new <slug> --recipe <id> --preset x-16x9 [--title "Produto"] [--dry-run]
- Receita com código:
films/<slug>/Film.tsxrecebe uma cenarecipeque renderiza o componente da receita com seus valores padrão; você altera suas propscontent(recipe.jsonparams) e passa a marca. - Receita de texto:
film.jsonrecebe um plano por linha da ficha técnica (os tempos da receita, suas transições e SFX), eFilm.tsxrecebe umTodoScenepor plano com a imagem da linha, câmera, movimento e som como comentários. O CLI imprime a lista de TODOs. Um TodoScene renderiza um placeholder rotulado, enpx launchfilm qafalha (B1) enquanto um existir. - Ambos copiam
recipe.mdparafilms/<slug>/RECIPE.mde pré-preenchemSTORYBOARD.mdcom as linhas da receita. - Combinando receitas: estruture a partir da que possui mais tempo de execução, depois adicione as linhas das outras receitas como planos (seu componente
Recipecomo uma cena quando têm código, caso contrário cenas TODO).
7. Construa (detalhes: references/remix.md)
- Reajuste o esqueleto para a duração e grade rítmica do usuário primeiro (remix.md §3): mantenha a ordem e as proporções dos beats, encaixe cada limite em um downbeat ou uma frase de narração. Atualize os planos de
film.jsone as linhas do STORYBOARD; o usuário aprova o storyboard (portão 3) antes das cenas serem construídas. - Marca: brand.json em cada cena através de
useBrand()(receitas de código: a propbrand). Nunca edite a pasta da receita. - Conteúdo: o nome do produto do usuário, linhas, estatísticas e UI. Nunca o texto do filme original ou o texto da marca demo.
- Cenas de receita de texto: substitua cada
TodoScenepor uma cena construída a partir desrc/presetsesrc/components(leiaAPI.mdprimeiro; a skillscene-buildpossui as regras). Use os componentes listados em recipe.json; mantenha exatamente as molas nomeadas da linha, contagens de quadros, escalonamentos e ids de transição; as durações de movimento não escalam com a duração do filme. Um componente que a receita lista em "Componentes ausentes" é construído emfilms/<slug>/scenes/a partir de sua especificação. - Som: cada evento em
audio.sfxe osfxde cada linha mantém seu som no novo quadro (regra de cola, ofício/02). - Still em cada plano antes de qualquer render (passo 4 de scene-build), depois
film-qa.
Regras
- Receitas são pontos de partida, não resultado final: o filme carrega a história do usuário (STORYBOARD aprovado primeiro).
- Nada da fonte vai para o filme: nenhum texto fonte, nenhuma marca fonte, nenhuma filmagem fonte. O link da fonte é para o usuário assistir, e fica em
recipe.jsone sua mensagem, nunca no filme. - Componente ausente → construa-o dentro de
films/<slug>/scenes/, não na pasta da receita ou nos presets compartilhados. - Registre em STORYBOARD.md qual(is) receita(s), quais linhas, o fator de escala e parâmetros, para que uma reexecução seja reproduzível.