motion-video — criando um filme renderizado inteiramente por código
Skill roteadora para trabalhos em nível de FILME. Movimento em nível de elemento (duração, easing, springs, trocas de cor dentro de um componente) permanece em motion-design; leia ~/.claude/skills/motion-design/local/element-motion-params.md para os números de spring medidos. A evidência reside no laboratório <lab> (cartões techniques/Tnn, docs, medições); as ferramentas também ficam lá (usuário 2026-09-30), então esta skill cita seus caminhos em vez de copiá-los.
Toda regra nas referências carrega um nível de evidência (references/evidence-and-instruments.md §Tiers): usuário (o usuário julgou assistindo filmes), medido (um instrumento calibrado leu em filmes fonte), verificado (uma rodada cega A/B movimentou, intervalos disjuntos), não validado (medido nas fontes, nunca testado por imitação). Não afirme uma regra não validada como comprovada.
Tabela de roteamento
| Se a tarefa é sobre… | Leia |
|---|---|
| O que decidir primeiro; público, tom, cor de fundo, qual informação pertence; pareamento dispositivo-tom; materiais e texto | references/whole-film-rules.md |
| Qual tipo de filme; esqueletos de seção (anúncio introdutório, anúncio de hype, tour de produto, showreel de dados, explicador narrado); storyboard vs um parágrafo | references/film-types.md |
| Mudanças de seção na barra ou na linha de narração; alinhamento de batida; transições (forma-para-forma, escurecer, wipe); movimentos de câmera | references/rhythm-transitions-camera.md |
| Construir a página, renderização baseada em tempo, exportação para MP4, fidelidade do produto (arquivo de reivindicações), filmagem de um componente interativo ao vivo (§4 item 9), capa, loop de revisão, sourcing de música e licenças (§5) | references/build-and-export.md |
| Níveis de evidência; qual instrumento de laboratório mede o quê; de onde cada número vem | references/evidence-and-instruments.md |
| Filmagens ou mídia gerada (imagens locais do ComfyUI, clipes), corte nas batidas da música, uma EDL intercambiável — a rota de edição, não uma página baseada em tempo (decisão do usuário 2026-10-18); todo ativo carrega um arquivo de proveniência ou a renderização é recusada | laboratório tools/edit/README.md, laboratório de design docs/edit-route-design.md |
| Um processo físico ou algorítmico contínuo (uma frente crescendo, um campo se espalhando, uma onda viajando) — um ASSET manim (sequência PNG + proveniência) composto na página baseada em tempo, nunca um filme manim inteiro. Produção de filme inteiro e edição-e-composição (ativos que devem ser usados) são camadas separadas (decisão do usuário 2026-10-20); regras de composição são esparsas, primeira sonda em andamento | laboratório experiments/probe-manim-insert-ow2010/README.md; proposta ~/.claude/outputs/manim-explainer-route-20261020/ |
| Parâmetros de spring / troca de cor para um elemento | motion-design/local/element-motion-params.md |
| Antes do storyboard, todo filme: a camada de design compartilhada como cópia própria deste filme — a lista de falhas nela é vinculante (trabalho rejeitado pelo autor; nunca repita) | <item>/inputs/design-axes.md, copiado por works_contract.py open (passo 0); um braço de laboratório obtém o mesmo arquivo de run_arm.py |
| O mesmo princípio em posts, decks ou páginas web (forma entre mídias, eixos A–I, eixos de geração J/K, escolas nomeadas) — teoria, leia ao escolher | ~/.claude/references/design-axes/ |
Ordem de trabalho (cada passo antes do próximo)
- Confirme antes de qualquer coisa (
whole-film-rules.md§0): propósito / tipo de filme (anúncio introdutório, anúncio de hype, tour de produto, explicador, perfil), onde será exibido, o que o espectador deve fazer depois de assistir, o público, a ÚNICA coisa a lembrar, a ENERGIA (calmo / animado / hype; perguntado, nunca inferido do produto sozinho) e o fundo, os materiais e limites, a voz do conteúdo (marketing vs técnico leve) e a forma de apresentação (paginada vs palco contínuo). Um usuário presente → pergunte estes e aguarde. Sem supervisão → escreva cada um aberto parabuild/questions.mde pegue a leitura mais literal do pedido, declarada embuild/plan.md. "產品介紹片" sozinho não resolve anúncio vs tour (usuário r14); "廣告" sozinho não resolve introdutório vs hype (usuário r15). Um nome de gênero ou forma no pedido (MAD, PV, showreel, …) é um tipo de filme E o nome do produto que o filme serve como seu tópico: resolva contrafilm-types.md§Naming e confirme essa definição com o usuário antes do storyboard; um nome sem entrada lá é perguntado, nunca inferido — um nome não confirmado é a falha de alvo errado / expectativa abaixo (usuário 2026-10-19: pedido MAD de uma linha cuja primeira rodada retornou um MV de código puro). Item formal ou rodada de laboratório? (formal = algo que o autor enviará ou entregará a alguém; a definição única vive em<works>/README.md). Formal → a PRIMEIRA escrita da tarefa épython -X utf8 ~/.claude/tools/design-axes-mount/works_contract.py open <works>/films/<film_id> --medium video --actor main-loop [--toolbox PATH:ROLE:FACET ...], qualquer que seja a pasta de onde veio o pedido; cole a linha創作輸入que imprime no contrato de limite, e construa dentro do item. Um gerador, componente ou página de OUTRA entrega (um script de ilustração de livro, um filme anterior) é uma entrada de toolbox com seu papel e faceta, nunca um padrão (um projeto de livro 2026-10-11: o gerador de arte linear do livro escalado para 1080p foi rejeitado, agora uma referência negativa). Rodada de laboratório →run_arm.pymonta a mesma camada. - Filme inteiro primeiro (
whole-film-rules.md§1): nomeie o ÚNICO público, o que esse público precisa saber, o tom (a energia nomeada no passo 0; apenas se nenhum, do produto + público), e a ÚNICA cor de fundo (um anúncio de hype a afrouxa,whole-film-rules.md§6). Esses quatro são fixos antes que qualquer dispositivo seja escolhido. Se os documentos do produto não dizem o que uma funcionalidade resolve, pergunte ao proprietário (build-and-export.md§4 item 7); sem supervisão, escrevabuild/questions.mdem vez de inventar um ponto de dor. - Tipo de filme (
film-types.md): anúncio introdutório, anúncio de hype, tour de produto, showreel de dados, explicador narrado, ou reel de perfil — a partir do propósito do passo 0, nunca de qual esqueleto está mais à mão. Escolha o esqueleto; decida storyboard (conteúdo fixo) vs um parágrafo (exiba muitas execuções). - Fonte de ritmo (
rhythm-transitions-camera.md§1): apenas música → mudanças de seção nas linhas de barra; narração ou letras presentes → mudanças de seção no início das linhas, e a música não está também rigidamente travada. Se um filme recebe narração segue o tipo de filme e tom (passo 1-2); um filme calmo pode ainda usar música com seções lentas. - Tabela de storyboard antes do código: leia
inputs/design-axes.mdprimeiro (tabela de roteamento, linha "Antes do storyboard"). Por seçãot, título, visual, dados, layout, transição entrada/saída, objetivo da câmera, intenção de movimento (uma linha por elemento móvel e por camada de efeito empilhada: o que o movimento diz; um elemento sem linha fica parado ou vai,whole-film-rules.md§2a; um efeito nomeado recebe essa linha como descrição, já que um nome sozinho cujo catálogo e significados da indústria colidem é construído como o significado da indústria — laboratório r28, 3/3 execuções, leitor cego; laboratóriodocs/text-motion-vocabulary.md§3/§5), quadros-chave (linha do tempokeys[]: pelo menos umrole: keypor seção — o momento em que um espectador deve ler ou ver claramente, com umholdopcional;role: breakdownpara uma pose dentro da seção que decide como o movimento viaja; as costuras entre seções são derivadas, nunca escritas; laboratóriodocs/agent-review-kbt-design.md§3), e 參考角色 K/工具箱 (nonepor padrão; um gerador ou componente reutilizado nomeia seu papel K e a faceta emprestada, e deve corresponder a uma entrada--toolboxdeopen). Mostre ao usuário e aguarde confirmação quando um usuário estiver presente. Registre cada decisão de design que você tomar compython ~/.claude/tools/process-ledger/ledger.py addno momento em que a tomar. O portador da tabela é regido (usuário 2026-10-08, laboratóriodocs/production-order.mdúltima seção): um JSONfilm.timeline.jsonmais uma página de linha do tempo somente leitura gerada; necessário na aprovação = film_type, audience, energy, rhythm_source e por seção at, dur, freedom (travado / guiado / livre), motion_intent; camera goal / method usam os vocabulários fixos D1 / D2. A ferramenta (tools/timeline/, laboratóriodocs/timeline-layer-design.md) NÃO está construída antes de seu marco TL-1 — até lá mantenha a tabela markdown, usando esses nomes de campo (nomes de registros de cena que mudaram são mapeados na tabela §6.1 do design). - Dispositivos: cada dispositivo tem seu próprio tom; um dispositivo que conflita com o tom do passo 1 é descartado, o tom nunca é alterado para se ajustar ao dispositivo (usuário 2026-09-30). Um dispositivo padrão (explosão de partículas, túnel, pilha de cartões flutuante, glitch, texto-grande-como-design, números falsos de HUD) é usado apenas com uma linha de intenção de movimento vinculando-o ao conteúdo (§2a).
- Construir (
build-and-export.md§1): uma página HTML cujo cada quadro é uma função pura do tempo (window.__setTime(t)); sem timers, sem transições CSS. - Exportar (
build-and-export.md§2): exporte com filmkit, otools/filmkit/render.pydo laboratório (perfillab-round), nunca um script de captura escrito à mão. Ele captura quadro a quadro, codifica, verifica, e só então publica o nome de saída; seucheck.pydecide se o ARQUIVO é entregável. Filmes formais agrupam suas fontes com@font-face(uma família sans licenciada abertamente que cobre CJK e Latim, e.g. Noto Sans TC; nunca confie nas fontes instaladas na máquina de exportação ou visualização, laboratório D26). Um filme formal exporta com--profile delivery-web(campos de formato, mais bloqueio FK-R-18 / FK-R-19 quando o filme não é um item de works aberto comopenou sua montagem está desatualizada). Loudness e pico verdadeiro são relatados porcheck.pycomo um fato (FK-R-17, info). Para julgá-los contra uma plataforma, passe--rules <rules file> --target <name>; um alvo é uma reivindicação no arquivo de regras com sua fonte ereview_when, nunca assumido pela skill. - Revisão (
build-and-export.md§3): folha de filme inteiro a 1 fps primeiro, depois detalhes; feedback como "segundo / onde / mudança"; uma mudança de cada vez; no máximo 3 rodadas. Um filme formal é então revisado LADO A LADO:works_contract.py review <item>coloca a folha do candidato ao lado de um filme aprovado do mesmo tipo selecionado por tags (ou escrevereference: none), e o revisor não é o construtor (§3 item 9) — em uma única sessão, um subagente de contexto limpo lêdeliver/_review/side-by-side.pnge a primeira linha do veredito éreviewer: subagent-clean-context.works_contract.py deliver <item>recusa até quedeliver/_review/verdict.mdseja mais novo que o candidato. Caminho de revisão por agente (usuário 2026-10-19, laboratóriodocs/agent-review-kbt-design.md; o usuário dá direção e conteúdo de design apenas): um subagente maker constrói, a sessão main-loop que despacha revisa e nunca edita o filme; eles conversam através de arquivos (tools/review/review.py), gates G0 storyboard (maker revisa o diretor) → G1 stills chave (apenas itens difíceis) → G2 janelas K/T (sensação = POLISH) → G3 filme inteiro, no máximo 3 rodadas cada; apenas a lista de falhas, linhas de bloqueio do filmkit, fidelidade do produto e defeitos vistos uma vez podem BLOQUEAR; após a rodada 3, a melhor versão é enviada com os itens abertos listados, e o veredito dizreviewer: dispatcher-main-loop,user_watched: no(build-and-export.md§3 item 10). - Entregar com a forma de aceitação abaixo. Destino: um item de works (
<works>/films\<film_id>\, predicado em<works>/README.md); o projeto que o usuário nomeou mantém um ponteiro (_MOVED_<date>.txt) ou apenas seu próprio livro / dados. Um filme construído em seu próprio projeto e adotado (gerador estrangeiro) reentra comworks_contract.py adopt <same root> --id <id> --reviseapós cada rodada aceita. Onde cada item está:<works>/STATUS.md(leia primeiro). Uma rodada de laboratório vai para<lab>\experiments\<round>\.
Modelos (usuário 2026-10-10, laboratório CLAUDE.md Decisões; causas experiments/r22-haiku/REPORT.md): Haiku nunca faz um filme, nem como condutor nem como trabalhador em qualquer passo acima; o conteúdo fixo de um componente conta como produção (laboratório D-T12).
Vereditos que esta skill pode dar, e como cada um é verificado
- "Mudanças de seção ficam na barra / linha" →
tools/measure_product.pyoutools/narrlock.pyno MP4 renderizado (caminhos do laboratório). - "Movimento é contínuo sob narração" →
tools/density.pyparte móvel e paradas ainda executadas. - "Cada número / funcionalidade é real" →
tools/fidelity.py+build/claims.json(T05). - "Há um movimento de câmera" →
tools/camflow.py; execuçõesat_boundaryprecisam de uma olhada no quadro. - "O arquivo é entregável" (legível, comprimento esperado, tamanho e codec, som presente quando esperado, escrito pelo filmkit a partir das entradas agora em disco) →
tools/filmkit/check.py(render.pyo executa por conta própria). Saída 0 significa sem linha de bloqueio, nada sobre a imagem. - "Parece bom / corresponde à referência" → NUNCA a partir de números. Uma folha de quadros lida por modelo E a própria visualização do usuário (laboratório INV-6). Números provam o caminho dos dados, não a imagem. No caminho de revisão por agente este veredito nunca é dado: o filme é "entregue sob revisão por agente, não assistido pelo usuário" (veredito
user_watched: no). - "Loudness está no alvo" →
check.py --rules F --target NAME; um UNDET para um alvo sem tolerância é uma lacuna no arquivo de regras, não uma aprovação.
Forma de entrega (um humano deve assistir ao filme)
Cole as seções 1-4 de check.md (bloqueio / confirmado / precisa de olhada / indeterminado) verbatim (seção 5, as isenções declaradas do autor, permanece no arquivo) — para um filme formal da verificação --profile delivery-web, para que as linhas FK-R-18 (montagem de design-axes) e FK-R-19 (carimbo de works) estejam entre elas, mais a linha reference: de deliver/_review/report.md, incluindo as linhas rerun, antes da lista de verificação; as próprias perguntas da sessão seguem separadamente e nunca são misturadas nas seções coladas. Qualquer operação transform.py (normalize existe desde filmkit M3: transform.py normalize <in> --out <new> --target-lufs X --true-peak Y ou --rules F --target NAME; duck e convert não estão construídos) em um filme formal é perguntada primeiro, nomeando o novo arquivo que ela criaria.