O que stanglivideo faz?
Um filme que parece ter sido feito pelo produto, move-se na batida e soa correto: cada som no seu quadro, cada palavra na tela com tempo suficiente para ser lida, nada fora do quadro. Construído em Remotion a partir de código, portanto permanece editável.
Os caminhos abaixo são relativos à pasta deste skill, a menos que comecem com um caminho de projeto de filme.
$PY é o python que o doctor imprime (o .venv do skill).
Toda execução começa aqui
-
Doctor. Primeira execução (sem
.venvou semtaste.mdnesta pasta):node scripts/doctor.mjs --setup. Ele cria.venv, instalarequirements.txte criataste.mda partir detaste.example.md. Execuções posteriores:node scripts/doctor.mjs. Ele verifica Node 18+, Python 3.10+ com numpy e scipy, um ffmpeg completo e o skill complementar. Se o próprio Node estiver faltando, o doctor não pode executar: diga isso e forneça a linha de instalação abaixo. -
Diga claramente ao usuário o que está faltando. Para cada FALHA, uma linha curta: o que está faltando, por que o skill precisa disso e o comando exato para corrigir no sistema dele. Então pare até que ele diga que está pronto e execute o doctor novamente.
Faltando Por quê Windows Mac Node 18+ constrói e renderiza o filme winget install --id OpenJS.NodeJS.LTS -ebrew install nodePython 3.10 a 3.13 pontua o som e executa as verificações winget install --id Python.Python.3.12 -ebrew install [email protected]ffmpeg (build completo) análise, codificação, verificações de loudness winget install --id Gyan.FFmpeg -ebrew install ffmpegskill complementar regras da API Remotion npx skills add remotion-dev/skillssame Após instalar Node, Python ou ffmpeg, o usuário deve abrir um novo terminal para que estejam no PATH e então executar
node scripts/doctor.mjs --setupnovamente.GEMINI_API_KEYé opcional: mencione-a apenas quando uma imagem ou loop gerado for realmente desejado. -
Skill complementar (obrigatório).
remotion-best-practices, os skills oficiais da Remotion. Não está incluído aqui. Use-o para perguntas sobre a API Remotion (mídia, fontes, legendas, opções de renderização). -
Gosto. Leia
references/base-rules.mdetaste.md(crie-o a partir detaste.example.mdse ainda estiver faltando). Estas são as regras permanentes do usuário;taste.mdvence em caso de conflito.
Inegociáveis
- O design deles vence. Cores, tipo, componentes, logotipo, voz e claims vêm do produto. Nunca carregue o gosto de outro produto, incluindo qualquer coisa neste skill que o design deles contradiga.
- Cada quadro é uma função pura do tempo. Sem transições CSS ou keyframes, sem timers, sem
Date.now(), semMath.random(randcom semente), sem estado transportado entre quadros. - Uma única fonte de tempo. O
src/films/<film>/cues.jsonde cada filme contém todos os tempos das cues. O TSX do filme o importa e a pontuação o lê (sound/cues.py). Nenhum deles jamais contém um tempo literal. - Meça, nunca adivinhe. Batidas a partir do áudio, posições a partir do overlay de depuração, cores a partir de pixels decodificados.
- Claims honestos. Mostre apenas o que o produto faz. A lista de proibidos é aprovada pelo usuário antes de escrever o copy.
- Pergunte primeiro antes de commitar, fazer push ou publicar qualquer coisa, e antes de toda chamada de API paga.
- Sem travessões em nenhum copy, arquivo ou mensagem.
Fluxo de trabalho e gates de aprovação
Cada PARE é um gate rígido: pergunte (AskUserQuestion), espere e registre a resposta no BRAND.md do projeto.
- Intake (obrigatório). Peça de 2 a 5 vídeos que o usuário gosta, uma linha cada sobre o que gostam,
incluindo o som. Execute
node scripts/intake/intake.mjs <project>/intake <videos...>e leia cada planilha. Veja references/intake.md. - Descoberta. Aprenda o produto: arquivos de regras, tokens (claro e escuro), componentes, logotipo, landing page, telas reais e copy, claims. Veja references/discovery.md.
- Entrevista. O briefing e os ingredientes. Veja references/interview.md. Então:
- PARE: claro ou escuro. Por filme quando há vários; um conjunto mistura ambos se o produto tiver ambos os temas.
- PARE: claims proibidos. Mostre o que os filmes vão alegar e a lista do que nunca devem dizer (do código, do site e do usuário). Aguarde a aprovação de ambas as listas.
- Kit de marca. Preencha
templates/BRAND.mdno projeto. Cada regra cita sua fonte. - Música. Pesquise e meça candidatos. PARE: escolha da música. Veja references/music.md.
- História. Preencha
templates/film-prompt.md; escreva o plano de batidas comocues.json. Veja references/story.md e references/ingredients.md. - Projeto.
node scripts/new-project.mjs <dir>,npm install. Um kit emsrc/kit/; uma pasta por filme. Veja references/engine.md. - Storyboard. Construa as cenas, renderize 5 a 8 stills por filme (no projeto:
node scripts/stills.mjs), organize em mosaico. PARE: aprovação do storyboard antes de qualquer renderização completa. Veja references/review.md. - Renderização. No projeto:
node scripts/render.mjs <Composition> out/<film>.mp4(segurança embutida). Folha de contato, visual, correção. - Pontuação. No projeto:
sound/scores/<film>.pya partir decues.json;$PY sound/render.py <film>. Veja references/sound-rules.md. - Gate (obrigatório). No projeto:
$PY scripts/gate.py <film>. Nada é considerado pronto até passar. Veja references/render.md. - Entrega. Caminhos, durações, loudness, pico, resultado do gate, o que mudou. Mantenha todas as versões.
O gate de sincronia
- Whooshes são colocados pelo seu pico no quadro mais rápido do movimento (
align="peak";kit/speed.tsencontra o quadro mais rápido de um movimento de câmera; uma entradaE.outé mais rápida no início, uma saídaE.exitmais rápida no final). - Pops pousam no quadro em que o elemento pousa. Chings no quadro em que o número final aparece.
- Risers terminam no hit (
align="end"). - Cada som carrega um rótulo nomeando seu evento na tela.
- Após cada mix:
sound/check.py(nenhum som antes de sua mudança de imagem),scripts/final-check.py(-14 LUFS dentro de 1 LU, pico verdadeiro -2 dBFS ou inferior, faixa de loudness 4 LU ou mais, sem silêncio, imagem idêntica à renderização silenciosa, durações iguais) escripts/verify.py, todos executados porscripts/gate.py. Uma bandeira é corrigida movendo o som (ou a cue), nunca isentando-o sem olhar sua planilha.
Memória de gosto
references/base-rules.mdacompanha o skill: correções de filmes reais, como regras gerais.taste.md(ignorado pelo git, detaste.example.md) é o desta máquina. Toda nova correção que o usuário der é escrita lá como uma regra geral antes de você corrigir o filme, formulada de modo que teria evitado o problema em qualquer filme. Leia no início de toda execução.- Uma regra que vale para vários filmes pode ser promovida para
base-rules.mdpor meio de um pull request para este skill, nunca por uma edição silenciosa.
Segurança (embutida nos scripts)
templates/project/scripts/safety.mjs, usado por todo bundle e renderização: espaço livre em disco é verificado
primeiro (mínimo de 10 GB), no máximo duas renderizações rodam ao mesmo tempo, bundles temporários são deletados
após cada job e os antigos antes. Renderize com concorrência 1 em uma máquina com pouca memória. Pare apenas
processos que você iniciou.
Modos opcionais
- Mídia gerada. Apenas para o que o código não pode desenhar: fotos reais, texturas fotográficas, recortes e
fundos filmados (seda, líquido, luz) quando o usuário quiser um visual de filme real.
scripts/gemini/image.mjsaceita imagens de referência para que as saídas combinem com um visual escolhido, além de proporção, tamanho, redimensionamento e chroma key;scripts/gemini/video.mjscria clipes Veo a partir de um primeiro frame com paleta combinada (ou loops nativos). Chave deGEMINI_API_KEYapenas no ambiente; toda chamada imprime seu custo e só é executada após o sim do usuário. Veja references/gemini.md. - Ferramentas de mídia (grátis, qualquer clipe).
scripts/media/loop.pytransforma um clipe em um loop de fundo contínuo (busca de emenda, dissolução exata, interpolação para o fps do filme, loop + poster + sequência de stills + folha de borda);LoopBackgroundno kit coloca-o sob a camada de movimento a partir docues.jsondo filme.scripts/media/clip.pysonda, recodifica para o formato do projeto, corta bordas e extrai stills ou uma folha.scripts/media/imgpost.pyaplica chroma key e redimensiona imagens. - Atualização. Quando o usuário pedir: reestude prompt-motion.com, skillry.dev e o repositório awesome-opus5-5-videos em busca de novas entradas e proponha atualizações de referência por PR. Veja references/refresh.md.
Piso de qualidade (sempre)
- Apenas as próprias superfícies, cores, bordas e sombras do produto. Nenhum painel ou tom inventado.
- Legível no tamanho de entrega. Menos palavras vencem palavras menores. Linhas que as pessoas precisam ler revelam a cerca de 0,2 s por palavra e seguram por 2 s ou mais.
- Cada cartão e a marca de encerramento totalmente dentro do quadro durante todo o quadro de cada movimento.
- Segure cada cena por 5 a 6 s com um push lento; quando parecer cheio, corte uma tela em vez de acelerar.
- Texto nunca é coberto por um cursor ou chip, nunca cruza outro texto, nunca se recentraliza enquanto constrói.
- Algo acontece em cada batida; os limites da cena caem nos compassos; o último quadro de um loop é igual ao primeiro.
- Em um conjunto, nenhum dois filmes compartilha uma estrutura; qualquer coisa mantida lado a lado é centralizada exatamente.
- Nenhum efeito que a linguagem do produto não use: brilhos, partículas, anéis de clique, easing saltitante, shaders.
Conhecimento
- references/method.md: como filmes fortes feitos em código são construídos, engines, regras de ofício.
- references/prompt-lessons.md: como os melhores prompts são escritos.
- references/sound-rules.md: regras de som medidas e regras de correção de sincronia.
- references/pitfalls.md: falhas e correções de disco, memória, renderização, código e som.
- references/reference-videos.md: vídeos de referência e o que cada um ensina.
- references/base-rules.md: o gosto distribuído.
Armadilhas que custam tempo real
- Stills do Remotion não encaminham logs do console: imprima medidas no quadro (
kit/debug.tsx). npx remotion stillreempacota a cada chamada: usescripts/stills.mjs(um bundle, muitos quadros).- O ffmpeg empacotado do Remotion não tem
tmix,selectoutile: use o ffmpeg do sistema que o doctor verificou. - Faixa de cor: decodifique o quadro 0 de cada entregável e verifique (
verify.py --bg); um master de faixa limitada lido como faixa completa eleva fundos escuros para cinza. interpolateColorsnão consegue analisarcolor-mix(): use hexadecimal para qualquer coisa que anime.- Componentes de imagem assíncronos podem renderizar vazios em um quadro: use
<Img>do Remotion. - Um índice calculado a partir do tempo é -1 antes de sua seção: limite-o (
safeIndex). will-changeem qualquer coisa que a câmera escala borra seu texto.- Uma máscara de revelação de palavras corta as últimas letras sem preenchimento: use
WordRevealdokit/components.tsx. - A decodificação de vídeo dentro de renderizações não é confiável: converta loops para sequências de imagens.