primocode 10.12.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 (207) hide show
  1. package/README.md +74 -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/assinaturas/gerativo.json +1 -1
  7. package/lib/estudio/camadas.js +4 -0
  8. package/lib/estudio/cota.js +150 -0
  9. package/lib/estudio/dados/projetos/clube-ad5.json +105 -0
  10. package/lib/estudio/dados/projetos/clube-ae-sem-memoria.json +107 -0
  11. package/lib/estudio/dados/projetos/clube-agent.json +120 -0
  12. package/lib/estudio/dados/projetos/clube-antes-e-agora.json +86 -0
  13. package/lib/estudio/dados/projetos/clube-apresentando-clube.json +110 -0
  14. package/lib/estudio/dados/projetos/clube-bluevisa.json +106 -0
  15. package/lib/estudio/dados/projetos/clube-caught-in-the-fire.json +127 -0
  16. package/lib/estudio/dados/projetos/clube-chat-cliente-satisfeito.json +98 -0
  17. package/lib/estudio/dados/projetos/clube-chatgpt-anuncios.json +120 -0
  18. package/lib/estudio/dados/projetos/clube-claude-dj.json +140 -0
  19. package/lib/estudio/dados/projetos/clube-claude-mcp.json +142 -0
  20. package/lib/estudio/dados/projetos/clube-cleanui.json +106 -0
  21. package/lib/estudio/dados/projetos/clube-clinica-take-unico.json +128 -0
  22. package/lib/estudio/dados/projetos/clube-clinica.json +104 -0
  23. package/lib/estudio/dados/projetos/clube-clube-opener.json +125 -0
  24. package/lib/estudio/dados/projetos/clube-clube.json +108 -0
  25. package/lib/estudio/dados/projetos/clube-codigo.json +101 -0
  26. package/lib/estudio/dados/projetos/clube-distilbook.json +104 -0
  27. package/lib/estudio/dados/projetos/clube-drive-upload.json +115 -0
  28. package/lib/estudio/dados/projetos/clube-dub.json +119 -0
  29. package/lib/estudio/dados/projetos/clube-enxovaly.json +105 -0
  30. package/lib/estudio/dados/projetos/clube-fecha7.json +118 -0
  31. package/lib/estudio/dados/projetos/clube-filatov.json +128 -0
  32. package/lib/estudio/dados/projetos/clube-frame.json +108 -0
  33. package/lib/estudio/dados/projetos/clube-glass.json +118 -0
  34. package/lib/estudio/dados/projetos/clube-letra-em-apps.json +84 -0
  35. package/lib/estudio/dados/projetos/clube-letra-globo-3d.json +111 -0
  36. package/lib/estudio/dados/projetos/clube-letra-nos-apps.json +146 -0
  37. package/lib/estudio/dados/projetos/clube-letra-seis-mundos.json +100 -0
  38. package/lib/estudio/dados/projetos/clube-lula-3.json +146 -0
  39. package/lib/estudio/dados/projetos/clube-morph.json +119 -0
  40. package/lib/estudio/dados/projetos/clube-motion-designer.json +115 -0
  41. package/lib/estudio/dados/projetos/clube-motion-pacote.json +112 -0
  42. package/lib/estudio/dados/projetos/clube-movimento.json +103 -0
  43. package/lib/estudio/dados/projetos/clube-not-like-us.json +117 -0
  44. package/lib/estudio/dados/projetos/clube-pinterest-inspiracao.json +86 -0
  45. package/lib/estudio/dados/projetos/clube-pixel-e-tinta.json +108 -0
  46. package/lib/estudio/dados/projetos/clube-ponte.json +118 -0
  47. package/lib/estudio/dados/projetos/clube-processo-edit-tonal.json +126 -0
  48. package/lib/estudio/dados/projetos/clube-processo-motion-100-ia.json +109 -0
  49. package/lib/estudio/dados/projetos/clube-promo.json +114 -0
  50. package/lib/estudio/dados/projetos/clube-proposito.json +115 -0
  51. package/lib/estudio/dados/projetos/clube-rankhog.json +128 -0
  52. package/lib/estudio/dados/projetos/clube-recursao.json +116 -0
  53. package/lib/estudio/dados/projetos/clube-revelar.json +118 -0
  54. package/lib/estudio/dados/projetos/clube-robo.json +125 -0
  55. package/lib/estudio/dados/projetos/clube-shelby-ep2.json +144 -0
  56. package/lib/estudio/dados/projetos/clube-shelby.json +97 -0
  57. package/lib/estudio/dados/projetos/clube-solar-eclipse.json +96 -0
  58. package/lib/estudio/dados/projetos/clube-soldier.json +128 -0
  59. package/lib/estudio/dados/projetos/clube-som-de-cena.json +108 -0
  60. package/lib/estudio/dados/projetos/clube-spotify-candidatura.json +112 -0
  61. package/lib/estudio/dados/projetos/clube-tda-app.json +118 -0
  62. package/lib/estudio/dados/projetos/clube-tda-ia.json +75 -0
  63. package/lib/estudio/dados/projetos/clube-telegram-chat.json +118 -0
  64. package/lib/estudio/dados/projetos/clube-telegram-ilha.json +106 -0
  65. package/lib/estudio/dados/projetos/clube-tennessee-nike.json +132 -0
  66. package/lib/estudio/dados/projetos/clube-tudo-se-move.json +112 -0
  67. package/lib/estudio/dados/projetos/clube-uiad.json +107 -0
  68. package/lib/estudio/dados/projetos/clube-viralgrow.json +108 -0
  69. package/lib/estudio/dados/projetos/clube-whose-side.json +140 -0
  70. package/lib/estudio/dados/projetos/clube-youtube-inscrever.json +108 -0
  71. package/lib/estudio/dados/projetos/elementos-do-site-em-movimento.json +49 -0
  72. package/lib/estudio/dados/projetos/explainer-narrado.json +51 -0
  73. package/lib/estudio/dados/projetos/lancamento-de-produto.json +51 -0
  74. package/lib/estudio/dados/projetos/motion-so-com-sons.json +50 -0
  75. package/lib/estudio/dados/projetos/titulo-em-after-effects.json +51 -0
  76. package/lib/estudio/dados/projetos/tour-de-saas.json +50 -0
  77. package/lib/estudio/dados/projetos-ae/antes-e-agora/ae/cenas.jsx +733 -0
  78. package/lib/estudio/dados/projetos-ae/antes-e-agora/assets/fazer_assets.py +88 -0
  79. package/lib/estudio/dados/projetos-ae/letra-em-apps/ae/cenas.jsx +402 -0
  80. package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/preparar_assets.py +17 -0
  81. package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/svg_para_ae.py +25 -0
  82. package/lib/estudio/dados/projetos-ae/letra-nos-apps/BRIEF-AGENTES.md +31 -0
  83. package/lib/estudio/dados/projetos-ae/letra-nos-apps/README.md +53 -0
  84. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ROTEIRO-CENAS.md +69 -0
  85. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/A-agenda.jsx +148 -0
  86. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/B-docs.jsx +174 -0
  87. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/C-alttab.jsx +113 -0
  88. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/D-spotify.jsx +118 -0
  89. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/E-notas.jsx +146 -0
  90. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/F-jornal1.jsx +144 -0
  91. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/G-google.jsx +153 -0
  92. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/H-mapa.jsx +176 -0
  93. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/I-imagens.jsx +132 -0
  94. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/J-jornal2.jsx +191 -0
  95. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/K-maps.jsx +184 -0
  96. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera-movimentos.jsx +48 -0
  97. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera.jsx +57 -0
  98. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/card-spotify.jsx +98 -0
  99. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/digitar.jsx +38 -0
  100. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/jornal-comum.jsx +196 -0
  101. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra.jsx +23 -0
  102. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra_automatica.py +83 -0
  103. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/montagem.jsx +74 -0
  104. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/render_html.py +13 -0
  105. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/util.jsx +162 -0
  106. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-midia-comum.jsx +114 -0
  107. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/wg-util.jsx +360 -0
  108. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/F-jornal1/render_html.py +13 -0
  109. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/render_w-midia.py +26 -0
  110. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/inclin.py +30 -0
  111. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_d.py +36 -0
  112. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_e.py +27 -0
  113. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ajustar_movimentos.py +61 -0
  114. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ancorar.py +74 -0
  115. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/assar.py +47 -0
  116. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/camera3d_jornal.py +172 -0
  117. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/comparar.py +32 -0
  118. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/dados_ae_jornal.py +46 -0
  119. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/folha_contato.py +28 -0
  120. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/homografia_jornal.py +74 -0
  121. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/integrar.py +44 -0
  122. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/medir_quadro_a_quadro.py +32 -0
  123. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/mesa_2d.py +64 -0
  124. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/plot_cenas.py +11 -0
  125. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/retificar_quadros.py +38 -0
  126. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/assar_ab.py +52 -0
  127. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/medir_ab.py +59 -0
  128. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ajustar_h.py +111 -0
  129. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_corrige_cam.py +17 -0
  130. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ecc_cadeia.py +80 -0
  131. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_finalizar_cam.py +65 -0
  132. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_mosaico.py +61 -0
  133. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md +55 -0
  134. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md +66 -0
  135. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md +50 -0
  136. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md +43 -0
  137. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md +43 -0
  138. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces.md +42 -0
  139. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/atraso_imagem.py +31 -0
  140. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/fundo.py +56 -0
  141. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/juntar.py +45 -0
  142. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/montar.py +177 -0
  143. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/rastreio.py +74 -0
  144. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/sincronia.py +18 -0
  145. package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/ae/cenas.jsx +530 -0
  146. package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/assets/fazer_assets.py +107 -0
  147. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/assets/pessoas/figurinha.py +46 -0
  148. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/BRIEF-A.md +83 -0
  149. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/audio.py +179 -0
  150. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/confere.py +20 -0
  151. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte1.js +1 -0
  152. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte2.js +1 -0
  153. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/gerar_emojis.py +11 -0
  154. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/img/filmes/_indice.js +122 -0
  155. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/base.js +380 -0
  156. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/main.js +86 -0
  157. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1a.js +169 -0
  158. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1b.js +455 -0
  159. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1c.js +389 -0
  160. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p2.js +379 -0
  161. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/video.py +62 -0
  162. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/README.md +65 -0
  163. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/oraculo_take.py +137 -0
  164. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/render_take.py +388 -0
  165. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/take.js +235 -0
  166. package/lib/estudio/diretor.js +2 -1
  167. package/lib/estudio/editor.js +285 -0
  168. package/lib/estudio/efeitos-fabrica/terminal-digitando.jsx +2 -1
  169. package/lib/estudio/effectcraft.js +152 -0
  170. package/lib/estudio/exportar.js +181 -0
  171. package/lib/estudio/gerativo.js +44 -15
  172. package/lib/estudio/index.js +126 -5
  173. package/lib/estudio/kit/gerativo.jsx +15 -0
  174. package/lib/estudio/kit-ae/base.jsx +1146 -0
  175. package/lib/estudio/kit-ae/cenas.jsx +395 -0
  176. package/lib/estudio/kit-ae/primitivas.jsx +911 -0
  177. package/lib/estudio/kokoro.js +3 -1
  178. package/lib/estudio/maquina-diretor.js +393 -0
  179. package/lib/estudio/maquina-elementos.js +134 -0
  180. package/lib/estudio/maquina-layout.js +198 -0
  181. package/lib/estudio/maquina-som.js +478 -0
  182. package/lib/estudio/maquina-trilha.js +160 -0
  183. package/lib/estudio/maquina-voz.js +429 -0
  184. package/lib/estudio/maquina.js +516 -0
  185. package/lib/estudio/projetos.js +60 -0
  186. package/lib/estudio/remotion.js +6 -4
  187. package/lib/estudio/revisor.js +61 -0
  188. package/lib/estudio/voicestudio.js +81 -0
  189. package/lib/headless.js +71 -0
  190. package/lib/hooks.js +72 -0
  191. package/lib/local/cerebro.json +398 -12
  192. package/lib/local/entrada.js +46 -2
  193. package/lib/marca-kit.js +309 -0
  194. package/lib/mcp.js +286 -6
  195. package/lib/perigo.js +31 -3
  196. package/lib/planos.js +47 -19
  197. package/lib/preparar.js +111 -0
  198. package/lib/retomar.js +55 -0
  199. package/lib/sandbox.js +197 -0
  200. package/lib/skills.js +3 -1
  201. package/lib/tools.js +13 -4
  202. package/lib/ui.js +1 -1
  203. package/lib/video/auto.js +18 -3
  204. package/package.json +4 -2
  205. package/skills/after-effects/SKILL.md +52 -0
  206. package/skills/maquina-de-motion/SKILL.md +84 -0
  207. package/skills/motion-de-primeira/SKILL.md +33 -51
