primocode 10.13.0 → 10.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +66 -12
  2. package/bin/primocode.js +148 -8
  3. package/lib/act.js +48 -1
  4. package/lib/catalogo.js +12 -1
  5. package/lib/config.js +1 -0
  6. package/lib/estudio/cota.js +150 -0
  7. package/lib/estudio/dados/projetos/clube-ad5.json +105 -0
  8. package/lib/estudio/dados/projetos/clube-ae-sem-memoria.json +107 -0
  9. package/lib/estudio/dados/projetos/clube-agent.json +120 -0
  10. package/lib/estudio/dados/projetos/clube-antes-e-agora.json +86 -0
  11. package/lib/estudio/dados/projetos/clube-apresentando-clube.json +110 -0
  12. package/lib/estudio/dados/projetos/clube-bluevisa.json +106 -0
  13. package/lib/estudio/dados/projetos/clube-caught-in-the-fire.json +127 -0
  14. package/lib/estudio/dados/projetos/clube-chat-cliente-satisfeito.json +98 -0
  15. package/lib/estudio/dados/projetos/clube-chatgpt-anuncios.json +120 -0
  16. package/lib/estudio/dados/projetos/clube-claude-dj.json +140 -0
  17. package/lib/estudio/dados/projetos/clube-claude-mcp.json +142 -0
  18. package/lib/estudio/dados/projetos/clube-cleanui.json +106 -0
  19. package/lib/estudio/dados/projetos/clube-clinica-take-unico.json +128 -0
  20. package/lib/estudio/dados/projetos/clube-clinica.json +104 -0
  21. package/lib/estudio/dados/projetos/clube-clube-opener.json +125 -0
  22. package/lib/estudio/dados/projetos/clube-clube.json +108 -0
  23. package/lib/estudio/dados/projetos/clube-codigo.json +101 -0
  24. package/lib/estudio/dados/projetos/clube-distilbook.json +104 -0
  25. package/lib/estudio/dados/projetos/clube-drive-upload.json +115 -0
  26. package/lib/estudio/dados/projetos/clube-dub.json +119 -0
  27. package/lib/estudio/dados/projetos/clube-enxovaly.json +105 -0
  28. package/lib/estudio/dados/projetos/clube-fecha7.json +118 -0
  29. package/lib/estudio/dados/projetos/clube-filatov.json +128 -0
  30. package/lib/estudio/dados/projetos/clube-frame.json +108 -0
  31. package/lib/estudio/dados/projetos/clube-glass.json +118 -0
  32. package/lib/estudio/dados/projetos/clube-letra-em-apps.json +84 -0
  33. package/lib/estudio/dados/projetos/clube-letra-globo-3d.json +111 -0
  34. package/lib/estudio/dados/projetos/clube-letra-nos-apps.json +146 -0
  35. package/lib/estudio/dados/projetos/clube-letra-seis-mundos.json +100 -0
  36. package/lib/estudio/dados/projetos/clube-lula-3.json +146 -0
  37. package/lib/estudio/dados/projetos/clube-morph.json +119 -0
  38. package/lib/estudio/dados/projetos/clube-motion-designer.json +115 -0
  39. package/lib/estudio/dados/projetos/clube-motion-pacote.json +112 -0
  40. package/lib/estudio/dados/projetos/clube-movimento.json +103 -0
  41. package/lib/estudio/dados/projetos/clube-not-like-us.json +117 -0
  42. package/lib/estudio/dados/projetos/clube-pinterest-inspiracao.json +86 -0
  43. package/lib/estudio/dados/projetos/clube-pixel-e-tinta.json +108 -0
  44. package/lib/estudio/dados/projetos/clube-ponte.json +118 -0
  45. package/lib/estudio/dados/projetos/clube-processo-edit-tonal.json +126 -0
  46. package/lib/estudio/dados/projetos/clube-processo-motion-100-ia.json +109 -0
  47. package/lib/estudio/dados/projetos/clube-promo.json +114 -0
  48. package/lib/estudio/dados/projetos/clube-proposito.json +115 -0
  49. package/lib/estudio/dados/projetos/clube-rankhog.json +128 -0
  50. package/lib/estudio/dados/projetos/clube-recursao.json +116 -0
  51. package/lib/estudio/dados/projetos/clube-revelar.json +118 -0
  52. package/lib/estudio/dados/projetos/clube-robo.json +125 -0
  53. package/lib/estudio/dados/projetos/clube-shelby-ep2.json +144 -0
  54. package/lib/estudio/dados/projetos/clube-shelby.json +97 -0
  55. package/lib/estudio/dados/projetos/clube-solar-eclipse.json +96 -0
  56. package/lib/estudio/dados/projetos/clube-soldier.json +128 -0
  57. package/lib/estudio/dados/projetos/clube-som-de-cena.json +108 -0
  58. package/lib/estudio/dados/projetos/clube-spotify-candidatura.json +112 -0
  59. package/lib/estudio/dados/projetos/clube-tda-app.json +118 -0
  60. package/lib/estudio/dados/projetos/clube-tda-ia.json +75 -0
  61. package/lib/estudio/dados/projetos/clube-telegram-chat.json +118 -0
  62. package/lib/estudio/dados/projetos/clube-telegram-ilha.json +106 -0
  63. package/lib/estudio/dados/projetos/clube-tennessee-nike.json +132 -0
  64. package/lib/estudio/dados/projetos/clube-tudo-se-move.json +112 -0
  65. package/lib/estudio/dados/projetos/clube-uiad.json +107 -0
  66. package/lib/estudio/dados/projetos/clube-viralgrow.json +108 -0
  67. package/lib/estudio/dados/projetos/clube-whose-side.json +140 -0
  68. package/lib/estudio/dados/projetos/clube-youtube-inscrever.json +108 -0
  69. package/lib/estudio/dados/projetos/elementos-do-site-em-movimento.json +49 -0
  70. package/lib/estudio/dados/projetos/explainer-narrado.json +51 -0
  71. package/lib/estudio/dados/projetos/lancamento-de-produto.json +51 -0
  72. package/lib/estudio/dados/projetos/motion-so-com-sons.json +50 -0
  73. package/lib/estudio/dados/projetos/titulo-em-after-effects.json +51 -0
  74. package/lib/estudio/dados/projetos/tour-de-saas.json +50 -0
  75. package/lib/estudio/dados/projetos-ae/antes-e-agora/ae/cenas.jsx +733 -0
  76. package/lib/estudio/dados/projetos-ae/antes-e-agora/assets/fazer_assets.py +88 -0
  77. package/lib/estudio/dados/projetos-ae/letra-em-apps/ae/cenas.jsx +402 -0
  78. package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/preparar_assets.py +17 -0
  79. package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/svg_para_ae.py +25 -0
  80. package/lib/estudio/dados/projetos-ae/letra-nos-apps/BRIEF-AGENTES.md +31 -0
  81. package/lib/estudio/dados/projetos-ae/letra-nos-apps/README.md +53 -0
  82. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ROTEIRO-CENAS.md +69 -0
  83. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/A-agenda.jsx +148 -0
  84. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/B-docs.jsx +174 -0
  85. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/C-alttab.jsx +113 -0
  86. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/D-spotify.jsx +118 -0
  87. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/E-notas.jsx +146 -0
  88. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/F-jornal1.jsx +144 -0
  89. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/G-google.jsx +153 -0
  90. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/H-mapa.jsx +176 -0
  91. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/I-imagens.jsx +132 -0
  92. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/J-jornal2.jsx +191 -0
  93. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/K-maps.jsx +184 -0
  94. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera-movimentos.jsx +48 -0
  95. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera.jsx +57 -0
  96. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/card-spotify.jsx +98 -0
  97. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/digitar.jsx +38 -0
  98. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/jornal-comum.jsx +196 -0
  99. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra.jsx +23 -0
  100. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra_automatica.py +83 -0
  101. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/montagem.jsx +74 -0
  102. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/render_html.py +13 -0
  103. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/util.jsx +162 -0
  104. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-midia-comum.jsx +114 -0
  105. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/wg-util.jsx +360 -0
  106. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/F-jornal1/render_html.py +13 -0
  107. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/render_w-midia.py +26 -0
  108. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/inclin.py +30 -0
  109. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_d.py +36 -0
  110. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_e.py +27 -0
  111. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ajustar_movimentos.py +61 -0
  112. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ancorar.py +74 -0
  113. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/assar.py +47 -0
  114. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/camera3d_jornal.py +172 -0
  115. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/comparar.py +32 -0
  116. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/dados_ae_jornal.py +46 -0
  117. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/folha_contato.py +28 -0
  118. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/homografia_jornal.py +74 -0
  119. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/integrar.py +44 -0
  120. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/medir_quadro_a_quadro.py +32 -0
  121. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/mesa_2d.py +64 -0
  122. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/plot_cenas.py +11 -0
  123. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/retificar_quadros.py +38 -0
  124. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/assar_ab.py +52 -0
  125. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/medir_ab.py +59 -0
  126. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ajustar_h.py +111 -0
  127. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_corrige_cam.py +17 -0
  128. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ecc_cadeia.py +80 -0
  129. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_finalizar_cam.py +65 -0
  130. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_mosaico.py +61 -0
  131. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md +55 -0
  132. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md +66 -0
  133. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md +50 -0
  134. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md +43 -0
  135. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md +43 -0
  136. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces.md +42 -0
  137. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/atraso_imagem.py +31 -0
  138. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/fundo.py +56 -0
  139. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/juntar.py +45 -0
  140. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/montar.py +177 -0
  141. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/rastreio.py +74 -0
  142. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/sincronia.py +18 -0
  143. package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/ae/cenas.jsx +530 -0
  144. package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/assets/fazer_assets.py +107 -0
  145. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/assets/pessoas/figurinha.py +46 -0
  146. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/BRIEF-A.md +83 -0
  147. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/audio.py +179 -0
  148. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/confere.py +20 -0
  149. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte1.js +1 -0
  150. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte2.js +1 -0
  151. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/gerar_emojis.py +11 -0
  152. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/img/filmes/_indice.js +122 -0
  153. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/base.js +380 -0
  154. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/main.js +86 -0
  155. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1a.js +169 -0
  156. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1b.js +455 -0
  157. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1c.js +389 -0
  158. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p2.js +379 -0
  159. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/video.py +62 -0
  160. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/README.md +65 -0
  161. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/oraculo_take.py +137 -0
  162. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/render_take.py +388 -0
  163. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/take.js +235 -0
  164. package/lib/estudio/editor.js +285 -0
  165. package/lib/estudio/effectcraft.js +152 -0
  166. package/lib/estudio/exportar.js +181 -0
  167. package/lib/estudio/index.js +90 -2
  168. package/lib/estudio/kit-ae/base.jsx +1146 -0
  169. package/lib/estudio/kit-ae/cenas.jsx +395 -0
  170. package/lib/estudio/kit-ae/primitivas.jsx +911 -0
  171. package/lib/estudio/maquina-diretor.js +393 -0
  172. package/lib/estudio/maquina-elementos.js +134 -0
  173. package/lib/estudio/maquina-layout.js +198 -0
  174. package/lib/estudio/maquina-som.js +478 -0
  175. package/lib/estudio/maquina-trilha.js +160 -0
  176. package/lib/estudio/maquina-voz.js +429 -0
  177. package/lib/estudio/maquina.js +516 -0
  178. package/lib/estudio/projetos.js +60 -0
  179. package/lib/headless.js +71 -0
  180. package/lib/hooks.js +72 -0
  181. package/lib/local/cerebro.json +398 -12
  182. package/lib/local/entrada.js +46 -2
  183. package/lib/marca-kit.js +309 -0
  184. package/lib/mcp.js +286 -6
  185. package/lib/perigo.js +31 -3
  186. package/lib/planos.js +47 -19
  187. package/lib/preparar.js +111 -0
  188. package/lib/retomar.js +55 -0
  189. package/lib/sandbox.js +197 -0
  190. package/lib/skills.js +3 -1
  191. package/lib/tools.js +13 -4
  192. package/lib/ui.js +1 -1
  193. package/package.json +4 -2
  194. package/skills/after-effects/SKILL.md +52 -0
  195. package/skills/maquina-de-motion/SKILL.md +84 -0
