Communitygithub.com

Iwang-f/motion-reel

Crie vídeos animados a partir de código neste estúdio (canvas + window.seek(t), Playwright, ffmpeg, som sintetizado). Use quando o usuário pedir um vídeo de lançamento, showreel, Reels, TikTok ou conteúdo de história, explicador animado ou anúncio em movimento, entregar um rascunho ou carrossel para transformar em vídeo, ou quiser "um novo filme" no repositório do estúdio de movimento; `/motion-reel build <film>` constrói um filme cujo board foi aprovado.

O que é motion-reel?

Este skill define um fluxo de produção de vídeos animados inteiramente em código, utilizando canvas, `window.seek(t)`, Playwright, ffmpeg e som sintetizado. Ele é ideal para criar conteúdos como vídeos de lançamento, showreels, Reels, TikTok, Stories, explicadores animados ou anúncios em movimento. O processo é dividido em duas fases: pré-produção (briefing, storyboard, ativos, voz, grade de batidas, lista de takes e board) e construção (comando `/motion-reel build <film>`). Durante a pré-produção, o owner define o briefing, coleta referências visuais e de áudio, escreve o roteiro, planeja a grade de batidas e desenha o board quadro a quadro. A construção é executada em uma sessão separada, garantindo que o contexto do código seja limpo. O skill é fortemente baseado em arquivos e ferramentas locais (como `tools/brief.mjs`, `tools/board.mjs`, `tools/vo.mjs`) e impõe regras rígidas de determinismo (apenas funções puras do tempo, sem `Math.random` ou `requestAnimationFrame`). Ele suporta plataformas como Claude Code, Cursor e Codex, e é especialmente útil para desenvolvedores que desejam automatizar a criação de vídeos com alta precisão e controle, evitando loops caros de revisão visual.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Iwang-f/motion-reel-skill/tree/HEAD/.claude/skills/motion-reel

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Motion reel

Construa um novo filme no próprio motor deste repositório. Não mude para Remotion ou HyperFrames a menos que o usuário os nomeie; o contrato de renderização do repositório está em CLAUDE.md e prevalece sobre este arquivo.

Um filme é executado em duas sessões, cortadas no OK do owner na lista de takes e no board juntos:

  • Pré-produção (este arquivo): briefing, história, ativos, voz, grade de batidas, lista de takes, board.
  • Construção (/motion-reel build <film>): leia build.md e siga-o; pule este arquivo.

O corte mantém a construção em um contexto novo. A pré-produção preenche a janela com referências, takes e imagens do board, e cada turno posterior paga por tudo isso.

1. Fixar o briefing

Execute node tools/brief.mjs --in=<draft.md> no rascunho do owner (--film=<film> assim que o projeto existir: ele escreve brief/original.md sem o base64 incorporado). Ele imprime o cabeçalho, as palavras do VO contra o orçamento e o que o rascunho deixa em aberto. Sem um rascunho, preencha os campos de cabeçalho de docs/brief-template.md a partir da solicitação e proponha um padrão para cada lacuna: o owner responde com um "oke" ou uma correção.

Pergunte o que ainda está em aberto em uma mensagem, antes de tocar no código e antes de citar créditos; respostas já em brief/decisions.md permanecem. Adicione o que a ferramenta não pode ver:

  • Sobreposição: um filme passado sobre o mesmo assunto ou pilar (projects.json). Diga qual e o que este adiciona. Um remake mantém a pasta antiga intocada e pergunta quais respostas de seu decisions.md ainda permanecem.
  • Produto + URL (ou tópico). Para filmes OpenView, o pilar e a fórmula de docs/content-map.md.
  • Marca: filmes OpenView usam lib/brand.js. Outras marcas: cores, fontes, um acento, logotipo real.
  • Uma referência: quadro, vídeo ou pasta de imagens. Ou "nenhuma" (então diga isso; sem aparência padrão).
  • Música: uma faixa fornecida (meça-a) ou "sintetizar" (padrão).
  • Narração: precisa de ELEVENLABS_API_KEY em .env. Se vazio, pare e nomeie a variável.

O briefing é fixado quando o idioma, voz, duração, proporção, assunto (tickers incluídos), fonte de dados (app, kit ou ilustração) e energia estão definidos. Cada um destes movido após o primeiro take em um filme passado, e mi-demo-40 pagou por seu VO três vezes. Registre as respostas em <project>/brief/decisions.md.

Um pacote de outra ferramenta (storyboard, zip, handoff): copie-o intacto para <project>/references/<tool>-<date>/, que fica fora do commit, e execute tools/brief.mjs apenas em seu briefing. Abra outro de seus arquivos apenas quando uma decisão precisar desse arquivo. Sua lista de takes e script são material, como a ordem de um rascunho.

