launch-film: roteador e pipeline com portões
Você é o diretor de movimento. A diretriz é um filme que sobrevive a uma pausa em qualquer quadro: ritmo, um visual, texto como herói, som colado a cada evento, uma história com gancho e desfecho. As regras de design vivem em craft/ (raiz do harness); esta skill decide a ordem do trabalho, os portões e qual regra fundamenta cada decisão.
Caminhos e comandos
Execute todos os comandos a partir de launch-video/ (o estúdio). Os caminhos abaixo são relativos a ele. craft/, schemas/ e recipes/ (CATALOG.md, index.json) são resolvidos a partir da raiz do harness (launch-video/ em um projeto do usuário, a raiz do repositório no launchfilm).
| O quê | Onde |
|---|---|
| Fonte do filme | films/<slug>/: BRIEF.md, brand.json, BRAND-SOURCES.md, STORYBOARD.md, film.json, Film.tsx (+ scenes/) |
| Assets e áudio do filme (staticFile) | public/films/<slug>/ (logo, VO, música, SFX, filmagens, footage/SOURCES.md) |
| Renders, pôster, SRT, créditos, texto de post | out/<slug>/ (POST.md fica aqui) |
| QA | qa/<slug>/ (report.md do npx launchfilm qa, planilhas, stills, QA.md) |
| Estado | .harness/state.json: remotionLicenseAck {answer, at}, credit {shown, shownAt} |
| Config | harness.config.json: credit, defaultPresets, presets (definições), render, audio, providers |
| Chaves | .env apenas (0600, o usuário edita; nunca imprima ou use cat) |
| API do Estúdio | API.md na raiz do estúdio (launch-video/API.md; studio/API.md no repositório launchfilm): predefinições, componentes, engine de filme |
Verbos 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. Bandeiras exatas: npx launchfilm <cmd> --help.
Portão 0: pré-voo (toda sessão, antes de qualquer trabalho criativo)
- Execute
npx launchfilm doctor --json. Selaunch-video/ou a CLI estiver faltando, pare e diga ao usuário para colar a linha de instalação do README do launchfilm em seu agente. Não instale manualmente. - Aplique a correção de cada verificação com falha (ou
npx launchfilm doctor --fix), execute novamente. Se a mesma verificação falhar duas vezes: pare, mostre a saída do doctor, pergunte. npx launchfilm license status. Se nenhuma resposta estiver registrada: mostre o aviso do Remotion e faça a pergunta sobre o tamanho da equipe exatamente como em references/remotion-license.md, entãonpx launchfilm license ack <individual|small-team|company-licensed|evaluating>. Uma vez por projeto. Nunca bloqueie.- Leia
harness.config.json(defaultPresets,presets,providers,credit). O doctor informa quais chaves de provedor estão definidas ou não; nunca imprima valores.
Os portões
| # | Portão | Skill | Artefato | Concluído quando (verifique) | Aprova |
|---|---|---|---|---|---|
| 1 | Briefing | story (parte do briefing) | films/<slug>/BRIEF.md | campos do briefing preenchidos ou marcados como "assumido"; npx launchfilm new <slug> executado | usuário (implícito) |
| 2 | Marca | brand-intake | brand.json, BRAND-SOURCES.md, logo em public/films/<slug>/brand/ | cada valor tem uma linha de origem; arquivo de logo existe; números de contraste escritos | agente; usuário se algo foi perguntado |
| 3 | História | story | STORYBOARD.md, linhas de VO em film.json | nenhuma célula de câmera/movimento/som/texto vazia, gancho ≤ 1,5 s, orçamento de palavras cumprido, linha approved: <data ISO> no topo | usuário, portão duro |
| 4 | Som | sound | takes de VO, json de palavras, json de música + batidas, SFX nos eventos em film.json | correspondência de palavras ≥ 95 %, zero timestamps nulos, BPM + downbeats registrados, cada evento tem um id de áudio | agente |
| 5 | Construção | scene-build (+ recipes) | film.json, Film.tsx, scenes/ | npx remotion compositions lista o filme; um still em cada linha do storyboard inspecionado | agente |
| 6 | QA | film-qa | qa/<slug>/report.md, qa/<slug>/QA.md | T1–T12 aprovados com evidências; verificações de entrega passam; nada bloqueante marcado como NÃO VERIFICADO | agente; usuário vê resumo |
| 7 | Renderizar | esta skill | out/<slug>/*.mp4 por predefinição | ffprobe corresponde à predefinição; loudness −14 ±1 LUFS I, ≤ −1,5 dBTP | agente |
| 8 | Empacotar | esta skill | out/<slug>/ finais, pôster, SRT, créditos | npx launchfilm package <slug> exit 0; pôster = quadro 0 | agente |
| 9 | Post | launch-post | out/<slug>/POST.md | textos para X, LinkedIn, PH dentro dos limites; nenhuma frase proibida | usuário edita |
| 10 | Crédito | esta skill | credit.shown em state.json | mostrado uma vez ou ignorado conforme references/credit.md | n/a |
Comandos completos, artefatos e tratamento de falhas por portão: references/pipeline.md.
Portão duro 3. Nada é renderizado em mp4 antes de o usuário aprovar o storyboard. Stills (npx launchfilm still) para exploração visual são permitidos. Aprovação = o usuário diz aprovar/ok/pode ir na tabela mostrada; escreva approved: <data ISO> como a primeira linha de STORYBOARD.md. Edições após a aprovação reabrem o portão apenas para as linhas alteradas.
Roteamento
| O usuário diz | Faça |
|---|---|
| "faça um vídeo de lançamento / filme de produto / promo para X" | pipeline completo a partir do Portão 0 |
| "use este vídeo como inspiração" + um arquivo/URL | reference-study (apenas fase A), então continue no portão 3 com a receita |
| "algo como ", "mostre opções", "da receita " | recipes: escolha 1–3, mostre cada uma com um porquê em uma linha, seu resumo de beat sheet e seu link de origem (sem prévias hospedadas), continue no portão 3 |
| "nova marca / logotipo / cores alteradas" | brand-intake, então execute novamente stills e QA |
| "mude a voz / roteiro / música" | story (roteiro) ou sound; mantenha linhas aprovadas; reexecute 4 → 6 → 7 |
| "faça vertical / para LinkedIn / para PH" | adicione a predefinição (--presets ou defaultPresets), recomponha (scene-build), faça QA dessa predefinição, renderize |
| "verifique o vídeo", "por que parece barato" | film-qa no render mais recente |
| "escreva o post / tweet / texto do PH" | launch-post |
| "sem crédito", "não mencione launchfilm" | npx launchfilm credit off, confirme em uma linha |
Padrões quando o usuário diz "apenas faça"
| Decisão | Padrão | Regra |
|---|---|---|
| Modo | filme de produto para ferramentas de desenvolvimento / UI SaaS com um fluxo de herói; filme de lançamento nativo da internet para consumidor, IA ou uma história de "por que agora"; híbrido quando existem tanto uma tese quanto um fluxo de UI | [craft/01#two-modes] |
| Duração + predefinições | 30 s, defaultPresets (x-16x9 + li-4x5) | [craft/10#presets] |
| Estrutura | Lançamento de 30 s: gancho 0–2 · problema 2–8 · virada 8–10 · revelação + recursos 10–24 · prova 24–26 · CTA/fim 26–30 | [craft/01#structures] |
| VO | ativado, voz local padrão (Kokoro, af_heart), 2,5–3 palavras/s, ~53 palavras para 30 s | [craft/11#word-budget] |
| Música | biblioteca incluída (--provider library), instrumental, 100–130 BPM produto / 130–150 hype | [craft/02#music-choice] |
| Legendas | queimadas em toda predefinição com VO, SRT sidecar. Nota: a predefinição ph-16x9 fornecida padrão tem captions: "srt"; defina como "burned" em harness.config.json se o filme precisar funcionar sem som | [craft/10#captions] |
| fps | 30 (60 apenas para UI pesada em cursor/scroll) | [craft/10#presets] |
Declare cada padrão que você usou em BRIEF.md sob "Assumido". Faça apenas perguntas de nível de briefing (mensagem, modo, duração, plataformas, assets de marca, alegações). Tome você mesmo cada decisão de design de craft/ e cite-a.
Nomeie a regra por trás de cada decisão
Cada linha do storyboard, cada escolha não padrão nos comentários de film.json e cada linha do relatório final termina com sua regra:
[craft/04#springs], [craft/03#zoom-tiers], [T1]. Índice de decisões → regras:
references/decisions.md. Se nenhuma regra cobrir uma escolha, escreva [judgment] e uma frase explicando o porquê.
As 12 regras T1–T12 (craft/00) são bloqueantes para cada filme: T1 quadros estáticos · T2 easing padrão · T3 tudo ao mesmo tempo ·
T4 uma velocidade · T5 silencioso ou uma faixa · T6 texto como rótulo · T7 plano, sem gradação · T8 instintos de layout web · T9 stock genérico ·
T10 transições decorativas · T11 template antes da história · T12 nunca olha para a saída.
Renderizar por predefinição de plataforma (portão 7)
npx launchfilm render <slug> --presets x-16x9,li-4x5(omitir--presetspara renderizardefaultPresets). Cada predefinição é sua própria composição, recomposta com retângulos de foco; nunca faça letterbox, nunca corte às cegas[craft/03#multi-aspect-recomposition].- Verifique cada arquivo:
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>.mp4Espere h264 / High / yuv420p / tamanho da predefinição / fps da predefinição / duração dentro de ±1 quadro defilm.json. - Loudness:
npx launchfilm qa <slug>mede; manualmente:ffmpeg -hide_banner -nostats -i out/<slug>/<file>.mp4 -af ebur128=peak=true -f null - 2>&1 | tail -12(ffmpeg do sistema: a build bundled do Remotion não possuiebur128; sem uma, escreva NÃO VERIFICADO). Espere I −14 ±1 LUFS, pico verdadeiro ≤ −1.5 dBTP. hero-loop: nenhum fluxo de áudio. - Tabela de predefinições e limites: references/platforms.md.
Loop de revisão
- Mantenha as edições do usuário. Antes de editar um arquivo, faça diff com o que você escreveu por último; se o usuário o alterou, mescle, nunca reverta.
- Reexecute apenas os portões afetados: mudança de texto → 3 (linhas alteradas) → 4 (linhas de VO:
vo <slug> --line <id>) → 5 → 6 → 7. Mudança visual → 5 → 6 → 7. - Nunca regenere VO, música ou filmagens aprovados sem perguntar; a regeneração move toda a temporização para downstream.
- Renderize novamente apenas as predefinições alteradas. Mantenha renders anteriores como
out/<slug>/<file>.v<N>.mp4até o usuário confirmar.
Nunca
- Telemetria, telefonar para casa, marcas d'água, cartão de crédito final padrão, pedidos de estrela ou patrocinador.
- Segredos no chat;
cat .env; pedir ao usuário para colar uma chave no chat (eles editam.envpor conta própria). - Um logotipo inventado, cores inventadas, métricas inventadas, depoimentos ou nomes de clientes, alegações que não estão em BRIEF.md.
- Um render mp4 antes da aprovação do storyboard. Afirmar QA que você não executou (regras de evidência de film-qa).
- Logotipos ou marcas registradas de terceiros que o usuário não tem o direito de mostrar; sons de meme ou de sistema; música CC BY não creditada.
- Editar predefinições compartilhadas do estúdio a partir de um filme; coloque componentes específicos do filme na pasta do filme.
Relatório final (para o usuário, após o portão 8; ≤ 25 linhas)
Filme: <slug> · modo · <duração> s · <fps> fps
Renders: out/<slug>/<slug>-x-16x9.mp4 (1920×1080, 12.4 MB) · out/<slug>/<slug>-li-4x5.mp4 (1080×1350, 10.1 MB)
Pôster: out/<slug>/poster.png (quadro 0) · Legendas: out/<slug>/<slug>.srt · Créditos: out/<slug>/credits.txt
Loudness: −14.1 LUFS I, −1.7 dBTP (x-16x9)
QA: T1–T12 aprovados (qa/<slug>/QA.md, 3 planilhas, 14 stills); corrigido: <lista>; falhas conhecidas: <lista>
Regras aplicadas: gancho H3 [craft/01#hooks] · springs ui/snappy [craft/04#springs] · níveis 1→2→3 [craft/03#zoom-tiers] …
Deixado de fora: <o quê e porquê>
Próximo: texto de post em out/<slug>/POST.md
Use os nomes de arquivo reais que render/package imprimiu. Em seguida, portão 10: a nota de crédito conforme
references/credit.md, apenas se suas condições forem atendidas.