primocode 10.13.0 → 10.14.1

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 (196) hide show
  1. package/README.md +66 -12
  2. package/bin/primocode.js +148 -8
  3. package/lib/act.js +56 -3
  4. package/lib/catalogo.js +12 -1
  5. package/lib/config.js +1 -0
  6. package/lib/estudio/cota.js +157 -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 +290 -0
  165. package/lib/estudio/effectcraft.js +152 -0
  166. package/lib/estudio/exportar.js +181 -0
  167. package/lib/estudio/index.js +97 -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 +72 -0
  179. package/lib/headless.js +71 -0
  180. package/lib/hooks.js +72 -0
  181. package/lib/limites.js +100 -0
  182. package/lib/local/cerebro.json +398 -12
  183. package/lib/local/entrada.js +46 -2
  184. package/lib/marca-kit.js +312 -0
  185. package/lib/mcp.js +286 -6
  186. package/lib/perigo.js +31 -3
  187. package/lib/planos.js +49 -19
  188. package/lib/preparar.js +111 -0
  189. package/lib/retomar.js +55 -0
  190. package/lib/sandbox.js +197 -0
  191. package/lib/skills.js +3 -1
  192. package/lib/tools.js +13 -4
  193. package/lib/ui.js +1 -1
  194. package/package.json +4 -2
  195. package/skills/after-effects/SKILL.md +52 -0
  196. package/skills/maquina-de-motion/SKILL.md +84 -0