@@ -0,0 +1,119 @@
1
+ {
2
+ "id": "clube-dub",
3
+ "titulo": "Cliques que viram receita",
4
+ "categoria": "saas",
5
+ "resumo": "vídeo de lançamento de 16 s, em 16:9 e sem narração, para a Dub, plataforma de links curtos, análise de conversões e programa de parceiros. É uma recriação do \"Dub promo video\" de Steven Tey (@steventey, fundador da Dub), publicado no prompt-motion.com (`steventey-0d20e4`) e feito numa tentativa só com o Claude Opus 5.5 a partir do prompt genérico de showreel. O original vestia uma Dub escura e laranja que não existe; a recriação usa o produto real, que é claro, com as cores das métricas medidas nas capturas oficiais. Uma forma só atravessa o vídeo: a URL longa vira a pílula `dub.sh/launch`, a pílula vira o card de Analytics, o card encolhe até o círculo dos parceiros, o círculo abre no painel das funções e o painel termina no logo. Feito em HyperFrames (HTML + GSAP), com música real e 104 efeitos sonoros.",
6
+ "indicado": "startup ou SaaS lançando um produto com métricas, painel ou links; quem quer mostrar números crescendo sem precisar de narração.",
7
+ "estilo": [
8
+ "interface clara",
9
+ "forma contínua",
10
+ "odômetro",
11
+ "mapa vivo",
12
+ "gráfico que vira funil",
13
+ "cortes na batida"
14
+ ],
15
+ "ficha": {
16
+ "formato": "1920×1080, 60 qps, 16:9, cor BT.709",
17
+ "duracao": "16,0 s",
18
+ "motor": "ae",
19
+ "voz": "sem narração; o texto da tela conta a história",
20
+ "musica": "ver o guia de estilo",
21
+ "fontes": "ver o guia de estilo"
22
+ },
23
+ "ferramentas": [
24
+ "Claude Code",
25
+ "After Effects",
26
+ "ElevenLabs"
27
+ ],
28
+ "ficha_tecnica": {
29
+ "Duração": "16,0 s",
30
+ "Formato": "1920×1080, 60 qps, 16:9, cor BT.709",
31
+ "Voz": "sem narração; o texto da tela conta a história",
32
+ "Ferramenta": "HyperFrames 0.8.144 (HTML + GSAP); render a 240 qps juntado em 60 qps com motion blur",
33
+ "Referência": "\"Dub promo video\" (@steventey), 15,07 s, categorias Product UI e Charts",
34
+ "Trilha": "\"LINK\" (Icy Narco), só o instrumental, com edição de DJ por compasso; drop em 2,00 s",
35
+ "Som": "104 efeitos; mix final a −14,0 LUFS, pico −1,5 dBTP"
36
+ },
37
+ "etapas": [
38
+ {
39
+ "titulo": "O roteiro",
40
+ "texto": "**Resumo:** o vídeo não tem narração; quem conta a história é a forma que atravessa as cenas e o pouco texto da interface. Abaixo estão o texto da tela exatamente como aparece (em inglês, como o produto), as cenas por tempo e os momentos da trilha. A estrutura veio do original do @steventey; a ordem foi mantida e cada troca passou a nascer da cena anterior.\n\n## Como a história foi montada\n\n- **Ideia:** uma URL comprida demais vira um link curto, o link junta cliques do mundo inteiro, os cliques viram leads e vendas, as vendas pagam os parceiros, e tudo isso é uma plataforma só.\n\n- **Ritmo:** a música a 122 BPM dá um compasso a cada 1,97 s; o drop cai em 2,00 s, a pausa do baixo ocupa 11,22–13,80 s e a volta em 13,80 s abre o fecho.\n\n- **Texto:** só o que a interface da Dub mostraria (rótulos, abas, avisos) e duas frases de marca: \"Grow with partners.\" e \"Turn clicks into revenue.\".\n\n## Texto da tela, na ordem\n\n- `Links › New link` · `Draft saved` · `Destination URL`\n\n- A URL digitada: `https://acme.com/blog/2026/launch-edition?utm_source=twitter&utm_medium=social&utm_campaign=product_launch&utm_content=hero_video&ref=partner_4821`\n\n- `dub.sh/launch`\n\n- `CLICKS · LIVE` · `Top countries` (United States, Brazil, India, Germany)\n\n- `Last 30 days` · abas `Clicks`, `Leads`, `Sales` · dica com a data (`Sep …`) e os cliques do dia · funil `100%` · `3.8%` · `0.12%`\n\n- Avisos: `New lead` (steven@acme.com · dub.sh/launch), `New sale · $249.00` (Pro plan), `New sale · $1,200.00` (Enterprise · via @marissa)\n\n- `Grow with partners.` · chips `+$480`, `+$1,250`, `+$75`… · `$4,218,960` · `PAID OUT TO PARTNERS`\n\n- Painel: `Short links.` · `QR codes.` · `Custom domains.` · `Deep links.` · `Conversions.` · `Payouts.` · `One platform.`\n\n- Fecho: logo + wordmark `dub` · `Turn clicks into revenue.` · `Start for free` · `Get a demo` · `DUB.CO`\n\n## Cenas por tempo\n\n | \n\n | #\n | Tempo (s)\n | Forma\n | O que acontece\n\n | 1\n | 0–1,5\n | campo da URL\n | o modal \"New link\" está aberto; a URL longa é digitada em Geist Mono, com os parâmetros em cinza, e a câmera começa aproximada (116%) e recua\n\n | 2\n | 1,5–2,0\n | campo → pílula\n | a URL se espreme em direção ao cursor e borra; a caixa encolhe e escurece até a pílula preta `dub.sh/launch`; o cursor clica; a pílula agacha antes do drop\n\n | 3\n | 2,0–4,4\n | pílula no topo\n | **drop:** a pílula estala com mola e sobe; anéis laranja saem dela; o mapa de pontos é revelado por uma onda de 2.300 px/s com um brilho laranja na frente; o contador gigante roda até 1.284.093 enquanto os cliques chegam das cidades em arcos (de 9 para 28 cliques/s); o painel de países enche as barras\n\n | 4\n | 4,46–7,3\n | pílula → card\n | a pílula cresce com mola até virar o card de Analytics e vira o chip do card; o número do contador voa para a aba Clicks; a linha azul se desenha com a ponta viva e a dica de data; o cursor clica em Leads (5,42 s) e em Sales (5,92 s); os avisos de lead e de venda estalam; em 6,25 s a linha vira o funil azul → roxo → verde-água com as porcentagens\n\n | 5\n | 7,4–9,6\n | card → círculo\n | o card encolhe com o conteúdo junto e vira o círculo preto com o logo no tempo forte de 7,88 s; 28 avatares brotam em três anéis; \"Grow with partners.\" entra em degradê roxo → laranja; chips verdes de comissão estalam nos avatares; o total pago rola até $4,218,960\n\n | 6\n | 9,62–11,34\n | círculo → painel\n | o círculo abre no painel das funções; sete palavras trocam a cada ~0,25 s, cada cor nascendo em círculo a partir do ícone, com soco de câmera; a última, \"One platform.\", cai em 11,34 s\n\n | 7\n | 11,22–13,8\n | painel → logo\n | respiro: a pausa do baixo; a partir de 12,25 s o painel encolhe devagar até o tamanho do logo, e a marca aparece em 12,9 s\n\n | 8\n | 13,8–16,0\n | logo\n | **volta da música:** impacto e anéis; o wordmark entra (14,0 s), \"Turn clicks into revenue.\" sobe desfocando para nítido (14,28 s), os botões estalam (14,76 e 14,86 s), o cursor clica em \"Start for free\" (15,22 s) e a câmera fecha em 103%\n\n## Momentos para a trilha\n\n- 0–1,9 s: música sem o grave, sob a digitação (passa-alta em 180 Hz).\n\n- 2,0 s: drop, com o grave entrando; impacto em três camadas.\n\n- 7,88 s: emenda da edição de DJ escondida por um efeito reverso com pico no ponto; entra o círculo dos parceiros.\n\n- 11,22–13,80 s: pausa do baixo da própria música, usada como respiro antes do logo.\n\n- 13,80 s: volta da música; fecho com fade final a partir de 15,55 s.\n\nOs tempos de cada efeito estão em `audio/sfx-lista.json`; as batidas medidas, em `audio/link-beats.json`."
41
+ },
42
+ {
43
+ "titulo": "A identidade visual",
44
+ "texto": "**Resumo:** a identidade é a do produto real da Dub, tirada do kit de marca e das capturas oficiais: fundo claro com grade, tinta quase preta, Satoshi nos títulos, Inter na interface e Geist Mono nos rótulos, mais uma cor fixa para cada métrica e para cada linha do produto. O movimento é de lançamento de SaaS: curvas que arrancam e assentam fortes, mola curta no que chega, uma forma só que se transforma de cena em cena e câmera que nunca para. Os números saem do `hf/index.html` e do `scripts/mixar.py`.\n\n## Fontes\n\n | \n\n | Uso\n | Fonte\n | Arquivo no pacote\n\n | Títulos, pílula, frases de marca\n | Satoshi (500 e 700)\n | `hf/fonts/Satoshi.woff2`\n\n | Interface e números\n | Inter (100 a 900), com algarismos tabulares nos contadores\n | `hf/fonts/Inter.woff2`\n\n | Rótulos e URL\n | Geist Mono\n | `hf/fonts/GeistMono.woff2`\n\nAs três são as fontes do site da Dub, carregadas por `@font-face`.\n\n## Cores\n\n | \n\n | Token\n | Hex\n | Papel\n\n | Fundo\n | `#FAFAFA`\n | página; grade de 80 px em `#E5E5E5`, apagada nas bordas por máscara radial\n\n | Tinta\n | `#171717`\n | texto, cursor, pílula e círculo (`#0A0A0A`)\n\n | Cliques\n | `#155DFC`\n | linha e aba Clicks\n\n | Leads\n | `#9810FA`\n | aba Leads, aviso de lead\n\n | Vendas\n | `#00D5BE`\n | aba Sales, aviso de venda\n\n | Links\n | `#FB923C`\n | anéis do drop, \"launch\" na pílula, brilho do mapa\n\n | Parceiros\n | `#C084FC`\n | anel dos parceiros\n\n | Pagamentos\n | `#4ADE80`\n | \"Payouts.\", chips de comissão\n\n | Total pago\n | `#16A34A`\n | contador `$4,218,960`\n\nDegradês de texto: \"launch\" em `#FDBA74 → #FB923C → #F97316`; \"partners.\" em `#A855F7 → #D946EF → #F97316`; \"revenue.\" em `#F97316 → #EC4899 → #8B5CF6`. Atrás de tudo, um brilho cônico com as cores das linhas do produto, desfocado em 110 px. \"Conversions.\" usa o degradê das três métricas (`#155DFC → #9810FA → #00D5BE`).\n\n## Componentes\n\n | \n\n | Peça\n | Como é\n\n | Modal \"New link\"\n | cartão branco 1300×330, raio 22, borda `#E5E5E5`, sombra larga e fraca; trilha \"Links › New link\" e \"Draft saved\"\n\n | URL\n | Geist Mono 31 px; nomes dos parâmetros em `#A3A3A3`, valores em tinta; cursor de 3 px sempre aceso\n\n | Pílula\n | preta, logo da Dub branco e `dub.sh/launch` em Satoshi 700 de 56 px\n\n | Odômetro\n | uma tira de 0 a 9 por casa, numa janela de 1,15 em com máscara em degradê de 10% nas bordas; a casa `i` só rola quando as de baixo estão em 9\n\n | Mapa\n | 2.968 pontos de terra do `world-atlas` 110m, com perspectiva falsa (mais estreito em cima); clique = anel na cidade + arco de Bézier até a pílula\n\n | Países\n | painel de vidro branco (86%, desfoque 8 px) com barras `#FFEDD4`\n\n | Card de Analytics\n | 1400×760, raio 28; três abas de 440×128 com bolinha da cor da métrica; linha preta de 4 px sob a aba ativa\n\n | Gráfico → funil\n | área com 40 pontos; o funil tem três faixas e pílulas brancas de porcentagem\n\n | Avisos\n | cartões brancos com ícone na cor da métrica, entrando em cascata\n\n | Parceiros\n | 28 avatares em três elipses ao redor do círculo, entrando por anel com 0,028 s entre cada um\n\n | Painel das funções\n | 1780×960, raio 44; ícone + palavra grande; \"Deep links.\" só com contorno, \"Payouts.\" com brilho verde\n\n | Fecho\n | logo 150 px, wordmark, botões \"Start for free\" (preto) e \"Get a demo\" (branco com borda), `DUB.CO` em Geist Mono cinza\n\n## Transições\n\nA forma herói muda de tamanho, raio e cor de uma cena para a outra, sempre com mola: campo da URL (1180×80) → pílula (540×112) → card (1400×760) → círculo (200×200) → painel (1780×960) → logo (150×150). O conteúdo de dentro acompanha a escala da forma. No painel, cada palavra nova traz a sua cor num círculo que cresce a partir do ícone (máscara radial com borda suavizada de 90 px, 0,17 s). Não há crossfade.\n\n## Curvas e molas\n\n | \n\n | Nome\n | Curva\n | Uso\n\n | SAAS\n | `cubic-bezier(.86, 0, .07, 1)`\n | trocas grandes da forma e câmera nas viradas\n\n | CUR\n | `cubic-bezier(.45, 0, .15, 1)`\n | cursor\n\n | IN_OUT\n | `cubic-bezier(.33, 0, .67, 1)`\n | câmera entre chaves, funil\n\n | OUT\n | `cubic-bezier(.16, 1, .3, 1)`\n | entradas rápidas\n\n- **Mola padrão:** linear de 0 a 1 em 0,25 s e depois inércia (amplitude 0,05, frequência 2, decaimento 4), um overshoot de ~112%. As trocas da forma usam a mesma mola com tempos de 0,18 a 0,7 s; a mais lenta é a do painel virando logo, no respiro.\n\n- **Antecipação:** a pílula agacha 6% nos 0,12 s antes do drop e estala com mola em 2,0 s.\n\n- **Motion blur:** render a 240 qps e `tmix=frames=4:weights=1 1 1 1` para 60 qps.\n\n## Câmera\n\nUma lista de chaves `[tempo, x, y, escala, rotação, curva]` leva a câmera de 116% no começo a 100% no drop, aproxima em 4,3 s e 9,8 s, abre para 94% quando chega o círculo dos parceiros (7,88 s), aproxima de novo no respiro (até 109% em 12,3 s) e termina em 103%. Por cima das chaves, sempre: deriva em ruído suave de ±7 px em x, ±5 px em y, ±0,25° de rotação e ±0,4% de escala. A cada palavra do painel, um soco curto de escala (até +3,5%, em 0,24 s).\n\n## Trilha\n\n | \n\n | Item\n | Valor\n\n | Música\n | \"LINK\" (Icy Narco), playlist internacional; só o instrumental, separado pelo Demucs (`htdemucs --two-stems=vocals`), porque a faixa tem letra de rap\n\n | Tempo\n | 122 BPM; compasso de 1,97 s\n\n | Edição\n | trechos 17,74–25,62 s e 29,56 s em diante da música, cortando 2 compassos e emendando com crossfade de 40 ms\n\n | Abertura\n | até 1,9 s, a música sem o grave (passa-alta em 180 Hz); o grave entra no drop\n\n | **Drop**\n | **2,00 s**, no estalo da pílula\n\n | Respiro\n | pausa do baixo da música em 11,22–13,80 s\n\n | Fecho\n | volta em 13,80 s; fade a partir de 15,55 s\n\n## Sound design e mix\n\n | \n\n | Ação na tela\n | Efeito\n\n | URL digitada\n | digitação + tecla por caractere, com tom variando e passa-baixa de 6,5–7 kHz\n\n | URL se espreme, painéis entram\n | whoosh curto\n\n | clique do cursor\n | clique de mouse\n\n | drop e volta\n | impacto + boom cinematográfico + pop (três camadas), riser antes\n\n | contador rolando / assentando\n | contador rolando / tique\n\n | cliques no mapa\n | pop leve, tom subindo em seis passos\n\n | avisos de lead e venda\n | notificação\n\n | linha vira funil\n | whoosh grave\n\n | emenda da música\n | efeito reverso com pico no ponto (7,88 s)\n\n | avatares brotando\n | bolhas estourando\n\n | comissões pagas\n | notificação leve, tom variando\n\n | cada palavra do painel\n | whoosh curto + clique\n\n | botões e clique final\n | pop, clique, sucesso\n\n- 104 eventos, cada um em `at = evento − pico do arquivo`; a lista completa está em `audio/sfx-lista.json`.\n\n- Trilha nivelada a −19 LUFS antes da soma (a música chega masterizada a ~−8 LUFS e esconde os efeitos).\n\n- Efeitos com ganho ×3 (+9,5 dB), medidos 6 a 9 dB abaixo da trilha no mesmo trecho.\n\n- Final com `loudnorm` em duas passagens: −14,0 LUFS, pico −1,5 dBTP.\n\n## O que é \"humano\" neste vídeo\n\n- A câmera deriva o tempo todo, inclusive no respiro.\n\n- A pílula agacha antes de estalar no drop, como quem pega impulso.\n\n- Os cliques no mapa aceleram (de 9 para 28 por segundo), e o contador acompanha.\n\n- O cursor clica nas abas e no botão final; o card responde ao clique.\n\n- O logo chega na pausa da música e o fecho entra com a volta da batida."
45
+ },
46
+ {
47
+ "titulo": "A montagem no HyperFrames",
48
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `hf/index.html`\n | a composição: uma função `render(t)` desenha o quadro inteiro a partir do tempo e é chamada por um único tween de 16 s; nada depende de timer nem de `Math.random` (o acaso vem de um hash com semente)\n\n | `hf/mapa.js`\n | os pontos de terra do mapa, já calculados\n\n | `scripts/mixar.py`\n | monta a trilha (edição de DJ, grave só a partir do drop, nível de −19 LUFS), soma os 104 efeitos em `evento − pico` e faz o `loudnorm` em duas passagens até −14 LUFS\n\n | `scripts/finalizar.sh`\n | junta o render de 240 qps em 60 qps com `tmix` de 4 quadros (motion blur), põe o áudio e monta a comparação com o original\n\n | `scripts/olhar.py`\n | tira quadros avulsos e folhas de contato da composição pelo Playwright, chamando `seek(t)`\n\n | `scripts/mapa_pontos.py`\n | gera os pontos do mapa a partir do `land-110m` (grade de 2,2°, com shapely)\n\n | `scripts/mosaico.py`\n | junta imagens num mosaico com rótulo, para comparar quadros\n\n- **Instale o básico:** Node.js (para o `npx`), ffmpeg e Python 3. As fontes já estão em `hf/fonts/` e o GSAP em `hf/gsap.min.js`, então a composição não busca nada na internet. O `olhar.py` usa o Playwright; o `mapa_pontos.py`, o shapely.\n\n- **Monte a pasta:** deixe `hf/`, `scripts/` e `estudo/` juntos e coloque a pasta `audio/` do pacote ao lado delas. Os scripts procuram `audio/` e `render/` a partir da pasta do projeto.\n\n- **Veja a composição:** dentro de `hf/`, rode `npx --yes hyperframes@0.8.144 preview`. Para um quadro específico, abra o `index.html` no navegador e chame `seek(8.5)` no console.\n\n- **Refaça o som** (opcional): no `scripts/mixar.py`, troque os caminhos `N` (efeitos nivelados) e `P` (efeitos premium) pelas pastas `audio/sfx/nivelados` e `audio/sfx/premium` e rode `python scripts/mixar.py`. A saída é `audio/mix.wav`.\n\n- **Render:** da pasta do projeto, rode `npx --yes hyperframes@0.8.144 render hf --fps 240 --quality high --output render/bruto-240.mp4` e depois `bash scripts/finalizar.sh`. Para a comparação, aponte a variável `REF` do script para o vídeo original em `referencias/original/`.\n\n**Pegadinhas:** com a máquina carregada, o GSAP pelo CDN falha; por isso ele vai local. Meça o DOM só na montagem (`build`), nunca dentro do `render(t)`. O motion blur por `tmix` desenha degraus em formas que crescem muito rápido: as revelações em círculo usam borda suavizada de 90 px. Na pílula, a cor só troca depois de 45% do caminho; antes disso ela passa por um cinza feio."
49
+ },
50
+ {
51
+ "titulo": "As decisões de direção",
52
+ "texto": "- **A Dub de verdade.** Em vez da home, o ponto de partida foi o kit de marca (`/brand`) e as capturas oficiais do produto: fundo `#FAFAFA` com grade `#E5E5E5`, tinta `#171717`, Satoshi nos títulos, Inter na interface, Geist Mono nos rótulos. As cores de cliques, leads e vendas foram medidas nos pixels das capturas.\n\n- **Uma forma do começo ao fim.** A caixa da URL vira a pílula, a pílula vira o chip do card, o card vira o círculo dos parceiros, o círculo vira o painel e o painel vira o logo. O original cortava do globo para o card e deixava um quadro cinza em 1,5 s.\n\n- **Um gráfico que vira outro.** A área do gráfico de linha se transforma no funil de conversão real da Dub, interpolando o contorno de cima e o de baixo na mesma curva; cada terço do eixo ganha a sua cor e as pílulas 100% · 3.8% · 0.12% aparecem.\n\n- **Contador odômetro sem dígito cortado.** Cada casa é uma tira de 0 a 9 numa máscara com degradê nas bordas, e uma casa só rola quando todas as de baixo estão em 9. O número herói mostra os zeros à esquerda em cinza; nas abas do card, eles somem. No fim da contagem, o número voa para a aba Clicks.\n\n- **Palavras sem corte seco.** No painel das funções, a cor nova nasce num círculo que cresce a partir do ícone da palavra, em 0,16 s, com um soco curto de câmera a cada troca.\n\n- **Câmera nunca parada.** As chaves de câmera levam a zoom e posição; por cima, uma deriva lenta mexe posição, rotação e escala o tempo todo.\n\n- **Respiro antes do logo.** A edição da música põe a pausa do baixo entre 11,22 e 13,80 s, justo quando o painel encolhe até o logo; em 13,80 s a música volta com impacto e o fecho entra.\n\n- **Som de interface.** Teclas na digitação da URL, clique na pílula, impacto em três camadas no drop e na volta, contadores, pings dos cliques no mapa, notificações dos avisos, pops dos avatares e um whoosh por palavra.\n\nDetalhes de cores, curvas e som: estilo.md. Cenas por tempo: roteiro.md. Para fazer um vídeo no mesmo estilo: PROMPT.md."
53
+ },
54
+ {
55
+ "titulo": "As versões até o final",
56
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | rascunho\n | render a 30 qps para revisar movimento e tempos\n\n | 1ª mixagem\n | efeitos 10 a 15 dB abaixo da trilha; a revisão com o Gemini não ouviu nenhum\n\n | **final**\n | trilha nivelada a −19 LUFS e efeitos com ganho ×3 (+9,5 dB), 6 a 9 dB abaixo da trilha; a 2ª revisão do Gemini confirmou teclas, riser e drop no tempo e música sem voz\n\nPonto em aberto: o chip `dub.sh/launch` no topo do card ficou sem fundo próprio, detalhe em que o original é melhor."
57
+ }
58
+ ],
59
+ "pacote": [
60
+ {
61
+ "pasta": "projeto/",
62
+ "conteudo": "`hf/index.html` (a composição inteira), `hf/mapa.js` (os 2.968 pontos do mapa-múndi), `hf/gsap.min.js` local, as fontes Satoshi, Inter e Geist Mono em `hf/fonts/`, logo e wordmark oficiais em SVG, os 28 avatares dos parceiros, o `hf/BRIEF.md`, os scripts em `scripts/` e a base do mapa (`estudo/land-110m.json`)"
63
+ },
64
+ {
65
+ "pasta": "audio/",
66
+ "conteudo": "mix final (`mix.wav`), instrumental da música separado pelo Demucs, batidas medidas (`link-beats.json`), a lista dos 104 efeitos com tempo, volume, tom e filtro (`sfx-lista.json`) e os arquivos dos efeitos em `audio/sfx/`"
67
+ },
68
+ {
69
+ "pasta": "referencias/",
70
+ "conteudo": "o vídeo original, o prompt original, as folhas de contato do original, a comparação lado a lado (original em cima, recriação embaixo), o `APRENDIZADOS.md` do projeto, folhas a 4 qps, a análise do áudio do original, o kit de marca da Dub (logo, wordmark e 9 capturas oficiais do produto) e o `links.md`"
71
+ },
72
+ {
73
+ "pasta": "render.mp4",
74
+ "conteudo": "o vídeo final"
75
+ },
76
+ {
77
+ "pasta": "hf/index.html",
78
+ "conteudo": "a composição: uma função `render(t)` desenha o quadro inteiro a partir do tempo e é chamada por um único tween de 16 s; nada depende de timer nem de `Math.random` (o acaso vem de um hash com semente)"
79
+ },
80
+ {
81
+ "pasta": "hf/mapa.js",
82
+ "conteudo": "os pontos de terra do mapa, já calculados"
83
+ },
84
+ {
85
+ "pasta": "scripts/mixar.py",
86
+ "conteudo": "monta a trilha (edição de DJ, grave só a partir do drop, nível de −19 LUFS), soma os 104 efeitos em `evento − pico` e faz o `loudnorm` em duas passagens até −14 LUFS"
87
+ },
88
+ {
89
+ "pasta": "scripts/finalizar.sh",
90
+ "conteudo": "junta o render de 240 qps em 60 qps com `tmix` de 4 quadros (motion blur), põe o áudio e monta a comparação com o original"
91
+ },
92
+ {
93
+ "pasta": "scripts/olhar.py",
94
+ "conteudo": "tira quadros avulsos e folhas de contato da composição pelo Playwright, chamando `seek(t)`"
95
+ },
96
+ {
97
+ "pasta": "scripts/mapa_pontos.py",
98
+ "conteudo": "gera os pontos do mapa a partir do `land-110m` (grade de 2,2°, com shapely)"
99
+ },
100
+ {
101
+ "pasta": "scripts/mosaico.py",
102
+ "conteudo": "junta imagens num mosaico com rótulo, para comparar quadros"
103
+ }
104
+ ],
105
+ "prompt": "Quero um vídeo de lançamento no mesmo estilo do projeto \"Cliques que viram receita\" (lançamento da Dub), que está em 07-videos/projetos/dub/, para o meu produto.\n\nProduto: {{PRODUTO}}\nSite do produto: {{SITE}} (de onde sai a identidade visual)\nO que o produto faz, em uma frase: {{FRASE}}\nFunções que devem aparecer (até 7): {{FUNCOES}}\nFrase final da marca: {{FRASE_FINAL}}\nFormato e duração: {{FORMATO}} (a referência é 16:9 com 16 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: LEIA-ME.md, estilo.md e roteiro.md da pasta dub, e depois o referencias/APRENDIZADOS.md. Abra o projeto/hf/index.html e me explique em poucas linhas como funcionam a função render(t), a forma herói (heroState), a câmera (cam) e o odômetro, e o que você vai reaproveitar.\n\n2. Pesquise a marca de verdade antes de desenhar. Abra o meu site, a página de marca ou de imprensa (/brand, /press) e as capturas oficiais do produto, não só a home. Tire as cores (meça nas capturas, pixel a pixel), as fontes que o site carrega, o logo e o wordmark em SVG. Escreva um BRAND.md com cada valor e a fonte de onde saiu. Se o meu produto for claro, o vídeo é claro; não invente uma versão escura.\n\n3. Monte a história como uma forma só. Proponha a sequência \"forma → forma\" com o que cada uma mostra (ex.: campo de texto → pílula → card com números → círculo → painel das funções → logo) e onde fica o respiro antes do fecho. Cada troca nasce da cena anterior, com mola; nada de crossfade nem de corte que começa do zero. Me mostre a sequência antes de construir.\n\n4. Trilha antes da animação, num subagente: música real que eu ainda não usei, com batida clara. Meça com o beat_this, faça a edição de DJ por compasso para o drop cair na primeira grande transformação e uma pausa da própria música cair no respiro antes do logo. Se a música tiver letra, use só o instrumental (Demucs). Entregue os tempos fortes num arquivo de batidas.\n\n5. Reaproveite a engenharia, troque o conteúdo. Mantenha: a composição como função pura do tempo (render(t) chamado por um único tween, sem timer nem Math.random), o GSAP e as fontes locais, a mola padrão (0,25 s linear + inércia de ~112%), as curvas SAAS e IN_OUT, a câmera com chaves e deriva contínua por cima, o odômetro com máscara e carry correto, o morph de gráfico pelos contornos, a revelação de cor em círculo a partir do ícone e o motion blur por subquadros (240 qps + tmix de 4). Troque: textos, números, cores, fontes, logo, funções e trilha.\n\n6. Som: um efeito para cada elemento que entra, sai ou é clicado, na posição evento − pico do arquivo; mesma ação, mesma família de som, com o tom variando. Nivele a trilha a −19 LUFS antes de somar e dê ganho aos efeitos (comece em ×3), conferindo que eles ficam 6 a 9 dB abaixo da trilha. Final em −14 LUFS com loudnorm em duas passagens.\n\n7. Antes do render completo, me mostre 4 quadros: o primeiro estado da forma, o drop, a cena com mais dados e o fecho. Depois do render, rode o detector de saltos (diferença entre quadros maior que 3× a dos vizinhos), confira se nenhum dígito do contador aparece cortado e se nada fica parado mais de 0,3 s. Em cada movimento, pergunte: está humano ou robotizado? Entregue o vídeo, a ficha do projeto e uma anotação do que aprendeu.",
106
+ "campos": [
107
+ "FORMATO",
108
+ "FRASE",
109
+ "FRASE_FINAL",
110
+ "FUNCOES",
111
+ "PRODUTO",
112
+ "SITE"
113
+ ],
114
+ "fonte": {
115
+ "nome": "Clube do Motion",
116
+ "url": "https://clubedomotion.com/projeto/?id=dub",
117
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
118
+ }
119
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "id": "clube-enxovaly",
3
+ "titulo": "Enxoval peça por peça",
4
+ "categoria": "saas",
5
+ "resumo": "promo de 15,6 s, horizontal, do Enxovaly, um app brasileiro que monta o enxoval do bebê na medida certa. A história vai do excesso de palpites à lista certa: uma parede de ícones com \"Mil listas. Mil palpites.\", o ícone do app que abre no iPhone, a lista que corrige o palpite do grupo (20 bodies viram 6), a checklist tocada item por item, o quarto 3D oficial do app e o quarto que encolhe até virar o símbolo da marca. É uma recriação do \"Enxovaly baby app promo\" de Gabriel Buzzi (@gabrielbuzziv) no prompt-motion.com, feito com o Claude Opus 5.5 no HyperFrames a partir do prompt genérico de showreel. A nossa versão usou a identidade real do site (Fraunces e Nunito, lavanda, símbolo, ícones 3D e o vídeo do quarto), toques reais no iPhone, transições em que cada cena nasce da anterior, câmera sempre viva e uma música real com um compasso por cena.",
6
+ "indicado": "app ou serviço para famílias, maternidade e casa; produto digital que quer mostrar o app sendo usado de verdade num anúncio curto.",
7
+ "estilo": [
8
+ "app no iPhone",
9
+ "lavanda e champanhe",
10
+ "serifada com itálico",
11
+ "ícones 3D",
12
+ "toques reais",
13
+ "delicado",
14
+ "sincronizado no compasso"
15
+ ],
16
+ "ficha": {
17
+ "formato": "1920×1080, 60 qps, 16:9",
18
+ "duracao": "15,6 s (936 quadros), sem narração",
19
+ "motor": "ae",
20
+ "voz": "ver o guia de estilo",
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": "15,6 s (936 quadros), sem narração",
31
+ "Formato": "1920×1080, 60 qps, 16:9",
32
+ "Ferramenta": "HyperFrames (HTML + GSAP), um relógio só: um tween de 0 a 15,6 s chama `render(t)`",
33
+ "Desfoque de movimento": "render a 240 qps e `tmix=frames=4` para 60 qps",
34
+ "Trilha": "\"Riptide\", Vance Joy, trecho de 7,12 a 22,72 s, 103,4 BPM; cada cena dura um compasso (2,42 s)",
35
+ "Som": "82 eventos de efeito, drone e Ping Boom em Dó♯, voz da música 8 dB abaixo entre 3,2 e 12,9 s; −14,2 LUFS integrado, pico −0,9 dB",
36
+ "Referência": "\"Enxovaly baby app promo\", Gabriel Buzzi (@gabrielbuzziv), prompt-motion.com (15 s, 30 qps)"
37
+ },
38
+ "etapas": [
39
+ {
40
+ "titulo": "O roteiro",
41
+ "texto": "**Resumo:** o promo não tem narração; o roteiro é a sequência de seis cenas de um compasso cada, com os tempos do `render(t)` e o texto exato da tela. O fio da história: o excesso de palpites vira a quantidade certa, peça por peça, até o quarto pronto e a marca.\n\n## De onde veio a estrutura\n\nO prompt do original é o genérico de showreel (\"um vídeo de motion de 15 segundos que mostre o motion designer incrível que você é… vá com tudo\"), e o autor usou as telas, a fonte e o logo do próprio app. O original passava por parede de ícones (\"Mil listas. Mil dúvidas.\"), cartões \"Sem exageros.\", iPhone \"Sob medida.\", foto com mira (\"Peça por peça.\"), quarto 3D (\"Com calma e carinho.\") e marca. A nossa versão manteve os títulos e a ordem das ideias, trocou \"Mil dúvidas\" por \"Mil palpites\" para criar um conflito que volta depois e fez cada cena nascer da anterior.\n\n## Cenas por tempo\n\n | \n\n | #\n | Tempo (s)\n | Texto na tela\n | O que acontece\n\n | 1\n | 0–3,20\n | \"Mil listas.\" · \"Mil palpites.\" · balões \"Sogra: compra uns 20 bodies RN\", \"Vizinha: RN nem dá tempo de usar\", \"Grupo do chá: manta? umas 6, no mínimo\"\n | um ícone surge sozinho; a parede de ícones inclinada entra em ondulação a partir do centro e alguns cartões dão a volta; os três balões do grupo chegam em sequência; a parede se desinclina e o ícone do centro fica plano\n\n | 2\n | 3,20–5,62\n | \"Sob medida.\" · \"Conta pra gente sobre o bebê\" · \"QUANDO O BEBÊ NASCE?\" · \"ESTAÇÃO DO NASCIMENTO\" · \"TAMANHOS\" · \"Lia, sua assistente\" · \"Janeiro é verão: vou priorizar tecidos leves.\" · \"Montar meu enxoval\" → \"Montando o enxoval…\" · chips \"Nasce em janeiro\", \"Verão\", \"RN a 12 meses\"\n | **3,20 s, na virada da música:** o cartão gira e mostra o ícone do app, é tocado e abre na tela do iPhone; no onboarding, toque em \"Jan\", o controle de tamanhos é arrastado e a Lia digita a resposta; cada escolha sai do telefone como chip grande; o botão é tocado, carrega e cresce até o cabeçalho da tela inicial (\"Olá, mamãe\", \"Essenciais para o parto\", \"Lista de desejos\", \"Chá de bebê\", \"Suas listas\")\n\n | 3\n | 5,62–8,04\n | \"Sem exageros.\" · \"Body manga curta\" · \"RN a 3 meses · verão\" · \"PALPITE DO GRUPO\" 20 → \"NA MEDIDA CERTA\" 6 \"peças\" · \"Macacão · 4 peças\" · \"Meias · 5 pares\"\n | a lista do app vai para a esquerda e a linha do body sai do telefone como cartão grande; o 20 do palpite é riscado em champanhe, rola até 6 com tremida e pousa com mola; os outros itens entram ao lado\n\n | 4\n | 8,04–10,48\n | \"Peça por peça.\" · \"Para vestir\" · \"0 de 5\" → \"Completo\" · \"0%\" → \"100%\" · itens \"Body manga curta · 6 peças\", \"Macacão · 4 peças\", \"Manta leve · 2 peças\", \"Meias · 5 pares\", \"Touca · 2 peças\"\n | a checklist \"Para vestir\" sai do telefone; cinco checks tocados em meio tempo (8,66 · 8,96 · 9,26 · 9,57 · 9,88 s), cada um com o tom subindo; a câmera empurra até o último check, que abre um círculo com o quarto\n\n | 5\n | 10,48–12,90\n | \"Com calma\" / \"e carinho.\" · \"Enxoval 68%\" → \"100%\"\n | o vídeo oficial do quarto 3D ocupa a tela e recua devagar; a pílula do enxoval sobe de 68% a 100% e o anel fica champanhe com check e faíscas; em 12,28 s o quarto começa a encolher até a cápsula do símbolo\n\n | 6\n | 12,90–15,6\n | símbolo · \"Enxovaly\" · \"Seu enxoval sob medida, **peça por peça**.\" · \"Baixar na App Store\" · \"Disponível no Google Play\" · \"enxovaly.com\"\n | o símbolo entra por cima da cápsula e respira; o nome entra letra por letra (13,16 s); a frase sobe em 13,72 s; os selos das lojas em 14,12 e 14,24 s; o endereço em 14,42 s; o conjunto cresce 3,5% até o fim\n\n## Momentos para a trilha\n\n- 0–3,2 s: só o instrumental, com o drone Atlantic em Dó♯ por baixo e notificações nos balões.\n\n- **3,20 s: virada da música** (o ukulele vira banda) na abertura do app, com whoosh longo, impacto, sino e Ping Boom em Dó♯.\n\n- 3,2–12,9 s: a voz da música entra 8 dB abaixo, com sidechain sob os efeitos.\n\n- 8,66–9,88 s: os cinco checks sobem de tom no ritmo de meio tempo.\n\n- **12,90 s: Ping Boom e impacto** no nascimento do símbolo; o final volta a ser só instrumental."
42
+ },
43
+ {
44
+ "titulo": "A identidade visual",
45
+ "texto": "**Resumo:** identidade real do site do Enxovaly: lavanda em vários tons, champanhe para conquista, Fraunces com itálico na palavra de destaque e Nunito no corpo, símbolo do bebê enrolado e ícones 3D. A abertura é escura e o resto é claro. O movimento roda num relógio só, com molas analíticas, câmera que nunca para e um iPhone crível que é tocado de verdade. Números tirados do `index.html`, do `mixar.py`, do `BRIEF.md` e dos aprendizados do projeto.\n\n## Cores\n\nTokens do CSS do site:\n\n | \n\n | Token\n | Hex\n | Papel\n\n | lavender-primary\n | `#6b4990`\n | cor principal, botão, cabeçalho do app\n\n | lavender-bloom\n | `#a480d0`\n | destaques, degradê das palavras em itálico\n\n | lavender-mist\n | `#e8ddf5`\n | fundos suaves\n\n | lavender-veil\n | `#f4ecfa`\n | fundo claro\n\n | lavender-ink\n | `#322145`\n | texto escuro\n\n | lavender-deep\n | `#4e356a`\n | escuro da abertura\n\n | dawn\n | `#faf6fc`\n | fundo das cenas claras\n\n | champagne\n | `#c2a05b`\n | traço que risca o palpite, anel completo\n\n | taupe\n | `#7e736d`\n | texto secundário\n\n | success\n | `#43a579`\n | checks\n\n## Fontes\n\n | \n\n | Uso\n | Fonte\n\n | Títulos\n | Fraunces, com a segunda palavra em itálico e degradê (\"Mil listas.\", \"Sob medida.\")\n\n | Corpo e interface\n | Nunito\n\n | Barra de status do iPhone\n | SF Pro Semibold\n\nO degradê contínuo atravessa a palavra mesmo com animação letra por letra: cada letra recebe `background-size` igual à largura da palavra e `background-position` igual a menos a posição dela, calculados depois de as fontes carregarem.\n\n## Componentes\n\n | \n\n | Peça\n | Como é\n\n | Parede de ícones\n | grade de 19×13 cartões de 150 px (passo de 176) num plano com `perspective: 1400px`, `rotateX(34°) rotateZ(−11°)`; entra em ondulação a partir do centro (atraso = distância × 0,075 s, com mola) e ~16% dos cartões dão uma volta em X em tempos sorteados por hash\n\n | Saída da parede\n | o plano se desinclina até 0° e avança em Z (o ícone de 150 px vira 210 px), plano e centrado, pronto para virar o ícone do app\n\n | Abertura do app\n | o cartão central gira em Y e mostra o ícone do app; um toque; um retângulo sai do ícone (210 px, raio 48) e cresce até a tela do iPhone (416×880, raio 62) com a mola de interface; o corpo do telefone aparece em volta (opacidade e escala 1,05 → 1); a cena escura sai por uma máscara radial que nasce do ícone\n\n | Botão que vira cabeçalho\n | \"Montar meu enxoval\" → \"Montando o enxoval…\" → o próprio botão cresce até o cabeçalho roxo da tela inicial\n\n | Cartão que sai do telefone\n | o item que a cena explica decola da linha do app e pousa grande fora da tela (escala 0,42 → 1, origem no lado do telefone): chips de 36 px, quantidade de 132 px, checklist de 30 px\n\n | Palpite corrigido\n | \"PALPITE DO GRUPO 20\" é riscado à mão (traço champanhe por `stroke-dashoffset`), o número rola até 6 com tremida, pousa com mola e o rótulo vira \"NA MEDIDA CERTA\"\n\n | Checklist\n | 5 toques em meio tempo (0,30 s); barra e porcentagem correm contínuas até \"Completo\"\n\n | Zoom pelo check\n | a câmera empurra (escala 1 → 1,9) para o último check, que abre um círculo com o vídeo do quarto; o vídeo entra a 1,3× e desacelera para 1,0× enquanto a câmera do render 3D recua\n\n | Quarto que vira símbolo\n | o vídeo encolhe por `clip-path: inset(... round R)` até a cápsula do símbolo (196×288, raio 98), o conteúdo escala para 0,34 junto e o SVG do símbolo entra por cima; a cápsula tem o mesmo contorno do símbolo, então a troca não aparece\n\n | Anel do enxoval\n | pílula \"Enxoval\" com anel que sobe de 68% a 100% e fica champanhe com check\n\n## Molas, câmera e motor\n\n- **Mola padrão analítica:** `1 − e^(−ζωt)(cos ω_d t + ζ/√(1−ζ²) sin ω_d t)` com ζ 0,56 e ω 12 (≈ 12% de passagem, assenta em ~0,6 s). **Mola de interface:** ζ 0,78, ω 13.\n\n- **Câmera:** deriva e wiggle (±10 px, ±0,25°) o tempo todo; empurrão de 3,5% na cena final.\n\n- **Telefone:** flutua (y ±7 px, rotação em Y ±1,2°).\n\n- **Motor:** um tween GSAP de 0 a 15,6 s chama `render(t)` no `onUpdate`; molas, deriva, wiggle e letras são funções de `t`.\n\n## Render\n\n240 qps no HyperFrames e `tmix=frames=4` para 60 qps; H.264 CRF 16, BT.709. O vídeo do quarto entrou com keyframe a cada 12 quadros (`-g 12`).\n\n## Trilha\n\n | \n\n | Item\n | Valor\n\n | Música\n | \"Riptide\", Vance Joy, a partir de 7,12 s da faixa\n\n | Tempo\n | 103,4 BPM (beat_this); compasso de 2,42 s\n\n | Estrutura\n | uma cena por compasso: 0 · 3,20 · 5,62 · 8,04 · 10,48 · 12,90 s; a virada do ukulele para a banda cai na abertura do app (3,20 s)\n\n | Voz da música\n | separada com o Demucs; instrumental cheio e voz 8 dB abaixo só entre 3,2 e 12,9 s (abertura e final só instrumental)\n\n | Sidechain\n | até −4 dB pelo envelope dos efeitos\n\n## Sound design e mix\n\n | \n\n | Ação na tela\n | Efeito\n\n | ícones da parede, cartões, chips\n | pops com tom variando, passa-baixa nos pequenos\n\n | balões do grupo\n | notificação, subindo de tom a cada balão\n\n | trocas de cena e voos\n | whoosh curto, longo e grave\n\n | toque na tela\n | clique com passa-baixa de 3,5–4 kHz\n\n | Lia digitando\n | digitação e contador rolando\n\n | palpite riscado e número rolando\n | caneta e contador\n\n | checks\n | clique + pop subindo 0, +2, +4, +5, +7 semitons; sucesso e sino no último\n\n | abertura do app, quarto, marca\n | riser, impacto, sino e Ping Boom em Dó♯; drone Atlantic em Dó♯ na abertura\n\n- 82 eventos em `evento − pico`; cliques, pops e notificações ×1,8, o resto ×1,35.\n\n- **Medido:** antes do loudnorm, música −23,6 e efeitos −21,4 LUFS; sincronia por onsets com erro mediano de 9 ms em 40 eventos.\n\n- **Final:** `loudnorm` em duas passagens; −14,2 LUFS integrado, pico −0,9 dB.\n\n## O que é \"humano\" neste vídeo\n\n- Os toques têm onda e o controle de tamanhos é arrastado, não trocado.\n\n- A assistente Lia digita letra por letra.\n\n- O 20 é riscado à mão antes de rolar até 6.\n\n- O símbolo respira e balança de leve até o último quadro, com faíscas em volta."
46
+ },
47
+ {
48
+ "titulo": "A montagem no HyperFrames",
49
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `hf/index.html`\n | todo o desenho e o movimento: `render(t)` calcula as seis cenas a partir do tempo (comentários `CENA 1` a `CENA 6`), com molas analíticas, deriva, wiggle e letras por máscara; o `build()` mede o ponto do zoom antes de montar a timeline\n\n | `audio/montar.py`\n | `python audio/montar.py <render-240.mp4> final 4`: junta o render com `tmix` para 60 qps, põe o mix e gera a comparação com o original\n\n | `audio/mixar.py`\n | carrega cada efeito com tom, passa-baixa e corte, posiciona em `evento − pico`, monta a música a partir dos stems (instrumental cheio e voz 8 dB abaixo só no meio), faz sidechain de até −4 dB pelo envelope dos efeitos e normaliza em duas passagens\n\n- **Junte as pastas:** copie `audio/` para dentro de `projeto/` (o `montar.py` usa `audio/mix.wav` e grava em `render/`).\n\n- **Instale a SF Pro** como explicado acima.\n\n- **Use uma pasta sem acento.** Com \"ç\" ou acento no caminho, a extração do vídeo do quarto falha no render (`VIDEO_SOURCE_UNRENDERABLE`).\n\n- **Ver:** dentro de `hf/`, rode `npm run dev` (o `package.json` chama o HyperFrames 0.8.144) e abra o endereço que ele imprimir.\n\n- **Som:** no `audio/mixar.py`, aponte `N` para `audio/sfx/nivelados/` e `TON` para `audio/sfx/tonais/` (com a barra no fim) e rode `python audio/mixar.py` (precisa de numpy e soundfile).\n\n- **Render:** `npx hyperframes@0.8.144 render hf --fps 240 --output render/bruto-240.mp4` e depois `python audio/montar.py render/bruto-240.mp4 final 4`. Para a comparação, ajuste o caminho `REF` do `montar.py` para o original em `referencias/original/`.\n\n**Pegadinhas:** medidas do DOM (`getBoundingClientRect`) só depois de aplicar todas as transformações do mesmo instante, e o que depende de outro instante (o ponto do zoom) se mede no `build()`; o retângulo da abertura do app precisa de sombra e borda desde o primeiro quadro e de uma camada própria acima da cena escura, senão some no clarão; a 120 qps com `tmix=2` aparece imagem dupla nos voos rápidos."
50
+ },
51
+ {
52
+ "titulo": "As decisões de direção",
53
+ "texto": "- **A identidade sai do site em minutos.** O HTML do site lista os assets (fontes woff2, símbolo SVG, ícones 3D e até o vídeo 3D do quarto), e o CSS traz os tokens com nome: `lavender-primary #6b4990`, `bloom #a480d0`, `mist #e8ddf5`, `veil #f4ecfa`, `ink #322145`, `champagne #c2a05b`.\n\n- **Uma história com conflito.** \"Mil palpites\" vira três balões de grupo (\"compra uns 20 bodies RN\"), e o 20 volta riscado na cena da quantidade certa, rolando até 6.\n\n- **Cada cena nasce da anterior:** a parede de ícones se desinclina e o ícone escolhido vira o ícone do app; o ícone abre na tela do iPhone como no iOS; o botão \"Montar meu enxoval\" vira o cabeçalho; a linha vira cartão; o último check abre um círculo com o quarto; o quarto encolhe até a cápsula do símbolo.\n\n- **Legível no celular:** o item que a cena explica sai da tela do aparelho e pousa grande ao lado (escala 0,42 → 1), enquanto a tela do telefone mostra a mesma coisa.\n\n- **O app é usado de verdade:** 9 toques com onda, controle de tamanhos arrastado, a assistente Lia digitando, notificação do iOS e cinco checks tocados em meio tempo.\n\n- **Um compasso por cena:** os tempos fortes da música caem em 0,76 · 3,20 · 5,62 · 8,04 · 10,48 · 12,90 s, e a virada da música, quando o ukulele vira banda, cai na abertura do app.\n\n- **Nada parado:** câmera com deriva e wiggle o tempo todo, telefone flutuando e cartões balançando.\n\n- **Checklist musical:** cada check com o pop subindo de tom (0, +2, +4, +5, +7 semitons), e a barra e a porcentagem correm sem saltos.\n\nDetalhes de cores, molas e som: estilo.md. Cenas por tempo e texto na tela: roteiro.md. Para fazer um promo no mesmo estilo com o seu app: PROMPT.md."
54
+ },
55
+ {
56
+ "titulo": "As versões até o final",
57
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | v2\n | render a 120 qps com `tmix=2` (imagem dupla nos voos); o detector achou 2 saltos (3,07 s, ícone sumindo antes do retângulo do app; 9,92 s, troca do ponto de origem da câmera)\n\n | v3\n | os dois saltos corrigidos; o retângulo do app ainda ficava por baixo da cena escura e sumia no clarão\n\n | **v4**\n | o retângulo da abertura numa camada própria acima e render a 240 qps com `tmix=4`; nenhum salto nem quadro vazio\n\nO primeiro mix levou nota 4,5 de 10 do Gemini, com os efeitos enterrados sob a voz da música. Separar a voz com o Demucs e baixá-la 8 dB resolveu: na escuta seguinte, o equilíbrio ficou bom e os efeitos audíveis e sincronizados."
58
+ }
59
+ ],
60
+ "pacote": [
61
+ {
62
+ "pasta": "projeto/",
63
+ "conteudo": "`hf/index.html` (a composição inteira), `hf/BRIEF.md`, `hf/gsap.min.js`, `hf/hyperframes.json`, `hf/meta.json`, `hf/package.json`, `hf/assets/` (fontes Fraunces, Fraunces itálica e Nunito, símbolo em SVG, três ícones 3D e o trecho do vídeo oficial do quarto em `nursery.mp4`) e `audio/montar.py`"
64
+ },
65
+ {
66
+ "pasta": "audio/",
67
+ "conteudo": "`mixar.py` (os 82 eventos, stems, sidechain e loudnorm), a música, as batidas medidas, a voz e o instrumental separados pelo Demucs (`stems/`), as trilhas só de música e só de efeitos, o mix final e `sfx/` com os 33 arquivos usados (o drone vem só com os 6 s iniciais, que é o trecho que o script usa)"
68
+ },
69
+ {
70
+ "pasta": "referencias/",
71
+ "conteudo": "o vídeo original, o prompt original, as folhas de contato dele a 4 qps e a comparação original × nossa (vídeo e 5 pares de quadros)"
72
+ },
73
+ {
74
+ "pasta": "render.mp4",
75
+ "conteudo": "o promo final"
76
+ },
77
+ {
78
+ "pasta": "hf/index.html",
79
+ "conteudo": "todo o desenho e o movimento: `render(t)` calcula as seis cenas a partir do tempo (comentários `CENA 1` a `CENA 6`), com molas analíticas, deriva, wiggle e letras por máscara; o `build()` mede o ponto do zoom antes de montar a timeline"
80
+ },
81
+ {
82
+ "pasta": "audio/montar.py",
83
+ "conteudo": "`python audio/montar.py <render-240.mp4> final 4`: junta o render com `tmix` para 60 qps, põe o mix e gera a comparação com o original"
84
+ },
85
+ {
86
+ "pasta": "audio/mixar.py",
87
+ "conteudo": "carrega cada efeito com tom, passa-baixa e corte, posiciona em `evento − pico`, monta a música a partir dos stems (instrumental cheio e voz 8 dB abaixo só no meio), faz sidechain de até −4 dB pelo envelope dos efeitos e normaliza em duas passagens"
88
+ }
89
+ ],
90
+ "prompt": "Quero um promo curto do meu app no mesmo método do projeto \"Enxoval peça por peça\" (Enxovaly), que está em 07-videos/projetos/enxovaly/.\n\nApp e para quem ele é: {{APP}}\nSite oficial (fontes, cores, símbolo, ícones, telas, vídeos do produto): {{SITE}}\nO problema que o app resolve, como as pessoas falam dele (ex.: \"mil palpites\"): {{CONFLITO}}\nAs telas e ações principais do app: {{TELAS}}\nChamada final (lojas, site): {{CHAMADA}}\nDuração: {{DURACAO}} (a referência tem 15,6 s) · Formato: {{FORMATO}} (a referência é 1920×1080)\n(Se algum desses estiver vazio ou com as chaves, me pergunte antes de começar.)\n\n1. Estude o projeto antes de propor qualquer coisa. Leia LEIA-ME.md, estilo.md e roteiro.md e veja o original em referencias/original/ e os pares de comparação. Depois abra projeto/hf/index.html e entenda render(t), as molas analíticas, a parede de ícones, a abertura do app, o botão que vira cabeçalho, o cartão que sai do telefone, o palpite riscado e o zoom pelo check. Leia também audio/mixar.py e audio/montar.py. Me explique em poucas linhas o que você vai reaproveitar.\n\n2. Tire a identidade do site: rode curl no HTML, liste os /assets (fontes woff2, símbolo SVG, ícones, vídeos do produto) e pegue os tokens de cor com nome no CSS. Se houver vídeo oficial com texto queimado, veja numa folha a 8 qps e use só os trechos limpos.\n\n3. Monte a história com um conflito que volta resolvido (na referência, o \"compra uns 20 bodies\" do grupo volta riscado e vira 6). Escreva o roteiro de cenas com o texto exato da tela e me mostre antes de codar. Títulos curtos com a segunda palavra em destaque.\n\n4. Escolha uma música real das minhas playlists, meça com o beat_this e faça cada cena durar um compasso, com a virada da música na entrada do app. Se a música tiver voz, separe com o Demucs e deixe a voz 8 dB abaixo só no meio.\n\n5. Construa no HyperFrames copiando o projeto, sem editar o original. Mantenha: um relógio só chamando render(t); mola padrão ζ 0,56 ω 12 e mola de interface ζ 0,78 ω 13; câmera com deriva e wiggle; telefone flutuando; abertura do app como no iOS (o ícone vira a tela, o corpo do telefone aparece em volta, a cena anterior sai por máscara radial a partir do ícone); toques com onda; o item que a cena explica saindo do telefone em tamanho grande; cada cena nascendo de um elemento da anterior; a marca nascendo de uma forma igual ao contorno do símbolo. Troque: textos, telas, ícones, vídeo, cores, fontes e símbolo.\n\n6. Som num subagente: um efeito por elemento em evento − pico, mesma família para a mesma ação, sequência de checks subindo de tom (0, +2, +4, +5, +7), notas tonais no tom da música na abertura do app e na marca, sidechain da música sob os efeitos. Meça a trilha só de música e a só de efeitos antes do loudnorm a −14 LUFS e confira a sincronia por onsets.\n\n7. Render a 240 qps e python audio/montar.py <render> final 4 (tmix para 60 qps). Procure quadro com salto e quadro vazio depois de todo render, confira a legibilidade no celular (texto de interface com pelo menos ~22 px) e revise com uma IA que assista com áudio, conferindo cada ponto nos quadros antes de mexer. Entregue o MP4, a composição editável e uma anotação.",
91
+ "campos": [
92
+ "APP",
93
+ "CHAMADA",
94
+ "CONFLITO",
95
+ "DURACAO",
96
+ "FORMATO",
97
+ "SITE",
98
+ "TELAS"
99
+ ],
100
+ "fonte": {
101
+ "nome": "Clube do Motion",
102
+ "url": "https://clubedomotion.com/projeto/?id=enxovaly",
103
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
104
+ }
105
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "id": "clube-fecha7",
3
+ "titulo": "A clínica fecha às 7",
4
+ "categoria": "produto",
5
+ "resumo": "reel narrado de 51 s para dona de clínica de estética, sobre as mensagens que chegam depois que a clínica fecha. Começa no escuro, com o relógio passando das 19h e as notificações se acumulando; vira para o claro e mostra, dentro de um celular, a Lu (a atendente de IA) aprendendo a clínica, respondendo uma cliente às 23:40, entregando o resumo da manhã e somando 47 agendamentos na semana. As telas do app foram desenhadas em HTML, capturadas em alta resolução e animadas no After Effects. A clínica, as clientes e os números são de demonstração.",
6
+ "indicado": "empresa que vende um app, um sistema ou um serviço de atendimento e quer mostrar o produto funcionando no dia a dia do cliente, do problema ao resultado.",
7
+ "estilo": [
8
+ "interface de app",
9
+ "celular com câmera",
10
+ "problema no escuro",
11
+ "virada para o claro",
12
+ "preto e lime",
13
+ "Space Grotesk",
14
+ "contador animado",
15
+ "trilha neo-soul."
16
+ ],
17
+ "ficha": {
18
+ "formato": "projeto em 1080×1920, 30 qps, 9:16; o vídeo final do pacote é a cópia publicada no Instagram (720×1280)",
19
+ "duracao": "51 s; a voz entra em 0,4 s",
20
+ "motor": "ae",
21
+ "voz": "voz clonada na ElevenLabs (Eleven v4), seis parágrafos juntados com 0,22 s e acelerados a 1,2× (48,7 s)",
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": "51 s; a voz entra em 0,4 s",
32
+ "Formato": "projeto em 1080×1920, 30 qps, 9:16; o vídeo final do pacote é a cópia publicada no Instagram (720×1280)",
33
+ "Voz": "voz clonada na ElevenLabs (Eleven v4), seis parágrafos juntados com 0,22 s e acelerados a 1,2× (48,7 s)",
34
+ "Ferramenta": "After Effects, montado por listas de operações geradas em Python e aplicadas pela ponte MCP; telas do app em HTML",
35
+ "Trilha": "composta para o vídeo na ElevenLabs Music: neo-soul brasileiro com toque de bossa, 100 BPM, seis seções",
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 reel exatamente como foi enviada à voz clonada (6 parágrafos), como ela foi montada e as cenas por tempo, no tempo do vídeo (a voz entra em 0,4 s). Gancho: \"Sua clínica fecha às sete da noite, só que é justamente à noite que a cliente pega o celular pra perguntar preço e pedir horário.\"\n\n## Como a fala foi feita\n\n- **Voz:** ElevenLabs, Eleven v4, um parágrafo por arquivo (estabilidade 0,52, similaridade 0,73, velocidade 1,05). Os pedidos estão em `audio/p1.json` a `p6.json`.\n\n- **Montagem:** parágrafos juntados com 0,22 s de pausa e acelerados a 1,2× numa passada só (48,7 s). A voz entra em 0,4 s do vídeo.\n\n- **Tempos das palavras:** `audio/words.json`, do faster-whisper large-v3, no tempo da narração acelerada (some 0,4 s para ter o tempo do vídeo).\n\n- **Pronúncia:** a sigla da agência foi escrita como se fala (\"tê dê á\"); números por extenso (\"sete\", \"onze e quarenta\", \"nove\", \"três\").\n\n## A fala, verbatim (texto enviado à voz)\n\n- Sua clínica fecha às sete da noite, só que é justamente à noite que a cliente pega o celular pra perguntar preço e pedir horário. Quando alguém responde no outro dia, muitas vezes ela já marcou em outro lugar.\n\n- Agora imagina a Lu atendendo esse WhatsApp. Você conecta o número da clínica, ensina os tratamentos, os preços e as regras que valem aí dentro, e ela começa a trabalhar.\n\n- Onze e quarenta da noite, a Carla pergunta do pacote de microagulhamento. A Lu responde na hora, com o preço certo, oferece um horário na quinta e já deixa marcado.\n\n- De manhã, você abre o app e vê o que aconteceu enquanto dormia: nove conversas atendidas e três horários marcados. O que foge das suas regras, como um orçamento especial pra noiva, a Lu não inventa e deixa separado pra você responder.\n\n- Os horários já caem na sua agenda, e no fim da semana você vê quanto ela agendou sem ninguém da equipe parar o atendimento.\n\n- Esse é só um exemplo do que a tê dê á monta sob medida pro seu negócio, depois de entender como ele funciona.\n\n## Cenas por tempo (tempo do vídeo)\n\n | \n\n | Tempo (s)\n | Fala\n | Legenda no topo\n | Tela\n\n | 0–10\n | \"Sua clínica fecha às sete da noite… já marcou em outro lugar.\"\n | \"A clínica fechou às 19h.\" → \"As mensagens continuaram chegando.\"\n | noite escura; o relógio corre de 19:00 a 23:40; quatro notificações do WhatsApp chegam (20:13, 21:13, 21:40, 22:33) e apagam sem resposta\n\n | 10–18,4\n | \"Agora imagina a Lu atendendo esse WhatsApp… e ela começa a trabalhar.\"\n | \"A Lu aprende a sua clínica.\"\n | um círculo claro cobre a tela; o celular sobe inclinado e assenta; \"Oi, eu sou a Lu\" com o anel lime pulsando; a lista \"A Lu já conhece a sua clínica\" ganha check em WhatsApp, Tratamentos, Preços, Regras e Agenda, cada um na palavra dita; a chave \"Ligar a Lu\" liga\n\n | 18,4–26,3\n | \"Onze e quarenta da noite… e já deixa marcado.\"\n | \"Às 23:40, resposta na hora.\"\n | empurrão para o WhatsApp da Clínica Lumière; Carla: \"Oi! Quanto fica o pacote de microagulhamento?\"; a Lu responde com o preço do pacote de 4 sessões e o parcelamento, oferece quinta às 15h ou sexta às 10h; Carla escolhe quinta; \"Prontinho, marcado\"\n\n | 26,3–38,2\n | \"De manhã, você abre o app… deixa separado pra você responder.\"\n | \"Enquanto você dormia.\" → \"O que foge da regra fica pra você.\"\n | tela Hoje, \"Bom dia, Mariana\"; a câmera aproxima o cartão escuro \"A Lu atendeu a noite toda\": 9 conversas e 3 horários marcados contando; depois desce até \"Precisa de você\", com o orçamento para noiva da Patrícia em destaque e o botão \"Responder\" pulsando\n\n | 38,2–43,9\n | \"Os horários já caem na sua agenda… parar o atendimento.\"\n | \"Direto na agenda.\" → \"47 agendamentos em 7 dias.\"\n | agenda com o horário da Carla na quinta às 15h e o selo \"Marcado pela Lu\"; empurrão para Resultados, com o 47 contando a partir do zero e o gráfico da semana\n\n | 43,9–51\n | \"Esse é só um exemplo do que a tê dê á monta sob medida… como ele funciona.\"\n | —\n | o celular vai para a direita, inclinado; entram o logo da agência, o selo \"TDA Agent\", a frase \"IA que trabalha do jeito da sua empresa.\" e o botão lime \"Quero isso na minha empresa\"; o cursor clica em 47,6 s; rodapé \"Demonstração com dados ilustrativos.\"\n\n## Momentos para a trilha\n\n- 0–10 s: noite, só Rhodes, pad e tique-taque, sem bateria.\n\n- 10 s: a virada para o claro traz o violão e o primeiro tempo quente.\n\n- 18,4 s: o groove entra com a conversa.\n\n- 40 s: subida com palmas no resultado; 44 s: fecho que resolve num acorde maior.\n\nOs nomes da clínica, da dona e das clientes são fictícios."
43
+ },
44
+ {
45
+ "titulo": "A identidade visual",
46
+ "texto": "**Resumo:** duas metades de cor. A noite é preta, com relógio e notificações escuras; o dia é claro, com o app dentro de um celular preto. As telas misturam a identidade da agência (preto, lime, Space Grotesk) com a de uma clínica premium (champanhe, nude, rosé, serifa itálica). Uma câmera presa ao celular faz todos os movimentos, com easing de influência 70%. Trilha neo-soul composta em seis seções, 9 dB abaixo da voz. Números tirados de `ops_main.py`, `ops_telas.py`, `telas.html` e `mixar.py`.\n\n## Fontes\n\n | \n\n | Uso\n | Fonte\n | Onde baixar\n\n | Legendas do topo, números, botões e frase da marca\n | Space Grotesk (SemiBold e Bold)\n | Google Fonts\n\n | Corpo das telas e rodapé\n | Inter (400 a 800)\n | Google Fonts\n\n | Marca da clínica de demonstração\n | Cormorant Garamond 500 itálico\n | Google Fonts\n\n## Cores\n\n## Telas do app (de `telas/telas.html`)\n\n | \n\n | Token\n | Hex\n | Uso\n\n | Preto\n | `#0A0A0A`\n | botões, avatar da Lu, cartão \"Enquanto você dormia\", celular\n\n | Grafite\n | `#1F1F1F`\n | superfícies escuras\n\n | **Lime**\n | **`#A3E635`**\n | destaque, checks, contorno que acende, botão final\n\n | Lime escuro\n | `#4D7C0F`\n | texto lime sobre claro\n\n | Off-white\n | `#F4F4F2`\n | fundo claro do vídeo\n\n | Champanhe\n | `#F6F0EA`\n | fundo do onboarding\n\n | Creme\n | `#FBF8F4`\n | fundo das telas\n\n | Nude\n | `#E9D6CA`\n | halos em volta da Lu\n\n | Rosé / rosé escuro\n | `#B9877A` / `#8C5B4F`\n | marca da clínica, palavra em itálico\n\n | Tinta 1, 2 e 3\n | `#141414`, `#5E5A56`, `#9A948E`\n | textos\n\n | WhatsApp\n | bolha enviada `#D9FDD3`, tique azul `#53BDEB`\n | as cores do app real\n\n## Noite e celular\n\n | \n\n | Elemento\n | Valor\n\n | Fundo da noite\n | preto `#0A0A0A` com degradê radial, do azul quase preto `#0b1726` no alto para o preto\n\n | Notificação\n | cartão `#1c1e22`, 920×168, raio 44, contorno de 2 px, ícone verde do WhatsApp\n\n | Corpo do celular\n | 1230×2592, arredondamento 186, `#111418`, contorno `#2a2f36` de 6 px, botões laterais na mesma cor\n\n | Tela do celular\n | 1170×2532, arredondamento 150, como track matte das telas\n\n | Sombra do celular\n | Drop Shadow com opacidade 70 (de 255), distância 60, suavidade 160\n\n## Componentes\n\n- **Relógio por slider:** um null `CONTROLES` com o slider \"Relogio - minutos apos 19h\"; o texto lê o slider por expressão (19 + minutos ÷ 60). O slider vai de 0 a 280 (19:00 → 23:40) entre 0,6 e 9 s, com chaves lineares, para os horários das notificações (20:13, 21:13, 21:40 e 22:33) baterem com o relógio quando elas aparecem.\n\n- **Notificações escuras** com nome, mensagem e hora; entram de 70 px acima, com escala 94 → 100, e apagam para 40% entre 8,7 e 9,1 s.\n\n- **Virada para o claro:** uma elipse de 3900 px na cor off-white cresce de 0 a 100% em 0,6 s e cobre os cantos da tela.\n\n- **Celular nativo** (forma, não imagem) com as telas dentro; troca de tela pelo empurrão do iOS em 0,45 s (a que entra vai de x 1755 a 585; a que sai, de 585 a 235).\n\n- **Onboarding da Lu:** avatar preto com a letra em lime e um anel lime que pulsa duas vezes (escala 100 → 150, opacidade 90 → 0); cinco itens (WhatsApp, Tratamentos, Preços, Regras, Agenda) ganham check na palavra dita; a chave \"Ligar a Lu\" liga no fim.\n\n- **WhatsApp simulado:** bolhas em PNG, filhas de um null `Rolagem` que sobe para a última bolha encostar no rodapé; \"digitando\" entre as respostas.\n\n- **Cartão escuro \"Enquanto você dormia\"** com contorno lime que acende, e os números 9 e 3 contando.\n\n- **Pendência em destaque:** o card da Patrícia (\"Orçamento para noiva\") ganha contorno lime e o botão \"Responder\" pulsa.\n\n- **Contador do 47:** null com sliders \"Valor final\" e \"Progresso %\"; o texto é `Math.round(final × progresso ÷ 100)`.\n\n- **Selo \"Marcado pela Lu\"** que acende na agenda.\n\n- **Fecho:** celular à direita, a 46%, inclinado 12°; à esquerda, logo da agência, selo pílula preta \"TDA Agent\" com texto lime, frase \"IA que trabalha do jeito da sua empresa.\" e botão lime \"Quero isso na minha empresa\"; rodapé \"Demonstração com dados ilustrativos.\"\n\n- **Cursor:** seta preta com contorno branco de 4 px, a 130%, que vem de baixo à direita em 0,5 s e clica.\n\n## Câmera\n\nO `Celular` é filho do null `RIG Celular (camera)`, que anima posição, escala e rotação. Para centralizar um elemento da tela: `posição = alvo − escala × deslocamento do elemento em relação ao centro do celular`.\n\n | \n\n | Tempo (s)\n | Posição\n | Escala\n | Momento\n\n | 10,3 → 11,1\n | (540, 2750) → (540, 1180)\n | 53%\n | o celular sobe; rotação 12° → 0\n\n | 13,2\n | (540, 1143)\n | 60%\n | lista do onboarding\n\n | 17,5\n | (540, 556)\n | 70%\n | a chave \"Ligar a Lu\"\n\n | 18,95\n | (540, 980)\n | 62%\n | conversa no WhatsApp\n\n | 26,8\n | (540, 1180)\n | 53%\n | tela Hoje inteira\n\n | 28,9\n | (540, 1491)\n | 82%\n | cartão da noite (9 e 3)\n\n | 32,6\n | (540, 725)\n | 82%\n | pendência da noiva\n\n | 38,4\n | (479, 918)\n | 70%\n | agenda\n\n | 40,5\n | (540, 1524)\n | 72%\n | resultados (47)\n\n | 44,4\n | (930, 1120)\n | 46%\n | fecho, rotação 0 → 12°\n\nEntre esses pontos a câmera segura parada até o próximo movimento.\n\n## Curvas\n\n- **Easing de todas as chaves de movimento:** velocidade 0 e influência 70% na entrada e na saída (166 chaves no `ops_ease.json`). Cores ficam lineares.\n\n- **Contador:** saída com influência 10 e chegada com 85 (começa rápido e freia no número).\n\n- **Botão final:** escala 0 → 104 → 100 em 0,4 s; no clique, 100 → 94 → 100 em 0,22 s, com o anel do botão crescendo para 118 × 170% e sumindo em 0,5 s. O cursor aperta junto (130 → 112 → 130%).\n\n- **Motion blur** só na comp principal (8 amostras, limite adaptativo 16).\n\n## Legendas\n\n- Space Grotesk Bold 64 px, entrelinha 74, tracking −20, preto `#0A0A0A`, centralizadas no topo (y 250 com duas linhas, 270 com uma).\n\n- Entram subindo 30 px com opacidade 0 → 100 em 0,35 s; saem subindo 20 px em 0,25 s.\n\n- As duas da noite (\"A clínica fechou às 19h.\" e \"As mensagens continuaram chegando.\") usam Space Grotesk SemiBold 62.\n\n- Frase da marca: Space Grotesk Bold 68, entrelinha 74, tracking −30.\n\n## Trilha\n\nComposta na ElevenLabs Music (`music_v2_5`), com o plano em `trilha-plano.json`: instrumental, neo-soul brasileiro com toque de bossa, piano Rhodes e violão de nylon, 100 BPM, sem voz.\n\n | \n\n | Seção\n | Duração\n | Clima\n\n | Noite, clínica fechada\n | 10 s\n | Rhodes em acordes menores, pad grave, textura de tique-taque, sem bateria\n\n | Alívio, configurando a Lu\n | 8,4 s\n | calor no primeiro tempo, arpejo de violão, shaker, bumbo leve\n\n | Conversa da noite\n | 7,9 s\n | groove leve de bossa-soul, vassourinha e aro, entra o baixo\n\n | Manhã, groove cheio\n | 11,9 s\n | groove tranquilo, Rhodes acompanhando, espaço para a voz\n\n | Resultados\n | 5,7 s\n | subida mais clara, palmas, acordes cheios\n\n | Fecho da marca\n | 7,1 s\n | resolve num acorde maior, cauda natural\n\n## Sound design e mix\n\n | \n\n | Faixa\n | Nível\n\n | Voz\n | −16 LUFS, entra em 0,4 s\n\n | Trilha\n | −25 LUFS sob a voz (cerca de 9 dB abaixo) e −20 nas bordas (cerca de 4 dB abaixo)\n\n | Efeitos\n | volumes da biblioteca nivelada, relativos à voz; pico de cada um no quadro do evento\n\n | Final\n | ganho linear até −14 LUFS e limitador, sem compressão do loudnorm\n\n41 efeitos, um por ação: tique-taque de relógio sob a noite, notificação a cada mensagem, whoosh longo na virada e grave no celular subindo, clique em cada check, clique mais forte e \"sucesso\" na chave, pop em cada bolha, contador rolando no 9 e no 47, tique no 3, whoosh curto em cada empurrão de tela, clique de mouse e \"sucesso\" no botão final.\n\n## O que é \"humano\" neste vídeo\n\n- O relógio anda de verdade, e cada notificação aparece no minuto que ela mostra.\n\n- O celular entra inclinado e assenta; no fecho, inclina de novo para dar lugar à marca.\n\n- A Lu \"digita\" antes de responder, e a conversa rola como num celular de verdade.\n\n- O cursor e o botão afundam juntos no clique, com o anel saindo do botão."
47
+ },
48
+ {
49
+ "titulo": "A montagem no After Effects",
50
+ "texto": "- **Instale as fontes** (Google Fonts, grátis): Space Grotesk (legendas, números e botões), Inter (corpo das telas e rodapé) e Cormorant Garamond itálico (marca da clínica). Instale para todos os usuários e reinicie o After Effects; no Windows, se não aparecer no AE, copie para `C:\\Program Files\\Common Files\\Adobe\\Fonts`.\n\n- **Mantenha a pasta `projeto/` como veio**: o `.aep` fica junto de `assets/` e `audio/`. Abra no After Effects 2026 ou mais novo.\n\n- **Comps:** `MAIN_TDA_App_v2_51s` é a final. Cada tela tem a sua comp `TELA_…` (no tamanho da captura, 1170×2532); elas passam por `TELAS_sequencia` e entram no `CELULAR`, que é filho do null `RIG Celular (camera)`.\n\n- **Arquivo faltando:** File › Dependencies › Find Missing Footage; clique com o direito › Replace Footage › File e aponte para `projeto/assets`. O AE reencontra os outros da mesma pasta.\n\n- **Render leve:** projeto em 8 bits, efeitos em \"Mercury Software Only\", desfoque de movimento só na comp principal e Multi-Frame Rendering limitado a 60% do processador. Assim, os 51 s renderizaram em 31 s; sem isso, a placa de vídeo ficou sem memória e o render travou.\n\n- **Som:** `python mixar.py video.mp4` gera as faixas e o MP4 com áudio ao lado do vídeo."
51
+ },
52
+ {
53
+ "titulo": "As decisões de direção",
54
+ "texto": "- **O problema no escuro, a solução no claro.** Os primeiros 10 s são noite: relógio passando das 19h, quatro notificações de clientes chegando e apagando sem resposta. Um círculo claro cresce, cobre a tela e o celular sobe.\n\n- **App próprio em vez de print de app pronto.** As telas foram desenhadas em HTML com referências do Mobbin, misturando a identidade da agência (preto, lime, Space Grotesk) com a de uma clínica premium (champanhe, nude, rosé, serifa itálica).\n\n- **Captura como base, destaques nativos por cima.** Cada tela é uma captura em 3x, e o que anima (checks, chave, bolhas, contadores, selos) é refeito em camadas do AE, alinhado ao pixel. Para isso existe a versão \"base\" das capturas, sem esses elementos.\n\n- **Uma câmera só.** O celular é filho de um null que entra, aproxima o elemento citado e inclina no fecho; nenhuma camada se mexe sozinha para isso.\n\n- **A fala manda no tempo.** Cada check acende quando a voz diz o item; o 9 e o 3 contam quando são ditos; o horário da Carla acende na agenda junto com \"caem na sua agenda\".\n\n- **Legenda curta que resume, não transcreve:** \"A Lu aprende a sua clínica.\", \"Às 23:40, resposta na hora.\", \"O que foge da regra fica pra você.\", \"47 agendamentos em 7 dias.\"\n\n- **O limite da IA aparece na tela:** o orçamento especial para noiva fica separado para a dona responder, com o botão \"Responder\" pulsando.\n\n- **Fecho com clique:** celular inclinado 12° à direita, marca e botão lime à esquerda, o cursor clica e o anel do clique cresce.\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 | base\n | animação de 20 s do app, sem narração, com legendas no lugar da voz; aprovada e usada como ponto de partida\n\n | **v2 narrada**\n | telas próprias desenhadas em HTML, simulador de WhatsApp, narração na voz clonada, trilha composta e 41 efeitos; aprovada (\"ficou MUITO bom\")"
59
+ }
60
+ ],
61
+ "pacote": [
62
+ {
63
+ "pasta": "projeto/",
64
+ "conteudo": "`tda-app-v2-narrado.aep`, a pasta `assets/` (capturas das telas em 3x, as bolhas do WhatsApp uma por arquivo, `medidas.json` e a marca em `assets/marca/`), as telas em HTML (`telas/`), os geradores de operações (`ae/`) e a narração acelerada que o projeto usa"
65
+ },
66
+ {
67
+ "pasta": "audio/",
68
+ "conteudo": "narração a 1,2×, `words.json` (tempo de cada palavra), os seis parágrafos enviados à voz (`p1.json` a `p6.json`), a trilha com o plano de seções, a faixa só da trilha, a faixa só de efeitos, o mix final, o `mixar.py` e os 19 efeitos usados (`sfx/`)"
69
+ },
70
+ {
71
+ "pasta": "referencias/",
72
+ "conteudo": "as 22 telas do Mobbin estudadas para desenhar o app (onboarding de IA, painel do dono, WhatsApp, agenda, resultados), com a folha de referências e o que cada uma ensinou"
73
+ },
74
+ {
75
+ "pasta": "render/",
76
+ "conteudo": "`final.mp4`"
77
+ },
78
+ {
79
+ "pasta": "telas/telas.html",
80
+ "conteudo": "as cinco telas do app em 390×844 (dois passos de onboarding, Hoje, Agenda e Resultados), na identidade mesclada da agência com a clínica"
81
+ },
82
+ {
83
+ "pasta": "telas/whatsapp.html",
84
+ "conteudo": "simulador de WhatsApp: a conversa sai do objeto `CONVERSA` no fim do arquivo (contato, hora, mensagens de um lado e do outro, \"digitando\")"
85
+ },
86
+ {
87
+ "pasta": "telas/capturar.mjs",
88
+ "conteudo": "captura as telas em 3x (1170×2532) com um navegador sem janela e grava cada bolha do WhatsApp num PNG transparente, com a posição em `posicoes.json`"
89
+ },
90
+ {
91
+ "pasta": "telas/medir.mjs",
92
+ "conteudo": "mede os elementos que o AE redesenha por cima da captura e grava `assets/medidas.json`"
93
+ },
94
+ {
95
+ "pasta": "ae/ops_telas.py",
96
+ "conteudo": "gera `ops_telas.json`: as operações das comps de tela (anel em volta da Lu, os cinco checks e a chave, bolhas, contadores, selos)"
97
+ },
98
+ {
99
+ "pasta": "ae/ops_main.py",
100
+ "conteudo": "gera `ops_main.json`: a comp principal (relógio, notificações, câmera do celular, legendas, fecho com botão e cursor), no tempo da narração"
101
+ }
102
+ ],
103
+ "prompt": "Quero fazer um reel narrado no mesmo estilo do projeto \"A clínica fecha às 7\", que está em 07-videos/projetos/fecha7/, com o meu assunto.\n\nAssunto: {{ASSUNTO}}\nProduto que aparece no celular (app, sistema ou serviço): {{PRODUTO}}\nPúblico (quem precisa se reconhecer no vídeo): {{PUBLICO}}\nO problema que acontece \"quando ninguém está olhando\": {{PROBLEMA}}\nMarca e chamada do botão final: {{MARCA}} / {{CHAMADA}}\nDuração aproximada: {{DURACAO}} (a referência tem 51 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/fecha7/LEIA-ME.md, estilo.md e roteiro.md. Depois abra projeto/telas/telas.html, projeto/telas/whatsapp.html, projeto/telas/capturar.mjs, projeto/ae/ops_telas.py, projeto/ae/ops_main.py e audio/mixar.py. Me explique em poucas linhas como as telas viram capturas, como os destaques são refeitos por cima no After Effects e como a câmera do celular funciona, 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 fecha7: copie o que for reaproveitar.\n\n3. Use as skills instaladas: motion-app-ae (interface no After Effects), video-referencias (referências no Mobbin e assets reais), motion-narrado (nada aparece antes de ser dito), conteudo-voz (o meu jeito de falar) e better-portuguese (todo texto da tela e da legenda).\n\n4. O roteiro: a fala é minha. Faça só a estrutura em roteiro.md, nas seis partes da referência: o problema com hora marcada (no escuro), a virada (\"agora imagina…\") com a configuração do produto, o produto resolvendo um caso concreto, o resumo do que aconteceu sem a pessoa, o resultado em número e o fecho com a marca. Para cada parte, diga o que precisa ser dito, a tela e a legenda curta do topo, 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 (siglas como se falam, números por extenso). Se os números forem de demonstração, o fecho leva o rodapé \"Demonstração com dados ilustrativos.\"\n\n5. Narração: um parágrafo por arquivo, conferido no faster-whisper. Me mande para aprovar a 1×; com o ok, acelere a 1,2× numa passada só, se eu quiser mais ritmo, e gere o words.json. Não anime antes do áudio aprovado.\n\n6. Telas: se o meu produto já existe, capture as telas reais em 3x; se não existe, desenhe as telas em HTML como o telas.html da referência, com referências do Mobbin, e misture a minha marca com a identidade do meu público (como a referência misturou preto e lime com champanhe e rosé). Gere também a versão \"base\" de cada tela, sem os elementos que vão animar. Me mostre as telas antes de animar.\n\n7. Reaproveite o motor, troque o conteúdo. Mantenha deste projeto: a noite escura com relógio por slider e notificações que apagam, a virada por um círculo claro, o celular nativo com as telas por track matte e o empurrão do iOS, os destaques refeitos por cima da captura (check, chave, bolha, contador, selo que acende), a câmera única no null do celular, o easing de influência 70%, a legenda curta que resume a ideia no topo, o fecho com o celular inclinado, a marca, o botão e o cursor clicando, um efeito por ação, a música 9 dB abaixo da voz e o final a −14 LUFS. Troque: as cores, as telas, os textos, o caso concreto, os números e a trilha (música real ou composta, medida em tom e BPM, com seções que sigam os momentos da fala).\n\n8. Assets reais: tudo que a minha fala citar aparece com a interface ou o ícone real (WhatsApp, agenda, banco, o que for). Me peça o que você não conseguir achar.\n\n9. Construa de duas em duas cenas e me mostre folhas de contato a cada rodada. Em cada movimento, pergunte: está humano ou robotizado? Antes do render completo, renderize 3 s para conferir. 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/.",
104
+ "campos": [
105
+ "ASSUNTO",
106
+ "CHAMADA",
107
+ "DURACAO",
108
+ "MARCA",
109
+ "PROBLEMA",
110
+ "PRODUTO",
111
+ "PUBLICO"
112
+ ],
113
+ "fonte": {
114
+ "nome": "Clube do Motion",
115
+ "url": "https://clubedomotion.com/projeto/?id=fecha7",
116
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
117
+ }
118
+ }