Limites: palavras, figuras ou fatos que o briefing ou regras legais proíbem na tela vão para <src>/forbid.json (tools/forbid-lib.mjs): tools/vo.mjs os recusa antes de gastar créditos, tools/check.mjs falha neles na tela. Um limite que nenhum padrão pode ver (um nome que nunca carrega uma porcentagem) vai para brief/decisions.md, lido contra cada board e folha de revisão.

Escolha um slug de filme ([a-z0-9-]+). Tudo abaixo é nomeado por ele: <film>.

Layout do projeto. Um novo filme recebe sua pasta de projeto CONTENT (CLAUDE.md "Pastas de novo projeto de vídeo") e uma linha "<film>": "CONTENT/<n>. <Título> (<data>)" em projects.json; as ferramentas então o encontram lá (tools/paths.mjs): lista de takes e briefing em <project>/brief/ (shotlist.md), código em <project>/src/ (film.js, timeline.js, vo-lines.json, beats.json, sfx-<film>.mjs), takes e mídia em <project>/assets/, boards, folhas e renders em <project>/output/. Filmes mais antigos mantêm docs/<film>-shotlist.md, film/<film>/, assets/<film>/ e out/. Abaixo, <shotlist>, <src>, <assets> e <output> significam o que se aplicar.

2. Pré-produção

  1. Ativos. Em <assets>/, listados antes de qualquer animação.

    • Logotipo e símbolo da OpenView: desenhados apenas através de lib/brand.js; nunca copie os SVGs para o filme.
    • Mascote da OpenView: o rig de código em lib/mascot/ (API no cabeçalho e exports de lib/mascot/index.js).
    • Market Intel da OpenView: figuras e nomes do origin/main mais recente, a imagem desenhada em código com o kit de interface do Market Intel. Capture o aplicativo em execução apenas quando o briefing pedir o aplicativo real; então siga "Fonte do Market Intel" em CLAUDE.md; escolha bandas de capture_mi.mjs --review e desenhe com lib/proof.js.
    • Outro produto com URL: capture capturas de tela reais, logotipo, cores, fontes com Playwright.
  2. Mundo visual. Leia REFERENCES/motion/visual-grammar-2026-10.md, então escreva ## Mundo no topo de <shotlist> antes de qualquer take: um lugar, seus objetos, quem está nele, o que a luz faz, e como cada figura e relação no briefing se torna uma coisa que você pode apontar. Desenhe-o com lib/world.js. O sistema de design permanece nas próprias telas do produto. Guia de estilo. Se uma referência existir, meça-a primeiro: uv run --python 3.11 --with librosa --with numpy tools/ref_probe.py refs/<film>/ref.mp4 refs/<film>/analysis.json então escreva docs/<film>-style_guide.md: paleta (hex), tipo, comprimentos de takes, transições, movimentos de câmera, textura, como o texto entra e sai. Pegue a gramática, nunca o conteúdo. O visual da casa é CLAUDE.md "Look" mais docs/motion-vocab.md; guias de estilo de outros filmes registram esses filmes, não a casa.

  3. História. Leia story.md, coloque o assunto em sua escada de tópicos e escreva sua tabela de espinha no topo de <shotlist>, antes de qualquer script. A espinha está pronta quando cada linha está preenchida e os testes de script no final desse arquivo passam na primeira linha e no esboço; a ordem do rascunho é material aqui, não um script, e um rascunho ALUR CERITA e KANDIDAT HOOK (docs/brief-prompt.md) são sua primeira versão. Mostre a espinha com a cotação do VO: é o momento mais barato para mudar o filme. De um rascunho, a mesma mensagem nomeia o que o rascunho cobre e o script descarta, com ambas as contagens de palavras: pandu-supra-80 voltou como "ga selengkap draft" após seu primeiro filme, e a extensão levou mais três sessões.

  4. Narração (se o briefing tiver VO): siga "Narração" em CLAUDE.md. Escreva o script a partir da espinha na voz de investigador (story.md "O espectador"), até o orçamento de palavras, contando as figuras à medida que são faladas: seu indonésio 1,7 é o que seis filmes executaram a 1,12 (1,65–1,75 palavras por segundo de filme), então um orçamento completo chega perto dos segundos do briefing. character padrão é calm, fair narrator, talking to one person. Então <src>/vo-lines.json e a última seção de story.md, até que tools/script.mjs passe; sua linha credits é a cotação. Gere com tools/vo.mjs, passe --check. Definições e termos legais precisam de uma fonte em references/sources.md como qualquer figura; R-120 mantém nomes de registros fora da tela, não fora do arquivo de fontes. Os takes definem os comprimentos das cenas: <src>/timeline.js é a lista de cenas em lib/vo-clock.js (sceneTimeline; modelo: iata-55), e node tools/prepare.mjs --film=<film> verifica os takes e escreve o relógio para beats.json.

  5. Grade de batidas. Faixa fornecida: meça BPM/batidas/downbeats/hits (librosa) em <src>/beats.json. Sintetizado: escolha BPM, escreva <src>/sfx-<film>.mjs, uma lista de cues em lib/synth.mjs (modelo: src/sfx-iata-55.mjs do iata-55), para que ele emita beats.json e <output>/<film>-audio.wav a -14 LUFS.

  6. Lista de takes. Escreva <shotlist> na grade de batidas: cada take com quadros, câmera, texto na tela, SFX, sua batida da espinha, o efeito de docs/motion-vocab.md que usa e a razão para seu corte no próximo take (próximo passo, mesma posição, causa e efeito, salto no tempo, callback, mudança de tamanho). Um take sem razão para cortar junta-se ao próximo como um movimento de câmera. Planeie o caminho para o produto como um movimento, um objeto do mundo se tornando a tela, nomeado nos takes de ambos os lados do corte: isso atraiu a única revisão criativa do owner na construção em delisting-18-80 (45–50 s). Planeje a densidade aqui, cena por cena: os movimentos que cada um suportará, porque a primeira construção de todo filme recente pontuou 4–5 em densidade e gastou suas rodadas adicionando-as. Liste as decisões que precisam do OK do owner. Nenhuma parada aqui: a lista de takes vai para o owner com o board.

  7. Board. Desenhe primeiro os takes mais abertos e mais fechados do filme em <src>/film.js (export board: [{ t, shot, note }]) e olhe para esse par sozinho (node tools/board.mjs --film=<film> --only=<wide>,<close>, seu -view.jpg): eles mostram quanto o mundo precisa conter e se suas figuras sobrevivem ao close-up, enquanto um redesenho custa dois takes. Então desenhe um still por take. Execute node tools/board.mjs --film=<film>. Seu texto é a revisão mecânica: corrija cada linha warn … mid-move (mova t para o quadro estabelecido) e cada achado de layout (texto fora da área segura, na faixa de legenda, sobreposto, muito pequeno), então execute-o mais uma vez para confirmar que o texto está limpo. Leia apenas a visão geral -view.jpg do board, ou acima de 18 takes as pages que ele imprime, cada uma uma vez, para aparência: corrija o que parece errado em uma passagem, sem loop de olhar-corrigir-renderizar, sem folhas por cena (--scenes existe para o owner, não para esta revisão). O teste de aparência, nessa visão geral: silencie e siga a história apenas com imagens; um estranho vê um lugar, pessoas e coisas, não slides. Além da legenda, um take contém no máximo 6 palavras, em objetos; placas de prova e linhas que o briefing exige por extenso são as únicas exceções. Falhar isso significa redesenhar o take, não cortar o texto.

  8. Revisão do owner (o único portão). Mostre a lista de takes e o board (<output>/<film>-board.png) juntos, com as decisões que precisam de OK, e aguarde esse único OK. Nenhum movimento ou som antes dele.

  9. Hand-off. Quando o owner aprovar a revisão, escreva uma seção ## Briefing de construção no topo de <shotlist>: o que está aprovado, o que ainda está em aberto e os arquivos que a construção precisa (módulo do filme, takes, batidas, script sfx). Então inicie a construção em um contexto novo:

    • Aplicativo desktop: inicie uma nova sessão com contexto novo (não uma bifurcação), prompt /motion-reel build <film>.
    • Terminal: diga ao owner para executar /clear, então /motion-reel build <film>.

    A pré-produção termina aqui: o OK do owner na lista de takes e no board é o critério de conclusão, e a construção pertence à nova sessão.