@@ -0,0 +1,118 @@
1
+ {
2
+ "id": "clube-revelar",
3
+ "titulo": "Revelar",
4
+ "categoria": "produto",
5
+ "resumo": "filme de lançamento de 30 s, quadrado, para \"revelar.\", uma marca de impressão e moldura de fotos: a foto sai da tela, passa pelo celular e pelo Mac, vira um quadro emoldurado, é pedida, impressa, entregue e termina pendurada numa parede de verdade. Tudo num plano contínuo, em que cada cena é feita da anterior. É uma recriação do \"Photo print app launch film\" de @twoclipping no prompt-motion.com (feito com o Claude Opus 5.5 em HTML + Playwright, marca \"develop.\"). Mantivemos as viradas do original e acrescentamos música real com drop e quebra medidos, 113 efeitos posicionados pelo pico, câmera que aproxima cada momento, vidro líquido em WebGL e desfoque de movimento por subquadros. Feito no HyperFrames.",
6
+ "indicado": "loja ou app de impressão, fotos, decoração ou produto físico vendido online; lançamento de produto com fluxo de compra do começo ao fim.",
7
+ "estilo": [
8
+ "plano contínuo",
9
+ "estilo keynote",
10
+ "vidro líquido",
11
+ "interface preta",
12
+ "canvas quente",
13
+ "morphs",
14
+ "cursor real",
15
+ "sincronizado na batida"
16
+ ],
17
+ "ficha": {
18
+ "formato": "1440×1440, 60 qps, quadrado",
19
+ "duracao": "30,0 s (1.800 quadros), sem narração",
20
+ "motor": "ae",
21
+ "voz": "ver o guia de estilo",
22
+ "musica": "ver o guia de estilo",
23
+ "fontes": "ver o guia de estilo"
24
+ },
25
+ "ferramentas": [
26
+ "Claude Code",
27
+ "After Effects",
28
+ "ElevenLabs"
29
+ ],
30
+ "ficha_tecnica": {
31
+ "Duração": "30,0 s (1.800 quadros), sem narração",
32
+ "Formato": "1440×1440, 60 qps, quadrado",
33
+ "Ferramenta": "HyperFrames (HTML + GSAP com timeline pausada), um `render(t)` puro chamado pelo tween; vidro em WebGL",
34
+ "Desfoque de movimento": "render a 240 qps e `tmix=frames=4` para 60 qps",
35
+ "Trilha": "\"Piece Of Your Heart (Alok Remix)\", MEDUZA, Alok, Goodboys, 123,8 BPM, emendada por compassos: drop em 7,74 s, quebra na parede (23,22 s), volta com a marca (27,09 s)",
36
+ "Som": "113 efeitos, notas tonais em Lá♯; −13,9 LUFS integrado, pico −1,0 dBFS",
37
+ "Revisão": "detector de salto de quadro (13 no primeiro render, 1 residual no final) e de quadro vazio (0 em 7.200 quadros a 240 qps)",
38
+ "Referência": "\"Photo print app launch film\", @twoclipping, prompt-motion.com (29 s)"
39
+ },
40
+ "etapas": [
41
+ {
42
+ "titulo": "O roteiro",
43
+ "texto": "**Resumo:** o filme não tem narração; o roteiro é a estrutura do prompt de @twoclipping, adaptada para a marca \"revelar.\" (o verbo da foto revelada, como o \"develop.\" do original), com os tempos tirados da lista de efeitos do `mixar.py`. A grade é de 0,48375 s por batida; a coluna \"Batida\" usa o mesmo `b(n)` do código.\n\n## De onde veio a estrutura\n\nO prompt original pede um filme de lançamento estilo keynote, só 2D, em plano contínuo, a 120 BPM e 54 batidas, com algo acontecendo em toda batida, dividido em cinco blocos: abertura (marca, pílula, íris, grade, bento, zoom no drop), vidro (palavra de vidro, gota, barra, slider de luz, órbita, tela de bloqueio), palco (celular, ilha que vira janela do Mac, landing, produto), pedido (uma forma preta que vai de pedido feito a entregue) e parede (o quadro pendurado numa parede filmada, íris, e a marca de volta). Ele proíbe crossfade, blur de entrada, \"revelação por brilho\", flip 3D, partículas, glow e pausa de mais de 1 s. A nossa versão manteve os cinco blocos.\n\n## Cenas por tempo\n\n | \n\n | Bloco\n | Tempo (s)\n | Batida\n | Texto na tela\n | O que acontece\n\n | Abertura\n | 0–1,45\n | 0–3\n | \"revelar.\" · \"da tela para a parede.\"\n | a marca parada; a assinatura afunda; as letras se espremem no ponto como sanfona\n\n | \n | 1,46–2,42\n | 3–5\n | \"Revelar\"\n | o ponto vira pílula preta e o rótulo sobe dentro dela; a câmera aproxima ×1,58; clique\n\n | \n | 2,82–2,91\n | 5,8–6\n | —\n | seis lâminas de íris fecham sobre o rótulo e abrem numa foto\n\n | \n | 3,46–5,56\n | 7–11,5\n | —\n | o círculo vira quadrado e encolhe; a grade desdobra por trás como mapa (centro, cruz, cantos) e se reorganiza em bento\n\n | \n | 6,02–7,74\n | 12,5–16\n | —\n | hover e clique numa foto; a câmera entra nela e **chega no drop (7,74 s)**\n\n | Vidro\n | 7,93–9,51\n | 16,4–19,7\n | \"dourar.\"\n | a palavra de vidro entra letra por letra, derrete numa gota que se estica em barra de ferramentas de vidro\n\n | \n | 10,04–12,34\n | 20,75–25,5\n | \"Hora dourada\"\n | coração; o ícone de ajuste vira slider; o cursor segura e arrasta: a foto passa do dia para a hora dourada, entrando pela esquerda, e o botão segurado vira lente\n\n | \n | 12,67–14,27\n | 26,2–29,5\n | \"sexta-feira, 9 de outubro\" · \"Piece Of Your Heart\" · \"MEDUZA, Alok, Goodboys\"\n | a lente sobe e vira órbita; a próxima foto abre dentro dela; a órbita cresce até a tela de bloqueio; a barra de início vira um reprodutor de vidro; play\n\n | Palco\n | 14,95–15,96\n | 30,9–33\n | —\n | a tela recua para dentro do celular; a Dynamic Island estica como líquido, se solta, voa e cresce até a janela do Mac\n\n | \n | 16,25–17,27\n | 33,6–35,7\n | \"revelar.com.br\" · \"da tela / para a parede.\"\n | a persiana da janela sobe; toque longo no papel de parede, que descola e é arrastado para a aba; a página empurra; ao soltar, a foto vira o herói da landing\n\n | \n | 17,90–19,35\n | 37–40\n | \"O quadro\" · \"moldura\" · \"tamanho\" · \"30×40 · 50×70 · 70×100\" · \"R$ 349\" → \"R$ 589\"\n | a câmera entra na janela; ao rolar, o herói vira um quadro com passe-partout e moldura; clique na cor (a moldura pinta de preto) e no tamanho (o preço rola)\n\n | \n | 20,20–20,32\n | 41,75–42\n | \"Pedir quadro\"\n | o botão do menu voa até virar o botão do pedido; clique\n\n | Pedido\n | 20,90–22,91\n | 43,2–47,35\n | \"Pedido feito\" · \"Imprimindo %\" · \"A caminho · hoje\" · \"Entregue\"\n | uma forma preta só: check, barra de impressão com porcentagem, van numa rota pontilhada até a casa, círculo com check\n\n | Parede\n | 23,22–24,21\n | 48–50\n | —\n | o círculo inunda a tela de preto (a música quebra junto), segura e contrai no quadro pendurado numa parede filmada; a íris abre no quadro\n\n | \n | 24,21–26,32\n | 50–54,4\n | —\n | a sombra da planta passa sobre o quadro, a câmera avança devagar e um brilho atravessa o vidro; a íris fecha\n\n | \n | 26,49–27,09\n | 54,75–56\n | —\n | a moldura inunda a tela, contrai em pílula e depois em ponto\n\n | Marca\n | 27,09–30,0\n | 56–62\n | \"revelar.\" · \"da tela para a parede.\"\n | **a marca volta com a batida**, as letras saem do ponto como sanfona e a assinatura reaparece; o último quadro casa com o primeiro\n\n## Momentos para a trilha\n\n- 0–7,74 s: o breakdown da faixa sustenta a abertura; riser e whoosh longo levam ao drop.\n\n- **7,74 s: drop** no zoom da foto, com impacto e Ping Boom em Lá♯.\n\n- 12,29 s: Clarity em Lá♯ quando a luz dourada sobe.\n\n- **23,22 s: quebra** da música junto com a inundação preta; respiro no preto antes da parede.\n\n- **27,09 s: volta da batida** com a marca, impacto e Ping Boom.\n\n- 28,6–30 s: a música sai em fade.\n\nA lista completa dos 113 eventos, com instante e volume, está em `audio/cues.json`."
44
+ },
45
+ {
46
+ "titulo": "A identidade visual",
47
+ "texto": "**Resumo:** canvas claro e quente, interface preta, marca em Archivo larga e pesada, Geist na interface e vidro líquido do iOS sobre as fotos. Movimento de keynote: nada funde, desfoca ou corta; os objetos mudam de forma. Molas fechadas, câmera estilo Screen Studio e inundações pretas que contraem na cena seguinte. Números tirados do `index.html`, do `mixar.py`, do `BRIEF.md` e dos aprendizados do projeto.\n\n## Cores e fontes\n\n | \n\n | Token\n | Valor\n | Papel\n\n | Canvas\n | `#F1EEE8` (centro `#F6F4EF`, bordas `#E9E5DD`)\n | fundo do filme inteiro, com grão a 5% em multiply\n\n | Tinta\n | `#0E0E0F`\n | interface, pílula, botão do pedido\n\n | Marca\n | degradê `#2b2826 → #121213 → #050506`\n | letras de \"revelar.\"\n\n | Cinza\n | `#8B867D` (assinatura `#7d786f`)\n | texto secundário\n\n | Passe-partout\n | `#F4F1EA` / `#F3F0E8`\n | moldura interna\n\n | Carvalho\n | `#B58A5E`\n | moldura de madeira\n\n | Preto da moldura\n | `#141414` / `#151515`\n | moldura pintada\n\n | Página do Mac\n | `#F7F5F0`, barra `#F1EFEA`\n | landing e produto\n\n- **Archivo** com eixo de largura 125 e peso 800 na marca e nos títulos; **Geist** na interface.\n\n- A marca tem 236 px na abertura; títulos da landing em 40 px; interface do pedido em Geist 600.\n\n## Componentes\n\n | \n\n | Peça\n | Como é\n\n | Marca que se espreme\n | cada letra encosta na seguinte a partir do ponto; a largura-alvo é a largura em `wdth 125` vezes a escala; até 62 ajusta o eixo `wdth`, abaixo disso completa com `scaleX`; na volta a mola passa de 1 (≈ +16%) e as letras esticam como sanfona\n\n | Íris\n | 6 lâminas em volta de uma abertura hexagonal; cada lâmina vai de um vértice ao outro, estende a aresta até o círculo e volta pelo arco curto; gira 0,9 rad enquanto fecha; degradê `#3a3a40 → #1c1c20` com emendas `#6a6a72`\n\n | Grade que desdobra\n | 3×3 de 300 px com 16 px de espaço; a cruz desdobra a partir da borda do centro e os cantos a partir do vizinho, com sombra na dobra (55% → 0); depois vira bento\n\n | Vidro líquido\n | shader WebGL: caixas arredondadas e letras de canvas borrado como campos de distância, unidos por smooth-min (k ≈ 26 px); refração na borda em 3 escalas (R 1,00 · G 0,90 · B 0,80) para a borda cromática; luz de borda, linha de 1,4 px no contorno e sombra fora; barras com ícones brancos levam 22–30% de escurecimento interno\n\n | Letras de vidro\n | \"dourar.\" em vidro, com distância por logit do campo borrado (a conversão linear ligava a sombra na tela toda)\n\n | Lente\n | o botão segurado vira lente (amostra o fundo mais perto do centro, fator 0,72)\n\n | Celular\n | tela de 430×932; o canvas fica fixo em 1440² e só o tamanho muda; a interface escala por largura/1440 e se ancora no topo e no rodapé\n\n | Gota que vira janela\n | ilha + pescoço + bolha com filtro goo em SVG (blur 9, matriz alfa 26/−12); o pescoço afina e rompe sozinho; a bolha cresce com mola até a janela do Mac (790×548)\n\n | Quadro\n | moldura de 22 px, passe-partout de 70 px, a cor da moldura pinta de carvalho para preto\n\n | Botão do pedido\n | uma forma preta só: \"Pedir\" → \"Pedir quadro\" → \"Pedido feito\" → \"Imprimindo %\" → \"A caminho\" (van numa rota pontilhada) → \"Entregue\"\n\n | Parede\n | vídeo de parede com sombra de planta e uma cópia clareada em multiply por cima do quadro, para a sombra passar também sobre o vidro\n\n## Molas e câmera\n\n- **Mola padrão:** `1 − e^(−ζωt)(cos ω_d t + (ζω/ω_d) sin ω_d t)` com ζ 0,56 e ω 11,9 (passa até ~112% e assenta em ~0,6 s). **Mola de interface:** ζ 0,62, ω 17. Um valor com vários alvos é a soma de uma mola por mudança.\n\n- **Câmera:** deriva periódica de 30 s (o último quadro casa com o primeiro), sobre-escala de 1,2% para nunca mostrar borda, aproximação de ×1,58 na pílula e na íris e de ×1,42 nos botões do pedido; o cursor escala junto.\n\n- **Inundação:** círculo ou retângulo preto passa dos cantos em 0,3 s (raio de 2.300 px), segura ~0,15 s e contrai na próxima forma com mola (ζ 0,78). Com a câmera aproximada, é desenhada no espaço da tela.\n\n- **Cursor:** trajetos em arco, micro-movimento da mão, aperto no clique e anel no toque longo.\n\n- **Motor:** um tween de uma timeline GSAP pausada chama `render(t)` no `onUpdate`; nada guarda estado entre quadros.\n\n## Render\n\n240 qps no HyperFrames, juntado com `tmix=frames=4:weights=1 1 1 1,fps=60`, H.264 CRF 15, BT.709. Depois de todo render, os detectores de salto e de quadro vazio.\n\n## Trilha\n\n | \n\n | Item\n | Valor\n\n | Música\n | \"Piece Of Your Heart (Alok Remix)\", MEDUZA, Alok, Goodboys; 123,8 BPM, Lá♯ maior\n\n | Emenda\n | 38,82–62,04 s (breakdown → drop em 46,56 s da faixa = 7,74 s do vídeo) + 127,84–131,72 s (quebra = parede) + 131,72 s em diante (volta = a marca reaparece em 27,09 s); crossfade de 12 ms em potência constante\n\n | Grade\n | batida de 0,48375 s; drop na batida 16, parede na 48, volta na 56\n\n | Dinâmica\n | música abaixa sob os impactos grandes (para 62%) e desce mais no preto da parede; sai em fade de 28,6 a 30 s\n\n## Sound design e mix\n\n | \n\n | Ação\n | Efeito\n\n | letras espremem, assinatura afunda\n | whoosh curto com tom subindo\n\n | ponto vira pílula, rótulo sobe, botão nasce\n | pop\n\n | clique do cursor\n | clique de mouse\n\n | lâminas fecham e íris abre\n | obturador, com Ping Boom em Lá♯ por baixo\n\n | grade desdobra\n | papel virando, 4 vezes em cascata, tom variando\n\n | bento, página empurra, persiana\n | papel deslizando\n\n | drop\n | riser curto + whoosh longo + impacto + Ping Boom\n\n | letras de vidro\n | 7 pops de bolha subindo a escala, com um tilintar de vidro no fim\n\n | letras derretem, moldura pinta\n | tinta\n\n | vira gota, gota se solta\n | gotas de água\n\n | segurar o slider\n | tap e contador rolando; Clarity em Lá♯ quando a luz dourada sobe\n\n | pedido\n | sucesso, digitação, contador, notificação de entregue\n\n | parede\n | impacto e whoosh grave na inundação, obturador na íris, impacto e Ping Boom na volta da marca\n\n- 113 efeitos, cada um em `evento − pico`, com o pico em milissegundos convertido para segundos.\n\n- Música a 0,40 (≈ −16 LUFS) e efeitos ×1,9: o pico do efeito fica, na mediana, 4 dB abaixo do RMS da música na janela.\n\n- **Final:** `loudnorm` em duas passagens para −14 LUFS e −1 dBTP; medido −13,9 LUFS.\n\n## O que é \"humano\" neste vídeo\n\n- O cursor faz arco, aperta no clique e segura o botão no toque longo.\n\n- As letras voltam como sanfona, passando um pouco do tamanho.\n\n- A sombra da planta continua passando pelo quadro e a câmera avança devagar na parede.\n\n- Um brilho atravessa o vidro do quadro pendurado."
48
+ },
49
+ {
50
+ "titulo": "A montagem no HyperFrames",
51
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `hf/index.html`\n | constantes de layout, câmera, íris, grade, cursor, o shader do vidro e a função `render(t)`, que calcula tudo a partir do tempo. A grade é `b(n) = n × 0,48375 s`\n\n | `render/montar.sh`\n | junta o render de 240 qps em 60 qps com motion blur, põe a trilha e gera a comparação para o celular (original em cima, a nossa embaixo)\n\n | `revisao/pops.py`\n | acha \"pop\" de quadro único: diferença entre quadros 3 vezes maior que a dos vizinhos\n\n | `revisao/vazios.py`\n | acha quadros pretos, uniformes ou isolados (falha de captura)\n\n | `revisao/sheet.py`\n | monta a folha de contato de uma pasta de quadros\n\n | `audio/mixar.py`\n | emenda a música por compassos com crossfade de 12 ms, abaixa a música sob os impactos, posiciona cada efeito com o pico no evento, normaliza em duas passagens e grava em `hf/assets/audio/mix.wav`\n\n- **Junte as pastas:** copie `audio/` para dentro de `projeto/` (o `mixar.py` grava em `../hf/assets/audio/mix.wav`). Para a comparação, o `montar.sh` procura o original em `../../referencias/videos/twoclipping-221cab.mp4`; ajuste a variável `REF` para o arquivo em `referencias/original/`.\n\n- **Ver:** dentro de `hf/`, rode `npx hyperframes@0.8.144 preview` e abra o endereço que ele imprimir.\n\n- **Som:** no `mixar.py`, aponte `S2` para `audio/sfx/nivelados`, `PR` para `audio/sfx/premium` e `TON` para `audio/sfx/tonais`; rode `python audio/mixar.py` (precisa de numpy, scipy, librosa e soundfile).\n\n- **Render:** `npx hyperframes@0.8.144 render hf --fps 240 --workers 4 --output render/bruto-240.mp4` (no original: cerca de 5 min 45 s, qualidade high, 4 workers). Depois `bash render/montar.sh`.\n\n- **Conferir:** `python revisao/pops.py render/twoclipping-221cab-recriacao.mp4 60` e `python revisao/vazios.py render/bruto-240.mp4 240`.\n\n**Pegadinhas:** um `z-index` num filho sem contexto de empilhamento \"escapa\" para a camada de cima, por isso toda cena leva `z-index: 0; isolation: isolate`; o pico do catálogo de efeitos está em milissegundos (`at = evento − pico_ms/1000`), e confundir com segundos jogou quase todos os efeitos para tempo negativo no primeiro mix; inundação que cresce rápido demais muda meia tela num quadro só (ela precisa passar dos cantos e levar cerca de 0,3 s)."
52
+ },
53
+ {
54
+ "titulo": "As decisões de direção",
55
+ "texto": "- **Plano contínuo de verdade.** Cada cena nasce da anterior: a marca se espreme no ponto, o ponto vira pílula, a íris abre na foto, o círculo vira quadrado, a grade desdobra como mapa, a gota de vidro vira barra, a órbita vira tela de bloqueio, a tela recua para o celular, a Dynamic Island vira a janela do Mac, a página vira o quadro e o botão preto vira o pedido inteiro.\n\n- **Um vidro só para tudo.** O vidro líquido é um shader WebGL com formas de distância (caixas arredondadas e letras), unidas por smooth-min: duas formas perto uma da outra se fundem como gotas, sem truque à parte.\n\n- **Hora dourada com luz da IA e nitidez da foto.** A foto real e a versão gerada foram alinhadas e só a luz de baixa frequência foi transferida; no slider, o dourado entra pela esquerda como sol baixo, e não por dissolução.\n\n- **Câmera que aproxima o que importa** (×1,58 na pílula e na íris, ×1,42 nos botões do pedido), sobre uma deriva periódica de 30 s que fecha no primeiro quadro.\n\n- **A música manda na estrutura:** o zoom cai no drop, a parede fica na quebra e a marca volta com a batida.\n\n- **Um efeito por evento**, com a mesma família para a mesma ação e notas tonais no tom da música nos momentos de marca.\n\n- **A parede vive:** a sombra da planta passa também sobre o vidro e o passe-partout do quadro, e um brilho atravessa o vidro.\n\n- **Identidade única do começo ao fim:** o mesmo canvas quente da abertura fica atrás do celular, no lugar do papel de parede azul genérico do original.\n\nDetalhes de cores, vidro, molas e som: estilo.md. Cenas por tempo e texto na tela: roteiro.md. Para fazer um filme no mesmo estilo com o seu produto: PROMPT.md."
56
+ },
57
+ {
58
+ "titulo": "As versões até o final",
59
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | primeiro render\n | o detector achou 13 saltos de quadro único: troca bloco → WebGL no drop, campo das letras ligando a sombra na tela toda, órbita, janela do Mac, cartão → herói e zoom no recuo da câmera; fotos da grade cobriam a íris e o cursor por `z-index`\n\n | **final**\n | saltos corrigidos (resta 1, de diferença média 2,8, quando a órbita entrega a tela em 13,4 s), cenas isoladas, efeitos reposicionados com o pico em milissegundos; comparação lado a lado com o original"
60
+ }
61
+ ],
62
+ "pacote": [
63
+ {
64
+ "pasta": "projeto/",
65
+ "conteudo": "`hf/index.html` (a composição inteira), `hf/BRIEF.md`, `hf/assets/` (GSAP, fontes Archivo e Geist, 11 fotos, os dois vídeos da parede com sombra de planta e o mix final), `render/montar.sh` e os scripts de revisão `revisao/pops.py`, `vazios.py` e `sheet.py`"
66
+ },
67
+ {
68
+ "pasta": "audio/",
69
+ "conteudo": "`mixar.py` (emenda da música + 113 efeitos + loudnorm), `cues.json` (a lista gerada), as batidas medidas, a música, o mix final e `sfx/` com os 44 arquivos de efeito usados"
70
+ },
71
+ {
72
+ "pasta": "referencias/",
73
+ "conteudo": "o vídeo original, o prompt original de @twoclipping, as folhas de contato dele, o estudo (folhas a 4 qps, detalhes, testes da hora dourada e a análise do Gemini) e a comparação original × nossa (vídeo e folha lado a lado)"
74
+ },
75
+ {
76
+ "pasta": "render.mp4",
77
+ "conteudo": "o filme final"
78
+ },
79
+ {
80
+ "pasta": "hf/index.html",
81
+ "conteudo": "constantes de layout, câmera, íris, grade, cursor, o shader do vidro e a função `render(t)`, que calcula tudo a partir do tempo. A grade é `b(n) = n × 0,48375 s`"
82
+ },
83
+ {
84
+ "pasta": "render/montar.sh",
85
+ "conteudo": "junta o render de 240 qps em 60 qps com motion blur, põe a trilha e gera a comparação para o celular (original em cima, a nossa embaixo)"
86
+ },
87
+ {
88
+ "pasta": "revisao/pops.py",
89
+ "conteudo": "acha \"pop\" de quadro único: diferença entre quadros 3 vezes maior que a dos vizinhos"
90
+ },
91
+ {
92
+ "pasta": "revisao/vazios.py",
93
+ "conteudo": "acha quadros pretos, uniformes ou isolados (falha de captura)"
94
+ },
95
+ {
96
+ "pasta": "revisao/sheet.py",
97
+ "conteudo": "monta a folha de contato de uma pasta de quadros"
98
+ },
99
+ {
100
+ "pasta": "audio/mixar.py",
101
+ "conteudo": "emenda a música por compassos com crossfade de 12 ms, abaixa a música sob os impactos, posiciona cada efeito com o pico no evento, normaliza em duas passagens e grava em `hf/assets/audio/mix.wav`"
102
+ }
103
+ ],
104
+ "prompt": "Quero um filme de lançamento em plano contínuo no mesmo método do projeto \"revelar.\", que está em 07-videos/projetos/revelar/, com o meu produto.\n\nMarca (uma palavra, de preferência um verbo): {{MARCA}}\nProduto e a jornada que o filme conta (do primeiro toque à entrega): {{JORNADA}}\nSite oficial (cores, fonte, logo, telas reais): {{SITE}}\nFotos ou vídeos reais que posso usar: {{ASSETS}}\nDuração: {{DURACAO}} (a referência tem 30 s) · Formato: {{FORMATO}} (a referência é 1440×1440)\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, roteiro.md e o prompt original de @twoclipping em referencias/original/. Depois abra projeto/hf/index.html e entenda a grade b(n), a câmera, a íris, a grade que desdobra, o shader do vidro, a inundação, o cursor e render(t). Leia também audio/mixar.py e render/montar.sh. Me explique em poucas linhas o que você vai reaproveitar.\n\n2. Tire a identidade do assunto: logo, cores do CSS e fontes do site oficial, fotos reais do produto. Se não houver marca forte, mantenha a base desta peça (canvas claro e quente, interface preta, uma tipografia larga e pesada na marca, uma fonte limpa na interface).\n\n3. Escolha uma música real das minhas playlists que tenha drop e uma quebra calma, meça com o beat_this e escreva a grade de batidas antes de codar: o maior zoom no drop, a cena de respiro na quebra e a marca voltando com a batida. Algo acontece em toda batida e nada fica parado mais de 1 s. Me mostre a grade e 4 quadros (abertura, meio, clímax e fim) antes do filme inteiro.\n\n4. Escreva a jornada como uma cadeia de formas: cada cena nasce de um objeto da anterior (texto que sobe de uma máscara, ponto que vira pílula, íris que abre numa foto, gota que vira barra, tela que recua para um aparelho, uma forma preta que inunda a tela e contrai na próxima cena). Proibido: crossfade, desfoque de entrada, flip 3D, partícula, glow e corte seco.\n\n5. Construa no HyperFrames copiando o projeto, sem editar o original. Mantenha: um render(t) puro chamado por um tween da timeline pausada; molas fechadas somadas por mudança (ζ 0,56, ω 11,9; interface ζ 0,62, ω 17); câmera com deriva que fecha no primeiro quadro e aproximação nos momentos pequenos; cursor com arco, aperto e toque longo; cada cena com isolation: isolate; inundação que passa dos cantos em ~0,3 s. Se usar vidro, use o shader do projeto e zere a força do vidro antes de a forma sumir.\n\n6. Som num subagente, em paralelo: emenda da música por compassos, um efeito por evento com a mesma família para a mesma ação, cada um em evento − pico (pico do catálogo em milissegundos), notas tonais no tom da música nos momentos de marca, música baixando sob os impactos. Meça a trilha só de efeitos contra a música antes de mandar e normalize a −14 LUFS.\n\n7. Render a 240 qps, junção com tmix=frames=4 para 60 qps (render/montar.sh) e, depois de todo render, os detectores revisao/pops.py e revisao/vazios.py. Corrija cada salto e cada quadro vazio e renderize de novo.\n\n8. Revise com folhas a 4 qps, recortes ampliados dos momentos-chave e uma IA que assista com áudio. Pergunta de controle em cada movimento: está humano ou robotizado? Entregue o MP4, a composição editável e uma anotação com o que mudou.",
105
+ "campos": [
106
+ "ASSETS",
107
+ "DURACAO",
108
+ "FORMATO",
109
+ "JORNADA",
110
+ "MARCA",
111
+ "SITE"
112
+ ],
113
+ "fonte": {
114
+ "nome": "Clube do Motion",
115
+ "url": "https://clubedomotion.com/projeto/?id=revelar",
116
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
117
+ }
118
+ }
@@ -0,0 +1,125 @@
1
+ {
2
+ "id": "clube-robo",
3
+ "titulo": "Robô de menu não vende",
4
+ "categoria": "narrado",
5
+ "resumo": "anúncio narrado de 58,8 s para dona de clínica de estética que já tentou um robô no WhatsApp. Mostra o antes (o menu \"Digite 1, 2 ou 3\", que não entende a pergunta e faz a cliente desistir) e o depois (uma IA que aprende com a recepção, responde como a clínica responderia, marca a avaliação no Google Agenda e cuida das confirmações). Cartões e bolhas soltos com sombra grande e entrada em 3D, objetos 3D de massinha e o texto montado palavra por palavra no tempo da fala. Feito em código, no Remotion. Clínica, pessoas e valores são fictícios.",
6
+ "indicado": "negócio de serviço ou agência que quer comparar o jeito antigo com o novo e mostrar uma conversa real resolvendo o problema, em anúncio com formulário.",
7
+ "estilo": [
8
+ "antes e depois",
9
+ "WhatsApp",
10
+ "cartões 3D",
11
+ "objetos de massinha",
12
+ "texto palavra por palavra",
13
+ "Inter Tight",
14
+ "trilha MPB instrumental."
15
+ ],
16
+ "ficha": {
17
+ "formato": "projeto em 1080×1920, 30 qps, 9:16; o vídeo final do pacote é a cópia publicada no Instagram (720×1280)",
18
+ "duracao": "58,8 s",
19
+ "motor": "ae",
20
+ "voz": "voz clonada na ElevenLabs, gerada a partir do texto do roteiro (69,25 s) e acelerada a 1,2× com `atempo` numa passada só",
21
+ "musica": "ver o guia de estilo",
22
+ "fontes": "ver o guia de estilo"
23
+ },
24
+ "ferramentas": [
25
+ "Claude Code",
26
+ "After Effects",
27
+ "ElevenLabs"
28
+ ],
29
+ "ficha_tecnica": {
30
+ "Duração": "58,8 s",
31
+ "Formato": "projeto em 1080×1920, 30 qps, 9:16; o vídeo final do pacote é a cópia publicada no Instagram (720×1280)",
32
+ "Voz": "voz clonada na ElevenLabs, gerada a partir do texto do roteiro (69,25 s) e acelerada a 1,2× com `atempo` numa passada só",
33
+ "Ferramenta": "Remotion (React): composição `ClinicaAnuncioV2` em `ClinicaV2.tsx`",
34
+ "Trilha": "instrumental composto na ElevenLabs Music, no clima de MPB dos anos 2000 (violão de nylon, Rhodes, baixo redondo, pandeiro)",
35
+ "Som final": "−14,2 LUFS, pico −1,4 dB",
36
+ "Público": "dona ou dono de clínica de estética",
37
+ "Publicado": "no Instagram da TDA; em 09/10/2026 virou anúncio de tráfego para o perfil"
38
+ },
39
+ "etapas": [
40
+ {
41
+ "titulo": "O roteiro e a voz",
42
+ "texto": "**Resumo:** a fala do anúncio como foi escrita para a voz clonada, a estrutura de anúncio que ela segue e as 11 cenas por tempo, no tempo do vídeo (fala a 1,2×). Gancho: \"Você que tem uma clínica de estética já tentou usar IA pra atender as clientes no WhatsApp e não deu certo, né?\".\n\n## Como a fala foi feita\n\n- **Estrutura:** público e dor → \"a gente sabe exatamente por quê\" → o erro provável e por que ele falha → o que funciona e por quê → convite ligado ao fim da dor → ação com prazo de resposta. O modelo e a versão para qualquer nicho estão em `referencias/roteiro-modelo-de-anuncio.md`.\n\n- **Texto:** escrito pelo dono da agência para o caso da clínica; a revisão só dividiu uma frase longa e tirou repetições, mantendo as ideias e a ordem.\n\n- **Voz:** voz clonada na ElevenLabs (69,25 s), acelerada a 1,2× com `atempo` numa passada só, sem eco (57,7 s).\n\n- **Tempos das palavras:** faster-whisper large-v3 sem condicionamento, no áudio original (`words.json`) e no acelerado (`words-120.json`). Uma primeira passagem inventou um trecho que não existe no áudio; conferir sempre.\n\n## A fala, verbatim\n\nVocê que tem uma clínica de estética já tentou usar IA pra atender as clientes no WhatsApp e não deu certo, né? A gente sabe exatamente por quê. Muito provavelmente você colocou um robô de respostas prontas, que responde tudo igual e não conhece os seus procedimentos nem os seus horários. Aí a possível cliente percebe que tá falando com um robô e desiste no meio da conversa. O que funciona pro seu caso é montar o atendimento a partir do jeito que a sua recepção já conversa: os procedimentos, os valores, as dúvidas que mais aparecem e os horários que estão livres de verdade na sua agenda. Assim a IA responde exatamente como você responderia e já deixa a avaliação marcada. Ela também cuida das confirmações pra manter a sua agenda sempre lotada, sem você precisar ficar mandando mensagem pra ninguém. E tudo isso acontece direto no SEU WhatsApp, sem nenhum programa a mais. Se você quiser saber como a gente pode implementar isso na sua clínica, pra você nunca mais perder cliente por demora no WhatsApp ou porque ela sentiu que tava falando com um robô e não com uma pessoa, clica no link abaixo e preenche o formulário, que em até 5 minutos alguém da nossa equipe vai te chamar.\n\n## Cenas por tempo (tempo do vídeo)\n\nA frase da fala aparece na tela palavra por palavra, em duas ou três linhas de tamanhos diferentes. A tabela mostra o que acontece em volta dela.\n\n | \n\n | #\n | Tempo (s)\n | Fala\n | Tela\n\n | 1\n | 0–5,3\n | \"Você que tem uma clínica de estética… não deu certo, né?\"\n | a dona da clínica, irritada com o celular na recepção, num cartão que entra em 3D; estrela lime 3D; o balão 3D do WhatsApp; o robô confuso e o balão \"Digite 1, 2 ou 3 🤖\"\n\n | 2\n | 5,3–7,4\n | \"A gente sabe exatamente por quê.\"\n | só a frase, grande, no meio da tela, com a estrela 3D embaixo\n\n | 3\n | 7,4–14,3\n | \"Muito provavelmente você colocou um robô… nem os seus horários.\"\n | selo vermelho ANTES; conversa com a Clínica Aurora: \"Oi! Quanto custa o botox? Tem horário no sábado?\" → menu \"Digite 1 para Agendamentos / 2 para Valores / 3 para falar com atendente\" → \"2\" → resposta genérica → \"Mas o botox tem horário no sábado?\" → \"Desculpe, não entendi 😕 Digite 1, 2 ou 3.\"\n\n | 4\n | 14,3–18,7\n | \"Aí a possível cliente percebe… e desiste no meio da conversa.\"\n | a cliente suspira e abaixa o celular num cartão 3D; \"é robô, né? 🙄 deixa pra lá\"; selo \"Cliente perdida\"\n\n | 5\n | 18,7–23,4\n | \"O que funciona pro seu caso é montar o atendimento a partir do jeito que a sua recepção já conversa:\"\n | selo lime DEPOIS; três mensagens da recepcionista entram em 3D; a varredura lime passa e saem as etiquetas \"tom acolhedor\", \"valores e parcelamento\", \"sempre oferece horário\"; selo \"Aprendendo com a sua recepção\"\n\n | 6\n | 23,4–29,5\n | \"os procedimentos, os valores, as dúvidas… livres de verdade na sua agenda.\"\n | quatro cartões entram no ritmo da fala: Procedimentos, Valores (botox R$ 890, limpeza R$ 180, laser R$ 250, avaliação grátis), Dúvidas e Horários livres no Google Agenda de sábado\n\n | 7\n | 29,5–34,6\n | \"Assim a IA responde exatamente como você responderia e já deixa a avaliação marcada.\"\n | a mesma pergunta, agora respondida com o preço, a avaliação gratuita e dois horários; a cliente escolhe \"11h!! 😍\"; \"Prontinho!\"; o evento \"Avaliação · Ana\" entra no Google Agenda com \"marcado pela IA\"\n\n | 8\n | 34,6–40\n | \"Ela também cuida das confirmações… mandando mensagem pra ninguém.\"\n | confirmações empilhadas (\"Confirma seu horário amanhã?\" → \"Confirmado! Até amanhã 😊\"), depois a semana do Google Agenda enchendo\n\n | 9\n | 40–44\n | \"E tudo isso acontece direto no SEU WhatsApp, sem nenhum programa a mais.\"\n | ícone 3D do WhatsApp; cartão \"Clínica Aurora · o mesmo número de sempre\"; \"nenhum app extra\"\n\n | 10\n | 44–53,1\n | \"Se você quiser saber como a gente pode implementar isso na sua clínica… e não com uma pessoa,\"\n | logo da agência; os resultados (resposta no WhatsApp e avaliação na agenda) em cartões 3D; antes × depois: \"Cliente esperando 3 h no WhatsApp\" riscado → \"Resposta em segundos\"; \"Digite 1, 2 ou 3\" riscado → \"Conversa como a da sua recepção\"\n\n | 11\n | 53,1–58,8\n | \"clica no link abaixo e preenche o formulário, que em até 5 minutos alguém da nossa equipe vai te chamar.\"\n | formulário \"Fale com a TDA\" se preenche e é enviado; \"em até 5 minutos a gente te chama\"; a notificação da agência chega no WhatsApp; assinatura \"IA sob medida para a sua empresa\" e o aviso \"Simulação ilustrativa. Clínica, pessoas e valores fictícios.\"\n\n## Momentos para a trilha\n\n- 0–1,6 s: a música começa um pouco mais alta e desce para baixo da fala.\n\n- Seções compostas para acompanhar a fala: intro, problema, solução, groove, subida e fecho.\n\n- Últimos 2 s: a música sobe e some com o fim do vídeo.\n\nA clínica, as pessoas e os valores são fictícios."
43
+ },
44
+ {
45
+ "titulo": "A identidade visual",
46
+ "texto": "**Resumo:** fundo cinza claro com grade pontilhada, tudo flutuando por cima: cartões e bolhas soltos com sombra larga, que entram tombando em 3D, e objetos 3D de massinha que flutuam. O texto da fala aparece palavra por palavra, do cinza ao preto, em três pesos. Lime é o único acento; WhatsApp e Google Agenda mantêm as cores reais. Música instrumental de MPB bem abaixo da voz. Identidade tirada de um Short de referência. Números tirados de `ClinicaV2.tsx` e `MarinaV2.tsx`.\n\n## Fontes\n\n | \n\n | Uso\n | Fonte\n | Onde baixar\n\n | Frases da fala, selos, etiquetas, títulos dos cartões\n | Inter Tight (500 a 800, com itálico)\n | Google Fonts\n\n | Bolhas do WhatsApp, agenda, formulário\n | Inter (400 a 800)\n | Google Fonts\n\n## Cores\n\n | \n\n | Token\n | Hex\n | Uso\n\n | Fundo\n | `#ECECEA`\n | cinza claro fixo\n\n | Grade\n | pontos `rgba(0,0,0,.13)` de 1,6 px a cada 40 px, a 50%\n | textura do fundo\n\n | Vinheta\n | branco a 90% no centro, sumindo até 72%\n | luz no meio da tela\n\n | Tinta\n | `#111111`\n | texto final das palavras, selos escuros\n\n | Cinza\n | `#8A8A86`\n | texto secundário; as palavras nascem em `rgb(188,188,184)`\n\n | **Lime**\n | **`#A3E635`**\n | selo DEPOIS, varredura, etiquetas, \"marcado pela IA\", estrela 3D\n\n | Vermelho\n | `#E5484D`\n | selo ANTES e \"Cliente perdida\"\n\n | WhatsApp\n | verde `#25D366`, fundo `#EFEAE2`, bolha enviada `#D9FDD3`, tique `#53BDEB`, meta `#667781`, texto `#111B21`\n | cores reais do app\n\n | Google Agenda\n | azul `#039BE5`, verde `#33B679`, roxo `#8E24AA`, laranja `#F4511E`, hoje `#1A73E8`\n | cores reais do app\n\n | Sombra grande\n | `0 44px 90px rgba(0,0,0,.16), 0 10px 24px rgba(0,0,0,.07)`\n | cartões e clipes\n\n | Sombra pequena\n | `0 20px 44px rgba(0,0,0,.12), 0 4px 10px rgba(0,0,0,.05)`\n | bolhas, selos, etiquetas\n\n## Componentes\n\n- **Cartão de vídeo** com cantos de 48 px e sombra grande, onde passam os clipes da dona (gancho) e da cliente (desistência); o vídeo dentro aproxima devagar (escala 1,03 → +1,2% por segundo).\n\n- **Conversa do WhatsApp sem celular:** cabeçalho em pílula branca (avatar, nome, \"conta comercial\" e o ícone verde) e bolhas soltas de 38 px, cantos de 32 px com a ponta de 8 px do lado de quem fala; a mais nova cresce e empurra as outras para cima; o topo da conversa some num degradê. \"Digitando\" com três pontos que sobem e descem.\n\n- **Avatar do robô:** o objeto 3D do robô confuso no lugar da foto da clínica, no antes.\n\n- **Objetos 3D de massinha** gerados para o vídeo, com fundo transparente: balão do WhatsApp, calendário com visto, robô confuso e estrela lime.\n\n- **Selos:** pílula com uma bolinha de cor e texto em Inter Tight 700, 32 px, espaçamento 0,04 em.\n\n- **Etiquetas do que a IA aprendeu:** cartões brancos com borda lime de 3 px (\"tom acolhedor\", \"valores e parcelamento\", \"sempre oferece horário\"), que entram da esquerda com pop.\n\n- **Varredura lime:** uma linha de 6 px com brilho lime desce sobre as mensagens da recepção.\n\n- **Quatro cartões do que a IA sabe:** procedimentos, valores, dúvidas e horários livres (este com o Google Agenda de sábado).\n\n- **Confirmações:** cartões empilhados com \"Confirma seu horário amanhã?\" virando \"Confirmado! Até amanhã 😊\", depois a semana do Google Agenda enchendo.\n\n- **Antes × depois na cena da marca:** o problema riscado (\"Cliente esperando 3 h no WhatsApp\", \"Digite 1, 2 ou 3\") e a solução ao lado (\"Resposta em segundos\", \"Conversa como a da sua recepção\").\n\n- **Formulário** \"Fale com a TDA\" que se preenche, o cursor que clica, \"em até 5 minutos a gente te chama\" e a notificação da agência chegando.\n\n## Movimento\n\n | \n\n | Peça\n | Como anima\n\n | Curva base\n | `cubic-bezier(.16, 1, .3, 1)`: sai rápido e assenta longo\n\n | Pop\n | `cubic-bezier(.34, 1.56, .64, 1)` em objetos 3D e selos\n\n | Entrada 3D\n | perspectiva 1800, gira em X de 30° para 0, sobe 420 px e escala 0,9 → 1 em 0,75 s, pivô embaixo\n\n | Objeto 3D\n | pop em 0,55 s; depois flutua ±10 px e balança ±6° sem parar\n\n | Selo\n | pop em 0,45 s, escala 0,7 → 1\n\n | Bolha\n | cresce em 0,4 s com a curva base; o avatar cresce junto\n\n | Palavra\n | sobe 16 px, perde o desfoque de 5 px e vai do cinza ao preto em 0,3 s\n\n | Troca de cena\n | 0,3 s: a cena que entra vem do desfoque de 18 px e de 96% de escala; a que sai desfoca 22 px e cresce 6%\n\nAs cenas são escritas no tempo da fala original e rodam 1,2× mais rápido pelo `TimeScale`, para acompanhar a voz acelerada.\n\n## Texto da fala\n\n- Cada palavra entra no seu tempo do `palavras.ts` (faster-whisper large-v3, no áudio sem aceleração).\n\n- Cada frase tem duas ou três linhas de tamanhos diferentes: uma linha pequena (52 a 60 px, peso 500), uma grande (80 a 124 px, peso 800) e, às vezes, uma em itálico (peso 600 ou 800) com a palavra de efeito.\n\n- Entrelinha 1,06, espaçamento −0,035 em, centralizado no topo (y 140 a 170) ou no meio da tela nas cenas só de texto.\n\n- Saída da frase: desfoque de até 12 px e opacidade em 0,3 s.\n\n## Trilha\n\n | \n\n | Item\n | Valor\n\n | Música\n | instrumental composto na ElevenLabs Music (`music_v2_5`), plano em `musica-v2-req.json`\n\n | Clima\n | groove de MPB dos anos 2000: violão de nylon, piano Rhodes, batida leve, baixo redondo, shaker e pandeiro, sem voz\n\n | Seções\n | Intro 7,4 s · Problema 11,3 s · Solução 10,8 s · Groove 14,5 s · Subida 9,1 s · Fecho 6,4 s (no tempo da fala original)\n\n | Volume\n | 0,16 no primeiro segundo, 0,085 sob a voz (a v1 estava a 0,17) e 0,2 nos dois segundos finais, até sumir\n\n## Sound design e mix\n\n- Um efeito para cada coisa que entra: whoosh em cada troca de cena (0,3), pop em cada bolha e objeto 3D, notificação em cada resposta do robô, glitch quando o robô não entende e quando a cliente desiste, clique em cada etiqueta, contador na semana enchendo, \"sucesso\" na avaliação marcada, na agenda cheia, em cada problema riscado e no envio do formulário, teclado em cada campo preenchido, tique-taque no \"em até 5 minutos\" e notificação quando a agência responde.\n\n- Os volumes passam por um ganho geral de 0,5.\n\n- Final a −14,2 LUFS, pico −1,4 dB.\n\n## O que é \"humano\" neste vídeo\n\n- As pessoas são reais e estão em movimento: a dona irritada olhando o celular, a cliente que suspira e desiste.\n\n- Nada fica parado: os objetos 3D flutuam e os clipes aproximam devagar.\n\n- A conversa sobe como num celular de verdade, com \"digitando\" e o tique azul de lido.\n\n- A IA responde no tom da recepção (\"Oi, Ana! Tudo bem? 💛\"), em vez de texto de sistema."
47
+ },
48
+ {
49
+ "titulo": "A montagem no Remotion",
50
+ "texto": "- **Instale o Node.js** e, dentro de `projeto/`, rode `npm install`. As fontes (Inter Tight e Inter) vêm do pacote `@remotion/google-fonts`.\n\n- **Registre a composição** em `src/Root.tsx`: `ClinicaAnuncioV2`, 1080×1920, 30 qps, duração `CLINICA_V2_SEC` (58,75 s × 30 quadros).\n\n- **Prévia:** `npx remotion studio`. **Rascunho:** `npx remotion render ClinicaAnuncioV2 out/rascunho.mp4 --scale=0.5`.\n\n- **Render final** e áudio normalizado a −14 LUFS."
51
+ },
52
+ {
53
+ "titulo": "As decisões de direção",
54
+ "texto": "- **Gancho com pessoa de verdade:** a dona da clínica, irritada com o celular na recepção, num cartão com sombra; em volta surgem o balão 3D do WhatsApp, o robô confuso e \"Digite 1, 2 ou 3 🤖\". Imagem gerada com referências do Pinterest e animada em vídeo de 5 s.\n\n- **O antes é uma conversa real, não uma lista de defeitos:** a cliente pergunta o preço do botox e se tem horário no sábado; o robô manda o menu, responde genérico e termina em \"Desculpe, não entendi 😕\".\n\n- **A desistência tem rosto:** a cliente suspira, abaixa o celular e manda \"é robô, né? 🙄 deixa pra lá\"; o selo \"Cliente perdida\" estala.\n\n- **A IA aprende com a recepção:** mensagens da recepcionista passam por uma varredura lime, e saem as etiquetas \"tom acolhedor\", \"valores e parcelamento\", \"sempre oferece horário\".\n\n- **O depois responde a mesma pergunta,** agora com o preço, a avaliação gratuita e dois horários, e a avaliação entra no Google Agenda com \"marcado pela IA\".\n\n- **Identidade de um Short de referência:** fundo único com grade, cartões e bolhas com sombra larga e entrada em 3D, texto em três pesos, transição com desfoque do quadro inteiro.\n\n- **Lime como único acento,** em selos, varredura e marca; as cores do WhatsApp e do Google Agenda ficam as reais.\n\n- **Música bem abaixo da voz,** num instrumental de MPB composto por seções casadas com a fala.\n\n- **Tudo que é exemplo é dito como exemplo:** a assinatura final traz \"Simulação ilustrativa. Clínica, pessoas e valores fictícios.\"\n\nDetalhes de cores, curvas e som: estilo.md. Fala e cenas por tempo: roteiro.md. Para fazer um vídeo no mesmo estilo: PROMPT.md."
55
+ },
56
+ {
57
+ "titulo": "As versões até o final",
58
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | v1\n | 70,5 s, fala em velocidade normal, celular pequeno com as conversas, abertura com a dona entrando na clínica e música comercial alta; retorno: música atrapalhando, começo com cara de IA\n\n | **v2**\n | fala a 1,2× (58,8 s), gancho com a dona irritada num cartão 3D, identidade do Short de referência, bolhas soltas e grandes, objetos 3D de massinha, trilha MPB bem mais baixa; aprovada (\"ficou muito bom\")"
59
+ }
60
+ ],
61
+ "pacote": [
62
+ {
63
+ "pasta": "projeto/",
64
+ "conteudo": "o código (`src/tda-clinica/ClinicaV2.tsx`, `palavras.ts` com o tempo de cada palavra e `src/tda-marina/MarinaV2.tsx` com as cores do WhatsApp e do Google Agenda, o avatar, o cursor e a marca), a pasta `public/` com os dois clipes (dona no gancho, cliente que desiste), os objetos 3D, a narração, a trilha e os efeitos, mais `package.json`, `remotion.config.ts` e `tsconfig.json`"
65
+ },
66
+ {
67
+ "pasta": "audio/",
68
+ "conteudo": "narração original e a 1,2×, tempos das palavras nas duas velocidades, a trilha com o pedido de composição por seções e os 30 efeitos usados"
69
+ },
70
+ {
71
+ "pasta": "referencias/",
72
+ "conteudo": "o Short que deu a identidade (folhas de contato, transcrição e análise) e o modelo de anúncio com o texto da clínica"
73
+ },
74
+ {
75
+ "pasta": "render/",
76
+ "conteudo": "`final.mp4`"
77
+ },
78
+ {
79
+ "pasta": "Fundo",
80
+ "conteudo": "cinza claro com grade pontilhada e vinheta clara, fixo o vídeo inteiro"
81
+ },
82
+ {
83
+ "pasta": "Frase",
84
+ "conteudo": "monta a frase palavra por palavra no tempo da fala, do cinza ao preto, em linhas de tamanhos e pesos diferentes (com itálico na palavra de efeito)"
85
+ },
86
+ {
87
+ "pasta": "Entra3D",
88
+ "conteudo": "cartão que tomba para trás e sobe, com sombra grande"
89
+ },
90
+ {
91
+ "pasta": "Obj",
92
+ "conteudo": "objeto 3D de massinha que salta, flutua e gira devagar"
93
+ },
94
+ {
95
+ "pasta": "Selo",
96
+ "conteudo": "pílula pequena (ANTES, DEPOIS, \"Cliente perdida\")"
97
+ },
98
+ {
99
+ "pasta": "Conversa",
100
+ "conteudo": "WhatsApp em bolhas soltas e grandes, a mais nova empurrando as outras, com \"digitando\" e tiques de lido"
101
+ },
102
+ {
103
+ "pasta": "SCENES",
104
+ "conteudo": "a montagem: início e fim de cada cena no tempo original da fala e o whoosh de cada troca"
105
+ },
106
+ {
107
+ "pasta": "TimeScale",
108
+ "conteudo": "as cenas são escritas no tempo da fala original e rodam 1,2× mais rápido, para acompanhar a voz acelerada"
109
+ }
110
+ ],
111
+ "prompt": "Quero fazer um anúncio narrado de antes e depois no mesmo estilo do projeto \"Robô de menu não vende\", que está em 07-videos/projetos/robo/, com o meu assunto.\n\nAssunto: {{ASSUNTO}}\nPúblico (quem precisa se reconhecer no gancho): {{PUBLICO}}\nO jeito antigo que falha (o \"antes\"): {{ANTES}}\nO jeito que funciona (o \"depois\"): {{DEPOIS}}\nChamada final e prazo de resposta: {{CHAMADA}}\nDuração aproximada: {{DURACAO}} (a referência tem 58,8 s)\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, nesta ordem: 07-videos/projetos/robo/LEIA-ME.md, estilo.md e roteiro.md, e o modelo de anúncio em referencias/roteiro-modelo-de-anuncio.md. Depois abra projeto/src/tda-clinica/ClinicaV2.tsx e me explique em poucas linhas como a Frase palavra por palavra, a Entra3D, a Conversa em bolhas soltas e o TimeScale funcionam, e o que você vai reaproveitar.\n\n2. Siga o passo a passo de 9 etapas de 07-videos/_LEIA.md e os números de 07-videos/regras-vigentes.md. Crie o meu projeto em 07-videos/projetos/AAAA-MM-DD-tema/ a partir de 07-videos/projetos/_modelo/README.md e marque cada etapa no checklist. Não edite os arquivos do projeto robo: copie o que for reaproveitar.\n\n3. Use as skills instaladas: video-referencias (referências, pessoas no Pinterest, plataformas reais e um som por ação), motion-narrado (nada aparece antes de ser dito), conteudo-voz (o meu jeito de falar) e better-portuguese (todo texto da tela).\n\n4. O roteiro: a fala é minha. Faça só a estrutura em roteiro.md, nos seis passos do modelo: público e dor em forma de pergunta, \"a gente sabe exatamente por quê\", o erro provável e por que ele falha, o que funciona e por quê, o convite ligado ao fim da dor e a ação com prazo. Para cada passo, diga o que precisa ser dito e a cena, e me dê 3 opções de gancho. Espere eu escrever a fala. Guarde o meu texto sem mudar e faça ao lado a versão para a voz, só com a grafia de pronúncia. Não prometa número nem prazo que eu não confirmei.\n\n5. Narração: na minha voz clonada, conferida no faster-whisper (confira palavra por palavra, porque o whisper pode inventar trecho). Me mande para aprovar; com o ok, acelere a 1,2× numa passada só e gere os tempos das palavras. Não anime antes do áudio aprovado.\n\n6. Cenas: o antes e o depois respondem a mesma pergunta do mesmo cliente, numa conversa real da plataforma que o meu público usa. O gancho tem uma pessoa de verdade, em movimento, que se parece com o meu público; a desistência também tem rosto. Monte a tabela fala → cena → elementos antes de animar e me mostre.\n\n7. Reaproveite o motor, troque o conteúdo. Mantenha deste projeto: o fundo único com grade pontilhada e vinheta, os cartões e bolhas soltos com sombra larga e entrada em 3D, os objetos 3D que flutuam, os selos ANTES e DEPOIS, a frase palavra por palavra em três pesos (do cinza ao preto, com itálico na palavra de efeito), a transição com desfoque do quadro inteiro, a varredura que mostra a IA aprendendo, o problema riscado ao lado da solução, o formulário que se preenche, a cor de destaque como único acento, as cores reais das plataformas, um efeito por ação e a música bem abaixo da voz. Troque: a cor de destaque (para a da minha marca), as pessoas, as conversas, os cartões, os objetos 3D, os textos e a trilha (música no clima do meu público, por seções casadas com a fala).\n\n8. Assets reais: interface real das plataformas citadas, ícones oficiais, pessoas reais ou geradas a partir de referências reais. Me peça o que você não conseguir achar. Se for demonstração, a assinatura final diz que é simulação.\n\n9. Rascunho em meia resolução e folhas de contato a 1 quadro por segundo a cada rodada; confira se nenhum texto cobre rosto e se nenhuma cena começa vazia. Em cada movimento, pergunte: está humano ou robotizado? Depois do render, revise quadro a quadro com o áudio, corrija e me entregue o vídeo, a legenda do post e a ficha atualizada. No fim, registre uma anotação em anotacoes/.",
112
+ "campos": [
113
+ "ANTES",
114
+ "ASSUNTO",
115
+ "CHAMADA",
116
+ "DEPOIS",
117
+ "DURACAO",
118
+ "PUBLICO"
119
+ ],
120
+ "fonte": {
121
+ "nome": "Clube do Motion",
122
+ "url": "https://clubedomotion.com/projeto/?id=robo",
123
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
124
+ }
125
+ }
@@ -0,0 +1,144 @@
1
+ {
2
+ "id": "clube-shelby-ep2",
3
+ "titulo": "A Shelby no Google",
4
+ "categoria": "narrado",
5
+ "resumo": "episódio 2 da série \"Barbearia Shelby em 7 dias\", sobre o Dia 2: fazer a barbearia aparecer no Google. Narrado, 2 min 9 s, 9:16, montado como um take único: uma câmera só numa mesa escura, sem corte, e cada assunto nasce do anterior. É um HTML com o quadro calculado pelo tempo (`seek(t)`), renderizado no Chromium a 60 qps com desfoque de movimento de obturador. A versão publicada abre com uma gravação de celular filmando o monitor, e a câmera mergulha na tela até a gravação virar o próprio vídeo. Aprovado em 13/10/2026 como a melhor edição do estúdio até aqui e publicado no Instagram no mesmo dia. Feito pelo Clube do Motion.",
6
+ "indicado": "quem conta o caso de um negócio local ou ensina um passo a passo com ferramentas reais, em série, para o Instagram; vídeo narrado de 1 a 3 min em que o processo precisa parecer um movimento só.",
7
+ "estilo": [
8
+ "take único",
9
+ "câmera de operador",
10
+ "identidade do assunto",
11
+ "prints reais",
12
+ "legenda viva",
13
+ "tonais no tom da trilha",
14
+ "celular filmando a tela"
15
+ ],
16
+ "ficha": {
17
+ "formato": "1080×1920, 60 qps, 9:16, cor BT.709",
18
+ "duracao": "129,4 s na versão publicada; o take sozinho tem 128,5 s e começa 0,92 s depois da abertura do celular",
19
+ "motor": "html",
20
+ "voz": "voz clonada na ElevenLabs (Eleven v4), juntada a 1,15× e depois acelerada para 1,2× junto com a trilha",
21
+ "musica": "ver o guia de estilo",
22
+ "fontes": "ver o guia de estilo"
23
+ },
24
+ "ferramentas": [
25
+ "Claude Code",
26
+ "ElevenLabs"
27
+ ],
28
+ "ficha_tecnica": {
29
+ "Duração": "129,4 s na versão publicada; o take sozinho tem 128,5 s e começa 0,92 s depois da abertura do celular",
30
+ "Formato": "1080×1920, 60 qps, 9:16, cor BT.709",
31
+ "Ferramenta": "HTML + CSS + JavaScript com o motor `take.js`, render com Chromium sem janela e obturador de 180°; abertura do celular em Python com OpenCV e ffmpeg",
32
+ "Voz": "voz clonada na ElevenLabs (Eleven v4), juntada a 1,15× e depois acelerada para 1,2× junto com a trilha",
33
+ "Trilha": "tema de Peaky Blinders (\"Red Right Hand\", de Nick Cave & The Bad Seeds, em três versões) na abertura, na recapitulação e no fecho; o jazz instrumental \"Bringing Home The Blues\", do Blue Stew, nos trechos de trabalho",
34
+ "Som": "273 eventos exportados da própria composição, um som por gesto, tonais do Film Score Vol. 3 em Si menor e Fá maior; −14,2 LUFS",
35
+ "Conferência": "oráculo do take: continuidade 1,00 em todas as fronteiras; na v1, 43 % dos quadros em respiro",
36
+ "Publicado": "Instagram, 13/10/2026",
37
+ "Arquivo final": "MP4 H.264 com áudio AAC, 138 MB"
38
+ },
39
+ "etapas": [
40
+ {
41
+ "titulo": "O roteiro e a voz",
42
+ "texto": "**Resumo:** a fala do episódio 2 exatamente como foi enviada à voz clonada (12 parágrafos, com a grafia de pronúncia), a tabela que devolve essa grafia à escrita normal e as cenas por tempo. O episódio cobre só o Dia 2, aparecer no Google, e fecha com uma recapitulação dos dias 0 a 2 e o gancho do Dia 3. Os tempos são os da composição (`comp/index.html`); na versão publicada, tudo acontece 0,92 s depois, por causa da abertura do celular.\n\n## Como a fala foi feita\n\n- **Estrutura:** gancho que retoma a frase que fechou o episódio 1, o problema com números reais da região, três passos (Perfil da Empresa no Google, descrição escrita pela IA, avaliações) e a recapitulação com o próximo dia.\n\n- **Números:** vêm de uma coleta no Google Maps feita em 12/10/2026 com 45 barbearias de Paulínia (SP); a fala foi ajustada para bater com a coleta.\n\n- **Voz:** ElevenLabs, Eleven v4, um arquivo por parágrafo (estabilidade 0,52, similaridade 0,73, velocidade 1,05), juntados a 1,15× com pausas curtas, um respiro de 2,6 s antes da recapitulação e 4,5 s no \"continua\". No take, a voz e a trilha foram aceleradas juntas para 1,2×, sem mudar o tom.\n\n## Grafia de pronúncia\n\n | \n\n | Escrito para a voz\n | Leitura normal\n\n | IÁ\n | IA\n\n | chat gê pê tê\n | ChatGPT\n\n | quê érre côde\n | QR code\n\n | linque\n | link\n\n | landin peige\n | landing page\n\n | quatro vírgula nove\n | 4,9\n\n | dia zero, dia um, dia dois, dia três\n | números por extenso\n\n## A fala, verbatim (texto enviado à voz)\n\n**01.** No último vídeo, a Shelby ganhou marca e site. Só que, se você procurar ela no Google agora, ela não aparece. E barbearia que ninguém acha no Google não existe.\n\n**02.** Dia dois: aparecer no Google.\n\n**03.** Antes de mexer em qualquer coisa, eu fui ver como estão as barbearias aqui da região. Pesquisei no Google Maps e apareceram quarenta e cinco resultados. Vinte delas não têm nenhum linque aparecendo, nem pro site, nem pro WhatsApp, nem pro Instagram, então quem acha a barbearia não tem pra onde ir, só o telefone pra ligar. Só onze têm site, e cinco dessas onze não responderam nenhuma das avaliações mais recentes.\n\n**04.** E a nota de avaliação quase não muda de uma pra outra, fica tudo perto de quatro vírgula nove. Se todo mundo tem nota alta, o que chama atenção é ter mais avaliação e um perfil bem preenchido e completo.\n\n**05.** O primeiro passo é o Perfil da Empresa no Google, que é de graça. Como a Shelby é uma barbearia conceito, o perfil que você vai ver aqui é uma simulação, mas o passo a passo é basicamente o mesmo.\n\n**06.** Eu coloco a categoria, o endereço, o horário e o WhatsApp, cadastro os serviços com o mesmo preço do site e subo as fotos da fachada, do salão e dos barbeiros. E o botão que mais importa é o de agendar, que leva direto pro site que a gente fez no episódio passado. Assim, quem acha a Shelby no Google já marca o horário ali mesmo, sem nem precisar passar pelo WhatsApp e congestionar o atendimento.\n\n**07.** A descrição eu peço pro chat gê pê tê escrever em cima da marca, usando as palavras que o cliente geralmente digita quando procura uma barbearia, como o bairro, degradê, barba e tudo mais.\n\n**08.** Depois vêm as avaliações, que pesam muito na hora de alguém escolher. No balcão eu deixaria um quê érre côde que abre direto a tela de avaliar, pro cliente avaliar a barbearia no Google depois do serviço, e quem avaliasse ganharia um desconto na próxima vez. Assim, mais gente faria a avaliação, e a barbearia ganharia volume de avaliações de forma natural.\n\n**09.** E eu faria uma automação com IÁ, com um modelo de resposta pra cada tipo de avaliação, inclusive as ruins, porque quem tá olhando de fora repara em como a barbearia responde.\n\n**10.** Vamos recapitular?\n\n**11.** No dia zero, fizemos o estudo de marca e o branding e construímos a marca da Barbearia Shelby. No dia um, fizemos a landin peige, funcional e otimizada pra experiência do cliente. No dia dois, fizemos todo o setup do Perfil da Empresa no Google, pra que as pessoas achem a barbearia com facilidade, e de quebra tive uma ideia de como aumentar as avaliações do nosso perfil de forma natural, pra gerar mais credibilidade.\n\n**12.** O próximo passo é configurar o atendimento no WhatsApp, e isso é papo pro dia três.\n\n**Na tela, no fim:** \"continua . . .\" com o lacre da Shelby.\n\n## Fala por tempo (tempo da composição)\n\n | \n\n | Parágrafo\n | Tempo (s)\n\n | 01\n | 0,85–8,56\n\n | 02\n | 9,26–10,86\n\n | 03\n | 11,44–29,46\n\n | 04\n | 30,01–38,68\n\n | 05\n | 39,39–47,30\n\n | 06\n | 47,84–64,44\n\n | 07\n | 64,95–73,08\n\n | 08\n | 73,68–88,90\n\n | 09\n | 89,43–97,04\n\n | 10\n | 98,15–98,86\n\n | 11\n | 101,25–118,92\n\n | 12\n | 119,52–123,26\n\nOs tempos de cada palavra estão em `audio/palavras.json`; a composição lê esses tempos pela tabela `T`.\n\n## Cenas por tempo\n\n | \n\n | #\n | Tempo (s)\n | O que aparece\n | O que passa para a próxima\n\n | 1\n | 0,0–3,0\n | as cartas do Dia 0 e do Dia 1 na mesa, continuando o episódio 1; a marca e o site saem de trás delas; câmera em 1,45× no Dia 0, abrindo para 1,12×\n | o ponto, lacre da carta 0\n\n | 2\n | 3,1–8,6\n | o ponto pula e vira o botão da barra de busca (\"barbearia shelby paulinia\"); em \"não aparece\", os resultados chegam com uma vaga tracejada; em \"não existe\", as cartas viram tracejado\n | o ponto pousa na vaga \"?\"\n\n | 3\n | 9,2–11,3\n | a vaga vira a carta do Dia 2, \"O GOOGLE\", com o golpe da trilha e tremor no pouso; \"aparecer no Google\"\n | o ponto, lacre da carta\n\n | 4\n | 11,4–17,2\n | o ponto vira o \"·\" de \"Paulínia · SP\" e depois a barra do Maps, que digita \"barbearia\"; a barra vira o mapa real com a lista; 45 pinos caem no ritmo do contador\n | os pinos\n\n | 5\n | 17,2–29,9\n | os pinos saem do mapa e viram a grade: 20 ficam cinza (\"SEM LINK NENHUM\"), os ícones de site, WhatsApp e Instagram são riscados e balançam no \"pra onde ir\", 11 ficam latão e 5 ganham anel de lacre\n | as fileiras de pinos\n\n | 6\n | 30,0–38,9\n | as fileiras viram linhas de nota (4,9 · 5,0 · 4,9 · 4,7 · 4,9); o \"4,9\" cresce grande; entram as pílulas \"mais avaliações\" e \"perfil completo\"\n | a pílula \"perfil completo\"\n\n | 7\n | 39,4–47,8\n | a pílula vira o Perfil da Empresa no Google; foto, nome e botões acendem em \"Perfil\", \"Empresa\" e \"Google\"; selos \"DE GRAÇA\" e \"barbearia conceito\"; o selo \"SIMULAÇÃO\" carimba; os campos vazios mostram \"Adicionar …\", numerados no \"passo a passo\"\n | a mão\n\n | 8\n | 47,8–55,0\n | a mão clica cada campo na ordem da fala (categoria, endereço, horário, WhatsApp, serviços, site, fotos), com a câmera em 1,4× perseguindo\n | o botão Agendar\n\n | 9\n | 55,1–64,5\n | o clique no Agendar abre um anel; o botão vira o site da Shelby, com a agenda marcada; o WhatsApp lotado aparece riscado no \"congestionar\"\n | a janela\n\n | 10\n | 64,9–73,4\n | a janela vira o ChatGPT (\"Como posso ajudar?\"); o pedido e a resposta real aparecem com a câmera a 1,2×; \"Centro de Paulínia\", \"degradê\" e \"barba\" saem do texto como pílulas\n | as três pílulas\n\n | 11\n | 73,7–76,8\n | o título \"Avaliações\" sobe; as pílulas viram estrelas que \"pesam\" com um golpe\n | as estrelas pousam no balcão\n\n | 12\n | 76,9–89,0\n | o display de balcão com o QR (\"Curtiu o corte?\"); o QR vira o celular com a tela de avaliar; as estrelas acendem em rajada; \"avaliação publicada\" e o selo de desconto; o celular vira a pilha de avaliações\n | a avaliação de cima\n\n | 13\n | 89,4–97,0\n | a pilha vira a avaliação real de 2 estrelas; o ponto vira o selo \"IA\"; a resposta escrita pela IA entra; um círculo marca as estrelas; \"Quem procura vê a resposta\"\n | o ponto\n\n | 14\n | 97,2–99,9\n | \"Vamos recapitular?\", com o ponto como o ponto do \"?\"; respiro e vão seco na música\n | o ponto do \"?\"\n\n | 15\n | 99,9–119,4\n | **drop:** o ponto solta as três cartas; cada carta vira a cena do seu dia e volta (a marca, o site, o perfil), com rótulos como \"estudo de marca\", \"branding\", \"landing page\"; o bônus \"mais avaliações\" com o QR\n | o ponto, lacre do painel\n\n | 16\n | 119,5–123,7\n | o ponto solta a carta do Dia 3, vermelha, com o WhatsApp e um \"?\"\n | o ponto\n\n | 17\n | 123,8–128,5\n | o ponto vira o lacre; \"continua . . .\" e \"SHELBY\"\n | —\n\nA folha completa, com a câmera de cada trecho, está no cabeçalho do `comp/index.html`.\n\n## Momentos para a trilha\n\n- 0–11,2 s: tema de Peaky Blinders em Si menor; golpe e subida na carta do \"Dia dois\" (9,2 s).\n\n- 11,2–98,5 s: jazz em Fá maior sob a fala, cerca de 15 dB abaixo da voz.\n\n- 97,2–99,9 s: \"Vamos recapitular?\", respiro com a subida do tema e vão seco de 0,3 s antes do drop.\n\n- **99,9 s: drop no tema**, com o golpe Collision em Si; a voz volta em 101,25 s.\n\n- 123,8 s: golpe e sino no \"continua . . .\", com o pulso do tema até o fim.\n\nA lista dos 273 eventos de som, com tempo, tipo, pan e intensidade, está em `audio/eventos.json`."
43
+ },
44
+ {
45
+ "titulo": "A identidade visual",
46
+ "texto": "**Resumo:** a mesma identidade do episódio 1, tirada da marca da barbearia e da série Peaky Blinders (lacre, latão, creme das cartas, Playfair Display com Roboto), agora numa mesa escura iluminada como por uma lâmpada de tungstênio. A gramática é a do take único: uma câmera de operador que persegue o assunto, passagens em que um elemento vira o próximo e um obturador de 180° no render. Números tirados do `comp/index.html`, do `take.js`, do `mix.py` e dos scripts da abertura.\n\n## Mesa e luz\n\n | \n\n | Peça\n | Como é\n\n | Tela\n | 1080×1920, fundo `#0d0c0b`\n\n | Luz\n | gradiente radial de 120 % × 70 % centrado no alto (50 %, 18 %): `#2a2219` no centro, `#15120f` no meio e `#0b0a09` nas bordas, como uma lâmpada quente acima da mesa\n\n | Grade de pontos\n | `TK.lattice` com profundidade 1,2, passo de 44 px e ponto de 2,1 px; anda menos que a câmera e faz o movimento ler no escuro\n\n | Véu da legenda\n | gradiente de 820 px de altura na base, do transparente a 90–94 % do fundo\n\n | Grão\n | aplicado na junção dos trechos, no ffmpeg (`noise=c0s=3`), e não na página\n\n | Mundo\n | todas as cenas num plano só, em coordenadas de mesa (1080×1920 = zoom 1): a abertura fica no alto, o Maps desce até y ≈ 2.400, o perfil até y ≈ 6.200, e o site, o ChatGPT, as avaliações e a recapitulação seguem para a direita (x ≈ 1.300 a 2.350)\n\n## Cores\n\n | \n\n | Token\n | Valor\n | Papel\n\n | Fundo\n | `#0d0c0b`\n | a mesa\n\n | Tinta\n | `#EDE6DA`\n | textos claros e legenda\n\n | Apagado\n | `#8d857a`\n | rótulos secundários\n\n | **Lacre**\n | **`#C8102E`**\n | o ponto vivo, pinos e anéis, pílula de destaque, selo \"SIMULAÇÃO\", rótulo das cartas\n\n | **Latão**\n | **`#B08D57`**\n | rótulos espaçados, pílulas de contorno, palavra-chave da legenda\n\n | Creme\n | `#EFE6D2`\n | cartas dos dias, polaroides, pílula clara\n\n | Vidro\n | `rgba(28,27,26,.92)` com borda branca a 7 %\n | cartões escuros e linhas de nota\n\n | Estrela\n | `#fbbc04` acesa · `#5b5034` apagada\n | avaliações, no amarelo do Google\n\n## Fontes\n\n | \n\n | Fonte\n | Onde\n\n | Playfair Display 900\n | número das cartas (210 px), números dos dados (120 px), \"4,9\", cantos das cartas\n\n | Playfair Display 700 e 700 itálico\n | títulos (\"Perfil da Empresa no Google\", \"Avaliações\", \"mais avaliações\"), \"Vamos recapitular?\" e \"continua . . .\"\n\n | Roboto Condensed 700\n | rótulos em caixa alta e espaçados (22–30 px, espaçamento de 0,2 a 0,38 em): \"DIA\", \"A MARCA\", \"O GOOGLE\", \"SEM LINK NENHUM\", selo \"SIMULAÇÃO\"\n\n | Roboto 400, 500 e 700\n | legenda (700, 58 px), barra de busca (400, 34 px), pílulas (500, 30 px)\n\nTodas vêm em `comp/fonts/` e entram por `@font-face`; o `__ready` espera cada peso carregar.\n\n## Componentes\n\n- **Carta do dia:** 280×392 px na mesa, fundo creme, \"DIA\" em Roboto Condensed, o número em Playfair 900, o ícone do dia (boné, navegador, logo do Google, WhatsApp) e o rótulo em lacre. É o componente da série e marca cada dia.\n\n- **Ponto de lacre:** círculo de 18 px com brilho vermelho em duas camadas (10 px e 34 px). Fica acima de tudo (`z-index` 50).\n\n- **Mão:** cursor de 68×77 px com sombra, que clica cada campo do perfil.\n\n- **Barra de busca:** branca, logo do Google ou do Maps à esquerda e cursor azul `#1a73e8` piscando.\n\n- **Pino:** 44×56 px, nas cores cinza, branco, latão e lacre conforme o dado; anel de lacre de 70 px.\n\n- **Polaroide:** foto real com margem creme de 9 px e sombra larga (mapa, lista, provas dos dias).\n\n- **Pílulas:** lacre (destaque), creme, latão de contorno e vidro.\n\n- **Painel do perfil:** branco, montado em 8 fatias (fotos, título, ações, endereço, horário, serviços, site, telefone) que acendem uma a uma.\n\n- **Janela do ChatGPT:** cartão escuro de 940×640 px com cantos de 44 px, logo oficial e o texto real da resposta.\n\n- **Display de balcão:** creme, com o QR, o logo do Google e o logo da Shelby, e um selo de desconto.\n\n## Câmera de operador\n\n | \n\n | Item\n | Valor\n\n | Molas\n | `TK.operador`, integrado a 240 Hz: posição com ζ 0,82; zoom em escala log com ζ 0,95\n\n | Pressa (`w`)\n | 1,0 a 2,6 nos respiros e empurrões lentos; 3 a 4,6 nas viagens; 5 a 6 seguindo os cliques do perfil\n\n | Antecipação\n | a chave entra 0,1 a 0,45 s antes do assunto\n\n | Enquadramento\n | centro do assunto em y ≈ 800 na tela (`câmera.y = assunto.y + 160 / zoom`), deixando a base para a legenda\n\n | Zoom\n | de 0,74× (os dados, longe da legenda) a 1,7× (o botão Agendar); 1,45× na abertura e 1,2× no texto do ChatGPT\n\n | Mão do operador\n | `TK.flutuar` com 3 px; baixa para 35 % no \"Vamos recapitular?\" e para 40 % no fim, sem chegar a zero\n\n | Tremores\n | 28 pousos (`TK.shake`): amplitude de 2,5 a 9 px e decaimento de 7 a 12, com o maior no drop\n\n## Curvas e molas\n\n | \n\n | Nome\n | Curva\n | Uso\n\n | `board`\n | `cubic-bezier(.333,0,.2285,1)`\n | viagem da lousa\n\n | `expoOut`\n | saída exponencial\n | estalo que assenta\n\n | `spring`\n | ζ 0,56 e ω 12 (passa cerca de 12 % e assenta em ~0,6 s)\n | mola padrão\n\n | `wordRise`\n | ζ 0,62 e ω 20, sobe 28 a 30 px\n | palavra da legenda\n\n | `popIn`\n | ζ 0,62 e ω 16, sobe 34 px\n | elemento que entra\n\n | `morphRect`\n | mola ζ 0,7 e ω 14, ou curva\n | um retângulo virando outro\n\n## Passagens entre assuntos\n\nCada fronteira passa um elemento para a próxima cena: o ponto pula e vira o botão da busca; a lista \"não aparece\" deixa uma vaga tracejada; a vaga vira a carta do Dia 2; o ponto vira o \"·\" de \"Paulínia · SP\" e depois a barra do Maps; a barra vira o mapa real; os 45 pinos saem do mapa e viram a grade de dados; as fileiras de pinos viram as linhas de nota; a pílula \"perfil completo\" vira o painel do perfil; o anel do clique no Agendar vira o site; a janela do site vira o ChatGPT; \"Centro de Paulínia\", \"degradê\" e \"barba\" saem do texto como pílulas; as pílulas viram estrelas que \"pesam\" no balcão; o QR vira o celular; o celular vira a pilha de avaliações; a de cima vira a avaliação real de 2 estrelas; o ponto vira o selo \"IA\". Na recapitulação, o ponto vira o ponto do \"?\", solta as três cartas e depois a carta do Dia 3; no fim, vira o lacre do \"continua . . .\".\n\n## Legenda viva\n\n- Frases de até 5 palavras numa linha; frase de 1 ou 2 palavras junta com a seguinte quando cabe.\n\n- Roboto 700, 58 px, centrada em y = 1.420, com palavra-chave em latão.\n\n- Cada palavra pousa com `wordRise` 0,04 s antes de ser dita; a frase sai subindo 24 px em 0,18 s quando a próxima começa.\n\n- A grafia segue a fala aprovada, não o Whisper (\"têm\", \"vêm\", \"ChatGPT\", \"4,9\").\n\n## Render\n\n60 qps. Cada quadro é a média, em luz linear, de 3 a 16 capturas espalhadas no obturador de 180°; o número de capturas sai do `__motion`, que mede o quanto algo anda na tela. Quadro parado sai com uma captura só, e corte seco não vira dissolução. O final foi feito em 4 trechos, com 4 navegadores, em H.264 (CRF 16, preset slow, BT.709) com áudio AAC de 256 kbps.\n\n## Abertura do celular\n\n | \n\n | Etapa\n | Valor\n\n | Gravação\n | 12,9 s, 4K a 30 qps, monitor tocando o vídeo num player\n\n | Sincronia\n | deslocamento de 0,9112 s entre a gravação e o vídeo; a imagem confirmou o pico em 0 de atraso\n\n | Rastreio\n | ECC com correlação de cerca de 0,95; o vídeo ocupa cerca de 53 % da altura da gravação\n\n | Troca invisível\n | a partir de 0,6 s depois do play (antes disso, a barra de controles do player cobre a tela); em 0,3 s, o vídeo deformado na perspectiva toma o lugar da tela, com a cor casada por histograma\n\n | Mergulho\n | 1,1 s (de 0,85 a 1,95 s depois do play), zoom em escala log com curva `bezier(.5,0,.2,1)`, 12 amostras por quadro e brilho de 10 % no meio\n\n | Pouso\n | 18 quadros (0,3 s) com uma oscilação de escala de até 3 % que assenta e um tremor curto; depois, o vídeo entra cru\n\n | Som\n | o quarto e o clique do play da gravação até o vídeo começar (−26 LUFS), depois a mix limpa; whoosh longo crescendo no mergulho (−19 dB) e um golpe suave no pouso (−23 dB)\n\n## Trilha\n\n | \n\n | Momento\n | Música\n\n | 0–11,2 s\n | tema de Peaky Blinders: partes separadas da gravação original e da versão da PJ Harvey, em Si menor\n\n | 11,2–98,5 s\n | jazz \"Bringing Home The Blues\" (Blue Stew), sem voz, em Fá maior\n\n | Recapitulação\n | a subida do Flood Remix cresce no respiro e o tema bate no drop, em 99,9 s\n\n | Fecho\n | o pulso do tema sem voz, o golpe e o sino no \"continua . . .\"\n\nTudo foi acelerado para 1,2× junto com a voz, mantendo o tom.\n\n## Sound design e mix\n\n | \n\n | Família\n | Quando\n | Som\n\n | Papel\n | foto, carta, pouso, pilha\n | deslizar, virar, cair e empilhar papel; \"airy thuds\" com sala no pouso das cartas\n\n | Pop\n | pílula, linha de nota, estrela, rótulo\n | pops em escada na pentatônica do trecho (Si menor ou Fá maior)\n\n | Clique e tecla\n | cliques da mão, campos, digitação\n | cliques e teclas; a tecla só toca quando o texto é digitado\n\n | Whoosh\n | viagem da câmera, passagem grande, carta\n | whoosh curto, longo e grave, com o pico no fim do movimento\n\n | Contador\n | os 45 resultados e os números\n | rolagem de contador e tique\n\n | Tonal\n | número, campo, estrela, brilho, painel\n | blip, neon-bell, sonar, arrival, airwave e warm-signal do Film Score Vol. 3\n\n | Golpe\n | Dia 2, \"pesam\", drop\n | impacto com jolt ou dark-danger; no drop, Collision em Si\n\n | Carimbo\n | selo \"SIMULAÇÃO\", selo \"IA\", lacre final\n | carimbo com sala e tonal\n\n- **Voz:** passa-alta em 70 Hz, compressor 3:1 e alvo de −16 LUFS.\n\n- **Música:** cerca de 15 dB abaixo da voz enquanto há fala, 9 dB abaixo nos respiros curtos e 2 dB acima da voz nos trechos só de música com 2,5 s ou mais; vão seco de −14 dB entre 0,32 e 0,02 s antes do drop.\n\n- **Efeitos:** bus 10 dB abaixo da voz, −3 dB em 3,2 kHz e sidechain de até −4 dB pela voz; sala com resposta de impulso de 4 s a −24 dB.\n\n- **Final:** −14 LUFS, limitador em 0,71; a versão publicada mediu −14,2 LUFS.\n\n## O que é \"humano\" neste vídeo\n\n- A câmera atrasa, inclina e assenta sozinha, e nunca fica parada.\n\n- O ponto pula em arco entre as cenas, e as cartas tremem quando pousam.\n\n- A mão vai de campo em campo e clica cada um, com a câmera perseguindo.\n\n- As estrelas \"pesam\" e a câmera treme junto.\n\n- A abertura tem o tremor da mão que segura o celular, preservado no rastreio."
47
+ },
48
+ {
49
+ "titulo": "A montagem em HTML",
50
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `comp/index.html`\n | a tabela `T` prende cada batida a uma palavra da fala (`P('palavra', tempo)`); as constantes de geometria põem todas as cenas numa mesa só; `KEYS` diz o que a câmera enquadra a partir de cada instante e `HITS` guarda os 28 tremores de pouso. Expõe `__meta`, `__ready`, `__seek`, `__track`, `__motion` e `__events`\n\n | `biblioteca/take-unico/take.js`\n | curvas, molas em forma fechada, entradas (`wordRise`, `popIn`, `drawOn`), passagens de um elemento para outro (`morphRect`, `iris`, `hop`, `gather`), contato (`impact`, `click`, `shake`) e a câmera de operador com a grade de pontos (`operador`, `alvos`, `flutuar`, `lattice`)\n\n | `render_take.py`\n | cada quadro é a média, em luz linear, de 3 a 16 capturas no obturador de 180°; quadro parado sai sem custo e corte seco continua seco. `--stills` grava quadros parados, `--previa` faz a prévia rápida e `--trechos 4` refaz só o que mudou\n\n | `oraculo_take.py`\n | confere, antes de alguém assistir, a continuidade em cada fronteira, o enquadramento, a velocidade, os respiros, os saltos e o loudness; `--eventos` exporta os eventos para o som\n\n | `render-final.sh`\n | renderiza o final em 4 trechos (0–33, 33–66, 66–98 e 98–128,5 s), esperando memória livre antes de cada um, junta, põe o grão no ffmpeg (`noise=c0s=3`) e cola a mix\n\n | `comp/gerar_legenda.py`\n | lê `palavras.json`, corrige a grafia do Whisper para a fala aprovada, quebra em frases de até 5 palavras e marca as palavras-chave; gera `palavras.js`\n\n | `audio/palavras.py`\n | tempo de cada palavra com o faster-whisper (large-v3-turbo) e acerto da primeira palavra depois de um silêncio\n\n | `audio/mix.py`\n | um efeito por evento, com o pico no instante dele; tonais no tom do trecho; a música desce sob a voz e sobe nos respiros; bus de efeitos com equalização e sidechain pela voz; master em −14 LUFS\n\n | `audio/narracao/`\n | `gerar_voz.py` (o texto falado de cada parágrafo e os ajustes da voz) e `montar_narracao.py` (junta os 12 parágrafos com as pausas)\n\n | `transicao/sincronia.py`, `atraso_imagem.py`\n | acham o deslocamento entre a gravação do celular e o vídeo, primeiro pelo som e depois pela imagem\n\n | `transicao/rastreio.py`\n | rastreia os 4 cantos do vídeo na tela do monitor, quadro a quadro, por ECC contra o próprio vídeo\n\n | `transicao/montar.py`\n | quadros da abertura: troca invisível da tela pelo vídeo, mergulho com desfoque e pouso com mola\n\n | `transicao/juntar.py`\n | junta a abertura com o resto do vídeo, monta o som (quarto, mix, whoosh e golpe) e gera o MP4\n\n- **Junte as pastas:** copie `audio/` para dentro de `projeto/`. A legenda lê `../audio/palavras.json` e o render procura `audio/mix.wav`.\n\n- **Aponte o motor:** na linha 129 do `comp/index.html`, troque `../../../biblioteca/take-unico/take.js` por `../biblioteca/take-unico/take.js`; no `render-final.sh`, troque o `R=` por `biblioteca/take-unico/render_take.py`.\n\n- **Prepare o ambiente:** Python com `playwright` (e `python -m playwright install chromium`), numpy, Pillow e ffmpeg. Para o som, também scipy, soundfile, librosa e pyloudnorm; para a abertura, opencv-python.\n\n- **Ver no navegador:** abra `comp/index.html?play` para tocar ao vivo ou `comp/index.html?t=55.3&hud` para parar num instante, com o tempo e o zoom na tela.\n\n- **Conferir antes do render:** `python biblioteca/take-unico/render_take.py comp/index.html --stills 3,17,40,56,70,100 --cols 6 --out revisao/stills.png` e `python biblioteca/take-unico/oraculo_take.py comp/index.html`.\n\n- **Som:** no topo do `audio/mix.py`, aponte `NV` para `audio/sfx/nivelados/` e `TN` e `PR` para os seus tonais e efeitos. Ponha a sua trilha em `audio/musica.wav` (128,5 s) e rode `python audio/mix.py`. Sai `audio/mix.wav` e as faixas separadas em `audio/escuta/`.\n\n- **Vídeo:** `VER=v2 bash render-final.sh` gera `render/shelby-ep2-take-unico-v2.mp4`. O motor também aceita o caminho mais novo, que refaz só os trechos alterados: `python biblioteca/take-unico/render_take.py comp/index.html --out render/final.mp4 --fps 60 --trechos 4 --turbo --audio audio/mix.wav`. Depois, `python biblioteca/take-unico/oraculo_take.py comp/index.html --video render/final.mp4`.\n\n- **Abertura do celular:** grave com o celular o monitor tocando o vídeo. Nos scripts de `transicao/`, aponte `MASTER` (e o caminho em `rastreio.py` e `atraso_imagem.py`) para o seu MP4 do take. Extraia o som da gravação para `transicao/celular-48k.wav` e o do take para `transicao/master-audio.wav` (48 kHz). Rode, da pasta `projeto/`: `python transicao/sincronia.py` (grava o deslocamento pelo som em `off.txt`); `python transicao/rastreio.py 0 4.5 <deslocamento>` (gera `cantos.json`); `python transicao/atraso_imagem.py`, que imprime a correlação de cada atraso (grave em `off_video.txt` o deslocamento do pico); e, por fim, `python transicao/montar.py` e `python transicao/juntar.py`.\n\n**Pegadinhas:** grão desenhado num canvas de tela cheia deixa cada captura cerca de 4× mais lenta; por isso ele entra no ffmpeg da junção. Cena cuja janela de tempo termina com um elemento ainda no quadro vira salto: a janela tem de acabar com ele fora do quadro ou apagado. As cenas não criam contexto de empilhamento, então o ponto e a mão levam `z-index` alto. Esqueleto de carregamento longo vira tela morta: no painel real do Google, campo vazio aparece como \"Adicionar …\", e isso pode acender na palavra. Cada navegador do render final ocupa cerca de 1,8 GB de memória. No Windows, `cv2.imwrite` falha em silêncio com acento no caminho (os scripts gravam com `imencode`). O OpenCV decodifica o vídeo com outra conversão de cor e cria um degrau de brilho na emenda; o `montar.py` lê o vídeo pelo ffmpeg em BT.709 com arredondamento exato."
51
+ },
52
+ {
53
+ "titulo": "As decisões de direção",
54
+ "texto": "- **Um elemento sobrevive em cada troca.** A folha de batidas tem a coluna \"o que passa para a próxima\" e nenhuma fronteira fica vazia: a vaga tracejada vira a carta do Dia 2, a barra do Maps vira o mapa, as fileiras de pinos viram as notas, o QR vira o celular e a avaliação de cima da pilha vira a avaliação real.\n\n- **O ponto de lacre conduz o vídeo inteiro.** É o elemento vivo da série: ele vira o botão da busca, o \"·\" de \"Paulínia · SP\", o selo \"IA\", o ponto do \"?\" da recapitulação e, no fim, o lacre do \"continua . . .\".\n\n- **Câmera de operador, não keyframe.** Cada chave diz o que enquadrar, e uma mola persegue o assunto, entrando 0,1 a 0,2 s antes dele. A câmera nunca para: deriva de 3 px, que baixa nos respiros, tremor em cada pouso e uma grade de pontos distante para o movimento ler no fundo escuro.\n\n- **A batida mora na palavra.** Cada tempo da composição é uma palavra da fala, lida do faster-whisper. Voz nova significa reler os tempos, sem redecidir o vídeo.\n\n- **Dados de verdade com contador.** 45 pinos nascem no ritmo do contador, 20 ficam cinza, os ícones de site, WhatsApp e Instagram são riscados, 11 ficam latão e 5 ganham anel. A nota 4,9 aparece grande para mostrar que ela não separa ninguém.\n\n- **Interface que existe.** O perfil acende na palavra: foto, nome e botões em \"Perfil\", \"Empresa\" e \"Google\"; os campos vazios mostram \"Adicionar endereço\", \"Adicionar horário\" e os demais, numerados na ordem da fala, e o selo \"SIMULAÇÃO\" fica no canto.\n\n- **A câmera chega perto do que se lê.** Ela vai a 1,2× no texto do ChatGPT enquanto ele é escrito e recua para 0,74× nos dados, para os números ficarem longe da legenda.\n\n- **Recapitulação com contraste.** \"Vamos recapitular?\" tem um respiro, a música faz um vão seco de 0,3 s e o tema volta com o golpe Collision em Si. O ponto solta as três cartas, e cada uma vira a cena do seu dia e volta.\n\n- **Som pela imagem.** 273 eventos saem da composição; cada um tem um efeito com o pico no instante dele. Os tonais seguem o tom do trecho (Si menor no tema, Fá maior no jazz), as escadas de pop sobem a pentatônica e o texto que aparece sem digitação fica mudo, para não disputar com a voz.\n\n- **A abertura prova que é real.** O celular filma o monitor, a tela da gravação é trocada pelo próprio vídeo, deformado na perspectiva e com a cor casada, e a câmera mergulha nela em 1,1 s.\n\n- **Conferência antes de alguém assistir.** O oráculo mede continuidade, enquadramento e respiros, e uma IA assiste com áudio. Cada apontamento é conferido nos quadros antes de mexer.\n\nDetalhes de cores, câmera, legenda e som: estilo.md. A fala e as cenas por tempo: roteiro.md. Para fazer um vídeo no mesmo método: PROMPT.md."
55
+ },
56
+ {
57
+ "titulo": "As versões até o final",
58
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | rascunho r1\n | primeiro take inteiro, a 30 qps; o oráculo achou dois saltos (12,5 s e 101 s, janelas de cena terminando com elemento no quadro) e a escuta por IA deu nota 6,5 para som e imagem\n\n | v1\n | janelas de cena sem corte, ponto acima das cartas, campos do perfil maiores, esqueleto com brilho, pinos com 8 pops graves, vão seco antes do drop e golpe Collision; a câmera passou a chegar a 1,2× no texto do ChatGPT e as teclas desceram 5 dB; continuidade 1,00\n\n | **v2**\n | aprovada: esqueleto de só 0,5 s, campos \"Adicionar …\" que acendem na palavra, selo \"barbearia conceito\", números mais compactos com a câmera longe da legenda, ChatGPT que já abre com \"Como posso ajudar?\" e o título \"Avaliações\" subindo junto das estrelas\n\n | **v3**\n | publicada: a mesma v2 com a abertura do celular filmando a tela; 129,4 s, −14,2 LUFS"
59
+ }
60
+ ],
61
+ "pacote": [
62
+ {
63
+ "pasta": "projeto/",
64
+ "conteudo": "`comp/index.html` (o take inteiro, com a folha de batidas no cabeçalho), `comp/palavras.js` e `comp/gerar_legenda.py` (a legenda), `comp/assets/` (29 arquivos: mapa e lista do Maps de Paulínia com nomes desfocados, o perfil da Shelby em fatias, a avaliação, o QR, os logos e as provas dos dias 0 e 1), `comp/fonts/` (Playfair Display, Roboto Condensed e Roboto), `biblioteca/take-unico/` (o motor: `take.js`, `render_take.py`, `oraculo_take.py` e o guia dele), `render-final.sh`, `transicao/` (os scripts da abertura do celular, os cantos rastreados e o som da gravação) e `bruto/IMG_5406.MOV` (a gravação do celular)"
65
+ },
66
+ {
67
+ "pasta": "audio/",
68
+ "conteudo": "`voz.wav` (a narração a 1,2×), `mix.wav` (o som do take), `mix-v3.wav` (o som da versão publicada, com o quarto e o clique do celular), `mix.py`, `palavras.py` e `palavras.json`, `eventos.json` (os 273 eventos), `narracao/` (geração e montagem da voz), `trilha/` (o plano da trilha por momentos) e `sfx/nivelados/` (os 40 efeitos usados)"
69
+ },
70
+ {
71
+ "pasta": "referencias/",
72
+ "conteudo": "o tutorial do take único, o estudo do onetake (de onde veio o método), a pesquisa das barbearias de Paulínia, os pedidos e as respostas do ChatGPT, a legenda do post, `links.md` e `fora-do-pacote.md`"
73
+ },
74
+ {
75
+ "pasta": "render.mp4",
76
+ "conteudo": "a versão publicada (v3)"
77
+ },
78
+ {
79
+ "pasta": "comp/index.html",
80
+ "conteudo": "a tabela `T` prende cada batida a uma palavra da fala (`P('palavra', tempo)`); as constantes de geometria põem todas as cenas numa mesa só; `KEYS` diz o que a câmera enquadra a partir de cada instante e `HITS` guarda os 28 tremores de pouso. Expõe `__meta`, `__ready`, `__seek`, `__track`, `__motion` e `__events`"
81
+ },
82
+ {
83
+ "pasta": "biblioteca/take-unico/take.js",
84
+ "conteudo": "curvas, molas em forma fechada, entradas (`wordRise`, `popIn`, `drawOn`), passagens de um elemento para outro (`morphRect`, `iris`, `hop`, `gather`), contato (`impact`, `click`, `shake`) e a câmera de operador com a grade de pontos (`operador`, `alvos`, `flutuar`, `lattice`)"
85
+ },
86
+ {
87
+ "pasta": "render_take.py",
88
+ "conteudo": "cada quadro é a média, em luz linear, de 3 a 16 capturas no obturador de 180°; quadro parado sai sem custo e corte seco continua seco. `--stills` grava quadros parados, `--previa` faz a prévia rápida e `--trechos 4` refaz só o que mudou"
89
+ },
90
+ {
91
+ "pasta": "oraculo_take.py",
92
+ "conteudo": "confere, antes de alguém assistir, a continuidade em cada fronteira, o enquadramento, a velocidade, os respiros, os saltos e o loudness; `--eventos` exporta os eventos para o som"
93
+ },
94
+ {
95
+ "pasta": "render-final.sh",
96
+ "conteudo": "renderiza o final em 4 trechos (0–33, 33–66, 66–98 e 98–128,5 s), esperando memória livre antes de cada um, junta, põe o grão no ffmpeg (`noise=c0s=3`) e cola a mix"
97
+ },
98
+ {
99
+ "pasta": "comp/gerar_legenda.py",
100
+ "conteudo": "lê `palavras.json`, corrige a grafia do Whisper para a fala aprovada, quebra em frases de até 5 palavras e marca as palavras-chave; gera `palavras.js`"
101
+ },
102
+ {
103
+ "pasta": "audio/palavras.py",
104
+ "conteudo": "tempo de cada palavra com o faster-whisper (large-v3-turbo) e acerto da primeira palavra depois de um silêncio"
105
+ },
106
+ {
107
+ "pasta": "audio/mix.py",
108
+ "conteudo": "um efeito por evento, com o pico no instante dele; tonais no tom do trecho; a música desce sob a voz e sobe nos respiros; bus de efeitos com equalização e sidechain pela voz; master em −14 LUFS"
109
+ },
110
+ {
111
+ "pasta": "audio/narracao/",
112
+ "conteudo": "`gerar_voz.py` (o texto falado de cada parágrafo e os ajustes da voz) e `montar_narracao.py` (junta os 12 parágrafos com as pausas)"
113
+ },
114
+ {
115
+ "pasta": "transicao/rastreio.py",
116
+ "conteudo": "rastreia os 4 cantos do vídeo na tela do monitor, quadro a quadro, por ECC contra o próprio vídeo"
117
+ },
118
+ {
119
+ "pasta": "transicao/montar.py",
120
+ "conteudo": "quadros da abertura: troca invisível da tela pelo vídeo, mergulho com desfoque e pouso com mola"
121
+ },
122
+ {
123
+ "pasta": "transicao/juntar.py",
124
+ "conteudo": "junta a abertura com o resto do vídeo, monta o som (quarto, mix, whoosh e golpe) e gera o MP4"
125
+ }
126
+ ],
127
+ "prompt": "Quero um vídeo narrado no mesmo método do projeto \"Barbearia Shelby, episódio 2\", que está em 07-videos/projetos/shelby-ep2/, com o meu assunto.\n\nAssunto ou negócio: {{ASSUNTO}}\nPara quem é o vídeo: {{PUBLICO}}\nPassos que o vídeo ensina (de 2 a 4): {{PASSOS}}\nDados reais que posso mostrar (pesquisa, números, prints): {{DADOS}}\nIdentidade do assunto (marca, cores, fontes ou uma referência): {{IDENTIDADE}}\nMúsica (uma faixa para o gancho e outra para os trechos de trabalho, se quiser): {{MUSICA}}\nAbertura com o celular filmando a tela: {{CELULAR}} (sim ou não)\nDuração aproximada: {{DURACAO}} (a referência tem 2 min 9 s) · Formato: {{FORMATO}} (a referência é 1080×1920)\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, nesta ordem: LEIA-ME.md, estilo.md, roteiro.md e referencias/tutorial-take-unico.md. Depois abra projeto/comp/index.html e veja a folha de batidas no cabeçalho, a tabela T (cada batida presa a uma palavra), a geometria do mundo, os alvos da câmera (KEYS), os tremores (HITS), seek(t) e o contrato __meta, __ready, __seek, __track, __motion e __events. Leia também biblioteca/take-unico/take.js, render_take.py, oraculo_take.py e audio/mix.py. Me explique em poucas linhas o que você vai reaproveitar.\n\n2. Crie o meu projeto em 07-videos/projetos/AAAA-MM-DD-tema/, com comp/, audio/, render/ e revisao/, e um README com checklist. Copie o que for reaproveitar; não edite os arquivos do projeto shelby-ep2.\n\n3. O roteiro: a fala é minha. Faça só a estrutura em roteiro.md: um gancho que abre a dor em até 1,5 s, o problema com os meus dados reais, os passos e uma recapitulação que puxa o próximo vídeo. Para cada parte, diga o que precisa ser dito e o que aparece na tela, e me dê 3 opções de gancho. Espere eu escrever a fala. Quando eu mandar, guarde o meu texto sem mudar e faça ao lado a versão para a voz, trocando só a grafia de pronúncia (ex.: \"IÁ\", \"chat gê pê tê\", números por extenso).\n\n4. Narração: um arquivo por parágrafo na minha voz da ElevenLabs, juntado com pausas curtas e um respiro antes da recapitulação. Tire o tempo de cada palavra com o faster-whisper (audio/palavras.py) e confira a primeira palavra contra o silêncio. Me mande o áudio e espere eu aprovar antes de animar.\n\n5. Monte a folha de batidas antes de animar, no cabeçalho do meu comp/index.html: tempo, batida, câmera e \"o que passa para a próxima\". Nenhuma fronteira pode ficar vazia: em cada troca de assunto, um elemento da tela sobrevive e vira a próxima cena (morphRect, hop, iris, gather). Escolha um elemento vivo que conduz o vídeo inteiro, como o ponto de lacre da Shelby. Corte seco só de propósito, e declarado.\n\n6. Identidade e assets: tire do meu assunto as cores, as fontes (em comp/fonts/, por @font-face) e um componente que se repete, como as cartas dos dias. Tudo que a fala citar aparece com imagem real: print do site, logo oficial, mapa, resposta real da IA. Se algo for simulado, ponha um selo que diga isso. Me peça o que você não conseguir achar.\n\n7. Construa no mundo da mesa: todas as cenas num plano só, a próxima abaixo ou ao lado da anterior, na direção em que a câmera já vai. Mantenha deste projeto a câmera de operador (alvos com pressa w, chave 0,1 a 0,2 s antes do assunto, centro do assunto em y ≈ 800, deriva que nunca zera, tremor em cada pouso, grade de pontos ao fundo), a legenda palavra por palavra em frases de até 5 palavras, o tudo-é-função-de-t sem estado acumulado e o grão na junção do ffmpeg, não na página.\n\n8. Confira antes do render: stills de todas as fronteiras com render_take.py --stills, o oráculo sem vídeo (continuidade ≥ 0,7 e enquadramento ok) e uma prévia com --previa. Na prévia, peça a uma IA que assista com áudio e aponte onde a câmera para morta, onde um texto fica pequeno ou perto da legenda e onde a tela fica vazia. Confira cada apontamento nos quadros antes de mexer.\n\n9. Som em paralelo, num subagente: exporte os eventos com oraculo_take.py --eventos, um som padrão por tipo de evento com o pico no instante dele, tonais no tom de cada trecho da música, escadas de pop na escala do trecho, teclas só quando o texto é digitado. A música fica cerca de 15 dB abaixo da voz sob a fala e sobe nos trechos só de música; um vão seco antes do drop da recapitulação. Master em −14 LUFS.\n\n10. Render final a 60 qps com obturador (--fps 60 --trechos 4), junte com a mix, confira com o oráculo usando --video (continuidade, respiros, saltos, loudness) e corrija só os trechos que mudaram.\n\n11. Se a abertura do celular estiver ligada: eu gravo o monitor tocando o vídeo. Use os scripts de transicao/ na ordem (sincronia.py, rastreio.py, atraso_imagem.py, montar.py, juntar.py): troca invisível depois que a barra do player some, mergulho de cerca de 1,1 s, pouso com mola e o som do quarto até o vídeo começar. Confira a emenda quadro a quadro, sem degrau de brilho nem quadro repetido.\n\n12. Entregue o MP4, o HTML editável, a mix e uma anotação do que mudou em relação a este projeto.",
128
+ "campos": [
129
+ "ASSUNTO",
130
+ "CELULAR",
131
+ "DADOS",
132
+ "DURACAO",
133
+ "FORMATO",
134
+ "IDENTIDADE",
135
+ "MUSICA",
136
+ "PASSOS",
137
+ "PUBLICO"
138
+ ],
139
+ "fonte": {
140
+ "nome": "Clube do Motion",
141
+ "url": "https://clubedomotion.com/projeto/?id=shelby-ep2",
142
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
143
+ }
144
+ }