@@ -0,0 +1,84 @@
1
+ {
2
+ "id": "clube-letra-em-apps",
3
+ "titulo": "Cada frase num app",
4
+ "categoria": "sound",
5
+ "resumo": "edit de música quadrado de 10,4 s, sem narração e sem corte morto, em que cada frase mora numa interface diferente: um título que cai letra a letra sobre nuvens, um post com o seu perfil numa superfície curva, uma busca do Google que explode numa roda de fotos e uma pílula de chamada que se enche palavra por palavra. Um mascote original atravessa a câmera, as trocas caem nos tempos fortes e o vídeo corta seco no meio da última frase. Tudo é montado por um script do After Effects (`cenas.jsx`). Feito pelo Clube do Motion a partir de um reel de @illdari.",
6
+ "indicado": "edit de letra de música, reel de frase curta ou citação, abertura de vídeo que precisa de três ou quatro ideias em 10 s, conteúdo que conversa com quem usa redes sociais.",
7
+ "estilo": [
8
+ "interface de post",
9
+ "busca do Google",
10
+ "pílula de chamada do iPhone",
11
+ "mascote 3D",
12
+ "câmera que chicoteia",
13
+ "tipografia cinética",
14
+ "corte seco no fim"
15
+ ],
16
+ "ficha": {
17
+ "formato": "1080×1080, 30 qps, desfoque de movimento ligado (obturador 360°)",
18
+ "duracao": "10,4 s (312 quadros), sem narração",
19
+ "motor": "ae",
20
+ "voz": "sem narração",
21
+ "musica": "ver o guia de estilo",
22
+ "fontes": "Caprasimo, Segoe UI Bold e Semibold, SF Pro Text Medium e Semibold e Segoe Fluent Icons"
23
+ },
24
+ "etapas": [
25
+ {
26
+ "titulo": "Leia-me",
27
+ "texto": "# Cada frase num app: nuvens, post curvo, busca e chamada\n\n> Data: 2026-10-17 · Tipo: projeto · Status: aprovado · Id: letra-em-apps\n\n**Resumo:** edit de música quadrado de 10,4 s, sem narração e sem corte morto, em que cada frase mora numa interface diferente: um título que cai letra a letra sobre nuvens, um post com o seu perfil numa superfície curva, uma busca do Google que explode numa roda de fotos e uma pílula de chamada que se enche palavra por palavra. Um mascote original atravessa a câmera, as trocas caem nos tempos fortes e o vídeo corta seco no meio da última frase. Tudo é montado por um script do After Effects (`cenas.jsx`). Feito pelo Clube do Motion a partir de um reel de @illdari.\n\n## Descrição\n\nUma tela nasce da outra. As nuvens com o título viram a capa do post, que recua até virar um cartão com bordas abauladas; o cabeçalho do post aparece com o seu perfil e o texto pula da linha de base enquanto a câmera chicoteia ao longo da frase. A última palavra ganha uma caixa roxa, a câmera sobe até o Google, a busca é digitada e uma foto sai do \"o\" trocado por um quadrado, puxando uma roda de 14 fotos. O furo da roda vira um clarão branco e dele nasce a pílula de chamada. As frases são curtas, nossas e trocáveis no bloco de textos do gerador.\n\n- **Indicado para:** edit de letra de música, reel de frase curta ou citação, abertura de vídeo que precisa de três ou quatro ideias em 10 s, conteúdo que conversa com quem usa redes sociais.\n- **Estilo:** interface de post, busca do Google, pílula de chamada do iPhone, mascote 3D, câmera que chicoteia, tipografia cinética, corte seco no fim\n- **Formato:** 1:1 · 10,4 s · sem narração\n\n**Tutorial em vídeo:** em breve.\n\n## O vídeo\n\n| Item | Valor |\n|---|---|\n| Duração | 10,4 s (312 quadros), sem narração |\n| Formato | 1080×1080, 30 qps, desfoque de movimento ligado (obturador 360°) |\n| Ferramenta | After Effects: um script ExtendScript (`cenas.jsx`) monta 4 comps e a `RECRIACAO`; o `.aep` já vem montado |\n| 3D | o post curvo é um cilindro de 80 tiras de 25 px do \"mundo\" plano, em camadas 3D, filmado por uma câmera que empurra, inclina e chicoteia |\n| Assets | nuvens, mascote (uma câmera de cinema com olhos e tênis), avatar e as 16 fotos da roda gerados por IA; logo do Google (versão de 2015, SVG da Wikimedia) convertido em camadas de forma |\n| Fontes | Caprasimo, Segoe UI Bold e Semibold, SF Pro Text Medium e Semibold e Segoe Fluent Icons |\n| Som | música comercial esticada para 89,1 BPM (fica fora do pacote) e um efeito para cada evento da tela, mixados pela Mesa a −14 LUFS |\n| Referência | reel de letra com uma frase por app, de @illdari (03/10/2026) |\n| Arquivo final | MP4 H.264 com áudio AAC |\n\n## O que tem no pacote\n\n| Pasta | Conteúdo |\n|---|---|\n| `projeto/` | `ae/cenas.jsx` (o gerador comentado), `ae/lyric-apps.aep` (o projeto montado) e `assets/` (imagens, as 16 fotos recortadas, logo em JSON e os scripts `preparar_assets.py` e `svg_para_ae.py`) |\n| `audio/` | `trilha.py` (a mix), `eventos_manuais.py` e `eventos.json` (os efeitos por tempo), `mix.wav` (o som final), `mesa/` (o motor de mix) e `sfx/` (os efeitos usados) |\n| `referencias/` | `estudo-da-referencia.md` (decupagem quadro a quadro), `links.md` e `fora-do-pacote.md` |\n| `render.mp4` | o vídeo final |\n\nFicam fora do pacote a música e o reel estudado. O `trilha.py` espera a música em `audio/musica.wav`.\n\n### Como os scripts funcionam\n\n| Arquivo | O que faz |\n|---|---|\n| `ae/cenas.jsx` | monta tudo no projeto aberto. No topo, o bloco `T` guarda os textos: `titulo1` e `titulo2` (nuvens), `palavra2` (céu roxo), `perfil`, `post` (8 palavras), `destaque` (a última palavra do post), `busca` (digitada no Google) e `chamada` (4 palavras), com `tChamada`, o instante de cada palavra da pílula. Ajudantes: `K` (chaves com influência), `letrasCaindo`, `retangulo`, `elipse`, `formaSVG`, `mascaraArred`, `vivo`. Cenas: `cenaCapa`, `cenaMundo` (o post, o Google e a roda num plano de 2400×2200), `cenaPost` (o cilindro e a câmera), `cenaChamada`; `montaFinal` costura tudo |\n| `assets/preparar_assets.py` | recorta a grade em 16 fotos e tira o fundo verde do mascote |\n| `assets/svg_para_ae.py` | converte o SVG do logo no JSON de caminhos que o `formaSVG` desenha |\n| `audio/eventos_manuais.py` | escreve `eventos.json` com cada efeito no tempo da comp |\n| `audio/trilha.py` | põe o trecho da música com corte seco em 10,20 s e soma os efeitos pela Mesa |\n\n## Como abrir e renderizar\n\n1. **Fontes:** Caprasimo (Google Fonts) e SF Pro Text (site de desenvolvedores da Apple) em `C:\\Program Files\\Common Files\\Adobe\\Fonts`; Segoe UI e Segoe Fluent Icons já vêm no Windows 11. Reinicie o After Effects.\n2. **Abrir pronto:** `projeto/ae/lyric-apps.aep`. Se o AE pedir arquivos, aponte para `projeto/assets/`.\n3. **Adaptar:** troque os textos no bloco `T`, as imagens em `assets/` (rode `preparar_assets.py` se trocar a grade ou o mascote) e os instantes da pílula em `tChamada`. Crie um projeto novo (File › New Project) e rode File › Scripts › Run Script File › `cenas.jsx`.\n4. **Tempos:** as trocas de app caem nos tempos fortes de uma música a 89 BPM. Com outra música, mova as chaves de `montaFinal` e da câmera (`KC` em `cenaPost`) para os tempos fortes dela.\n5. **Som:** ponha a sua música em `audio/musica.wav`, ajuste `de` e `ate` no `trilha.py`, aponte o `sys.path` para `audio/mesa/` e rode `python trilha.py`.\n6. **Render:** fila do AE em H.264 com o `mix.wav`, ou render sem som e junte depois com o ffmpeg.\n\n**Pegadinhas:** o cilindro é feito de tiras com máscara e expressões que leem o raio de um slider (`CTRL › raio`); para deixar o post mais ou menos curvo, mexa só nesse slider. A largura da pílula segue o texto por `sourceRectAtTime`, então frases longas alargam sozinhas. Num null, opacidade e efeito não chegam aos filhos.\n\n## Decisões de direção que fizeram o vídeo funcionar\n\n1. **Uma frase, um app.** Cada frase mora numa interface que já existe (post, busca, chamada), na ordem em que o texto pede.\n2. **Uma tela nasce da outra.** A capa vira o cartão do post, a foto sai do \"o\" do Google e a pílula nasce do furo da roda: não há corte morto em 10 s.\n3. **O seu perfil é o autor do post.** O @ aparece como quem escreveu a frase, o que dá autoria e humor.\n4. **Chicote ao longo da frase.** A câmera corre pelo texto que está sendo digitado, o que resolve frase longa em tela quadrada.\n5. **Uma ação por tempo forte.** Recuo, empurrão, chicote, Google, foto, roda, clarão e pílula caem nos tempos da música, quase sempre até 3 quadros antes.\n6. **Corte seco no meio da frase.** O vídeo termina com a música alta e a última frase ainda se escrevendo: dá vontade de rever.\n\nDetalhes de cores, tempos e números: [estilo.md](estilo.md). Telas por tempo: [roteiro.md](roteiro.md). Para fazer o seu com outra música: [PROMPT.md](PROMPT.md).\n\n## Versões\n\n| Versão | O que mudou |\n|---|---|\n| **v1** | recriação da técnica cena a cena, conferida lado a lado com o original, com frases nossas, mascote original e o seu perfil no post |\n"
28
+ },
29
+ {
30
+ "titulo": "Roteiro",
31
+ "texto": "# Roteiro: cada frase num app\r\n\r\n> Data: 2026-10-17 · Tipo: roteiro · Status: aprovado · Projeto: letra-em-apps\r\n\r\n**Resumo:** o vídeo não tem narração; o roteiro é a ordem das telas e o tempo de cada frase, tirados do `cenas.jsx`. As frases são curtas, nossas e trocáveis no bloco de textos do gerador. Com outra música, mantenha a regra: uma frase por app e cada troca num tempo forte.\r\n\r\n## De onde veio a estrutura\r\n\r\nO reel estudado passa por quatro \"apps\" em 10 s: um mundo de nuvens com título, um post com o @ do autor, uma busca do Google que vira roda de fotos e uma pílula de chamada, cortando seco no meio da frase seguinte. Este projeto mantém as telas, os tempos e a câmera, com frases sobre o ofício de motion, um mascote original e o seu perfil como autor do post.\r\n\r\n## Telas\r\n\r\n| Tempo (s) | Tela | Texto (bloco `T`) | O que acontece |\r\n|---|---|---|---|\r\n| 0,00–0,76 | nuvens sobre roxo | `titulo1` e `titulo2` (3 palavras em duas linhas) | as letras caem uma a uma, grandes e borradas; a câmera desce devagar |\r\n| 0,76–1,50 | mascote | — | o mascote voa de baixo à direita, cresce e passa colado na câmera, cobrindo o título |\r\n| 1,50–2,00 | céu roxo | `palavra2` (1 palavra) | a palavra cai letra a letra e a cabeça do mascote sobe de baixo |\r\n| 2,00–2,30 | recuo | — | a tela inteira recua e vira o cartão do post, com bordas abauladas e linhas de varredura |\r\n| 2,30–4,75 | post curvo | `perfil` e `post` (8 palavras), `destaque` | cabeçalho com avatar, @ e selo; o texto pula da base enquanto a câmera empurra, inclina e corre pela frase; a última palavra ganha a caixa roxa |\r\n| 4,75–6,10 | Google escuro | `busca` | a câmera sobe até o logo, com um quadrado no lugar do \"o\"; a busca é digitada |\r\n| 6,10–7,20 | roda de fotos | — | uma foto sai do quadrado e as outras nascem em volta, formando um anel que gira |\r\n| 7,20–7,45 | clarão | — | o furo da roda vira um clarão branco que toma a tela |\r\n| 7,45–8,30 | chamada | — | o ponto verde vira um círculo e o círculo estica em pílula |\r\n| 8,30–10,20 | pílula | `chamada` (4 palavras) | as palavras caem uma a uma e a pílula alarga; a câmera aproxima até 133% |\r\n| 10,20 | corte | — | borrão horizontal de 2 quadros e preto, com a música ainda alta |\r\n\r\n## Momentos para o som\r\n\r\nEventos de `audio/eventos_manuais.py`, um efeito para cada ação da tela:\r\n\r\n- 0,20–0,50 s: as palavras do título caem; 0,78 e 1,30 s: o mascote atravessa e passa colado na câmera.\r\n- 1,58–1,62 s: a palavra do céu cai e a cabeça do mascote sobe; 2,00 s: o recuo para o cartão.\r\n- 2,25–3,80 s: uma tecla por letra que pula da base; 2,60 s empurrão e 3,30 s chicote.\r\n- 4,05 s: marca-texto na caixa roxa; 4,75 s: chicote para o Google; 5,00–6,25 s: teclas da busca.\r\n- 6,12 s: a foto estoura do quadrado; 6,35–6,75 s: as fotos da roda nascendo; 6,40 s giro; 7,20 s clarão.\r\n- 7,95–8,02 s: o círculo vira pílula; 8,35 · 8,65 · 8,88 · 9,10 s: uma batida por palavra da chamada.\r\n- 10,13 s: a pílula estica e o vídeo corta seco, sem fade.\r\n"
32
+ },
33
+ {
34
+ "titulo": "Estilo",
35
+ "texto": "# Estilo do vídeo: cada frase num app\n\n> Data: 2026-10-17 · Tipo: guia · Status: vigente · Projeto: letra-em-apps\n\n**Resumo:** roxo e coral de nuvens com título em serifa grossa creme (`#FAE6D7`), post escuro com selo ciano (`#69EFF7`) e destaque roxo (`#8423A6`), Google em modo escuro com um quadrado laranja no lugar do \"o\", e pílula de chamada clara com telefone verde (`#68FF0C`). Números tirados do `cenas.jsx`.\n\n## Palco\n\n| Peça | Como é |\n|---|---|\n| Tela | 1080×1080, 30 qps, desfoque de movimento com obturador 360° e fase −180° |\n| Montagem | `C_capa` (0–2,22 s), `C_post` (2,20–7,45 s, filmando `C_mundo`) e `C_chamada` (7,45–10,20 s) na comp `RECRIACAO`, sobre preto |\n| Mundo | plano de 2400×2200 com o cartão do post, o Google e a roda de fotos |\n| Cilindro | 80 tiras de 25 px (de u 300 a 2300) em camadas 3D; raio 800 no post, 5000 (quase plano) no Google, de 4,80 a 5,30 s |\n| Câmera | zoom 1000, 13 chaves de posição, ponto de interesse e giro |\n\n## Cores\n\n| Peça | Valor |\n|---|---|\n| Fundo da capa | roxo (0,42; 0,16; 0,54) |\n| Céu da 2ª cena | degradê de (0,30; 0,07; 0,40) a (0,58; 0,16; 0,66) |\n| Título | `#FAE6D7` |\n| Fundo do post | (0,024; 0,024; 0,024) |\n| Selo verificado | `#69EFF7` |\n| Caixa de destaque | `#8423A6` |\n| Fundo do Google | (0,12; 0,118; 0,13); barra (0,204; 0,208; 0,227) |\n| Quadrado no lugar do \"o\" | `#C46A1E` |\n| Fundo da chamada | cinza 82%; pílula 93% |\n| Telefone | `#68FF0C` |\n\n## Fontes\n\n| Fonte | Onde |\n|---|---|\n| Caprasimo | título das nuvens (165 px) e palavra do céu (140 px) |\n| Segoe UI Bold | perfil no post (30 px) |\n| Segoe UI Semibold | texto do post (31 px) |\n| SF Pro Text Medium | busca do Google (26 px) |\n| SF Pro Text Semibold | frase da chamada (42 px) |\n| Segoe Fluent Icons | selo, lupa e telefone |\n\n## Cena a cena\n\n| Cena | Números |\n|---|---|\n| Título nas nuvens | animador por caractere: posição −90 px, escala 180%, desfoque 22 e opacidade 0, até zero; linha 1 de 0,18 a 0,52 s, linha 2 de 0,45 a 0,74 s; nuvens a 150% descendo de y 470 a 600 |\n| Mascote | voa de (1080, 1130) a (200, 700) entre 0,76 e 1,42 s, com escala 30 › 62 › 95 › 480% e giro 28° › −6° › −30° (passa colado na câmera) |\n| Céu roxo | palavra cai de 1,55 a 1,82 s; a cabeça do mascote sobe de y 1500 a 955 entre 1,55 e 1,92 s |\n| Recuo para o cartão | capa de 100 a 77% de 2,00 a 2,20 s, com Optics Compensation de 0 a 30 (bordas abauladas); linhas de varredura com Venetian Blinds a 14% |\n| Post | cabeçalho entra de 2,22 a 2,32 s; texto pula da base (posição +22 px, escala 60%, opacidade 0) de 2,25 a 3,85 s; destaque cresce da esquerda de 4,05 a 4,14 s |\n| Câmera no post | empurra e inclina até o cabeçalho de 2,60 a 2,95 s (distância 1000 › 225, inclinação 75°); chicote ao longo da frase de 3,30 a 4,05 s; segura o destaque até 4,75 s |\n| Google | a câmera sobe de 4,75 a 5,20 s; busca digita com letras caindo 20 px de 5,00 a 6,35 s |\n| Roda de fotos | 14 fotos de 220 px num raio de 205; a 1ª sai do quadrado de 6,12 a 6,40 s; as outras nascem com 1 qd de intervalo a partir de 6,32 s, crescem a 106% e assentam; a roda gira de −40° a 60° de 6,38 a 7,45 s |\n| Clarão | elipse branca com desfoque 110 cresce de 0 a 720 e a 2400 px entre 7,18 e 7,45 s |\n| Pílula | círculo branco com o telefone sobe e clareia; vira pílula de 470×136 entre 7,80 e 8,10 s, com desfoque de 8 no pico; as palavras caem 18 px em 8,35, 8,65, 8,88 e 9,10 s |\n| Câmera na chamada | escala de 100 a 133% de 8,20 a 10,10 s |\n| Corte final | desfoque direcional horizontal de 0 a 220 entre 10,12 e 10,19 s e corte para preto em 10,20 s |\n\n## Som\n\n| Peça | Valor |\n|---|---|\n| Música | faixa esticada de 92,3 para 89,1 BPM (atempo 0,9654); o compasso forte cai no 1º tempo do vídeo (0,07 s) |\n| Fim | corte seco em 10,20 s, sem fade |\n| Efeitos | papel, teclas, pops e whooshes nos eventos da tela, com ganho 2,5× (não há voz) |\n| Mix | −14 LUFS, pico −3,8 dBFS |\n\n## O que é \"humano\" neste vídeo\n\n- A câmera do post nunca segura parada: empurra, corre pela frase, recua e sobe.\n- O mascote tem arco, giro e escala exagerados ao passar pela câmera, como um personagem de desenho.\n- A nuvem do céu roxo deriva com um wiggle lento enquanto a palavra cai.\n"
36
+ },
37
+ {
38
+ "titulo": "O roteiro",
39
+ "texto": "**Resumo:** o vídeo não tem narração; o roteiro é a ordem das telas e o tempo de cada frase, tirados do `cenas.jsx`. As frases são curtas, nossas e trocáveis no bloco de textos do gerador. Com outra música, mantenha a regra: uma frase por app e cada troca num tempo forte.\n\n## De onde veio a estrutura\n\nO reel estudado passa por quatro \"apps\" em 10 s: um mundo de nuvens com título, um post com o @ do autor, uma busca do Google que vira roda de fotos e uma pílula de chamada, cortando seco no meio da frase seguinte. Este projeto mantém as telas, os tempos e a câmera, com frases sobre o ofício de motion, um mascote original e o seu perfil como autor do post.\n\n## Telas\n\n | \n\n | Tempo (s)\n | Tela\n | Texto (bloco `T`)\n | O que acontece\n\n | 0,00–0,76\n | nuvens sobre roxo\n | `titulo1` e `titulo2` (3 palavras em duas linhas)\n | as letras caem uma a uma, grandes e borradas; a câmera desce devagar\n\n | 0,76–1,50\n | mascote\n | —\n | o mascote voa de baixo à direita, cresce e passa colado na câmera, cobrindo o título\n\n | 1,50–2,00\n | céu roxo\n | `palavra2` (1 palavra)\n | a palavra cai letra a letra e a cabeça do mascote sobe de baixo\n\n | 2,00–2,30\n | recuo\n | —\n | a tela inteira recua e vira o cartão do post, com bordas abauladas e linhas de varredura\n\n | 2,30–4,75\n | post curvo\n | `perfil` e `post` (8 palavras), `destaque`\n | cabeçalho com avatar, @ e selo; o texto pula da base enquanto a câmera empurra, inclina e corre pela frase; a última palavra ganha a caixa roxa\n\n | 4,75–6,10\n | Google escuro\n | `busca`\n | a câmera sobe até o logo, com um quadrado no lugar do \"o\"; a busca é digitada\n\n | 6,10–7,20\n | roda de fotos\n | —\n | uma foto sai do quadrado e as outras nascem em volta, formando um anel que gira\n\n | 7,20–7,45\n | clarão\n | —\n | o furo da roda vira um clarão branco que toma a tela\n\n | 7,45–8,30\n | chamada\n | —\n | o ponto verde vira um círculo e o círculo estica em pílula\n\n | 8,30–10,20\n | pílula\n | `chamada` (4 palavras)\n | as palavras caem uma a uma e a pílula alarga; a câmera aproxima até 133%\n\n | 10,20\n | corte\n | —\n | borrão horizontal de 2 quadros e preto, com a música ainda alta\n\n## Momentos para o som\n\nEventos de `audio/eventos_manuais.py`, um efeito para cada ação da tela:\n\n- 0,20–0,50 s: as palavras do título caem; 0,78 e 1,30 s: o mascote atravessa e passa colado na câmera.\n\n- 1,58–1,62 s: a palavra do céu cai e a cabeça do mascote sobe; 2,00 s: o recuo para o cartão.\n\n- 2,25–3,80 s: uma tecla por letra que pula da base; 2,60 s empurrão e 3,30 s chicote.\n\n- 4,05 s: marca-texto na caixa roxa; 4,75 s: chicote para o Google; 5,00–6,25 s: teclas da busca.\n\n- 6,12 s: a foto estoura do quadrado; 6,35–6,75 s: as fotos da roda nascendo; 6,40 s giro; 7,20 s clarão.\n\n- 7,95–8,02 s: o círculo vira pílula; 8,35 · 8,65 · 8,88 · 9,10 s: uma batida por palavra da chamada.\n\n- 10,13 s: a pílula estica e o vídeo corta seco, sem fade."
40
+ },
41
+ {
42
+ "titulo": "A identidade visual",
43
+ "texto": "**Resumo:** roxo e coral de nuvens com título em serifa grossa creme (`#FAE6D7`), post escuro com selo ciano (`#69EFF7`) e destaque roxo (`#8423A6`), Google em modo escuro com um quadrado laranja no lugar do \"o\", e pílula de chamada clara com telefone verde (`#68FF0C`). Números tirados do `cenas.jsx`.\n\n## Palco\n\n | \n\n | Peça\n | Como é\n\n | Tela\n | 1080×1080, 30 qps, desfoque de movimento com obturador 360° e fase −180°\n\n | Montagem\n | `C_capa` (0–2,22 s), `C_post` (2,20–7,45 s, filmando `C_mundo`) e `C_chamada` (7,45–10,20 s) na comp `RECRIACAO`, sobre preto\n\n | Mundo\n | plano de 2400×2200 com o cartão do post, o Google e a roda de fotos\n\n | Cilindro\n | 80 tiras de 25 px (de u 300 a 2300) em camadas 3D; raio 800 no post, 5000 (quase plano) no Google, de 4,80 a 5,30 s\n\n | Câmera\n | zoom 1000, 13 chaves de posição, ponto de interesse e giro\n\n## Cores\n\n | \n\n | Peça\n | Valor\n\n | Fundo da capa\n | roxo (0,42; 0,16; 0,54)\n\n | Céu da 2ª cena\n | degradê de (0,30; 0,07; 0,40) a (0,58; 0,16; 0,66)\n\n | Título\n | `#FAE6D7`\n\n | Fundo do post\n | (0,024; 0,024; 0,024)\n\n | Selo verificado\n | `#69EFF7`\n\n | Caixa de destaque\n | `#8423A6`\n\n | Fundo do Google\n | (0,12; 0,118; 0,13); barra (0,204; 0,208; 0,227)\n\n | Quadrado no lugar do \"o\"\n | `#C46A1E`\n\n | Fundo da chamada\n | cinza 82%; pílula 93%\n\n | Telefone\n | `#68FF0C`\n\n## Fontes\n\n | \n\n | Fonte\n | Onde\n\n | Caprasimo\n | título das nuvens (165 px) e palavra do céu (140 px)\n\n | Segoe UI Bold\n | perfil no post (30 px)\n\n | Segoe UI Semibold\n | texto do post (31 px)\n\n | SF Pro Text Medium\n | busca do Google (26 px)\n\n | SF Pro Text Semibold\n | frase da chamada (42 px)\n\n | Segoe Fluent Icons\n | selo, lupa e telefone\n\n## Cena a cena\n\n | \n\n | Cena\n | Números\n\n | Título nas nuvens\n | animador por caractere: posição −90 px, escala 180%, desfoque 22 e opacidade 0, até zero; linha 1 de 0,18 a 0,52 s, linha 2 de 0,45 a 0,74 s; nuvens a 150% descendo de y 470 a 600\n\n | Mascote\n | voa de (1080, 1130) a (200, 700) entre 0,76 e 1,42 s, com escala 30 › 62 › 95 › 480% e giro 28° › −6° › −30° (passa colado na câmera)\n\n | Céu roxo\n | palavra cai de 1,55 a 1,82 s; a cabeça do mascote sobe de y 1500 a 955 entre 1,55 e 1,92 s\n\n | Recuo para o cartão\n | capa de 100 a 77% de 2,00 a 2,20 s, com Optics Compensation de 0 a 30 (bordas abauladas); linhas de varredura com Venetian Blinds a 14%\n\n | Post\n | cabeçalho entra de 2,22 a 2,32 s; texto pula da base (posição +22 px, escala 60%, opacidade 0) de 2,25 a 3,85 s; destaque cresce da esquerda de 4,05 a 4,14 s\n\n | Câmera no post\n | empurra e inclina até o cabeçalho de 2,60 a 2,95 s (distância 1000 › 225, inclinação 75°); chicote ao longo da frase de 3,30 a 4,05 s; segura o destaque até 4,75 s\n\n | Google\n | a câmera sobe de 4,75 a 5,20 s; busca digita com letras caindo 20 px de 5,00 a 6,35 s\n\n | Roda de fotos\n | 14 fotos de 220 px num raio de 205; a 1ª sai do quadrado de 6,12 a 6,40 s; as outras nascem com 1 qd de intervalo a partir de 6,32 s, crescem a 106% e assentam; a roda gira de −40° a 60° de 6,38 a 7,45 s\n\n | Clarão\n | elipse branca com desfoque 110 cresce de 0 a 720 e a 2400 px entre 7,18 e 7,45 s\n\n | Pílula\n | círculo branco com o telefone sobe e clareia; vira pílula de 470×136 entre 7,80 e 8,10 s, com desfoque de 8 no pico; as palavras caem 18 px em 8,35, 8,65, 8,88 e 9,10 s\n\n | Câmera na chamada\n | escala de 100 a 133% de 8,20 a 10,10 s\n\n | Corte final\n | desfoque direcional horizontal de 0 a 220 entre 10,12 e 10,19 s e corte para preto em 10,20 s\n\n## Som\n\n | \n\n | Peça\n | Valor\n\n | Música\n | faixa esticada de 92,3 para 89,1 BPM (atempo 0,9654); o compasso forte cai no 1º tempo do vídeo (0,07 s)\n\n | Fim\n | corte seco em 10,20 s, sem fade\n\n | Efeitos\n | papel, teclas, pops e whooshes nos eventos da tela, com ganho 2,5× (não há voz)\n\n | Mix\n | −14 LUFS, pico −3,8 dBFS\n\n## O que é \"humano\" neste vídeo\n\n- A câmera do post nunca segura parada: empurra, corre pela frase, recua e sobe.\n\n- O mascote tem arco, giro e escala exagerados ao passar pela câmera, como um personagem de desenho.\n\n- A nuvem do céu roxo deriva com um wiggle lento enquanto a palavra cai."
44
+ },
45
+ {
46
+ "titulo": "A montagem no After Effects",
47
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `ae/cenas.jsx`\n | monta tudo no projeto aberto. No topo, o bloco `T` guarda os textos: `titulo1` e `titulo2` (nuvens), `palavra2` (céu roxo), `perfil`, `post` (8 palavras), `destaque` (a última palavra do post), `busca` (digitada no Google) e `chamada` (4 palavras), com `tChamada`, o instante de cada palavra da pílula. Ajudantes: `K` (chaves com influência), `letrasCaindo`, `retangulo`, `elipse`, `formaSVG`, `mascaraArred`, `vivo`. Cenas: `cenaCapa`, `cenaMundo` (o post, o Google e a roda num plano de 2400×2200), `cenaPost` (o cilindro e a câmera), `cenaChamada`; `montaFinal` costura tudo\n\n | `assets/preparar_assets.py`\n | recorta a grade em 16 fotos e tira o fundo verde do mascote\n\n | `assets/svg_para_ae.py`\n | converte o SVG do logo no JSON de caminhos que o `formaSVG` desenha\n\n | `audio/eventos_manuais.py`\n | escreve `eventos.json` com cada efeito no tempo da comp\n\n | `audio/trilha.py`\n | põe o trecho da música com corte seco em 10,20 s e soma os efeitos pela Mesa\n\n- **Fontes:** Caprasimo (Google Fonts) e SF Pro Text (site de desenvolvedores da Apple) em `C:\\Program Files\\Common Files\\Adobe\\Fonts`; Segoe UI e Segoe Fluent Icons já vêm no Windows 11. Reinicie o After Effects.\n\n- **Abrir pronto:** `projeto/ae/lyric-apps.aep`. Se o AE pedir arquivos, aponte para `projeto/assets/`.\n\n- **Adaptar:** troque os textos no bloco `T`, as imagens em `assets/` (rode `preparar_assets.py` se trocar a grade ou o mascote) e os instantes da pílula em `tChamada`. Crie um projeto novo (File › New Project) e rode File › Scripts › Run Script File › `cenas.jsx`.\n\n- **Tempos:** as trocas de app caem nos tempos fortes de uma música a 89 BPM. Com outra música, mova as chaves de `montaFinal` e da câmera (`KC` em `cenaPost`) para os tempos fortes dela.\n\n- **Som:** ponha a sua música em `audio/musica.wav`, ajuste `de` e `ate` no `trilha.py`, aponte o `sys.path` para `audio/mesa/` e rode `python trilha.py`.\n\n- **Render:** fila do AE em H.264 com o `mix.wav`, ou render sem som e junte depois com o ffmpeg.\n\n**Pegadinhas:** o cilindro é feito de tiras com máscara e expressões que leem o raio de um slider (`CTRL › raio`); para deixar o post mais ou menos curvo, mexa só nesse slider. A largura da pílula segue o texto por `sourceRectAtTime`, então frases longas alargam sozinhas. Num null, opacidade e efeito não chegam aos filhos."
48
+ },
49
+ {
50
+ "titulo": "As decisões de direção",
51
+ "texto": "- **Uma frase, um app.** Cada frase mora numa interface que já existe (post, busca, chamada), na ordem em que o texto pede.\n\n- **Uma tela nasce da outra.** A capa vira o cartão do post, a foto sai do \"o\" do Google e a pílula nasce do furo da roda: não há corte morto em 10 s.\n\n- **O seu perfil é o autor do post.** O @ aparece como quem escreveu a frase, o que dá autoria e humor.\n\n- **Chicote ao longo da frase.** A câmera corre pelo texto que está sendo digitado, o que resolve frase longa em tela quadrada.\n\n- **Uma ação por tempo forte.** Recuo, empurrão, chicote, Google, foto, roda, clarão e pílula caem nos tempos da música, quase sempre até 3 quadros antes.\n\n- **Corte seco no meio da frase.** O vídeo termina com a música alta e a última frase ainda se escrevendo: dá vontade de rever.\n\nDetalhes de cores, tempos e números: estilo.md. Telas por tempo: roteiro.md. Para fazer o seu com outra música: PROMPT.md."
52
+ },
53
+ {
54
+ "titulo": "As versões até o final",
55
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | **v1**\n | recriação da técnica cena a cena, conferida lado a lado com o original, com frases nossas, mascote original e o seu perfil no post"
56
+ }
57
+ ],
58
+ "prompt": "# Prompt: cada frase num app diferente\n\n> Data: 2026-10-17 · Tipo: guia · Status: vigente · Projeto: letra-em-apps\n\n**Resumo:** o prompt para colar no seu agente (Claude Code ou Codex), aberto na pasta da sua central, para ele estudar este projeto e montar a sua versão com outra música: cada frase vive numa interface que todo mundo conhece, uma nascendo da outra, com corte seco no fim. Troque os marcadores `{{…}}` ou apague a linha, e o agente pergunta.\n\n## Como usar\n\n1. Descompacte o pacote em `07-videos/projetos/letra-em-apps/` dentro da sua central.\n2. Instale Caprasimo e SF Pro Text e veja em `referencias/fora-do-pacote.md` o que precisa separar (a música).\n3. Separe 10 a 12 s da música e escreva quatro frases curtas.\n4. Abra o agente na pasta da central, copie o bloco abaixo, troque os marcadores que já souber e cole.\n\n## O prompt\n\n```text\nQuero um edit de música no mesmo método do projeto \"Cada frase num app\", que está em 07-videos/projetos/letra-em-apps/: cada frase mora numa interface diferente (título nas nuvens, post curvo, busca que explode em fotos, pílula de chamada), uma nascendo da outra.\n\nMúsica e trecho (arquivo e segundos de início e fim): {{MUSICA}}\nAs frases, na ordem: título (até 3 palavras), palavra do céu, texto do post (até 8 palavras), busca, frase da chamada (4 palavras): {{FRASES}}\nMeu perfil (autor do post): {{PERFIL}}\nMascote ou personagem (ou deixe que você proponha um original): {{MASCOTE}}\nTema das fotos da roda: {{FOTOS}}\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 abra projeto/ae/cenas.jsx: o bloco T, os ajudantes (K, letrasCaindo, formaSVG, mascaraArred, vivo), cenaCapa, cenaMundo, cenaPost (o cilindro e as chaves KC da câmera), cenaChamada e montaFinal. Me diga em poucas linhas o que muda com a minha música.\n\n2. Meça a música: andamento e tempos fortes, e o instante de cada palavra da frase da chamada. Monte uma tabela tempo forte › ação da tela (recuo, empurrão, chicote, Google, foto, roda, clarão, pílula).\n\n3. Se quiser trocar algum app (por exemplo, o Google por outra busca ou a chamada por uma notificação), me proponha a troca e espere meu ok.\n\n4. Prepare os assets antes de animar: nuvens ou fundo do título, mascote com fundo liso para recorte, avatar, uma grade 4×4 de fotos e o logo em SVG. Gere ou baixe, rode o preparar_assets.py e anote de onde veio cada imagem.\n\n5. Construa copiando o projeto, sem editar o original: troque o bloco T, mova as chaves para os seus tempos fortes e ajuste o raio do cilindro só pelo slider CTRL › raio. Rode o cenas.jsx num projeto novo do After Effects e me mostre uma folha de contato com 12 quadros, incluindo o meio dos chicotes e da roda.\n\n6. Revise antes do render: troca que não cai no tempo forte, câmera parada, texto cortado no cilindro, pílula estreita para a frase e preto antes da hora.\n\n7. Faça o som: música em audio/musica.wav com corte seco no último quadro, efeitos em eventos_manuais.py, mix pela Mesa a −14 LUFS. Renderize em H.264, junte o mix.wav e entregue o MP4 com uma anotação do que mudou em relação ao projeto.\n```\n\n## Checklist antes de entregar (da referência)\n\n- [ ] Cada frase tem o seu app, e cada app nasce de uma peça do anterior.\n- [ ] As trocas caem nos tempos fortes, no máximo 3 quadros antes.\n- [ ] A câmera corre pela frase do post sem parar.\n- [ ] O mascote é original, e o perfil no post é o seu.\n- [ ] O vídeo corta seco no fim, com a música ainda alta.\n- [ ] A música e as frases são suas.\n",
59
+ "campos": [
60
+ "FOTOS",
61
+ "FRASES",
62
+ "MASCOTE",
63
+ "MUSICA",
64
+ "PERFIL"
65
+ ],
66
+ "fonte": {
67
+ "nome": "Clube do Motion",
68
+ "url": "https://clubedomotion.com/projeto/?id=letra-em-apps",
69
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
70
+ },
71
+ "ferramentas": [
72
+ "Claude Code",
73
+ "After Effects"
74
+ ],
75
+ "scripts_ae": {
76
+ "pasta": "lib/estudio/dados/projetos-ae/letra-em-apps",
77
+ "arquivos": [
78
+ "ae/cenas.jsx",
79
+ "assets/preparar_assets.py",
80
+ "assets/svg_para_ae.py"
81
+ ],
82
+ "como_usar": "modelo: leia os .jsx (montam as comps no After Effects) e os .py (preparam assets/áudio) e adapte para o estudio_ae; não copie o conteúdo do vídeo, troque pelo assunto da pessoa."
83
+ }
84
+ }
@@ -0,0 +1,111 @@
1
+ {
2
+ "id": "clube-letra-globo-3d",
3
+ "titulo": "A letra num globo 3D",
4
+ "categoria": "sound",
5
+ "resumo": "edit de música quadrado de 25,6 s, sem narração, em que um app estilo Spotify faz o play acontecer na tela (logo, busca digitada, top 3, clique na faixa) e a letra passa a rodar num globo 3D, com a palavra cantada acesa e a próxima esperando apagada. O fundo troca quando a frase pede uma imagem (fogo, olho, padrão hipnótico), cada troca vem marcada por um flash de inversão, e o vídeo volta à lista e sai em persiana e grade. Tudo é montado por um script do After Effects (`cenas.jsx`). Feito pelo Clube do Motion a partir de um reel de @illdari.",
6
+ "indicado": "edit de letra de música, reel de página de música, trecho de podcast com a fala em destaque, qualquer vídeo que precise de legenda viva com começo reconhecível.",
7
+ "estilo": [
8
+ "interface de app de música",
9
+ "tipografia cinética 3D",
10
+ "karaokê",
11
+ "fundo que ilustra a palavra",
12
+ "flash de inversão",
13
+ "persiana na saída"
14
+ ],
15
+ "ficha": {
16
+ "formato": "1080×1080, 30 qps, desfoque de movimento ligado (obturador 360°, 32 amostras; 240° na comp da letra)",
17
+ "duracao": "25,6 s (769 quadros), sem narração",
18
+ "motor": "ae",
19
+ "voz": "ver o guia de estilo",
20
+ "musica": "ver o guia de estilo",
21
+ "fontes": "DM Sans Medium, Poppins Bold e SemiBold, Segoe UI Bold e Segoe Fluent Icons"
22
+ },
23
+ "ferramentas": [
24
+ "Claude Code",
25
+ "After Effects"
26
+ ],
27
+ "ficha_tecnica": {
28
+ "Duração": "25,6 s (769 quadros), sem narração",
29
+ "Formato": "1080×1080, 30 qps, desfoque de movimento ligado (obturador 360°, 32 amostras; 240° na comp da letra)",
30
+ "Ferramenta": "After Effects: um script ExtendScript (`cenas.jsx`) monta 8 comps e a `RECRIACAO`; o `.aep` já vem montado",
31
+ "3D": "o globo é feito de camadas de texto 3D com caracteres em 3D, presas a nulls que giram, vistas por uma câmera",
32
+ "Assets": "logo do Spotify (Simple Icons) convertido em camadas de forma; três capas, fogo, silhueta e olho gerados por IA; fundo do app, bokeh e padrão hipnótico feitos por código; cursor de mão em PNG",
33
+ "Fontes": "DM Sans Medium, Poppins Bold e SemiBold, Segoe UI Bold e Segoe Fluent Icons",
34
+ "Som": "música comercial em dois trechos (fica fora do pacote) e um efeito para cada evento da tela, mixados pela Mesa a −14 LUFS",
35
+ "Referência": "reel de letra com UI do Spotify, de @illdari (12/10/2026)",
36
+ "Arquivo final": "MP4 H.264 com áudio AAC"
37
+ },
38
+ "etapas": [
39
+ {
40
+ "titulo": "O roteiro",
41
+ "texto": "**Resumo:** o vídeo não tem narração; o roteiro é a ordem das telas e o tempo de cada linha de texto, tirados do `cenas.jsx`. As frases são curtas, nossas e trocáveis no bloco de textos do gerador. Com outra música, mantenha a regra: o play acontece na tela e cada palavra acende no tempo da voz.\n\n## De onde veio a estrutura\n\nO reel estudado abre com o logo do app, digita uma busca, mostra três faixas e clica numa; a letra desce empurrando a interface e roda num globo até voltar à lista. Este projeto mantém as cenas, os tempos e a câmera, com textos sobre o ofício de motion no lugar da letra e o seu perfil na barra.\n\n## Telas\n\n | \n\n | Tempo (s)\n | Tela\n | O que acontece\n\n | 0,00–1,10\n | abertura no preto\n | os três arcos do logo sobem, crescem e encolhem; o círculo verde acende com o degradê\n\n | 1,10–2,30\n | logo e barra\n | o botão casa sai do logo, o logo dá um chicote girando enquanto a cor do quadro roda, e a barra de busca estica\n\n | 2,30–3,00\n | barra acesa\n | um feixe de luz cai do logo, a barra acende verde com o seu perfil e fica o cursor de texto piscando\n\n | 3,00–3,90\n | busca\n | o fundo vira foto cinza, a busca é digitada e a lupa acende\n\n | 3,90–5,10\n | lista\n | a barra sobe, três faixas sobem; a primeira está aberta com a barra de progresso andando, as outras com o título borrado\n\n | 5,10–6,70\n | cursor\n | a mão entra, passa na segunda faixa (o título aparece) e clica; a primeira fecha e a segunda abre; a música corta\n\n | 6,76–6,97\n | empurrão\n | a letra desce de cima e empurra o app para fora; a música volta\n\n | 6,97–14,05\n | globo, fundo bordô\n | dez linhas de 1 a 4 palavras; flashes em 11,67 e 13,00\n\n | 14,05–15,10\n | fogo e silhueta\n | duas linhas sobre fogo e silhueta com faíscas\n\n | 15,10–16,30\n | olho\n | uma linha sobre o olho; a íris vira o padrão hipnótico\n\n | 16,30–19,17\n | padrão hipnótico\n | zoom pela pupila; as três últimas linhas, maiores; a última varre de lado e sai\n\n | 19,17–21,10\n | volta à lista\n | o app volta inclinado, o cursor passa na terceira faixa e clica; o verde varre o card\n\n | 21,20–23,90\n | saída\n | persiana horizontal e depois vertical, sobrando uma grade que some\n\n | 23,90–25,63\n | preto\n | cauda da música\n\n## As linhas no globo\n\n | \n\n | Linha\n | Palavras\n | Instantes (s)\n\n | 1\n | 4\n | 7,00 · 7,13 · 7,34 · 7,50\n\n | 2\n | 2\n | 7,78 · 7,99\n\n | 3\n | 4\n | 8,17 · 8,36 · 8,61 · 8,80\n\n | 4\n | 2\n | 9,01 · 9,36\n\n | 5\n | 4\n | 9,66 · 9,85 · 10,10 · 10,29\n\n | 6\n | 2\n | 10,68 · 10,84\n\n | 7\n | 4\n | 11,15 · 11,33 · 11,47 · 11,68\n\n | 8\n | 2\n | 12,17 · 12,35\n\n | 9\n | 4\n | 12,68 · 13,00 · 13,40 · 13,65\n\n | 10\n | 1\n | 14,05\n\n | 11\n | 3\n | 14,42 · 14,72 · 14,88\n\n | 12\n | 2\n | 15,14 · 15,33\n\n | 13\n | 1\n | 15,98\n\n | 14\n | 2\n | 16,37 · 16,58 (grande)\n\n | 15\n | 3\n | 17,00 · 17,18 · 17,39 (grande)\n\n | 16\n | 2\n | 18,46 · 18,67 (grande)\n\nOs instantes seguem o ritmo das palavras medidas no original. Para outra música, troque palavras e instantes no bloco `T.linhas`: o roll entra 4 quadros antes da primeira palavra de cada linha.\n\n## Momentos para o som\n\n- 0–3 s: subida dos arcos, acendimento no primeiro kick (1,02 s), chicote e impacto do feixe (2,44 s).\n\n- 3–6,9 s: teclas da busca, subida dos cards, clique e troca de faixa; a música some de 6,0 a 6,93 s.\n\n- 6,93 s: impacto e a música de volta no compasso forte, com a primeira linha.\n\n- 6,97–19,2 s: um \"sobe\" a cada roll, impacto no fogo (14,05 s), flashes e chicote no zoom pela pupila.\n\n- 19,17 s em diante: volta à lista, clique final e a música apagando em 1,8 s."
42
+ },
43
+ {
44
+ "titulo": "A identidade visual",
45
+ "texto": "**Resumo:** verde do Spotify (`#1DC143` e `#2AFF5E` aceso) sobre preto na abertura, app escuro sobre foto cinza desfocada, letra em branco quente (`#F3F0EF`) num globo de 1.100 px de raio, fundos bordô, fogo, olho e padrão hipnótico. Números tirados do `cenas.jsx`.\n\n## Palco\n\n | \n\n | Peça\n | Como é\n\n | Tela\n | 1080×1080, 30 qps, desfoque de movimento com obturador 360° e fase −180° (240° na comp da letra)\n\n | Montagem\n | `C_intro` (0–3 s), `C_app` duas vezes (ida e volta, com `C_busca` e três `C_card`) e `C_letra`, na comp `RECRIACAO`\n\n | Globo\n | null 3D em z = 1.100 (o raio); cada linha é um null girado 18° em X; cada palavra é um texto 3D com âncora em z = 1.100\n\n | Câmera\n | zoom 650, posição z −650, `wiggle(0.35, 10)` na posição\n\n## Cores\n\n | \n\n | Peça\n | Valor\n\n | Verde dos arcos\n | `#1DC143`\n\n | Verde aceso (círculo, barra no impacto, lupa)\n | `#2AFF5E`\n\n | Fundo da abertura\n | preto com degradê radial de (0,10; 0,36; 0,14) para (0,01; 0,06; 0,02)\n\n | Barra de busca\n | `#181717`, traço branco de 1,5 px\n\n | Card aberto\n | `#131313`, cantos de 36 px\n\n | Texto da interface\n | `#EDEBEC`\n\n | Clique no card\n | `#1CA93E`\n\n | Letra\n | `#F3F0EF`\n\n## Fontes\n\n | \n\n | Fonte\n | Onde\n\n | DM Sans Medium\n | busca (32 a 34 px) e artistas (28 px)\n\n | Poppins Bold\n | títulos das faixas (44 px)\n\n | Poppins SemiBold\n | duração e o perfil na barra (28 a 30 px)\n\n | Segoe UI Bold\n | letra (186 px; 215 px nas três últimas linhas)\n\n | Segoe Fluent Icons\n | casa, lupa, aleatório, anterior, pausa, próxima, repetir\n\n## Cena a cena\n\n | \n\n | Cena\n | Números\n\n | Arcos do logo\n | sobem de baixo com 3 qd de intervalo; o logo vai de 60% a 330% em 0,30 s e volta a 62% em 0,46 s\n\n | Círculo verde\n | entra de 0,86 a 1,06 s (70 › 100%); o degradê acende de 0,88 a 1,10 s; os arcos escurecem e viram furos\n\n | Botão casa\n | sai do logo de 1,30 a 1,42 s, 200 px para a direita\n\n | Chicote do logo\n | gira −360° de 1,52 a 2,24 s e encolhe a 22%; ciclo de cor do quadro inteiro (Color Balance HLS, 0 › −360) de 1,56 a 2,26 s\n\n | Barra \"Opa!!\"\n | entra de 1,62 a 2,00 s com escala X 40 › 104 › 100% e giro −9° › 0°; acende verde em 2,44 s com o perfil; cursor de texto pisca a 3,2 Hz\n\n | Busca\n | digitação a 1,4 caractere por quadro a partir de 3,0 s; as últimas 5 letras nascem verdes; lupa verde com glow de 3,42 a 3,85 s\n\n | Lista\n | a barra chicoteia ao topo em 3,86–3,95 s; três cards sobem de y 860 com 2 qd de intervalo e desfoque 30 › 0 em 8 qd\n\n | Hover e clique\n | cursor entra em 5,10 s; título desborra (26 › 0) em 5 qd; clique em 6,05 s com o cursor a 85%; card 1 fecha e card 2 abre em 9 qd, com uma mancha preta escorrendo\n\n | Empurrão\n | de 6,76 a 6,93 s o app desce para y 1.640 e a letra desce de −560 para 540\n\n | Karaokê\n | a palavra aparece a 50% e 92% uns 6 qd antes; acende 100% num intervalo de 2 qd em volta do instante\n\n | Roll de linha\n | degrau de 18° em 5 qd, influência 85%; borrão direcional de 90° chega a 28 no meio da troca\n\n | Giro da linha\n | chicote de 3 qd antes a 2 qd depois de cada palavra e deriva entre elas; a última linha varre e sai em 19,12 s\n\n | Fundos\n | bokeh bordô (Exposure −1,1) de 6,6 a 14,05 s; fogo 14,05–14,45; silhueta 14,45–15,10; olho 15,10–16,30; íris com o padrão de 15,98 a 16,30; padrão cheio 260 › 62% e gira −35°/s até 19,2 s\n\n | Flashes\n | Invert com desfoque 10 em 11,67 s (3 qd), 13,00, 15,10 e 16,30 s (2 qd)\n\n | Volta à lista\n | entra em 19,17 s com giro Z −6°, X 12° e escala 108%, e assenta em 0,38 s; clique no card 3 em 20,15 s com o verde varrendo da esquerda em 0,2 s\n\n | Saída\n | Venetian Blinds de largura 135 a 90° de 21,20 a 23,90 s e um segundo a 0° de 22,50 a 23,90 s; preto até o fim\n\n## Som\n\n | \n\n | Peça\n | Valor\n\n | Música\n | 1º trecho de 3,04 s da faixa, por 6 s, com a primeira batida no círculo verde; corta no clique; volta em 6,93 s no compasso forte\n\n | Andamento\n | 71,8 BPM no original (143,6 em tempo dobrado)\n\n | Efeitos\n | subida, teclas, cliques, rolagem a cada linha, flashes e impacto no fogo, com ganho 2,5× (não há voz)\n\n | Mix\n | −14 LUFS, pico −1,3 dBFS, drop em 6,97 s\n\n## O que é \"humano\" neste vídeo\n\n- Nada fica parado: fundo do app com deriva, câmera com wiggle, globo com giro leve em Z e chicote a cada palavra.\n\n- O cursor tem peso: chega com ease, aperta a 85% no clique e sai pelo topo.\n\n- O flash cai na palavra que importa, como uma pontuação, e não em toda batida."
46
+ },
47
+ {
48
+ "titulo": "A montagem no After Effects",
49
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `ae/cenas.jsx`\n | monta tudo no projeto aberto. No topo, o bloco `T` guarda os textos: `busca1`, `assinatura`, `busca2`, as três `faixas` (título, artistas, duração, capa) e as `linhas`, cada uma com as palavras e o instante em que cada palavra acende. Depois vêm cores, fontes e ajudantes (`K` para chaves com influência, `retangulo`, `elipse`, `formaSVG`, `blur`, `glow`, `vivo`). As cenas são funções: `cenaIntro`, `cenaBusca`, `cenaCard`, `cenaApp`, `cenaLetra`; `montaFinal` costura tudo\n\n | `assets/preparar_assets.py`\n | recorta as três capas e gera o fundo cinza do app, o bokeh bordô e o padrão hipnótico\n\n | `assets/svg_para_ae.py`\n | converte o SVG do logo no JSON de caminhos que o `formaSVG` desenha\n\n | `audio/eventos_manuais.py`\n | escreve `eventos.json` com cada efeito no tempo da comp (subida dos arcos, teclas, cliques, rolagens, flashes)\n\n | `audio/trilha.py`\n | põe a música, corta no clique, volta na letra e soma os efeitos pela Mesa\n\n- **Fontes:** DM Sans e Poppins (Google Fonts) em `C:\\Program Files\\Common Files\\Adobe\\Fonts`; Segoe UI e Segoe Fluent Icons já vêm no Windows 11. Reinicie o After Effects.\n\n- **Abrir pronto:** `projeto/ae/lyric-spotify.aep`. Se o AE pedir arquivos, aponte para `projeto/assets/`. O projeto tem duas comps de teste do globo (`teste_A_sphere` e `teste_C_3d`) que não entram no vídeo.\n\n- **Adaptar:** troque os textos no bloco `T` e as imagens em `assets/`. Crie um projeto novo (File › New Project) e rode File › Scripts › Run Script File › `cenas.jsx`. Rode sempre num projeto limpo: a cada execução o script importa as imagens de novo.\n\n- **Tempos:** cada palavra tem o seu instante em `t`. Marque os inícios das palavras na sua música (transcrição com tempo por palavra) e troque os números; os rolls, os giros e o karaokê se ajustam sozinhos.\n\n- **Som:** ponha a sua música em `audio/musica.wav`, ajuste os trechos (`de`, `entra`) no `trilha.py`, aponte o `sys.path` para `audio/mesa/` e rode `python trilha.py`.\n\n- **Render:** fila do AE em H.264 com áudio do `mix.wav`, ou render sem som e junte depois com o ffmpeg.\n\n**Pegadinhas:** a opacidade de um null não chega aos filhos (as peças do logo multiplicam pela do null por expressão). Hue/Saturation não aceitou chave por script aqui: o ciclo de cor usa Color Balance (HLS). Parentear por script converte a rotação do pai em Orientation do filho; o gerador usa `setParentWithJump` para evitar isso."
50
+ },
51
+ {
52
+ "titulo": "As decisões de direção",
53
+ "texto": "- **O play acontece na tela.** Busca digitada, lista, cursor e clique antes da letra: o público entende onde está, e a música corta no clique e volta com a letra.\n\n- **Título borrado até o hover.** As faixas fechadas mostram o título desfocado, que só aparece quando o cursor passa: segura a curiosidade por um segundo.\n\n- **Uma linha por vez, a próxima já na tela.** A palavra futura fica a 50% e em 92% do tamanho; acende no instante da voz. Assim o 3D continua legível.\n\n- **O globo nunca para.** A linha gira com um chicote curto a cada palavra e deriva entre elas; a câmera tem um wiggle lento o tempo todo.\n\n- **O fundo ilustra a frase.** Só quando a frase pede imagem: fogo, silhueta, olho, e a íris vira o padrão hipnótico antes do zoom pela pupila.\n\n- **Flash como pontuação.** Inversão de 2 a 3 quadros nas palavras-chave e nas trocas de fundo, nunca em toda batida.\n\n- **Ciclo completo.** O vídeo volta à lista e clica na próxima faixa antes de sair, o que dá vontade de ver de novo.\n\nDetalhes de cores, tempos e números: estilo.md. Cenas por tempo: roteiro.md. Para fazer o seu com outra música: PROMPT.md."
54
+ },
55
+ {
56
+ "titulo": "As versões até o final",
57
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | **v1**\n | recriação da técnica cena a cena, conferida lado a lado com o original, com frases nossas na tela e o seu perfil na barra de busca"
58
+ }
59
+ ],
60
+ "pacote": [
61
+ {
62
+ "pasta": "projeto/",
63
+ "conteudo": "`ae/cenas.jsx` (o gerador comentado), `ae/lyric-spotify.aep` (o projeto montado) e `assets/` (imagens, logo em JSON e os scripts `preparar_assets.py` e `svg_para_ae.py`)"
64
+ },
65
+ {
66
+ "pasta": "audio/",
67
+ "conteudo": "`trilha.py` (a mix), `eventos_manuais.py` e `eventos.json` (os efeitos por tempo), `mix.wav` (o som final), `mesa/` (o motor de mix) e `sfx/` (os efeitos usados)"
68
+ },
69
+ {
70
+ "pasta": "referencias/",
71
+ "conteudo": "`estudo-da-referencia.md` (decupagem quadro a quadro), `links.md` e `fora-do-pacote.md`"
72
+ },
73
+ {
74
+ "pasta": "render.mp4",
75
+ "conteudo": "o vídeo final"
76
+ },
77
+ {
78
+ "pasta": "ae/cenas.jsx",
79
+ "conteudo": "monta tudo no projeto aberto. No topo, o bloco `T` guarda os textos: `busca1`, `assinatura`, `busca2`, as três `faixas` (título, artistas, duração, capa) e as `linhas`, cada uma com as palavras e o instante em que cada palavra acende. Depois vêm cores, fontes e ajudantes (`K` para chaves com influência, `retangulo`, `elipse`, `formaSVG`, `blur`, `glow`, `vivo`). As cenas são funções: `cenaIntro`, `cenaBusca`, `cenaCard`, `cenaApp`, `cenaLetra`; `montaFinal` costura tudo"
80
+ },
81
+ {
82
+ "pasta": "assets/preparar_assets.py",
83
+ "conteudo": "recorta as três capas e gera o fundo cinza do app, o bokeh bordô e o padrão hipnótico"
84
+ },
85
+ {
86
+ "pasta": "assets/svg_para_ae.py",
87
+ "conteudo": "converte o SVG do logo no JSON de caminhos que o `formaSVG` desenha"
88
+ },
89
+ {
90
+ "pasta": "audio/eventos_manuais.py",
91
+ "conteudo": "escreve `eventos.json` com cada efeito no tempo da comp (subida dos arcos, teclas, cliques, rolagens, flashes)"
92
+ },
93
+ {
94
+ "pasta": "audio/trilha.py",
95
+ "conteudo": "põe a música, corta no clique, volta na letra e soma os efeitos pela Mesa"
96
+ }
97
+ ],
98
+ "prompt": "Quero um edit de música no mesmo método do projeto \"A letra num globo 3D\", que está em 07-videos/projetos/letra-globo-3d/: um app de música faz o play na tela e depois cada frase roda num globo 3D, com a palavra da vez acesa.\n\nMúsica e trecho (arquivo e segundos de início e fim): {{MUSICA}}\nFrases da tela, uma por linha (2 a 4 palavras cada): {{FRASES}}\nMeu perfil (aparece na barra de busca e nas faixas): {{PERFIL}}\nBusca digitada e os três títulos da lista: {{BUSCA_E_FAIXAS}}\nImagens de fundo para as frases que pedem imagem (ou deixe que você escolha): {{FUNDOS}}\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 abra projeto/ae/cenas.jsx: o bloco T (busca1, assinatura, busca2, faixas, linhas com palavras e instantes), os ajudantes (K, retangulo, formaSVG, blur, glow, vivo) e as funções cenaIntro, cenaApp, cenaLetra e montaFinal. Me diga em poucas linhas o que muda com a minha música.\n\n2. Meça a música: o instante de cada palavra das frases (transcrição com tempo por palavra), os tempos fortes e onde cabe o corte do clique. Monte uma tabela linha › palavras › instantes › fundo.\n\n3. Decida os fundos: bokeh escuro como base e imagem própria só nas frases que citam algo que dá para ver. Me mostre a lista e espere meu ok.\n\n4. Prepare os assets antes de animar: capas das três faixas, imagens de fundo e o logo do app que você vai usar em SVG. Gere ou baixe, rode o preparar_assets.py adaptado e anote de onde veio cada imagem.\n\n5. Construa copiando o projeto, sem editar o original: troque o bloco T e os tempos, ajuste as janelas dos fundos e os flashes em cenaLetra e montaFinal. Rode o cenas.jsx num projeto novo do After Effects e me mostre uma folha de contato com 12 quadros, incluindo o meio dos rolls e do clique.\n\n6. Revise antes do render: palavra que acende fora da voz, linha que sai antes de ser lida, globo ou câmera parados, texto cortado na borda e fundo que troca sem flash.\n\n7. Faça o som: música em audio/musica.wav, trechos e corte no trilha.py, efeitos em eventos_manuais.py, mix pela Mesa a −14 LUFS. Renderize em H.264, junte o mix.wav e entregue o MP4 com uma anotação do que mudou em relação ao projeto.",
99
+ "campos": [
100
+ "BUSCA_E_FAIXAS",
101
+ "FRASES",
102
+ "FUNDOS",
103
+ "MUSICA",
104
+ "PERFIL"
105
+ ],
106
+ "fonte": {
107
+ "nome": "Clube do Motion",
108
+ "url": "https://clubedomotion.com/projeto/?id=letra-globo-3d",
109
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
110
+ }
111
+ }
@@ -0,0 +1,146 @@
1
+ {
2
+ "id": "clube-letra-nos-apps",
3
+ "titulo": "A letra mora nos apps",
4
+ "categoria": "sound",
5
+ "resumo": "edit de música de 37 s, sem narração, em que cada frase da letra é digitada dentro de uma interface conhecida (Google Agenda, Docs, alt-tab do Windows, Spotify, notas do Instagram, jornal 3D, busca do Google, mapa de jogo e Google Maps) e cada cena segue tocando dentro de um elemento pequeno da seguinte. É a recriação de um edit de @subzmotion: a câmera foi medida quadro a quadro no original e as 11 cenas foram montadas no After Effects por scripts, com quatro agentes trabalhando em paralelo. O vídeo abre com um celular filmando a tela, mergulha no edit e termina num card do Spotify que credita a música. Feito pelo Clube do Motion.",
6
+ "indicado": "edit de música de 30 a 40 s para Reels e Shorts, perfil de motion que quer mostrar câmera e interface no mesmo vídeo, música conhecida em que cada frase pede uma tela que todo mundo reconhece.",
7
+ "estilo": [
8
+ "edit de letra",
9
+ "interfaces reais recriadas",
10
+ "cena dentro de cena",
11
+ "câmera em cadeia de nulls",
12
+ "digitação no tempo da voz",
13
+ "jornal 3D",
14
+ "abertura com celular filmando a tela",
15
+ "card do Spotify no fim"
16
+ ],
17
+ "ficha": {
18
+ "formato": "1080×1920 a 24 qps, com o edit de 1080×1080 no meio e faixas pretas em cima e embaixo; desfoque de movimento com obturador de 90° e 16 amostras",
19
+ "duracao": "37,1 s (891 quadros), sem narração. O edit começa a tocar na tela do celular em 0,63 s, o mergulho termina em 2,75 s e o card do Spotify ocupa os últimos 2,6 s",
20
+ "motor": "ae",
21
+ "voz": "sem narração",
22
+ "musica": "ver o guia de estilo",
23
+ "fontes": "Google Sans Flex, Figtree, Roboto, Segoe UI, Poppins SemiBold, Anton, Noto Serif Display ExtraCondensed (Black e Bold) e Playfair Display Black"
24
+ },
25
+ "etapas": [
26
+ {
27
+ "titulo": "Leia-me",
28
+ "texto": "# A letra mora nos apps: onze interfaces numa câmera que não para\n\n> Data: 2026-10-17 · Tipo: projeto · Status: aprovado · Id: letra-nos-apps\n\n**Resumo:** edit de música de 37 s, sem narração, em que cada frase da letra é digitada dentro de uma interface conhecida (Google Agenda, Docs, alt-tab do Windows, Spotify, notas do Instagram, jornal 3D, busca do Google, mapa de jogo e Google Maps) e cada cena segue tocando dentro de um elemento pequeno da seguinte. É a recriação de um edit de @subzmotion: a câmera foi medida quadro a quadro no original e as 11 cenas foram montadas no After Effects por scripts, com quatro agentes trabalhando em paralelo. O vídeo abre com um celular filmando a tela, mergulha no edit e termina num card do Spotify que credita a música. Feito pelo Clube do Motion.\n\n## Descrição\n\nUma interface nasce da outra, sem corte. O evento da agenda encolhe até virar o ícone do Docs, a janela entra numa miniatura do alt-tab, a letra no Spotify vira o círculo de uma nota do Instagram, a nota vira a foto de um jornal, o jornal vira o ícone de um app no Google e o Google entra no marcador de um mapa, numa cadeia que só termina no pino do Google Maps. Em cada tela, a letra da música é digitada no campo que combina com ela, letra a letra e com cursor, no instante em que é cantada; a câmera recua nas trocas, avança nas palavras fortes e anda para a direita junto com o cursor. A letra entra por campos: você cola a letra inteira num arquivo de texto, e um script põe cada frase no campo certo, com o tempo de cada palavra.\n\n- **Indicado para:** edit de música de 30 a 40 s para Reels e Shorts, perfil de motion que quer mostrar câmera e interface no mesmo vídeo, música conhecida em que cada frase pede uma tela que todo mundo reconhece.\n- **Estilo:** edit de letra, interfaces reais recriadas, cena dentro de cena, câmera em cadeia de nulls, digitação no tempo da voz, jornal 3D, abertura com celular filmando a tela, card do Spotify no fim\n- **Formato:** 9:16 · 37,1 s · sem narração\n\n**Tutorial em vídeo:** em breve.\n\n## O vídeo\n\n| Item | Valor |\n|---|---|\n| Duração | 37,1 s (891 quadros), sem narração. O edit começa a tocar na tela do celular em 0,63 s, o mergulho termina em 2,75 s e o card do Spotify ocupa os últimos 2,6 s |\n| Formato | 1080×1920 a 24 qps, com o edit de 1080×1080 no meio e faixas pretas em cima e embaixo; desfoque de movimento com obturador de 90° e 16 amostras |\n| Ferramenta | After Effects, com um gerador ExtendScript por cena (11 cenas em 4 projetos) e um script de montagem. Python mede a câmera do original, distribui a letra nos campos e monta a abertura do celular |\n| Câmera | medida no original por fluxo óptico, corrigida por SIFT e gravada como chaves por quadro num null CAM em cada cena; os jornais usam um plano 3D medido por homografia. Comparada com a do original, a correlação fica entre 0,94 e 1,00 na maioria dos canais |\n| Interfaces | HTML e CSS fotografados em PNG 3× pelo Playwright, sem os textos digitados, que são camadas de texto do AE |\n| Imagens | personagens, fotos de estúdio, mesas, mapa de satélite, céus, foto P&B de olhos e capa do card gerados pelo GPT Image 2 (pelo Codex); ícones de apps oficiais, do Wikimedia e do Simple Icons |\n| Fontes | Google Sans Flex, Figtree, Roboto, Segoe UI, Poppins SemiBold, Anton, Noto Serif Display ExtraCondensed (Black e Bold) e Playfair Display Black |\n| Som | \"On My Way\" (Alan Walker, Sabrina Carpenter e Farruko), creditada no card; na cauda, a última frase volta em quatro ecos; −14,2 LUFS. A música fica fora do pacote |\n| Referência | edit \"On My Way\" de @subzmotion (07/10/2026, 1,87 milhão de plays) |\n| Arquivo final | MP4 H.264 com áudio AAC, 25,5 MB |\n\n## O que tem no pacote\n\n| Pasta | Conteúdo |\n|---|---|\n| `projeto/` | `ae/` (os 11 geradores de cena, de `A-agenda.jsx` a `K-maps.jsx`; os ajudantes `camera.jsx`, `camera-movimentos.jsx`, `digitar.jsx`, `letra.jsx`, `jornal-comum.jsx`, `wg-util.jsx` e `w-midia-comum.jsx`; `montagem.jsx`, `card-spotify.jsx`, `letra_automatica.py`, os modelos de letra e os projetos `cenas-w-*.aep` e `montagem.aep`), `assets/` (interfaces em HTML e PNG 3×, imagens, personagens e as fontes dos jornais), `camera/` (medição, câmera por cena, encaixes e os 40 movimentos ajustados), `transicao/` (os 6 scripts da abertura e o `config.json`), `guia-do-metodo/` (o passo a passo do estilo em 5 partes) e os docs `README.md`, `ROTEIRO-CENAS.md` e `BRIEF-AGENTES.md` |\n| `audio/` | `tempos_da_voz.py` (o tempo de cada palavra cantada, sem guardar a letra), `eco_cauda.py` (a cauda com eco do card) e `sfx/` (o whoosh e o golpe do mergulho) |\n| `referencias/` | `estudo-da-referencia.md` (o perfil de referência e a receita do estilo), `decupagem-do-edit.md` (o original quadro a quadro, com a câmera e a timeline do AE), `links.md` e `fora-do-pacote.md` |\n| `render.mp4` | o vídeo final (v2, com a abertura do celular) |\n\nFicam fora do pacote a música, a letra colada, o edit original, a gravação do celular e os ícones oficiais do alt-tab (saem de novo do Wikimedia e do Simple Icons). O `referencias/fora-do-pacote.md` lista cada arquivo. Os scripts procuram a música em `audio/musica.wav` (ou `musica-original.wav`) e a letra em `ae/letra.json`, que nasce do modelo `ae/letra-modelo.json`.\n\n### Como os scripts funcionam\n\n| Arquivo | O que faz |\n|---|---|\n| `ae/camera.jsx` | cria o null CAM com 4 controles (Zoom em log2, Mira X, Mira Y e Giro), põe o mundo da cena como filho dele, lê as chaves por quadro de `camera/cena-<id>.json` e, com `CAMERA_encaixe`, põe a cena vizinha no buraco certo |\n| `ae/camera-movimentos.jsx` | o rig do @subzmotion para escrever a câmera de uma música nova: um null \"MOV k\" por movimento, com 2 chaves e influência de 67% e 77%, e o CAM somando todos |\n| `ae/digitar.jsx` | expressão de Texto-fonte que digita letra a letra nos tempos de cada palavra, com um cursor que some 0,25 s depois da última letra |\n| `ae/letra_automatica.py` | transcreve a música com o faster-whisper (tempo por palavra), casa a transcrição com a letra colada em `ae/LETRA-COMPLETA.txt` e grava cada frase no seu campo de `ae/letra.json` (31 campos); imprime só contagens |\n| `ae/letra.jsx` | entrega ao gerador o texto e os tempos de um campo, ou o texto reserva em inglês quando o campo está vazio |\n| `ae/A-agenda.jsx` a `ae/K-maps.jsx` | um gerador por cena: apaga e recria a comp \"CENA <id>\" (1080×1080, 24 qps, tempo interno igual ao do vídeo) com a interface, os textos digitados, a câmera e o encaixe provisório da vizinha; o cabeçalho de cada um diz a linha que o executa |\n| `ae/montagem.jsx` | importa os 4 projetos de cenas, troca cada \"ENCAIXE <id>\" pela cena real (máscara e animação ficam), liga o desfoque de movimento a 90° e monta a comp principal com a música |\n| `ae/card-spotify.jsx` | congela o último quadro com deriva mínima, escurece a tela e sobe o card \"tocando agora\" até 36,5 s; título e artistas ficam no bloco `CARD` |\n| `camera/integrar.py`, `ancorar.py` e `assar.py` | medem a câmera de uma referência, nesta ordem: fluxo óptico quadro a quadro, correção da deriva por SIFT e as chaves de cada cena, com os encaixes em `encaixes.json` |\n| `camera/homografia_jornal.py`, `camera3d_jornal.py` e `dados_ae_jornal.py` | medem o plano dos jornais e gravam as chaves do null 3D PLANO |\n| `transicao/sincronia.py` a `juntar.py` | a abertura: acham o atraso entre o som do celular e o do edit, rastreiam a tela, seguem a mão pelo cenário fixo, montam o mergulho e juntam imagem e som |\n| `audio/tempos_da_voz.py` | grava o instante de cada palavra cantada e quantas letras ela tem, sem guardar a letra; é a régua do roteiro |\n\n## Como abrir e renderizar\n\n1. **Junte as pastas:** copie `audio/` para dentro de `projeto/`. Os `.jsx` acham a pasta do projeto sozinhos (é a pasta acima de `ae/`).\n2. **Fontes:** Google Sans Flex, Figtree, Roboto, Poppins, Anton e Playfair Display (Google Fonts) e as instâncias ExtraCondensed da Noto Serif Display, que vêm em `projeto/assets/F-jornal1/fontes/`, todas em `C:\\Program Files\\Common Files\\Adobe\\Fonts`. Segoe UI já vem no Windows. Reinicie o After Effects.\n3. **Abrir pronto:** `projeto/ae/montagem.aep`, comp \"MAIN recriacao On My Way\". Os `.aep` vêm com os textos reserva em inglês nos campos de letra, prontos para receber a sua. Se o AE pedir arquivos, aponte para `projeto/assets/` e para a sua música em `audio/musica-original.wav`.\n4. **Letra:** copie `ae/letra-modelo.json` para `ae/letra.json`; com os campos vazios, as cenas mostram os textos reserva em inglês. Para usar a letra da sua música, cole-a inteira em `ae/LETRA-COMPLETA.txt` (o modelo explica), ponha a música em `audio/musica.wav`, ajuste `JANELAS` no `letra_automatica.py` e rode `python -P ae/letra_automatica.py` (faster-whisper com GPU).\n5. **Cenas:** num projeto novo do AE, rode cada gerador pela linha do cabeçalho dele, com a comp fechada, e salve os grupos como `cenas-w-*.aep`. Depois, num projeto vazio, carregue o `montagem.jsx` e chame `MONT.importar()`, `MONT.trocarEncaixes()`, `MONT.blur()` e `MONT.principal()`; por fim, o `card-spotify.jsx` com `CARD_criar()`.\n6. **Som:** `python audio/eco_cauda.py` (rodado dentro de `audio/`) gera `mix-com-card.wav` a partir de `musica-original.wav`, com a cauda de 36,5 s.\n7. **Render:** `aerender` em trechos de 4 s numa pasta sem acento (o `aerender` não aceita \"ç\" no caminho), com o `mix-com-card.wav`; depois, a folha de contato a 2 qps com `camera/folha_contato.py`.\n8. **Abertura (opcional):** grave a tela tocando o render com o celular (dicas na parte 05 do guia), ponha a gravação em `transicao/bruto/`, extraia o som dela para `transicao/celular-48k.wav` e o mix do edit para `transicao/master-audio.wav`, acerte o `config.json` e rode, dentro de `transicao/`, `sincronia.py`, `rastreio.py`, `atraso_imagem.py`, `fundo.py`, `montar.py` e `juntar.py`.\n\n**Pegadinhas:** o `ffmpeg -ss` pega o quadro seguinte ao pedido, então extraia quadros de referência pelo índice; o Reel original vem sem metadado de cor, e a comparação só fecha com uma cópia em bt709. Com o desfoque ligado, o AE lê o texto 0,005 s antes do quadro, então a digitação termina um pouco antes de cada troca, para o cursor não vazar. Um revisor automático de movimento tende a reprovar câmera com chave em todo quadro; nesse estilo, é alarme falso. Na escala horizontal de texto, 1 vale 100%.\n\n## Decisões de direção que fizeram o vídeo funcionar\n\n1. **A palavra vira lugar.** Cada frase é digitada no campo que faz sentido para ela (título de evento, busca, manchete, nota, etiqueta de mapa), sempre numa interface que se reconhece em meio segundo.\n2. **Cena dentro de cena.** A cena anterior continua tocando dentro de um elemento da seguinte, e a máscara arredonda enquanto a câmera recua. As 11 cenas formam uma cadeia só, sem nenhum corte.\n3. **A câmera nunca para.** Cada movimento começa antes de o anterior acabar (duração mediana de 33 quadros, influência de 67% e 77%), e só o último meio segundo fica parado. Na digitação, a câmera anda para a direita com o cursor.\n4. **Tempo interno igual ao do vídeo.** Toda cena dura o vídeo inteiro e começa no zero, então a mesma comp serve na sequência e dentro do encaixe da vizinha, sempre no mesmo instante.\n5. **Medir antes de animar.** A câmera do original foi medida quadro a quadro e corrigida onde o rastreador errava (elemento que se mexe sozinho, interface inclinada em 3D, jornal em perspectiva), e cada cena foi conferida contra o original em vários instantes, inclusive no meio dos movimentos.\n6. **Interface no idioma da música.** A interface ficou em inglês, como no original, e a letra entrou por campos que um script preenche a partir da letra colada inteira, com o tempo de cada palavra.\n7. **Personagens nossos.** As pessoas são personagens gerados por IA, criados uma vez e reaproveitados em todas as cenas em que aparecem.\n8. **Obturador de 90°.** O rastro mede cerca de ¼ do deslocamento do quadro, como no original; com 180° a tela borrava demais.\n9. **Abertura que mostra a tela de verdade.** O vídeo abre num celular filmando o monitor com o edit parado no primeiro quadro; a troca para o render acontece antes do play, e a câmera mergulha na tela em 1,1 s até o quadrado encher a largura do Reel.\n10. **Crédito no fim.** O card \"tocando agora\", com capa nossa, credita a música enquanto a última frase volta em ecos cada vez mais baixos.\n11. **Quatro agentes, quatro cópias do AE.** As cenas foram divididas em grupos que se tocam pouco (A+B, C+D+E, F+J e G+H+I+K), cada agente na sua cópia do After Effects e no seu `.aep`; a montagem juntou tudo trocando os encaixes provisórios.\n\nDetalhes de câmera, tempos e números: [estilo.md](estilo.md). Cenas por tempo e encaixes: [roteiro.md](roteiro.md). Para fazer o seu com outra música: [PROMPT.md](PROMPT.md).\n\n## Versões\n\n| Versão | O que mudou |\n|---|---|\n| v1 | recriação das 11 cenas no After Effects em 1080×1080, 36,5 s com o card do Spotify, conferida lado a lado com o original e com a câmera comparada em números; aprovada (\"a recriação ficou perfeita\") |\n| **v2** | a mesma recriação com a abertura do celular filmando a tela e o mergulho no edit, em 1080×1920 e 37,1 s; é o vídeo deste pacote |\n"
29
+ },
30
+ {
31
+ "titulo": "Roteiro",
32
+ "texto": "# Roteiro: a letra mora nos apps\n\n> Data: 2026-10-17 · Tipo: roteiro · Status: aprovado · Projeto: letra-nos-apps\n\n**Resumo:** o vídeo não tem narração; o roteiro é a cadeia das 11 cenas-mundo, com o tempo de cada uma, os campos onde a letra é digitada e o elemento por onde cada cena entra na seguinte. A letra da música, digitada nos campos, não está neste roteiro: ela entra por `ae/letra.json`. Os tempos das cenas são os do edit; no vídeo final, com a abertura do celular, some 0,63 s.\n\n## De onde veio a estrutura\n\nO edit de referência passa por nove tipos de interface em 33,9 s, e cada frase cai na tela que a ilustra: tempo vira agenda, procurar vira busca, ouvir vira Spotify, falar de alguém vira nota do Instagram, afirmação forte vira manchete e lugar vira mapa. Este projeto mantém as cenas, os tempos, os encaixes e a câmera do original, troca pessoas e fotos por imagens nossas e acrescenta duas peças, a abertura do celular e o card que credita a música.\n\n## Abertura (vídeo final)\n\n| Tempo (s) | O que acontece |\n|---|---|\n| 0,00–0,63 | um celular filma o monitor num quarto escuro, com o edit parado no primeiro quadro; ouve-se o som do quarto |\n| 0,63–1,33 | o edit começa a tocar na tela, ainda visto pelo celular |\n| 1,33–2,43 | a câmera mergulha na tela em 1,1 s, com um whoosh, e tudo em volta escurece |\n| 2,43–2,75 | pouso com um golpe suave: o quadrado enche a largura do Reel e o render limpo continua |\n\n## Cenas (tempos do edit)\n\n| Cena | Tempo (s) | Interface | Campos da letra | Como entra na cena seguinte |\n|---|---|---|---|---|\n| A | 0,00–2,62 | Google Agenda escuro: chip do evento, visão do dia e cartão de detalhes | A1 (título do evento), A2 (2º evento), A3 (título do cartão, em caixa alta) | a janela encolhe até ser o fundo do ícone do app ao lado do menu da B, com uma esfera azul por cima |\n| B | 2,62–4,95 | Docs no Chrome escuro, busca em pílula, fundo de estrelas e globo | B1 (busca), B2 (2 palavras curvas em volta do globo, em caixa alta) | a janela vira a miniatura 1 do alt-tab, com borda ciano |\n| C | 4,95–6,04 | área de trabalho do Windows e barra do alt-tab | — | a seleção pula para a miniatura 2, que abre até a tela cheia com leve inclinação 3D |\n| D | 6,04–8,05 | Spotify com a letra em tela cheia, karaokê palavra a palavra | D1 a D9 (as 9 linhas; acendem a 5 e a 6) | a janela vira o círculo \"Your note\" das notas (de retângulo a círculo entre 8,04 e 8,42 s) |\n| E | 8,05–10,80 | notas do Instagram com 4 avatares e uma linha de conversa | E2 e E3 (balões digitados, em caixa alta) | o avatar com a nota vira a foto da página 1 do jornal |\n| F | 10,80–16,62 | jornal moderno 3D sobre mesa de madeira, 2 páginas | F1 a F4 (4 manchetes) | a página dupla vira o ícone do app em \"See results about\" |\n| G | 16,62–18,95 | busca do Google escura, com painel e grade de imagens | G1 (busca), G2 (título do painel) | a página vira um quadrado arredondado de borda amarela que encolhe até o marcador do mapa |\n| H | 18,95–22,30 | mapa de satélite estilo jogo com 2 marcadores | H1 (etiqueta-seta amarela), H2 (etiqueta branca) | uma miniatura nasce na etiqueta branca e vira a 1ª imagem da grade |\n| I | 22,30–24,62 | busca de imagens e resultado de vídeo | I1 (título da busca), I2 (título do vídeo; as 4 últimas palavras grifam em azul) | a página vira a figura pequena do jornal antigo |\n| J | 24,62–28,00 | jornal antigo 3D com foto P&B de olhos e o papel queimando | J1 (manchete em 2 linhas) | a foto da mesa vira um quadrado arredondado e depois o círculo do pino 1 |\n| K | 28,00–33,875 | Google Maps claro com 2 pinos-avatar, caixa de busca e avatar andando | K1 (rótulo do pino 1), K2 (busca), K3 (rótulo do pino 2), K4 (texto azul ao lado do avatar 2) | — |\n| card | 33,95–36,50 | card \"tocando agora\" do Spotify sobre o último quadro congelado | — | — |\n\nSão 31 campos ao todo. Cada um guarda, em `ae/letra.json`, a cena, o lugar na tela, quantas palavras mostra, os instantes em que elas são cantadas e um texto reserva em inglês, usado enquanto o campo está vazio.\n\n## Textos que não são letra\n\nRótulos de interface ficam no idioma da música e seguem o original: menus, abas, botões, cabeçalhos de jornal (\"THE DAILY DROP\", \"THE DAILY HERALD\"), datas e horários. Nomes de pessoas, perfis e lugares são fictícios: \"Studio Quadro\", \"studio.quadro\", lu.motion, the.producer, mari.frames, your.profile e os nomes do mapa de jogo.\n\n## Momentos para o som\n\n- O edit não tem efeito sonoro: só a música, como no original, com a digitação e o karaokê presos ao tempo da voz.\n- Na abertura, o som do quarto vai até o play; depois entra o mix limpo, com um whoosh crescendo no mergulho e um golpe suave no pouso.\n- No card, a música do Reel acaba em 33,92 s e a última frase volta em 4 ecos, cada vez mais baixos e abafados, até 36,5 s.\n"
33
+ },
34
+ {
35
+ "titulo": "Estilo",
36
+ "texto": "# Estilo do vídeo: a letra mora nos apps\n\n> Data: 2026-10-17 · Tipo: guia · Status: vigente · Projeto: letra-nos-apps\n\n**Resumo:** o estilo nasce de três escolhas: interfaces reais recriadas no idioma da música, uma câmera que embrulha um movimento no outro e nunca para, e trocas em que a cena encolhe até caber num elemento da seguinte. Os números abaixo vêm da medição do edit original, dos geradores das cenas e das fichas de revisão de cada cena.\n\n## Palco\n\n| Peça | Como é |\n|---|---|\n| Edit | 1080×1080, 24 qps, 33,9 s (814 quadros), mais a cauda do card até 36,5 s |\n| Reel | 1080×1920, com o edit no meio (y de 420 a 1500) e preto em volta |\n| Cenas | uma comp \"CENA <id>\" por cena-mundo, com a duração do vídeo inteiro e tempo interno igual ao do vídeo |\n| Mundo | a tela do original no instante de referência da cena; com a câmera em identidade, a comp mostra esse quadro |\n| Desfoque | obturador de 90°, fase −45°, 16 amostras, ligado em todas as comps e em toda camada que se mexe |\n| Zoom alto | acima de 3×, só vetor (forma e texto); PNG de interface em 3× do tamanho do mundo, a 33,3% de escala |\n\n## Câmera\n\n| Peça | Valor |\n|---|---|\n| Rig do original | 47 nulls, um por movimento, com 2 chaves Easy Ease em cada propriedade; cada null é filho do mais novo, e os objetos ficam presos ao mais antigo do bloco |\n| Ajuste | 40 movimentos reproduzem a câmera do original com 3% a 11% de erro (`camera/movimentos.json`) |\n| Duração | mediana de 1,37 s (33 quadros); quartis de 0,98 a 1,82 s |\n| Influência | cerca de 67% na chave de saída e 77% na de entrada, com velocidade zero nas pontas |\n| Curva | de 4 a 9 quadros acelerando, o pico e de 7 a 20 quadros freando |\n| Trocas | recuo de 20% a 50% de escala por quadro no pico |\n| Chicotes | até 420 px por quadro na horizontal e 360 na vertical |\n| Digitação | de 30 a 150 px por quadro para a direita, junto com o cursor |\n| Giro | quase zero nas cenas planas; de 1° a 4° por quadro nas cenas 3D e nos chicotes |\n| Parada | só no último meio segundo; a quase parada do alt-tab (5,5 a 5,8 s) ainda deriva 0,003 no zoom |\n\n### Câmera do original × recriação\n\nCorrelação quadro a quadro entre a câmera medida no original e a medida no render da recriação, por cena.\n\n| Cena | Zoom | Desloc. X | Desloc. Y |\n|---|---|---|---|\n| A · agenda | 0,96 | 0,41 | 0,94 |\n| B · Docs | 1,00 | 1,00 | 1,00 |\n| C · alt-tab | 1,00 | 0,87 | 0,84 |\n| D · Spotify | 0,99 | 1,00 | 1,00 |\n| E · notas | 0,99 | 0,95 | 0,97 |\n| F · jornal | 0,95 | 0,99 | 1,00 |\n| G · Google | 0,64 | 0,94 | 0,99 |\n| H · mapa de jogo | 0,63 | 0,97 | 0,96 |\n| I · imagens | 0,95 | 1,00 | 0,97 |\n| J · jornal antigo | 0,98 | 1,00 | 0,98 |\n| K · Google Maps | 0,39 | 0,99 | 0,98 |\n\nOs valores baixos de zoom em G, H e K vêm de picos de um quadro, nos trechos mais borrados, em que o rastreador falha; vistas quadro a quadro, as curvas coincidem.\n\n## Digitação\n\n| Peça | Valor |\n|---|---|\n| Ritmo | de 1 a 3 quadros por letra, começando até 0,35 s antes da palavra cantada |\n| Cursor | barra vertical que pisca 8 quadros acesa e 8 apagada e some 0,25 s depois da última letra |\n| Cenas A e B | a quantidade de letras em cada quadro foi copiada do original e guardada só como números (`A_QUADROS`, `B1Q`) |\n| Balões das notas | letra a letra com fade, em caixa de parágrafo que quebra em 2 linhas |\n| Karaokê | no Spotify, a palavra cantada acende nas linhas 5 e 6, nos tempos medidos no original |\n\n## Interfaces, fontes e cores\n\n| Cena | Como é |\n|---|---|\n| A · agenda | Google Agenda escuro em Google Sans Flex (chip em Medium 20, cartão em 45); começa a 61,6× dentro do anel do checkbox; o evento ganha check e risco em um quadro (de 1,21 para 1,25 s) e o cartão voa de baixo com a escala medida quadro a quadro |\n| B · Docs | menu em indonésio como no original, busca em pílula (corpo 25) e globo com 2 palavras curvas em Poppins SemiBold 98, raio 151, arco de 136,5° a 342,5°; só o anel de texto gira e para em cerca de 20° perto de 5,33 s |\n| C · alt-tab | área de trabalho do Windows com o retrato de um personagem, 12 ícones e uma borda ciano de 293,5 × 216,5 que pula da miniatura 1 para a 2 entre 5,29 e 5,71 s; a janela do Spotify abre de 5,79 a 6,04 s, inclinada de 9° a 0° |\n| D · Spotify | painel azul `#00335A` e 9 linhas em Figtree ExtraBold 60; a janela gira em Y até 17,5° em 6,9 s |\n| E · notas | notas do Instagram no modo escuro, balões em Segoe UI Bold 42 e perfis fictícios (lu.motion, the.producer, mari.frames e your.profile) |\n| F · jornal | \"THE DAILY DROP\" em 2 páginas sobre mesa escura, manchetes em Noto Serif Display ExtraCondensed Black e vermelho `#B3333B`; 4 fotos de estúdio com empurrão lento; a foto troca por uma cortina de baixo para cima entre 11,02 e 11,42 s |\n| G · Google | busca escura com painel e grade de 4 imagens; a página inclina até cerca de 28° em Y e 14° em X, num Corner Pin sobre o mundo da cena |\n| H · mapa de jogo | mapa de satélite gerado, etiquetas-seta em Anton e nomes em Roboto; inclina até cerca de 30° |\n| I · imagens | busca de imagens com 4 céus laranja e um resultado de vídeo com as últimas palavras grifadas em azul |\n| J · jornal antigo | \"THE DAILY HERALD\" sobre mesa clara, foto P&B de olhos e manchete em 2 linhas (ExtraCondensed Bold, escala horizontal de 57%); o papel queima em duas pré-comps, uma em multiplicar (tostado, carvão e chamas) e outra normal (brasa e furo) |\n| K · Google Maps | mapa claro vetorial, 2 pinos-avatar, caixa de busca e avatar andando pela estrada; textos em `#3C4043` e verde `#2E9E6E` |\n\n## Jornais em 3D\n\n- Não há camada de câmera nem CAM 2D: um null 3D \"PLANO (jornal 3D)\" recebe posição e rotação X, Y e Z em todo quadro, medidas por homografia, e a comp usa a câmera padrão (zoom 1500). O erro médio fica abaixo de 1 px na F e em cerca de 1,8 px na J.\n- A mesa é uma camada 2D com posição, escala e giro por quadro; embaixo dela, o fundo `#2D2D33` aparece quando a mesa encolhe.\n- A troca cai no primeiro quadro inteiro: 10,80 s vira o quadro 260 (10,833 s), e 24,62 s vira o 591 (24,625 s).\n\n## Abertura do celular\n\n| Peça | Valor |\n|---|---|\n| Gravação | celular em pé, 4K a 30 qps, com o edit parado no primeiro quadro por cerca de 1 s antes do play |\n| Sincronia | 1,329 s entre o som do celular e o do edit (correlação de 0,82) |\n| Rastreio | o próprio render como molde e ECC em homografia enquanto a tela está parada (correlação de 0,987); depois do play, a mão é seguida pelo cenário fixo em volta do monitor |\n| Troca invisível | 0,45 s antes do play, com o quadro 0 ainda parado na tela |\n| Mergulho | 1,1 s, curva bezier(0.5, 0, 0.2, 1), zoom em escala log, 12 amostras de borrão a 180° e um brilho de tela que cresce no meio |\n| Pouso | o quadrado enche a largura do Reel, o resto escurece até o preto e o render limpo continua do quadro seguinte, sem quadro repetido |\n| Som | o quarto até o play, o mix limpo depois, um whoosh que cresce no mergulho e um golpe suave no pouso |\n\n## Card do Spotify e som\n\n| Peça | Valor |\n|---|---|\n| Card | o último quadro fica congelado com deriva mínima, a tela escurece 38% e o card \"tocando agora\" sobe com mola a partir de 33,95 s, com a barra indo de 34% a 41% |\n| Cauda | a última frase volta em 4 ecos, a cada 375 ms, com ganho de 0,45, 0,30, 0,19 e 0,11 e filtro de 5.000 a 1.800 Hz; tudo some até 36,5 s |\n| Mix | −14,2 LUFS; no edit não há efeito sonoro além da música, como no original |\n\n## O que é \"humano\" neste vídeo\n\n- A câmera embrulha um movimento no outro e não para no meio de uma frase.\n- O cursor pisca como num app de verdade, e a digitação anda junto com a voz, às vezes um pouco antes dela.\n- Os jornais balançam em perspectiva real sobre a mesa, com sombra das folhas e uma leve dobra no meio.\n"
37
+ },
38
+ {
39
+ "titulo": "O roteiro",
40
+ "texto": "**Resumo:** o vídeo não tem narração; o roteiro é a cadeia das 11 cenas-mundo, com o tempo de cada uma, os campos onde a letra é digitada e o elemento por onde cada cena entra na seguinte. A letra da música, digitada nos campos, não está neste roteiro: ela entra por `ae/letra.json`. Os tempos das cenas são os do edit; no vídeo final, com a abertura do celular, some 0,63 s.\n\n## De onde veio a estrutura\n\nO edit de referência passa por nove tipos de interface em 33,9 s, e cada frase cai na tela que a ilustra: tempo vira agenda, procurar vira busca, ouvir vira Spotify, falar de alguém vira nota do Instagram, afirmação forte vira manchete e lugar vira mapa. Este projeto mantém as cenas, os tempos, os encaixes e a câmera do original, troca pessoas e fotos por imagens nossas e acrescenta duas peças, a abertura do celular e o card que credita a música.\n\n## Abertura (vídeo final)\n\n | \n\n | Tempo (s)\n | O que acontece\n\n | 0,00–0,63\n | um celular filma o monitor num quarto escuro, com o edit parado no primeiro quadro; ouve-se o som do quarto\n\n | 0,63–1,33\n | o edit começa a tocar na tela, ainda visto pelo celular\n\n | 1,33–2,43\n | a câmera mergulha na tela em 1,1 s, com um whoosh, e tudo em volta escurece\n\n | 2,43–2,75\n | pouso com um golpe suave: o quadrado enche a largura do Reel e o render limpo continua\n\n## Cenas (tempos do edit)\n\n | \n\n | Cena\n | Tempo (s)\n | Interface\n | Campos da letra\n | Como entra na cena seguinte\n\n | A\n | 0,00–2,62\n | Google Agenda escuro: chip do evento, visão do dia e cartão de detalhes\n | A1 (título do evento), A2 (2º evento), A3 (título do cartão, em caixa alta)\n | a janela encolhe até ser o fundo do ícone do app ao lado do menu da B, com uma esfera azul por cima\n\n | B\n | 2,62–4,95\n | Docs no Chrome escuro, busca em pílula, fundo de estrelas e globo\n | B1 (busca), B2 (2 palavras curvas em volta do globo, em caixa alta)\n | a janela vira a miniatura 1 do alt-tab, com borda ciano\n\n | C\n | 4,95–6,04\n | área de trabalho do Windows e barra do alt-tab\n | —\n | a seleção pula para a miniatura 2, que abre até a tela cheia com leve inclinação 3D\n\n | D\n | 6,04–8,05\n | Spotify com a letra em tela cheia, karaokê palavra a palavra\n | D1 a D9 (as 9 linhas; acendem a 5 e a 6)\n | a janela vira o círculo \"Your note\" das notas (de retângulo a círculo entre 8,04 e 8,42 s)\n\n | E\n | 8,05–10,80\n | notas do Instagram com 4 avatares e uma linha de conversa\n | E2 e E3 (balões digitados, em caixa alta)\n | o avatar com a nota vira a foto da página 1 do jornal\n\n | F\n | 10,80–16,62\n | jornal moderno 3D sobre mesa de madeira, 2 páginas\n | F1 a F4 (4 manchetes)\n | a página dupla vira o ícone do app em \"See results about\"\n\n | G\n | 16,62–18,95\n | busca do Google escura, com painel e grade de imagens\n | G1 (busca), G2 (título do painel)\n | a página vira um quadrado arredondado de borda amarela que encolhe até o marcador do mapa\n\n | H\n | 18,95–22,30\n | mapa de satélite estilo jogo com 2 marcadores\n | H1 (etiqueta-seta amarela), H2 (etiqueta branca)\n | uma miniatura nasce na etiqueta branca e vira a 1ª imagem da grade\n\n | I\n | 22,30–24,62\n | busca de imagens e resultado de vídeo\n | I1 (título da busca), I2 (título do vídeo; as 4 últimas palavras grifam em azul)\n | a página vira a figura pequena do jornal antigo\n\n | J\n | 24,62–28,00\n | jornal antigo 3D com foto P&B de olhos e o papel queimando\n | J1 (manchete em 2 linhas)\n | a foto da mesa vira um quadrado arredondado e depois o círculo do pino 1\n\n | K\n | 28,00–33,875\n | Google Maps claro com 2 pinos-avatar, caixa de busca e avatar andando\n | K1 (rótulo do pino 1), K2 (busca), K3 (rótulo do pino 2), K4 (texto azul ao lado do avatar 2)\n | —\n\n | card\n | 33,95–36,50\n | card \"tocando agora\" do Spotify sobre o último quadro congelado\n | —\n | —\n\nSão 31 campos ao todo. Cada um guarda, em `ae/letra.json`, a cena, o lugar na tela, quantas palavras mostra, os instantes em que elas são cantadas e um texto reserva em inglês, usado enquanto o campo está vazio.\n\n## Textos que não são letra\n\nRótulos de interface ficam no idioma da música e seguem o original: menus, abas, botões, cabeçalhos de jornal (\"THE DAILY DROP\", \"THE DAILY HERALD\"), datas e horários. Nomes de pessoas, perfis e lugares são fictícios: \"Studio Quadro\", \"studio.quadro\", lu.motion, the.producer, mari.frames, your.profile e os nomes do mapa de jogo.\n\n## Momentos para o som\n\n- O edit não tem efeito sonoro: só a música, como no original, com a digitação e o karaokê presos ao tempo da voz.\n\n- Na abertura, o som do quarto vai até o play; depois entra o mix limpo, com um whoosh crescendo no mergulho e um golpe suave no pouso.\n\n- No card, a música do Reel acaba em 33,92 s e a última frase volta em 4 ecos, cada vez mais baixos e abafados, até 36,5 s."
41
+ },
42
+ {
43
+ "titulo": "A identidade visual",
44
+ "texto": "**Resumo:** o estilo nasce de três escolhas: interfaces reais recriadas no idioma da música, uma câmera que embrulha um movimento no outro e nunca para, e trocas em que a cena encolhe até caber num elemento da seguinte. Os números abaixo vêm da medição do edit original, dos geradores das cenas e das fichas de revisão de cada cena.\n\n## Palco\n\n | \n\n | Peça\n | Como é\n\n | Edit\n | 1080×1080, 24 qps, 33,9 s (814 quadros), mais a cauda do card até 36,5 s\n\n | Reel\n | 1080×1920, com o edit no meio (y de 420 a 1500) e preto em volta\n\n | Cenas\n | uma comp \"CENA \" por cena-mundo, com a duração do vídeo inteiro e tempo interno igual ao do vídeo\n\n | Mundo\n | a tela do original no instante de referência da cena; com a câmera em identidade, a comp mostra esse quadro\n\n | Desfoque\n | obturador de 90°, fase −45°, 16 amostras, ligado em todas as comps e em toda camada que se mexe\n\n | Zoom alto\n | acima de 3×, só vetor (forma e texto); PNG de interface em 3× do tamanho do mundo, a 33,3% de escala\n\n## Câmera\n\n | \n\n | Peça\n | Valor\n\n | Rig do original\n | 47 nulls, um por movimento, com 2 chaves Easy Ease em cada propriedade; cada null é filho do mais novo, e os objetos ficam presos ao mais antigo do bloco\n\n | Ajuste\n | 40 movimentos reproduzem a câmera do original com 3% a 11% de erro (`camera/movimentos.json`)\n\n | Duração\n | mediana de 1,37 s (33 quadros); quartis de 0,98 a 1,82 s\n\n | Influência\n | cerca de 67% na chave de saída e 77% na de entrada, com velocidade zero nas pontas\n\n | Curva\n | de 4 a 9 quadros acelerando, o pico e de 7 a 20 quadros freando\n\n | Trocas\n | recuo de 20% a 50% de escala por quadro no pico\n\n | Chicotes\n | até 420 px por quadro na horizontal e 360 na vertical\n\n | Digitação\n | de 30 a 150 px por quadro para a direita, junto com o cursor\n\n | Giro\n | quase zero nas cenas planas; de 1° a 4° por quadro nas cenas 3D e nos chicotes\n\n | Parada\n | só no último meio segundo; a quase parada do alt-tab (5,5 a 5,8 s) ainda deriva 0,003 no zoom\n\n## Câmera do original × recriação\n\nCorrelação quadro a quadro entre a câmera medida no original e a medida no render da recriação, por cena.\n\n | \n\n | Cena\n | Zoom\n | Desloc. X\n | Desloc. Y\n\n | A · agenda\n | 0,96\n | 0,41\n | 0,94\n\n | B · Docs\n | 1,00\n | 1,00\n | 1,00\n\n | C · alt-tab\n | 1,00\n | 0,87\n | 0,84\n\n | D · Spotify\n | 0,99\n | 1,00\n | 1,00\n\n | E · notas\n | 0,99\n | 0,95\n | 0,97\n\n | F · jornal\n | 0,95\n | 0,99\n | 1,00\n\n | G · Google\n | 0,64\n | 0,94\n | 0,99\n\n | H · mapa de jogo\n | 0,63\n | 0,97\n | 0,96\n\n | I · imagens\n | 0,95\n | 1,00\n | 0,97\n\n | J · jornal antigo\n | 0,98\n | 1,00\n | 0,98\n\n | K · Google Maps\n | 0,39\n | 0,99\n | 0,98\n\nOs valores baixos de zoom em G, H e K vêm de picos de um quadro, nos trechos mais borrados, em que o rastreador falha; vistas quadro a quadro, as curvas coincidem.\n\n## Digitação\n\n | \n\n | Peça\n | Valor\n\n | Ritmo\n | de 1 a 3 quadros por letra, começando até 0,35 s antes da palavra cantada\n\n | Cursor\n | barra vertical que pisca 8 quadros acesa e 8 apagada e some 0,25 s depois da última letra\n\n | Cenas A e B\n | a quantidade de letras em cada quadro foi copiada do original e guardada só como números (`A_QUADROS`, `B1Q`)\n\n | Balões das notas\n | letra a letra com fade, em caixa de parágrafo que quebra em 2 linhas\n\n | Karaokê\n | no Spotify, a palavra cantada acende nas linhas 5 e 6, nos tempos medidos no original\n\n## Interfaces, fontes e cores\n\n | \n\n | Cena\n | Como é\n\n | A · agenda\n | Google Agenda escuro em Google Sans Flex (chip em Medium 20, cartão em 45); começa a 61,6× dentro do anel do checkbox; o evento ganha check e risco em um quadro (de 1,21 para 1,25 s) e o cartão voa de baixo com a escala medida quadro a quadro\n\n | B · Docs\n | menu em indonésio como no original, busca em pílula (corpo 25) e globo com 2 palavras curvas em Poppins SemiBold 98, raio 151, arco de 136,5° a 342,5°; só o anel de texto gira e para em cerca de 20° perto de 5,33 s\n\n | C · alt-tab\n | área de trabalho do Windows com o retrato de um personagem, 12 ícones e uma borda ciano de 293,5 × 216,5 que pula da miniatura 1 para a 2 entre 5,29 e 5,71 s; a janela do Spotify abre de 5,79 a 6,04 s, inclinada de 9° a 0°\n\n | D · Spotify\n | painel azul `#00335A` e 9 linhas em Figtree ExtraBold 60; a janela gira em Y até 17,5° em 6,9 s\n\n | E · notas\n | notas do Instagram no modo escuro, balões em Segoe UI Bold 42 e perfis fictícios (lu.motion, the.producer, mari.frames e your.profile)\n\n | F · jornal\n | \"THE DAILY DROP\" em 2 páginas sobre mesa escura, manchetes em Noto Serif Display ExtraCondensed Black e vermelho `#B3333B`; 4 fotos de estúdio com empurrão lento; a foto troca por uma cortina de baixo para cima entre 11,02 e 11,42 s\n\n | G · Google\n | busca escura com painel e grade de 4 imagens; a página inclina até cerca de 28° em Y e 14° em X, num Corner Pin sobre o mundo da cena\n\n | H · mapa de jogo\n | mapa de satélite gerado, etiquetas-seta em Anton e nomes em Roboto; inclina até cerca de 30°\n\n | I · imagens\n | busca de imagens com 4 céus laranja e um resultado de vídeo com as últimas palavras grifadas em azul\n\n | J · jornal antigo\n | \"THE DAILY HERALD\" sobre mesa clara, foto P&B de olhos e manchete em 2 linhas (ExtraCondensed Bold, escala horizontal de 57%); o papel queima em duas pré-comps, uma em multiplicar (tostado, carvão e chamas) e outra normal (brasa e furo)\n\n | K · Google Maps\n | mapa claro vetorial, 2 pinos-avatar, caixa de busca e avatar andando pela estrada; textos em `#3C4043` e verde `#2E9E6E`\n\n## Jornais em 3D\n\n- Não há camada de câmera nem CAM 2D: um null 3D \"PLANO (jornal 3D)\" recebe posição e rotação X, Y e Z em todo quadro, medidas por homografia, e a comp usa a câmera padrão (zoom 1500). O erro médio fica abaixo de 1 px na F e em cerca de 1,8 px na J.\n\n- A mesa é uma camada 2D com posição, escala e giro por quadro; embaixo dela, o fundo `#2D2D33` aparece quando a mesa encolhe.\n\n- A troca cai no primeiro quadro inteiro: 10,80 s vira o quadro 260 (10,833 s), e 24,62 s vira o 591 (24,625 s).\n\n## Abertura do celular\n\n | \n\n | Peça\n | Valor\n\n | Gravação\n | celular em pé, 4K a 30 qps, com o edit parado no primeiro quadro por cerca de 1 s antes do play\n\n | Sincronia\n | 1,329 s entre o som do celular e o do edit (correlação de 0,82)\n\n | Rastreio\n | o próprio render como molde e ECC em homografia enquanto a tela está parada (correlação de 0,987); depois do play, a mão é seguida pelo cenário fixo em volta do monitor\n\n | Troca invisível\n | 0,45 s antes do play, com o quadro 0 ainda parado na tela\n\n | Mergulho\n | 1,1 s, curva bezier(0.5, 0, 0.2, 1), zoom em escala log, 12 amostras de borrão a 180° e um brilho de tela que cresce no meio\n\n | Pouso\n | o quadrado enche a largura do Reel, o resto escurece até o preto e o render limpo continua do quadro seguinte, sem quadro repetido\n\n | Som\n | o quarto até o play, o mix limpo depois, um whoosh que cresce no mergulho e um golpe suave no pouso\n\n## Card do Spotify e som\n\n | \n\n | Peça\n | Valor\n\n | Card\n | o último quadro fica congelado com deriva mínima, a tela escurece 38% e o card \"tocando agora\" sobe com mola a partir de 33,95 s, com a barra indo de 34% a 41%\n\n | Cauda\n | a última frase volta em 4 ecos, a cada 375 ms, com ganho de 0,45, 0,30, 0,19 e 0,11 e filtro de 5.000 a 1.800 Hz; tudo some até 36,5 s\n\n | Mix\n | −14,2 LUFS; no edit não há efeito sonoro além da música, como no original\n\n## O que é \"humano\" neste vídeo\n\n- A câmera embrulha um movimento no outro e não para no meio de uma frase.\n\n- O cursor pisca como num app de verdade, e a digitação anda junto com a voz, às vezes um pouco antes dela.\n\n- Os jornais balançam em perspectiva real sobre a mesa, com sombra das folhas e uma leve dobra no meio."
45
+ },
46
+ {
47
+ "titulo": "A montagem no After Effects",
48
+ "texto": "| \n\n | Arquivo\n | O que faz\n\n | `ae/camera.jsx`\n | cria o null CAM com 4 controles (Zoom em log2, Mira X, Mira Y e Giro), põe o mundo da cena como filho dele, lê as chaves por quadro de `camera/cena-<id>.json` e, com `CAMERA_encaixe`, põe a cena vizinha no buraco certo\n\n | `ae/camera-movimentos.jsx`\n | o rig do @subzmotion para escrever a câmera de uma música nova: um null \"MOV k\" por movimento, com 2 chaves e influência de 67% e 77%, e o CAM somando todos\n\n | `ae/digitar.jsx`\n | expressão de Texto-fonte que digita letra a letra nos tempos de cada palavra, com um cursor que some 0,25 s depois da última letra\n\n | `ae/letra_automatica.py`\n | transcreve a música com o faster-whisper (tempo por palavra), casa a transcrição com a letra colada em `ae/LETRA-COMPLETA.txt` e grava cada frase no seu campo de `ae/letra.json` (31 campos); imprime só contagens\n\n | `ae/letra.jsx`\n | entrega ao gerador o texto e os tempos de um campo, ou o texto reserva em inglês quando o campo está vazio\n\n | `ae/A-agenda.jsx` a `ae/K-maps.jsx`\n | um gerador por cena: apaga e recria a comp \"CENA \" (1080×1080, 24 qps, tempo interno igual ao do vídeo) com a interface, os textos digitados, a câmera e o encaixe provisório da vizinha; o cabeçalho de cada um diz a linha que o executa\n\n | `ae/montagem.jsx`\n | importa os 4 projetos de cenas, troca cada \"ENCAIXE \" pela cena real (máscara e animação ficam), liga o desfoque de movimento a 90° e monta a comp principal com a música\n\n | `ae/card-spotify.jsx`\n | congela o último quadro com deriva mínima, escurece a tela e sobe o card \"tocando agora\" até 36,5 s; título e artistas ficam no bloco `CARD`\n\n | `camera/integrar.py`, `ancorar.py` e `assar.py`\n | medem a câmera de uma referência, nesta ordem: fluxo óptico quadro a quadro, correção da deriva por SIFT e as chaves de cada cena, com os encaixes em `encaixes.json`\n\n | `camera/homografia_jornal.py`, `camera3d_jornal.py` e `dados_ae_jornal.py`\n | medem o plano dos jornais e gravam as chaves do null 3D PLANO\n\n | `transicao/sincronia.py` a `juntar.py`\n | a abertura: acham o atraso entre o som do celular e o do edit, rastreiam a tela, seguem a mão pelo cenário fixo, montam o mergulho e juntam imagem e som\n\n | `audio/tempos_da_voz.py`\n | grava o instante de cada palavra cantada e quantas letras ela tem, sem guardar a letra; é a régua do roteiro\n\n- **Junte as pastas:** copie `audio/` para dentro de `projeto/`. Os `.jsx` acham a pasta do projeto sozinhos (é a pasta acima de `ae/`).\n\n- **Fontes:** Google Sans Flex, Figtree, Roboto, Poppins, Anton e Playfair Display (Google Fonts) e as instâncias ExtraCondensed da Noto Serif Display, que vêm em `projeto/assets/F-jornal1/fontes/`, todas em `C:\\Program Files\\Common Files\\Adobe\\Fonts`. Segoe UI já vem no Windows. Reinicie o After Effects.\n\n- **Abrir pronto:** `projeto/ae/montagem.aep`, comp \"MAIN recriacao On My Way\". Os `.aep` vêm com os textos reserva em inglês nos campos de letra, prontos para receber a sua. Se o AE pedir arquivos, aponte para `projeto/assets/` e para a sua música em `audio/musica-original.wav`.\n\n- **Letra:** copie `ae/letra-modelo.json` para `ae/letra.json`; com os campos vazios, as cenas mostram os textos reserva em inglês. Para usar a letra da sua música, cole-a inteira em `ae/LETRA-COMPLETA.txt` (o modelo explica), ponha a música em `audio/musica.wav`, ajuste `JANELAS` no `letra_automatica.py` e rode `python -P ae/letra_automatica.py` (faster-whisper com GPU).\n\n- **Cenas:** num projeto novo do AE, rode cada gerador pela linha do cabeçalho dele, com a comp fechada, e salve os grupos como `cenas-w-*.aep`. Depois, num projeto vazio, carregue o `montagem.jsx` e chame `MONT.importar()`, `MONT.trocarEncaixes()`, `MONT.blur()` e `MONT.principal()`; por fim, o `card-spotify.jsx` com `CARD_criar()`.\n\n- **Som:** `python audio/eco_cauda.py` (rodado dentro de `audio/`) gera `mix-com-card.wav` a partir de `musica-original.wav`, com a cauda de 36,5 s.\n\n- **Render:** `aerender` em trechos de 4 s numa pasta sem acento (o `aerender` não aceita \"ç\" no caminho), com o `mix-com-card.wav`; depois, a folha de contato a 2 qps com `camera/folha_contato.py`.\n\n- **Abertura (opcional):** grave a tela tocando o render com o celular (dicas na parte 05 do guia), ponha a gravação em `transicao/bruto/`, extraia o som dela para `transicao/celular-48k.wav` e o mix do edit para `transicao/master-audio.wav`, acerte o `config.json` e rode, dentro de `transicao/`, `sincronia.py`, `rastreio.py`, `atraso_imagem.py`, `fundo.py`, `montar.py` e `juntar.py`.\n\n**Pegadinhas:** o `ffmpeg -ss` pega o quadro seguinte ao pedido, então extraia quadros de referência pelo índice; o Reel original vem sem metadado de cor, e a comparação só fecha com uma cópia em bt709. Com o desfoque ligado, o AE lê o texto 0,005 s antes do quadro, então a digitação termina um pouco antes de cada troca, para o cursor não vazar. Um revisor automático de movimento tende a reprovar câmera com chave em todo quadro; nesse estilo, é alarme falso. Na escala horizontal de texto, 1 vale 100%."
49
+ },
50
+ {
51
+ "titulo": "As decisões de direção",
52
+ "texto": "- **A palavra vira lugar.** Cada frase é digitada no campo que faz sentido para ela (título de evento, busca, manchete, nota, etiqueta de mapa), sempre numa interface que se reconhece em meio segundo.\n\n- **Cena dentro de cena.** A cena anterior continua tocando dentro de um elemento da seguinte, e a máscara arredonda enquanto a câmera recua. As 11 cenas formam uma cadeia só, sem nenhum corte.\n\n- **A câmera nunca para.** Cada movimento começa antes de o anterior acabar (duração mediana de 33 quadros, influência de 67% e 77%), e só o último meio segundo fica parado. Na digitação, a câmera anda para a direita com o cursor.\n\n- **Tempo interno igual ao do vídeo.** Toda cena dura o vídeo inteiro e começa no zero, então a mesma comp serve na sequência e dentro do encaixe da vizinha, sempre no mesmo instante.\n\n- **Medir antes de animar.** A câmera do original foi medida quadro a quadro e corrigida onde o rastreador errava (elemento que se mexe sozinho, interface inclinada em 3D, jornal em perspectiva), e cada cena foi conferida contra o original em vários instantes, inclusive no meio dos movimentos.\n\n- **Interface no idioma da música.** A interface ficou em inglês, como no original, e a letra entrou por campos que um script preenche a partir da letra colada inteira, com o tempo de cada palavra.\n\n- **Personagens nossos.** As pessoas são personagens gerados por IA, criados uma vez e reaproveitados em todas as cenas em que aparecem.\n\n- **Obturador de 90°.** O rastro mede cerca de ¼ do deslocamento do quadro, como no original; com 180° a tela borrava demais.\n\n- **Abertura que mostra a tela de verdade.** O vídeo abre num celular filmando o monitor com o edit parado no primeiro quadro; a troca para o render acontece antes do play, e a câmera mergulha na tela em 1,1 s até o quadrado encher a largura do Reel.\n\n- **Crédito no fim.** O card \"tocando agora\", com capa nossa, credita a música enquanto a última frase volta em ecos cada vez mais baixos.\n\n- **Quatro agentes, quatro cópias do AE.** As cenas foram divididas em grupos que se tocam pouco (A+B, C+D+E, F+J e G+H+I+K), cada agente na sua cópia do After Effects e no seu `.aep`; a montagem juntou tudo trocando os encaixes provisórios.\n\nDetalhes de câmera, tempos e números: estilo.md. Cenas por tempo e encaixes: roteiro.md. Para fazer o seu com outra música: PROMPT.md."
53
+ },
54
+ {
55
+ "titulo": "As versões até o final",
56
+ "texto": "| \n\n | Versão\n | O que mudou\n\n | v1\n | recriação das 11 cenas no After Effects em 1080×1080, 36,5 s com o card do Spotify, conferida lado a lado com o original e com a câmera comparada em números; aprovada (\"a recriação ficou perfeita\")\n\n | **v2**\n | a mesma recriação com a abertura do celular filmando a tela e o mergulho no edit, em 1080×1920 e 37,1 s; é o vídeo deste pacote"
57
+ }
58
+ ],
59
+ "prompt": "# Prompt: edit de letra em cadeia de interfaces\n\n> Data: 2026-10-17 · Tipo: guia · Status: vigente · Projeto: letra-nos-apps\n\n**Resumo:** o prompt para colar no seu agente (Claude Code ou Codex), aberto na pasta da sua central, para ele estudar este projeto e montar um edit de outra música no mesmo método: cada frase digitada numa interface que todo mundo conhece, cada cena tocando dentro de um elemento da seguinte e uma câmera em cadeia de nulls que não para. Troque os marcadores `{{…}}` ou apague a linha, e o agente pergunta.\n\n## Como usar\n\n1. Descompacte o pacote em `07-videos/projetos/letra-nos-apps/` dentro da sua central e copie `audio/` para dentro de `projeto/`.\n2. Instale as fontes da lista do LEIA-ME e veja em `referencias/fora-do-pacote.md` o que você precisa trazer: a música, a letra e, se quiser a abertura, uma gravação da sua tela.\n3. Separe de 30 a 40 s da música e copie a letra inteira dela. O agente não escreve a letra: você cola.\n4. Abra o agente na pasta da central, copie o bloco abaixo, troque os marcadores que já souber e cole.\n\n## O prompt\n\n```text\nQuero um edit de música no mesmo método do projeto \"A letra mora nos apps\", que está em 07-videos/projetos/letra-nos-apps/: cada frase da letra é digitada dentro de uma interface conhecida, cada cena continua tocando dentro de um elemento pequeno da seguinte e a câmera é uma cadeia de nulls que nunca para.\n\nMúsica e trecho (arquivo e segundos de início e fim, de 30 a 40 s): {{MUSICA}}\nIdioma da música (a interface fica nesse idioma): {{IDIOMA}}\nInterfaces que eu quero ver, se tiver preferência (agenda, busca, Spotify, notas, jornal, mapa, WhatsApp, iFood...): {{INTERFACES}}\nPersonagens dos avatares e das fotos (serão gerados; nada de pessoa real conhecida): {{PERSONAGENS}}\nAbertura com o celular filmando a tela (sim ou não; se sim, eu gravo depois do primeiro render): {{ABERTURA}}\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 as 5 partes de projeto/guia-do-metodo/. Abra projeto/ae/camera.jsx, camera-movimentos.jsx, digitar.jsx, letra.jsx, letra_automatica.py, montagem.jsx, card-spotify.jsx e dois geradores de cena (A-agenda.jsx e F-jornal1.jsx). Me diga em poucas linhas o que você vai reaproveitar.\n\n2. Não escreva nem copie a letra da música em nenhum arquivo nem em nenhuma mensagem. Eu colo a letra inteira em ae/LETRA-COMPLETA.txt. Rode audio/tempos_da_voz.py na música: ele grava só o tempo de cada palavra e quantas letras ela tem, e essa é a régua do roteiro.\n\n3. Monte o roteiro de cenas no molde do ROTEIRO-CENAS.md: cenas-mundo de 1,5 a 6 s, a interface de cada uma (a que ilustra a palavra mais concreta da frase), os campos onde a letra é digitada (quantas palavras e em que instantes) e o \"buraco\" onde a cena anterior entra (avatar, ícone, foto, miniatura, pino). Me mostre a tabela e espere meu ok.\n\n4. Crie os campos em ae/letra.json a partir do ae/letra-modelo.json, ajuste JANELAS, CAIXA_ALTA e INICIAL_MAIUSCULA no letra_automatica.py e, depois que eu colar a letra, rode python -P ae/letra_automatica.py. Ele imprime só contagens: confira se cada campo recebeu o número de palavras previsto e, se dois campos vizinhos trocarem uma palavra, mova a divisa entre as janelas deles.\n\n5. Prepare interfaces e imagens antes de animar: HTML e CSS fotografados em PNG 3× pelo Playwright, sem os textos que serão digitados; personagens gerados uma vez em assets/comum/ e reaproveitados; ícones oficiais dos apps. Interface no idioma da música.\n\n6. Escreva a câmera como lista de movimentos para o camera-movimentos.jsx: recuo de 2 a 4 oitavas em cada troca, avanço curto nas palavras fortes, mira andando para a direita durante a digitação, duração de 0,8 a 1,8 s, influência de 67% e 77%, cada movimento começando quando o anterior está entre 40% e 60%, e nada parado fora do último meio segundo. No primeiro quadro de cada cena, o encaixe tem de encher a tela exatamente.\n\n7. Construa uma comp por cena (1080×1080, 24 qps, com a duração do vídeo inteiro e tempo interno igual ao do vídeo), com um gerador comentado por cena, copiado dos de projeto/ae/, e o encaixe provisório da vizinha. Se forem muitas cenas, divida em grupos que se tocam pouco e use um agente por grupo, cada um na sua cópia do After Effects, seguindo o BRIEF-AGENTES.md. Me mostre uma folha de quadros de cada cena, com o meio dos movimentos e cada troca.\n\n8. Monte com o montagem.jsx (troca dos encaixes, obturador de 90° e comp principal com a música) e feche com o card-spotify.jsx creditando a música, com capa nossa. A cauda com eco sai do eco_cauda.py.\n\n9. Revise antes do render: cena parada, troca com corte no lugar de cena dentro de cena, cursor que vaza depois da troca, texto cortado e palavra digitada depois de cantada.\n\n10. Renderize em trechos numa pasta sem acento e confira a folha a 2 qps do vídeo inteiro. Se eu quiser a abertura, gravo a tela com o celular seguindo a parte 05 do guia e você roda os scripts de transicao/ na ordem. Entregue o MP4 e uma anotação do que mudou em relação ao projeto.\n```\n\n## Checklist antes de entregar (da referência)\n\n- [ ] Cada frase está digitada numa interface que combina com ela, no idioma da música.\n- [ ] Toda troca é cena dentro de cena, com a máscara arredondando durante o recuo.\n- [ ] A câmera não para fora do último meio segundo e anda junto com o cursor.\n- [ ] A digitação começa até 0,35 s antes da palavra cantada, letra a letra, com cursor.\n- [ ] Desfoque de movimento a 90°.\n- [ ] Nenhum rosto de pessoa real conhecida; o card do fim credita a música.\n- [ ] A letra foi colada por você e só existe no `letra.json` e no texto colado.\n- [ ] Render sem quadro preto, sem quadro repetido na emenda e em −14 LUFS.\n",
60
+ "campos": [
61
+ "ABERTURA",
62
+ "IDIOMA",
63
+ "INTERFACES",
64
+ "MUSICA",
65
+ "PERSONAGENS"
66
+ ],
67
+ "fonte": {
68
+ "nome": "Clube do Motion",
69
+ "url": "https://clubedomotion.com/projeto/?id=letra-nos-apps",
70
+ "uso": "liberado pelo dono do Clube do Motion em 18/10/2026 (docs/permissoes/clube-do-motion.md)"
71
+ },
72
+ "ferramentas": [
73
+ "Claude Code",
74
+ "After Effects",
75
+ "Codex"
76
+ ],
77
+ "scripts_ae": {
78
+ "pasta": "lib/estudio/dados/projetos-ae/letra-nos-apps",
79
+ "arquivos": [
80
+ "BRIEF-AGENTES.md",
81
+ "README.md",
82
+ "ROTEIRO-CENAS.md",
83
+ "ae/A-agenda.jsx",
84
+ "ae/B-docs.jsx",
85
+ "ae/C-alttab.jsx",
86
+ "ae/D-spotify.jsx",
87
+ "ae/E-notas.jsx",
88
+ "ae/F-jornal1.jsx",
89
+ "ae/G-google.jsx",
90
+ "ae/H-mapa.jsx",
91
+ "ae/I-imagens.jsx",
92
+ "ae/J-jornal2.jsx",
93
+ "ae/K-maps.jsx",
94
+ "ae/camera-movimentos.jsx",
95
+ "ae/camera.jsx",
96
+ "ae/card-spotify.jsx",
97
+ "ae/digitar.jsx",
98
+ "ae/jornal-comum.jsx",
99
+ "ae/letra.jsx",
100
+ "ae/letra_automatica.py",
101
+ "ae/montagem.jsx",
102
+ "ae/w-agenda/render_html.py",
103
+ "ae/w-agenda/util.jsx",
104
+ "ae/w-midia-comum.jsx",
105
+ "ae/wg-util.jsx",
106
+ "assets/F-jornal1/render_html.py",
107
+ "assets/render_w-midia.py",
108
+ "assets/w-midia-ferramentas/inclin.py",
109
+ "assets/w-midia-ferramentas/medir_d.py",
110
+ "assets/w-midia-ferramentas/medir_e.py",
111
+ "camera/ajustar_movimentos.py",
112
+ "camera/ancorar.py",
113
+ "camera/assar.py",
114
+ "camera/camera3d_jornal.py",
115
+ "camera/comparar.py",
116
+ "camera/dados_ae_jornal.py",
117
+ "camera/folha_contato.py",
118
+ "camera/homografia_jornal.py",
119
+ "camera/integrar.py",
120
+ "camera/medir_quadro_a_quadro.py",
121
+ "camera/mesa_2d.py",
122
+ "camera/plot_cenas.py",
123
+ "camera/retificar_quadros.py",
124
+ "camera/w-agenda/assar_ab.py",
125
+ "camera/w-agenda/medir_ab.py",
126
+ "camera/wg_ajustar_h.py",
127
+ "camera/wg_corrige_cam.py",
128
+ "camera/wg_ecc_cadeia.py",
129
+ "camera/wg_finalizar_cam.py",
130
+ "camera/wg_mosaico.py",
131
+ "guia-do-metodo/tutorial-lyric-edit-interfaces.md",
132
+ "guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md",
133
+ "guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md",
134
+ "guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md",
135
+ "guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md",
136
+ "guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md",
137
+ "transicao/atraso_imagem.py",
138
+ "transicao/fundo.py",
139
+ "transicao/juntar.py",
140
+ "transicao/montar.py",
141
+ "transicao/rastreio.py",
142
+ "transicao/sincronia.py"
143
+ ],
144
+ "como_usar": "modelo: leia os .jsx (montam as comps no After Effects) e os .py (preparam assets/áudio) e adapte para o estudio_ae; não copie o conteúdo do vídeo, troque pelo assunto da pessoa."
145
+ }
146
+ }