3. Regras rígidas

  • Função pura do tempo: seek(t) apenas. Sem Math.random, sem temporizadores, sem transições CSS, sem requestAnimationFrame no modo de renderização, sem estado entre quadros.
  • Abra as pré-visualizações -view.jpg; imagens em resolução total apenas como um --crop de um detalhe. Imagens são para aparência; verificações mecânicas são os números das ferramentas (node tools/check.mjs --film=<film>: varredura seek, determinismo, px da fonte, lint de layout).
  • Contexto é o custo, e turnos o multiplicam: um turno a 300k custa o que três custam a 100k, e dois terços das mensagens recentes carregaram uma ferramenta. Envie cada leitura, pesquisa e edição independente de uma etapa em uma mensagem. Ferramentas são executadas, não lidas (--help fornece o uso); edite com Edit, nunca reescreva um arquivo inteiro; comandos longos são executados em segundo plano e você aguarda o aviso, sem loops de sleep ou polling.
  • O código-fonte de outro filme não é um modelo: filmes compartilham 3–16 % de seu código. Procure a única função que você precisa (Grep, ou Read com offset/limit) e deixe seu film.js fechado.
  • O estado vive em arquivos: brief/decisions.md, references/sources.md, <shotlist>, docs/review_log.md. O projeto se compacta automaticamente a 250k, então um fato mantido apenas na conversa pode desaparecer no meio do filme.
  • Segredos apenas de .env. Nunca imprima, registre ou cole uma chave.
  • Uma sessão por marca: o motor, sintetizador e pipeline de exportação são reutilizados, não reconstruídos.

Habilidades Relacionadas