{
  "id": "clube-filatov",
  "titulo": "Novas ferramentas todo dia",
  "categoria": "elementos",
  "resumo": "filme horizontal de 17,2 s, sem narração, que recria o primeiro filme do Reels de Daniil Filatov sobre criar com ferramentas de IA: letras grandes por máscara, 21 dias que acendem, um quadrado laranja que vira retrato, um cursor que arrasta a foto para o Framer, gera imagens no Recraft e anexa uma delas no Claude, uma parede de logos e os resultados em cards, até a assinatura final. Uma cena declarativa única gera a prévia em HTML e um projeto nativo do After Effects com 42 composições, todas editáveis. Na comparação lado a lado com o original, a recriação foi aprovada como \"praticamente perfeita\". Feito pelo Clube do Motion.",
  "indicado": "criador, designer ou estúdio que quer mostrar como trabalha com várias ferramentas, ou produto que quer demonstrar um fluxo entre apps; vídeo horizontal para site, YouTube ou apresentação.",
  "estilo": [
    "elementos únicos",
    "tipografia por máscara",
    "interface recriada",
    "cursor que demonstra",
    "transferência de objeto",
    "parede de logos",
    "laranja de destaque",
    "som procedural"
  ],
  "ficha": {
    "formato": "1920×1080, 30 qps, 16:9",
    "duracao": "17,2 s (516 quadros), sem narração",
    "motor": "ae",
    "voz": "ver o guia de estilo",
    "musica": "ver o guia de estilo",
    "fontes": "ver o guia de estilo"
  },
  "ferramentas": [
    "Codex",
    "After Effects"
  ],
  "ficha_tecnica": {
    "Duração": "17,2 s (516 quadros), sem narração",
    "Formato": "1920×1080, 30 qps, 16:9",
    "Ferramenta": "cena declarativa em Python (`gerar.py`) que gera um HTML com `render(t)` e `seek(t)` e o JSON nativo do After Effects; render final no After Effects, em 3 trechos",
    "Projeto do After Effects": "42 composições e 756 camadas (755 visuais e uma de áudio); textos, formas, seleções, cursor, progresso e interfaces editáveis; fotos e logos como mídia",
    "Tipografia": "Nohemi Regular nos títulos, Inter na interface, Geist Mono no contador, Source Serif 4 na resposta do chat",
    "Som": "66 eventos sintetizados por código (toque, clique, sopro, golpe grave e acorde em Fá maior); −27,63 LUFS, pico de −7,33 dBTP, de propósito discreto",
    "Referência": "o primeiro filme horizontal do Reels de Daniil Filatov e o prompt \"BONUS\" do tutorial dele no Notion; o autor fez em HTML com o Claude, sem After Effects",
    "Arquivo final": "MP4 H.264 com áudio AAC estéreo a 48 kHz, 14,1 MB"
  },
  "etapas": [
    {
      "titulo": "O roteiro",
      "texto": "**Resumo:** o filme não tem narração; o roteiro é a linha do tempo da versão aceita, cena a cena, com o texto exato da tela. O texto ficou em inglês, como no original, para a comparação lado a lado. Os tempos são do vídeo final e algumas cenas se sobrepõem.\n\n## De onde veio a estrutura\n\nO original apresenta uma ideia com letras grandes, transforma um detalhe em objeto, usa o cursor para demonstrar o trabalho em três ferramentas, reúne as marcas numa parede de logos, mostra os resultados como cards e fecha com a marca do autor. O prompt \"BONUS\" do tutorial dele descreve esse filme; a recriação seguiu o prompt e as poses do Reels.\n\n## Cenas por tempo\n\n | \n\n | #\n | Tempo (s)\n | Texto na tela\n | O que acontece\n\n | 1\n | 0,00–2,40\n | \"New creative tools\" / \"appear every day.\" · \"Day 01\" … \"Day 21\"\n | as duas linhas entram palavra por palavra; 21 quadrados acendem em laranja, cada vez mais rápido, com o contador acompanhando; no fim, os quadrados convergem para o centro\n\n | 2\n | 2,38–4,69\n | \"Hey, I’m Daniil\" · \"I explore what they\" / \"make possible.\"\n | o quadrado cresce e vira o retrato; a apresentação sobe; o cursor entra em 3,55 s, clica no retrato em 4,05 s e arrasta\n\n | 3\n | 4,64–6,74\n | \"Framer,\" · \"Build the page\"\n | a janela do Framer entra pela direita e o retrato pousa como foto dentro dela; o título é digitado; em 5,85 s o cursor clica em Insert e dois cards sobem; em 6,34 s o placeholder ganha a seleção azul\n\n | 4\n | 6,71–8,65\n | \"Framer,\" \"Recraft,\" · \"Generate the missing visual\"\n | a janela do Recraft: três linhas de prompt digitadas, clique em Generate (7,79 s), \"Generating…\", skeletons e a galeria 2×2; em 8,33 s o cursor pega a primeira imagem\n\n | 5\n | 8,60–10,47\n | \"Framer,\" \"Recraft,\" \"Claude.\" · \"Write the tutorial\"\n | a imagem vira o anexo no Claude; a mensagem e a resposta entram linha a linha; a janela encolhe e some\n\n | 6\n | 10,20–12,05\n | \"Brands I’ve created with\"\n | a íris laranja cobre o palco; 36 tiles de logos chegam do centro, derivam em fileiras alternadas, pulsam e saem pelos lados\n\n | 7\n | 12,05–12,98\n | \"Then turn them into\" · \"visual stories,\"\n | fundo cinza; um story inclinado com três fotos trocando e a barra de progresso\n\n | 8\n | 12,95–13,90\n | \"workflows,\"\n | fluxo com três nós (Framer, Recraft, Claude), conectores que se desenham e checks que acendem\n\n | 9\n | 13,85–14,83\n | \"and tutorials\"\n | player com foto, legenda, barra de progresso e quatro capítulos com check\n\n | 10\n | 14,75–15,50\n | \"worth trying.\"\n | três cards salvos sobem em sequência e o marcador de cada um se preenche\n\n | 11\n | 15,48–17,20\n | \"filatov.design\" · \"AI, design and content\"\n | o fundo volta ao branco; o avatar do canto cresce até o centro; o domínio entra por máscara e a assinatura sobe por último\n\n## Momentos para o som\n\n- 0–2,40 s: um toque por quadrado que entra e outro, com o tom subindo, em cada dia que acende; sopro em 2,00 s.\n\n- 2,38 s: sopro e golpe grave na morfose do quadrado em retrato.\n\n- 4,05 · 5,11 · 5,85 · 6,34 · 7,79 · 8,33 s: cliques do cursor; 4,68 e 8,64 s: soltar.\n\n- 6,45 · 8,34 · 10,05 · 11,76 · 15,45 s: sopros nas trocas de cena.\n\n- 10,32 s: golpe grave na íris.\n\n- 12,05 · 12,95 · 13,85 · 14,75 s: um golpe grave a cada resultado.\n\n- 15,76 s: acorde em Fá maior na assinatura.\n\nA lista completa dos 66 eventos, com tempo, tipo, ganho, pan e tom, está em `audio/eventos.json`."
    },
    {
      "titulo": "A identidade visual",
      "texto": "**Resumo:** palco branco e cinza-claro, tinta quase preta, o laranja `#FF4D17` como única cor de destaque, títulos grandes em Nohemi com tracking negativo e interfaces de app recriadas em formas e texto. O movimento usa quatro curvas com funções separadas, palavras recortadas por máscara, um cursor com pontos de contato medidos e transferências de objeto entre cenas. Números tirados do `gerar.py`, do `som.py` e do tutorial do projeto.\n\n## Palco e cores\n\n | \n\n | Token\n | Valor\n | Papel\n\n | Fundo\n | `#FFFFFF`\n | abertura, demonstração e fecho\n\n | Fundo dos resultados\n | `#F2F2F2`\n | separa a coleção de saídas da demonstração\n\n | Tinta\n | `#121212`\n | títulos e logos\n\n | Apoio\n | `#83858D`\n | apresentação, legendas e assinatura\n\n | Laranja\n | `#FF4D17`\n | dias, quadrado, cursor, íris, checks, barras de progresso\n\n | Nome anterior\n | `#CFCFCF`\n | o nome da ferramenta que já passou fica cinza quando a próxima entra\n\n | \n\n | Peça\n | Como é\n\n | Sombra\n | preta a 12%, distância de 10 px, suavidade 36 (no HTML: `feDropShadow`, `dy=10`, `stdDeviation=18`)\n\n | Cantos\n | retrato 14 px; janelas 18; cards de 20 a 32\n\n | Motion blur no AE\n | 70°, fase −35°, 8 amostras, limite adaptativo 16\n\n | Marca persistente\n | avatar de 56 px no canto (68, 68), escondido na parede de logos\n\n## Fontes\n\n | \n\n | Fonte\n | Onde\n\n | Nohemi Regular, tracking −25\n | títulos, frases, apresentação e assinatura (150, 124, 132 e 196 px)\n\n | Inter Regular\n | interfaces, etiquetas, capítulos e cards\n\n | Geist Mono, 22 px\n | o contador de dias, que não pula de largura\n\n | Source Serif 4, 24 px\n | a resposta do Claude\n\n | Segoe UI Symbol\n | só os onze símbolos `☰ ✓ ↑ ▶` no AE\n\n## Curvas\n\n | \n\n | Nome\n | Bézier\n | Uso\n\n | `expo`\n | `(0.16, 1, 0.3, 1)`\n | entradas rápidas com acomodação: textos, janelas, fades\n\n | `smooth`\n | `(0.65, 0, 0.35, 1)`\n | arraste, transferência, convergência e grandes transições\n\n | `pop`\n | `(0.34, 1.56, 0.64, 1)`\n | unidades pequenas com excesso de escala, como os quadrados dos dias\n\n | `linear`\n | —\n | progresso, sinal e estados de carregamento\n\nNo AE as chaves ficam nativas e esparsas, e a expressão gerada pelo `kit_ae.expr_curva()` calcula a Bézier entre elas com 24 iterações.\n\n## Componentes\n\n- **Palavra mascarada:** cada palavra tem precomp de recorte própria (largura medida + 7 px, altura de 1,25 × o tamanho); entra de baixo, deslocada 0,85 × o tamanho, com opacidade de 0 a 100 em 0,55 s (`expo`) e 85 ms de atraso entre palavras.\n\n- **Dias:** 21 quadrados de 30 px, raio 8, a 44 px um do outro; entram do centro para fora com `pop`; o central acende em 0,68 s e os outros em `0,90 + (n/20)^0,6`; cada preenchimento pulsa a 132% e solta um anel de 1,5 px. O contador \"Day 01\" acompanha.\n\n- **Quadrado → retrato:** o quadrado de 30 px cresce a 733% × 953% (cerca de 220×286) e sobe 389 px entre 2,40 e 2,80 s; a foto aparece por opacidade.\n\n- **Janelas de app:** 1104×888, raio 18, centro (1312, 540); deixam uma coluna à esquerda para o nome da ferramenta (112 px) e a descrição da ação (32 px). Framer escuro, Recraft claro e Claude creme.\n\n- **Cursor:** seta laranja com contorno branco de 2 px e etiqueta de 175×37; âncora na ponta. No clique, 100% aos −60 ms, 88% no contato e 100% aos +120 ms; anel de 48 px com traço de 3 px, de 50 a 180% em 0,30 s.\n\n- **Íris:** elipse de 3000 px que cresce de 0 a 100% entre 10,20 e 10,50 s e sai subindo 2.100 px.\n\n- **Parede de logos:** 36 tiles de 176 px, raio 28, logo de 84 px, em 3 fileiras de 12 com 11 marcas (`(n + fileira × 4) % 11`); partem do centro e chegam em 0,36 s, escala 0 → 108 → 100%, deriva de +120 px nas fileiras 1 e 3 e −120 na 2, pulso com 16 ms de atraso por coluna e saída de ±2.400 px.\n\n- **Story:** card 9:16 de 300×533, raio 32, a 130% e −2°, com um apoio laranja inclinado 8° atrás; três fotos trocam a cada 0,29 s.\n\n- **Fluxo:** três nós de 305×96 ligados por conectores de 4 px que se desenham em 0,35 s; checks cinza viram laranja; um sinal de 13 px percorre o caminho.\n\n- **Tutorial:** player com foto, legenda, barra laranja que cresce a partir do centro e quatro capítulos que acendem a cada 0,24 s.\n\n- **Cards salvos:** três cards de 250×420 com 45 ms de atraso; o marcador muda de contorno para preenchido.\n\n## Transições\n\nQuadrado → retrato; retrato → foto dentro do Framer (mesma pose global no mesmo instante, 4,68 s); imagem gerada no Recraft → anexo no Claude (sobe, encolhe a 35% e gira 0 → −5 → 0° entre 8,33 e 8,64 s); janela do Claude que encolhe a 88% e some; íris laranja que cobre o palco e revela a parede; avatar do canto que cresce de 40 para 100% e vai para o centro (15,48 a 16,03 s).\n\n## Som\n\nFeito por código no `som.py`, sem música, com 66 eventos em estéreo a 48 kHz e semente 42.\n\n | \n\n | Som\n | Síntese\n | Papel\n\n | `tap`\n | seno + ruído, 75 ms\n | entrada e preenchimento dos dias\n\n | `click`\n | ruído + seno de 1.900 Hz, 40 ms\n | contato do cursor\n\n | `air`\n | ruído suavizado, 320 ms\n | transições\n\n | `thock`\n | grave descendente + ruído, 150 ms\n | morfose, íris e troca de resultado\n\n | `chord`\n | 174,61 / 220 / 261,63 / 349,23 Hz, 1,35 s\n | assinatura final em Fá maior\n\n- Entradas dos quadrados com ganho 0,022 e pan `(n − 10)/13`; preenchimentos com 0,082 e tom subindo `350 + n × 14` Hz.\n\n- Cliques a 0,13; soltar a 0,055; sopros a 0,07; íris com thock a 0,17; resultados a 0,09; acorde a 0,13.\n\n- **Final:** `loudnorm=I=-28:TP=-1:LRA=9`; medido −27,63 LUFS, pico de −7,33 dBTP, LRA 4,40 LU. O nível baixo é desta peça sem fala nem música; para vídeo narrado, mixe junto da voz.\n\n## O que é \"humano\" neste vídeo\n\n- Cada ação tem entrada, repouso legível, interação e saída.\n\n- O cursor afunda no clique e o anel se abre no ponto exato do contato.\n\n- A parede de logos nunca fica parada: as fileiras derivam em sentidos opostos e um pulso passa pelas colunas."
    },
    {
      "titulo": "A montagem em HTML",
      "texto": "| \n\n | Arquivo\n | O que faz\n\n | `gerar.py`\n | define a peça inteira: composições, camadas, tempos de visibilidade (`ini`, `fim`), posição base e chaves relativas (`anim.pos`, `anim.esc`, `anim.rot`, `anim.opa`), digitação (`typein`), desenho de caminho (`draw`) e curvas; grava `cenas.json` e `ae/projeto.json`\n\n | `gerar_html.py`\n | junta `cenas.json`, `player-template.html`, imagens, fontes e áudio num HTML independente, com reprodução e busca por tempo\n\n | `ae/kit_ae.py`\n | converte a cena em JSON nativo do AE: precomps para a hierarquia, uma camada por grupo de forma, máscaras de oito vértices com tangentes para cantos redondos e a expressão `expr_curva()`, que calcula a curva Bézier entre chaves esparsas\n\n | `render-html.mjs`\n | abre o HTML no Chrome sem janela, espera `window.ready` (fontes e imagens) e chama `seek(quadro/30)`; sem argumento grava poses de conferência, com `--full` exporta os 516 quadros\n\n | `render-ae.ps1`\n | renderiza o AEP com `aerender -reuse` em 3 trechos (quadros 0–239, 240–479 e 480–515), um por vez, com prioridade baixa e memória limitada, e junta com o WAV final\n\n | `som.py`\n | sintetiza `tap`, `click`, `air`, `thock` e `chord` com semente 42 e mixa os 66 eventos, normalizando para −28 LUFS\n\n | `registrar-fontes.py`\n | registra as fontes do projeto para o usuário do Windows quando copiar para a pasta da Adobe não basta\n\n | `verificar-final.py`\n | confere quadros, duração, qps e decodificação do MP4\n\n- **Use uma pasta nova** e copie o pacote; a versão aceita fica intacta.\n\n- **Troque os assets do autor pelos seus**, com os mesmos nomes em `assets/`: `avatar.jpg`, `portrait.jpg`, `legs.jpg`, `summer.jpg`, `blue.jpg`, `work.jpg`, `finance.jpg`, `slit.jpg`, `slit-tall.jpg` (600×1008) e `desk.jpg`, além dos logos. Os tamanhos de cada um estão no `ASSETS.md`. Para os títulos, use outra fonte e salve como `assets/Nohemi-Regular.ttf` e `.woff2`, ou troque o nome da fonte no `gerar.py`: ele mede as frases com o TTF, e o `gerar_html.py` embute os WOFF2.\n\n- **Fontes:** instale as de `assets/`; se não aparecerem no AE, rode `python -X utf8 registrar-fontes.py`. Os onze símbolos `☰ ✓ ↑ ▶` usam a Segoe UI Symbol do Windows no AE.\n\n- **Gerar:** `python -X utf8 som.py`, depois `python -X utf8 gerar.py` e `python -X utf8 gerar_html.py`.\n\n- **Conferir no navegador:** `node render-html.mjs` grava poses de revisão; `node render-html.mjs --full` exporta o filme em HTML. Troque o caminho do Chrome e do `playwright-core` no topo do script.\n\n- **After Effects pela ponte MCP:** com um projeto vazio aberto, valide `ae_project_import_json` com `dryRun: true`, importe `ae/projeto.json`, aplique `ae/pos-import.json` com `ae_do` e salve um AEP novo. Sem a ponte, abra uma cópia do `filatov-motion.aep` e reaponte as mídias faltando (File › Dependencies › Find Missing Footage).\n\n- **Render:** ajuste os caminhos do `render-ae.ps1`, use uma pasta de trechos limpa por versão (o script junta todos os `trecho-*.mp4` que encontrar) e rode no PowerShell 7. Não mande comandos à ponte durante o render.\n\n**Pegadinhas:** nomes de camada se repetem (há vários checks), então localize por composição e índice. A âncora do cursor fica na ponta, em [0,0]: aplique depois de criar a camada e confira na pose do clique. Todas as precomps duram 17,2 s com tempo global: mudar a duração exige atualizar som, captura, trechos e junção. Editar o Easy Ease no gráfico não muda a curva enquanto a expressão `expr_curva()` estiver ativa."
    },
    {
      "titulo": "As decisões de direção",
      "texto": "- **Continuidade do objeto conecta as cenas.** Origem e destino casam posição, escala, recorte e instante: o retrato termina em (1150, 344) a 62% em 4,68 s, exatamente onde a foto aparece dentro do Framer no quadro seguinte.\n\n- **O cursor demonstra as ações.** Ele entra em 3,55 s, clica em 6 pontos medidos, arrasta e solta, com o clique que encolhe a seta a 88% e um anel laranja.\n\n- **Palavra por palavra, com 85 ms entre elas**, cada uma recortada pela própria máscara: a frase ganha hierarquia sem andar como um bloco.\n\n- **Curvas por função:** `expo` nas entradas, `smooth` nos arrastes e transferências, `pop` nas unidades pequenas e linear no progresso e no sinal.\n\n- **Densidade sem trabalho manual:** os 36 tiles de logos saem de uma fórmula de posição, atraso e marca, com deriva alternada por fileira e um pulso que percorre as colunas.\n\n- **Os resultados como cards concretos:** story, fluxo de trabalho, tutorial e cards salvos, cada um com a frase grande à esquerda.\n\n- **Uma cena, dois motores:** a mesma especificação gera a prévia HTML e as camadas nativas do AE, e as poses de revisão acharam problemas que um JSON válido não mostrava.\n\n- **Som discreto e sincronizado aos contatos:** cliques nos instantes dos cliques, sopros nas transições, golpes graves nas trocas de resultado e um acorde na assinatura.\n\nDetalhes de cores, curvas e som: estilo.md. Cenas por tempo e texto na tela: roteiro.md. Para fazer um filme no mesmo método com a sua marca: PROMPT.md."
    },
    {
      "titulo": "As versões até o final",
      "texto": "| \n\n | Versão\n | O que mudou\n\n | v1\n | primeira montagem no After Effects (`filatov-motion-v1.aep`), comparada quadro a quadro com o Reels: corrigidos posição do retrato, abertura, títulos finais, tamanho do story, player, minicards e logos\n\n | **final**\n | aprovada no lado a lado com o original: símbolos com Segoe UI Symbol (a Inter do site não tem esses glifos), estilos de texto aplicados depois da importação e render em 3 trechos com `-reuse`; 516 quadros conferidos, zero fontes e mídias faltando"
    }
  ],
  "pacote": [
    {
      "pasta": "projeto/",
      "conteudo": "`ae/filatov-motion.aep` (o projeto editável), `ae/projeto.json` e `ae/pos-import.json` (o projeto em JSON para importar pela ponte MCP do After Effects), `ae/kit_ae.py` e `ae/ponte.mjs`; `gerar.py`, `gerar_html.py`, `cenas.json` e `player-template.html`; `render-html.mjs`, `render-ae.ps1`, `registrar-fontes.py`, `verificar-final.py` e `documentar.py`; `CATALOGO-MOTION.md`, `MAPA-DO-PROJETO.md` (todas as camadas e chaves) e `ASSETS.md`; em `assets/`, as fontes Inter, Geist Mono e Source Serif 4 (TTF e WOFF2), os logos de Framer, Figma, Freepik e LottieFiles e os inventários em JSON"
    },
    {
      "pasta": "audio/",
      "conteudo": "`som.py` (a síntese dos 5 sons e o mix), `eventos.json` (os 66 eventos com tempo, tipo, ganho, pan e tom), `sfx-final.wav` (o mix aceito) e `sfx.mp3` (o mesmo áudio para a prévia HTML)"
    },
    {
      "pasta": "referencias/",
      "conteudo": "`tutorial/` (o método em 5 partes: construção, cenas com valores, controles e som, procedimento e falhas), `estudo-da-referencia.md`, `links.md` e `fora-do-pacote.md`"
    },
    {
      "pasta": "render.mp4",
      "conteudo": "o filme final, exportado do After Effects"
    },
    {
      "pasta": "gerar.py",
      "conteudo": "define a peça inteira: composições, camadas, tempos de visibilidade (`ini`, `fim`), posição base e chaves relativas (`anim.pos`, `anim.esc`, `anim.rot`, `anim.opa`), digitação (`typein`), desenho de caminho (`draw`) e curvas; grava `cenas.json` e `ae/projeto.json`"
    },
    {
      "pasta": "gerar_html.py",
      "conteudo": "junta `cenas.json`, `player-template.html`, imagens, fontes e áudio num HTML independente, com reprodução e busca por tempo"
    },
    {
      "pasta": "ae/kit_ae.py",
      "conteudo": "converte a cena em JSON nativo do AE: precomps para a hierarquia, uma camada por grupo de forma, máscaras de oito vértices com tangentes para cantos redondos e a expressão `expr_curva()`, que calcula a curva Bézier entre chaves esparsas"
    },
    {
      "pasta": "render-html.mjs",
      "conteudo": "abre o HTML no Chrome sem janela, espera `window.ready` (fontes e imagens) e chama `seek(quadro/30)`; sem argumento grava poses de conferência, com `--full` exporta os 516 quadros"
    },
    {
      "pasta": "render-ae.ps1",
      "conteudo": "renderiza o AEP com `aerender -reuse` em 3 trechos (quadros 0–239, 240–479 e 480–515), um por vez, com prioridade baixa e memória limitada, e junta com o WAV final"
    },
    {
      "pasta": "som.py",
      "conteudo": "sintetiza `tap`, `click`, `air`, `thock` e `chord` com semente 42 e mixa os 66 eventos, normalizando para −28 LUFS"
    },
    {
      "pasta": "registrar-fontes.py",
      "conteudo": "registra as fontes do projeto para o usuário do Windows quando copiar para a pasta da Adobe não basta"
    },
    {
      "pasta": "verificar-final.py",
      "conteudo": "confere quadros, duração, qps e decodificação do MP4"
    }
  ],
  "prompt": "Quero um filme de tipografia e interfaces no mesmo método do projeto \"Novas ferramentas todo dia\", que está em 07-videos/projetos/filatov/, com a minha marca.\n\nMarca, nome ou estúdio: {{MARCA}}\nDomínio ou assinatura do fecho: {{ASSINATURA}}\nA ideia de abertura, em uma frase grande: {{FRASE_DE_ABERTURA}}\nAs ferramentas ou apps que aparecem, na ordem, com a ação em cada um: {{FERRAMENTAS_E_ACOES}}\nOs resultados que quero mostrar em cards (story, fluxo, tutorial, cards salvos…): {{RESULTADOS}}\nFotos, retrato e avatar: {{FOTOS}}\nCor de destaque: {{COR}} (a referência usa #FF4D17)\nDuração: {{DURACAO}} (a referência tem 17,2 s) · Formato: {{FORMATO}} (a referência é 1920×1080, 30 qps)\n(Se algum desses estiver vazio ou com as chaves, me pergunte antes de começar.)\n\n1. Estude o projeto antes de propor qualquer coisa. Leia LEIA-ME.md, estilo.md e roteiro.md, depois referencias/tutorial/ na ordem e o CATALOGO-MOTION.md. Abra projeto/gerar.py e veja como funcionam comp(), add(), text(), image(), group(), path(), entrance(), os campos ini, fim, anim, typein e draw e as curvas expo, smooth e pop; leia também ae/kit_ae.py, gerar_html.py, player-template.html, render-html.mjs, render-ae.ps1 e som.py. Me explique em poucas linhas o que você vai reaproveitar.\n\n2. Se o formato for vertical, redesenhe hierarquia, posições e o tamanho das janelas; não encolha o filme horizontal.\n\n3. Escreva a linha do tempo antes de codar, no molde do roteiro.md: cada cena com entrada, repouso legível, interação e saída, o texto exato e o tempo. Marque os pontos de contato do cursor e, para cada transferência, a mesma pose (posição global, escala, recorte e instante) na cena de origem e na de destino. Me mostre e espere meu ok.\n\n4. Tire a identidade do assunto: as minhas fotos, o meu avatar, a minha fonte de títulos e as interfaces reais das ferramentas que eu uso, recriadas em formas e texto editáveis (nada de print colado). Confira se as fontes têm todos os glifos usados; símbolo que faltar ganha uma fonte própria só naquela camada.\n\n5. Construa numa pasta nova: copie gerar.py e troque textos, composições, dimensões, tempos e curvas. A mesma cena gera o HTML com render(t) e seek(t) determinísticos e o JSON nativo do After Effects. Se mudar a duração, atualize também o som, a captura e os trechos do render.\n\n6. Som feito por código no som.py: um clique em cada contato do cursor, sopro nas trocas de cena, golpe grave nas morfoses e nos resultados, toques nos elementos pequenos e uma nota no fecho, sem música, a não ser que eu peça. Mixe discreto e me diga o nível final.\n\n7. Confira a prévia com node render-html.mjs nas poses de repouso e no meio de cada transição, especialmente as transferências, a íris, os checks e a marca final. Corrija até as poses baterem.\n\n8. Importe no After Effects pela ponte MCP: valide ae_project_import_json com dryRun, importe, aplique o pos-import.json e salve um AEP novo. Confirme zero fontes e mídias faltando e localize camadas com nome repetido por composição e índice.\n\n9. Renderize com o render-ae.ps1 em trechos, numa pasta limpa por versão, junte com o WAV e confira quadros, duração, qps e decodificação com o verificar-final.py. Entregue o MP4, o AEP, o HTML e uma anotação do que mudou em relação à referência.",
  "campos": [
    "ASSINATURA",
    "COR",
    "DURACAO",
    "FERRAMENTAS_E_ACOES",
    "FORMATO",
    "FOTOS",
    "FRASE_DE_ABERTURA",
    "MARCA",
    "RESULTADOS"
  ],
  "fonte": {
    "nome": "Clube do Motion",
    "url": "https://clubedomotion.com/projeto/?id=filatov",
    "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
  }
}