primocode 10.12.0 → 10.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/README.md +74 -12
  2. package/bin/primocode.js +148 -8
  3. package/lib/act.js +48 -1
  4. package/lib/catalogo.js +12 -1
  5. package/lib/config.js +1 -0
  6. package/lib/estudio/assinaturas/gerativo.json +1 -1
  7. package/lib/estudio/camadas.js +4 -0
  8. package/lib/estudio/cota.js +150 -0
  9. package/lib/estudio/dados/projetos/clube-ad5.json +105 -0
  10. package/lib/estudio/dados/projetos/clube-ae-sem-memoria.json +107 -0
  11. package/lib/estudio/dados/projetos/clube-agent.json +120 -0
  12. package/lib/estudio/dados/projetos/clube-antes-e-agora.json +86 -0
  13. package/lib/estudio/dados/projetos/clube-apresentando-clube.json +110 -0
  14. package/lib/estudio/dados/projetos/clube-bluevisa.json +106 -0
  15. package/lib/estudio/dados/projetos/clube-caught-in-the-fire.json +127 -0
  16. package/lib/estudio/dados/projetos/clube-chat-cliente-satisfeito.json +98 -0
  17. package/lib/estudio/dados/projetos/clube-chatgpt-anuncios.json +120 -0
  18. package/lib/estudio/dados/projetos/clube-claude-dj.json +140 -0
  19. package/lib/estudio/dados/projetos/clube-claude-mcp.json +142 -0
  20. package/lib/estudio/dados/projetos/clube-cleanui.json +106 -0
  21. package/lib/estudio/dados/projetos/clube-clinica-take-unico.json +128 -0
  22. package/lib/estudio/dados/projetos/clube-clinica.json +104 -0
  23. package/lib/estudio/dados/projetos/clube-clube-opener.json +125 -0
  24. package/lib/estudio/dados/projetos/clube-clube.json +108 -0
  25. package/lib/estudio/dados/projetos/clube-codigo.json +101 -0
  26. package/lib/estudio/dados/projetos/clube-distilbook.json +104 -0
  27. package/lib/estudio/dados/projetos/clube-drive-upload.json +115 -0
  28. package/lib/estudio/dados/projetos/clube-dub.json +119 -0
  29. package/lib/estudio/dados/projetos/clube-enxovaly.json +105 -0
  30. package/lib/estudio/dados/projetos/clube-fecha7.json +118 -0
  31. package/lib/estudio/dados/projetos/clube-filatov.json +128 -0
  32. package/lib/estudio/dados/projetos/clube-frame.json +108 -0
  33. package/lib/estudio/dados/projetos/clube-glass.json +118 -0
  34. package/lib/estudio/dados/projetos/clube-letra-em-apps.json +84 -0
  35. package/lib/estudio/dados/projetos/clube-letra-globo-3d.json +111 -0
  36. package/lib/estudio/dados/projetos/clube-letra-nos-apps.json +146 -0
  37. package/lib/estudio/dados/projetos/clube-letra-seis-mundos.json +100 -0
  38. package/lib/estudio/dados/projetos/clube-lula-3.json +146 -0
  39. package/lib/estudio/dados/projetos/clube-morph.json +119 -0
  40. package/lib/estudio/dados/projetos/clube-motion-designer.json +115 -0
  41. package/lib/estudio/dados/projetos/clube-motion-pacote.json +112 -0
  42. package/lib/estudio/dados/projetos/clube-movimento.json +103 -0
  43. package/lib/estudio/dados/projetos/clube-not-like-us.json +117 -0
  44. package/lib/estudio/dados/projetos/clube-pinterest-inspiracao.json +86 -0
  45. package/lib/estudio/dados/projetos/clube-pixel-e-tinta.json +108 -0
  46. package/lib/estudio/dados/projetos/clube-ponte.json +118 -0
  47. package/lib/estudio/dados/projetos/clube-processo-edit-tonal.json +126 -0
  48. package/lib/estudio/dados/projetos/clube-processo-motion-100-ia.json +109 -0
  49. package/lib/estudio/dados/projetos/clube-promo.json +114 -0
  50. package/lib/estudio/dados/projetos/clube-proposito.json +115 -0
  51. package/lib/estudio/dados/projetos/clube-rankhog.json +128 -0
  52. package/lib/estudio/dados/projetos/clube-recursao.json +116 -0
  53. package/lib/estudio/dados/projetos/clube-revelar.json +118 -0
  54. package/lib/estudio/dados/projetos/clube-robo.json +125 -0
  55. package/lib/estudio/dados/projetos/clube-shelby-ep2.json +144 -0
  56. package/lib/estudio/dados/projetos/clube-shelby.json +97 -0
  57. package/lib/estudio/dados/projetos/clube-solar-eclipse.json +96 -0
  58. package/lib/estudio/dados/projetos/clube-soldier.json +128 -0
  59. package/lib/estudio/dados/projetos/clube-som-de-cena.json +108 -0
  60. package/lib/estudio/dados/projetos/clube-spotify-candidatura.json +112 -0
  61. package/lib/estudio/dados/projetos/clube-tda-app.json +118 -0
  62. package/lib/estudio/dados/projetos/clube-tda-ia.json +75 -0
  63. package/lib/estudio/dados/projetos/clube-telegram-chat.json +118 -0
  64. package/lib/estudio/dados/projetos/clube-telegram-ilha.json +106 -0
  65. package/lib/estudio/dados/projetos/clube-tennessee-nike.json +132 -0
  66. package/lib/estudio/dados/projetos/clube-tudo-se-move.json +112 -0
  67. package/lib/estudio/dados/projetos/clube-uiad.json +107 -0
  68. package/lib/estudio/dados/projetos/clube-viralgrow.json +108 -0
  69. package/lib/estudio/dados/projetos/clube-whose-side.json +140 -0
  70. package/lib/estudio/dados/projetos/clube-youtube-inscrever.json +108 -0
  71. package/lib/estudio/dados/projetos/elementos-do-site-em-movimento.json +49 -0
  72. package/lib/estudio/dados/projetos/explainer-narrado.json +51 -0
  73. package/lib/estudio/dados/projetos/lancamento-de-produto.json +51 -0
  74. package/lib/estudio/dados/projetos/motion-so-com-sons.json +50 -0
  75. package/lib/estudio/dados/projetos/titulo-em-after-effects.json +51 -0
  76. package/lib/estudio/dados/projetos/tour-de-saas.json +50 -0
  77. package/lib/estudio/dados/projetos-ae/antes-e-agora/ae/cenas.jsx +733 -0
  78. package/lib/estudio/dados/projetos-ae/antes-e-agora/assets/fazer_assets.py +88 -0
  79. package/lib/estudio/dados/projetos-ae/letra-em-apps/ae/cenas.jsx +402 -0
  80. package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/preparar_assets.py +17 -0
  81. package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/svg_para_ae.py +25 -0
  82. package/lib/estudio/dados/projetos-ae/letra-nos-apps/BRIEF-AGENTES.md +31 -0
  83. package/lib/estudio/dados/projetos-ae/letra-nos-apps/README.md +53 -0
  84. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ROTEIRO-CENAS.md +69 -0
  85. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/A-agenda.jsx +148 -0
  86. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/B-docs.jsx +174 -0
  87. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/C-alttab.jsx +113 -0
  88. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/D-spotify.jsx +118 -0
  89. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/E-notas.jsx +146 -0
  90. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/F-jornal1.jsx +144 -0
  91. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/G-google.jsx +153 -0
  92. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/H-mapa.jsx +176 -0
  93. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/I-imagens.jsx +132 -0
  94. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/J-jornal2.jsx +191 -0
  95. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/K-maps.jsx +184 -0
  96. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera-movimentos.jsx +48 -0
  97. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera.jsx +57 -0
  98. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/card-spotify.jsx +98 -0
  99. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/digitar.jsx +38 -0
  100. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/jornal-comum.jsx +196 -0
  101. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra.jsx +23 -0
  102. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra_automatica.py +83 -0
  103. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/montagem.jsx +74 -0
  104. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/render_html.py +13 -0
  105. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/util.jsx +162 -0
  106. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-midia-comum.jsx +114 -0
  107. package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/wg-util.jsx +360 -0
  108. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/F-jornal1/render_html.py +13 -0
  109. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/render_w-midia.py +26 -0
  110. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/inclin.py +30 -0
  111. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_d.py +36 -0
  112. package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_e.py +27 -0
  113. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ajustar_movimentos.py +61 -0
  114. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ancorar.py +74 -0
  115. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/assar.py +47 -0
  116. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/camera3d_jornal.py +172 -0
  117. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/comparar.py +32 -0
  118. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/dados_ae_jornal.py +46 -0
  119. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/folha_contato.py +28 -0
  120. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/homografia_jornal.py +74 -0
  121. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/integrar.py +44 -0
  122. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/medir_quadro_a_quadro.py +32 -0
  123. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/mesa_2d.py +64 -0
  124. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/plot_cenas.py +11 -0
  125. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/retificar_quadros.py +38 -0
  126. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/assar_ab.py +52 -0
  127. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/medir_ab.py +59 -0
  128. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ajustar_h.py +111 -0
  129. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_corrige_cam.py +17 -0
  130. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ecc_cadeia.py +80 -0
  131. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_finalizar_cam.py +65 -0
  132. package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_mosaico.py +61 -0
  133. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md +55 -0
  134. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md +66 -0
  135. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md +50 -0
  136. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md +43 -0
  137. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md +43 -0
  138. package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces.md +42 -0
  139. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/atraso_imagem.py +31 -0
  140. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/fundo.py +56 -0
  141. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/juntar.py +45 -0
  142. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/montar.py +177 -0
  143. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/rastreio.py +74 -0
  144. package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/sincronia.py +18 -0
  145. package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/ae/cenas.jsx +530 -0
  146. package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/assets/fazer_assets.py +107 -0
  147. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/assets/pessoas/figurinha.py +46 -0
  148. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/BRIEF-A.md +83 -0
  149. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/audio.py +179 -0
  150. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/confere.py +20 -0
  151. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte1.js +1 -0
  152. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte2.js +1 -0
  153. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/gerar_emojis.py +11 -0
  154. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/img/filmes/_indice.js +122 -0
  155. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/base.js +380 -0
  156. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/main.js +86 -0
  157. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1a.js +169 -0
  158. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1b.js +455 -0
  159. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1c.js +389 -0
  160. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p2.js +379 -0
  161. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/video.py +62 -0
  162. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/README.md +65 -0
  163. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/oraculo_take.py +137 -0
  164. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/render_take.py +388 -0
  165. package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/take.js +235 -0
  166. package/lib/estudio/diretor.js +2 -1
  167. package/lib/estudio/editor.js +285 -0
  168. package/lib/estudio/efeitos-fabrica/terminal-digitando.jsx +2 -1
  169. package/lib/estudio/effectcraft.js +152 -0
  170. package/lib/estudio/exportar.js +181 -0
  171. package/lib/estudio/gerativo.js +44 -15
  172. package/lib/estudio/index.js +126 -5
  173. package/lib/estudio/kit/gerativo.jsx +15 -0
  174. package/lib/estudio/kit-ae/base.jsx +1146 -0
  175. package/lib/estudio/kit-ae/cenas.jsx +395 -0
  176. package/lib/estudio/kit-ae/primitivas.jsx +911 -0
  177. package/lib/estudio/kokoro.js +3 -1
  178. package/lib/estudio/maquina-diretor.js +393 -0
  179. package/lib/estudio/maquina-elementos.js +134 -0
  180. package/lib/estudio/maquina-layout.js +198 -0
  181. package/lib/estudio/maquina-som.js +478 -0
  182. package/lib/estudio/maquina-trilha.js +160 -0
  183. package/lib/estudio/maquina-voz.js +429 -0
  184. package/lib/estudio/maquina.js +516 -0
  185. package/lib/estudio/projetos.js +60 -0
  186. package/lib/estudio/remotion.js +6 -4
  187. package/lib/estudio/revisor.js +61 -0
  188. package/lib/estudio/voicestudio.js +81 -0
  189. package/lib/headless.js +71 -0
  190. package/lib/hooks.js +72 -0
  191. package/lib/local/cerebro.json +398 -12
  192. package/lib/local/entrada.js +46 -2
  193. package/lib/marca-kit.js +309 -0
  194. package/lib/mcp.js +286 -6
  195. package/lib/perigo.js +31 -3
  196. package/lib/planos.js +47 -19
  197. package/lib/preparar.js +111 -0
  198. package/lib/retomar.js +55 -0
  199. package/lib/sandbox.js +197 -0
  200. package/lib/skills.js +3 -1
  201. package/lib/tools.js +13 -4
  202. package/lib/ui.js +1 -1
  203. package/lib/video/auto.js +18 -3
  204. package/package.json +4 -2
  205. package/skills/after-effects/SKILL.md +52 -0
  206. package/skills/maquina-de-motion/SKILL.md +84 -0
  207. package/skills/motion-de-primeira/SKILL.md +33 -51
@@ -0,0 +1,107 @@
1
+ """Assets da recriação 01 (Pinterest em estilo SaaS, @illdari), feitos por código (sem geração paga):
2
+
3
+ - mao-aponta.png / mao-agarra.png: cursor de mão em luva branca "de massinha" (o original usa uma luva 3D);
4
+ desenhada com formas arredondadas + sombreado suave, 600 px, fundo transparente.
5
+ - pinterest-logo.png: o "P" oficial (Simple Icons, CC0) em vermelho sobre disco branco, 512 px.
6
+ - pinterest-lado.png: o mesmo em vermelho escuro chapado (as camadas de espessura do giro 3D).
7
+ - moodboard.png: print de moodboard (grade 3×2 de fotos de nicho da biblioteca, cantos arredondados).
8
+
9
+ Uso: python fazer_assets.py
10
+ """
11
+ import io
12
+ from pathlib import Path
13
+
14
+ import resvg_py
15
+ from PIL import Image, ImageChops, ImageDraw, ImageFilter
16
+
17
+ AQUI = Path(__file__).resolve().parent
18
+ SVG = AQUI.parents[1] / "06-telegram-chat" / "assets" / "svg"
19
+ BIB = Path("<BIBLIOTECA>/public/biblioteca")
20
+
21
+
22
+ def glifo(nome, tam, cor="#ffffff"):
23
+ svg = (SVG / f"{nome}.svg").read_text(encoding="utf-8").replace("<svg ", f'<svg fill="{cor}" ', 1)
24
+ return Image.open(io.BytesIO(bytes(resvg_py.svg_to_bytes(svg_string=svg, width=tam, height=tam)))).convert("RGBA")
25
+
26
+
27
+ def logo():
28
+ n = 512
29
+ base = Image.new("RGBA", (n, n), (0, 0, 0, 0))
30
+ d = ImageDraw.Draw(base)
31
+ d.ellipse([6, 6, n - 7, n - 7], fill=(255, 255, 255, 255))
32
+ base.alpha_composite(glifo("pinterest", n, "#E60023"))
33
+ base.save(AQUI / "pinterest-logo.png")
34
+ lado = glifo("pinterest", n, "#7A0012")
35
+ m = Image.new("L", (n, n), 0); ImageDraw.Draw(m).ellipse([0, 0, n - 1, n - 1], fill=255)
36
+ chapado = Image.new("RGBA", (n, n), (122, 0, 18, 255)); chapado.putalpha(m)
37
+ chapado.save(AQUI / "pinterest-lado.png")
38
+
39
+
40
+ def luva(formas, nome, S=4):
41
+ """formas: lista de ('rr', x0, y0, x1, y1, raio) / ('el', x0, y0, x1, y1) num quadro de 600×600."""
42
+ N = 600 * S
43
+ m = Image.new("L", (N, N), 0)
44
+ d = ImageDraw.Draw(m)
45
+ for f in formas:
46
+ c = [v * S for v in f[1:5]]
47
+ if f[0] == "rr":
48
+ d.rounded_rectangle(c, radius=f[5] * S, fill=255)
49
+ else:
50
+ d.ellipse(c, fill=255)
51
+ m = m.resize((600, 600), Image.LANCZOS)
52
+ # contorno cinza, preenchimento branco com sombra interna suave (luz no alto à esquerda)
53
+ borda = m.filter(ImageFilter.MaxFilter(9))
54
+ sombra = ImageChops.subtract(m, ImageChops.offset(m, -10, -12)).filter(ImageFilter.GaussianBlur(10))
55
+ vinco = Image.new("L", (600, 600), 0)
56
+ dv = ImageDraw.Draw(vinco)
57
+ for f in formas: # vincos entre os dedos
58
+ if f[0] == "rr" and (f[4] - f[2]) > 1.6 * (f[3] - f[1]):
59
+ dv.rounded_rectangle([f[1], f[2], f[3], f[4]], radius=f[5], outline=255, width=4)
60
+ vinco = ImageChops.multiply(vinco.filter(ImageFilter.GaussianBlur(2)), m)
61
+ img = Image.new("RGBA", (600, 600), (0, 0, 0, 0))
62
+ contorno = Image.new("RGBA", (600, 600), (70, 70, 76, 255)); contorno.putalpha(borda)
63
+ img.alpha_composite(contorno)
64
+ corpo = Image.new("RGBA", (600, 600), (250, 250, 252, 255)); corpo.putalpha(m)
65
+ img.alpha_composite(corpo)
66
+ s = Image.new("RGBA", (600, 600), (150, 152, 160, 255)); s.putalpha(ImageChops.multiply(sombra, m).point(lambda v: int(v * 0.85)))
67
+ img.alpha_composite(s)
68
+ v = Image.new("RGBA", (600, 600), (175, 177, 185, 255)); v.putalpha(vinco.point(lambda x: int(x * 0.8)))
69
+ img.alpha_composite(v)
70
+ img.save(AQUI / nome)
71
+
72
+
73
+ def maos():
74
+ # aponta: indicador para cima, três dedos dobrados, polegar à esquerda, punho embaixo
75
+ aponta = [("rr", 215, 40, 300, 330, 42), # indicador
76
+ ("rr", 290, 205, 370, 330, 38), ("rr", 355, 220, 430, 335, 36), ("rr", 415, 240, 480, 345, 32),
77
+ ("rr", 200, 260, 485, 470, 80), # palma
78
+ ("rr", 120, 285, 250, 380, 46), # polegar
79
+ ("rr", 225, 455, 465, 545, 26)] # punho
80
+ luva(aponta, "mao-aponta.png")
81
+ # agarra: punho fechado visto por cima (quatro nós dos dedos), polegar por baixo
82
+ agarra = [("rr", 160, 150, 250, 300, 44), ("rr", 240, 135, 330, 300, 44), ("rr", 320, 140, 410, 300, 44),
83
+ ("rr", 400, 160, 480, 300, 40),
84
+ ("rr", 160, 230, 485, 455, 80),
85
+ ("rr", 105, 300, 245, 390, 44),
86
+ ("rr", 215, 440, 455, 530, 26)]
87
+ luva(agarra, "mao-agarra.png")
88
+
89
+
90
+ def moodboard():
91
+ fotos = ["nicho-estetica", "nicho-roupa", "nicho-viagem", "nicho-pilates", "nicho-salao", "nicho-calcados"]
92
+ W, g = 900, 18
93
+ c = (W - 4 * g) // 3
94
+ img = Image.new("RGBA", (W, 2 * c + 3 * g), (255, 255, 255, 255))
95
+ for i, f in enumerate(fotos):
96
+ p = Image.open(BIB / "fotos-nichos" / f"{f}.png").convert("RGB")
97
+ lado = min(p.size); p = p.crop(((p.width - lado) // 2, (p.height - lado) // 2, (p.width + lado) // 2, (p.height + lado) // 2)).resize((c, c), Image.LANCZOS)
98
+ m = Image.new("L", (c, c), 0); ImageDraw.Draw(m).rounded_rectangle([0, 0, c - 1, c - 1], radius=26, fill=255)
99
+ img.paste(p, (g + (i % 3) * (c + g), g + (i // 3) * (c + g)), m)
100
+ fundo = Image.new("L", img.size, 0); ImageDraw.Draw(fundo).rounded_rectangle([0, 0, img.width - 1, img.height - 1], radius=40, fill=255)
101
+ img.putalpha(fundo)
102
+ img.save(AQUI / "moodboard.png")
103
+
104
+
105
+ if __name__ == "__main__":
106
+ logo(); maos(); moodboard()
107
+ print("ok")
@@ -0,0 +1,46 @@
1
+ """figurinha.py <recorte_rgba.png> <saida.png> [--lado 900] [--borda 18] [--erode 1]
2
+ Recorte RGBA -> figurinha estilo WhatsApp: contorno branco grosso em volta da silhueta, sombra suave, fundo transparente."""
3
+ import sys, argparse
4
+ import numpy as np
5
+ from PIL import Image, ImageFilter
6
+ import cv2
7
+ ap = argparse.ArgumentParser(); ap.add_argument("src"); ap.add_argument("out")
8
+ ap.add_argument("--lado", type=int, default=900); ap.add_argument("--borda", type=int, default=18)
9
+ ap.add_argument("--erode", type=int, default=1); ap.add_argument("--min-area", type=int, default=4000)
10
+ a = ap.parse_args()
11
+ im = Image.open(a.src).convert("RGBA")
12
+ al = np.array(im)[:, :, 3]
13
+ # limpa: só o maior componente (+ pedaços grandes), corta franja
14
+ m = (al > 128).astype(np.uint8)
15
+ n, lab, st, _ = cv2.connectedComponentsWithStats(m, 8)
16
+ keep = np.zeros_like(m)
17
+ for i in range(1, n):
18
+ if st[i, cv2.CC_STAT_AREA] >= a.min_area: keep[lab == i] = 1
19
+ al = (al * keep).astype(np.uint8)
20
+ if a.erode:
21
+ k = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2 * a.erode + 1, 2 * a.erode + 1))
22
+ al = cv2.erode(al, k)
23
+ arr = np.array(im); arr[:, :, 3] = al; im = Image.fromarray(arr)
24
+ bb = im.getbbox(); im = im.crop(bb)
25
+ # escala de trabalho: 2x a final
26
+ W = 2; B = a.borda * W; pad = B + 40 * W
27
+ lado_util = a.lado - 2 * (a.borda + 40)
28
+ s = lado_util * W / max(im.size)
29
+ im = im.resize((round(im.width * s), round(im.height * s)), Image.LANCZOS)
30
+ cw, ch = im.width + 2 * pad, im.height + 2 * pad
31
+ canvas = Image.new("RGBA", (cw, ch), (0, 0, 0, 0)); canvas.paste(im, (pad, pad), im)
32
+ A = np.array(canvas)[:, :, 3]
33
+ mask = (A > 100).astype(np.uint8) * 255
34
+ k = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2 * B + 1, 2 * B + 1))
35
+ dil = cv2.dilate(mask, k)
36
+ dil = cv2.GaussianBlur(dil, (0, 0), B * 0.25); dil = np.clip((dil.astype(np.float32) - 127) * 4 + 127, 0, 255).astype(np.uint8)
37
+ dil = cv2.GaussianBlur(dil, (0, 0), 1.2)
38
+ white = Image.new("RGBA", (cw, ch), (255, 255, 255, 0)); wa = np.array(white); wa[:, :, 3] = dil; white = Image.fromarray(wa)
39
+ sh = cv2.GaussianBlur(dil, (0, 0), 10 * W).astype(np.float32) * 0.35
40
+ sh = np.roll(sh, 7 * W, axis=0)
41
+ shadow = np.zeros((ch, cw, 4), np.uint8); shadow[:, :, 3] = sh.clip(0, 255).astype(np.uint8)
42
+ out = Image.alpha_composite(Image.fromarray(shadow), white); out = Image.alpha_composite(out, canvas)
43
+ out = out.crop(out.getbbox())
44
+ f = a.lado / max(out.size)
45
+ out = out.resize((round(out.width * f), round(out.height * f)), Image.LANCZOS)
46
+ out.save(a.out, optimize=True); print(a.out, out.size)
@@ -0,0 +1,83 @@
1
+ # comp-a: kit da Variação A para o vídeo inteiro
2
+
3
+ > Data: 2026-10-17 · Tipo: brief · Status: vigente
4
+
5
+ **Resumo:** o autor escolheu a Variação A (`variacoes/A/previa-30s.mp4`) para as duas partes. Neste estilo, a fala vira uma **letra de música rolando**: uma coluna única de texto grande em que cada palavra nasce do desfoque no tempo da voz. Ícones, logos, emojis e vídeos entram **dentro da linha**, e a fala anterior fica cinza e sobe. O kit está pronto, e 0–29,6 s já foram portados em `js/p1a.js`, que serve de exemplo do nível. Cada agente escreve só o seu arquivo: `p1b.js` (falas 06–13), `p1c.js` (falas 14–22) ou `p2.js` (Parte 2).
6
+
7
+ ## O que o autor gostou (regras do estilo)
8
+ 1. **Letra rolando:** uma linha por vez, alinhada à esquerda, General Sans 120 px. A câmera sobe até a linha da vez e nunca para.
9
+ 2. **Palavra nascendo do desfoque**, no tempo exato da fala. A palavra-chave (`f|`) chega maior e mais desfocada.
10
+ 3. **Ícones, logos e emojis dentro da linha:** a linha abre espaço e o item nasce ali. Tudo que é citado aparece com o logo oficial (`../assets/logos/`), um emoji Lottie (`lib/emojis.js`) ou um vídeo real.
11
+ 4. **Poucos elementos, cada um polido.** No máximo 1 item por linha e 1 bloco a cada 6–10 s. **Nada de balão ou pílula em volta de texto.**
12
+ 5. **Vídeo mostrado com o som dele:** a trilha para e o som do vídeo toca, abaixo da voz quando há fala. Não use os nossos Reels: use templates do YouMotion, @illdari ou Supernova (lista no `variacoes/BRIEF-VARIACOES.md`, regra 4).
13
+ 6. **Cores:** azul `a|` só para vídeo/estilo, terracota `o|` só para IA/Claude e cinza `c|` para o que é genérico ou ruim. Fundo branco quente com luzes muito fracas. Tinta quase preta.
14
+
15
+ ## Arquivos
16
+ - `parte1.html` / `parte2.html`: páginas do motor take-único. Abra com `?hud` para ver o tempo, `?t=12.3` para um quadro e `?play&som` para tocar com a mix.
17
+ - `css/kit.css`: identidade (fonte, cores, janela, card do Claude, cursor). `fonts/`: General Sans.
18
+ - `js/base.js`: kit (`linhas`, itens, blocos, `cena`, `ev`, `PF/F0/F1/CN`). A documentação está no topo do arquivo.
19
+ - `js/main.js`: diagrama da coluna, câmera, apagamento e contrato (`__seek/__ready/__meta/__events` com `.videos`).
20
+ - `js/p1a.js`: falas 01–05 + vitrine (pronto). `p1b.js`, `p1c.js` e `p2.js` estão reservados.
21
+ - `dados/tempo-parte1.js`, `tempo-parte2.js`: tempos de cada palavra (`TEMPO`).
22
+ - `video.py`: prepara um vídeo mostrado (quadros + som + índice). `audio.py`: mix na Mesa. `confere.py`: lista os avisos do kit.
23
+
24
+ ## Como escrever uma fala
25
+ ```js
26
+ linhas('06', [
27
+ 'Passo um:', // cada palavra consome 1 palavra da fala, na ordem
28
+ ['não', 'existe', emoji('u1f914')], // item sem t: entra 0,17 s antes da próxima palavra (ou logo após a anterior)
29
+ 'a|vídeo f|diferente', // marcas: a azul · o terracota · c cinza · f forte (combináveis: 'af|motion,')
30
+ { w: 'sem referência.', foco: 1000 }, // foco = altura na tela da linha (padrão 1330)
31
+ janela('nome-do-filme', { som: true }), // bloco: janela 912×513 que se abre na frase; som + trilha para
32
+ ]);
33
+ ```
34
+ - `100%#3` = palavra mostrada que vale 3 da fala. `palavra('texto', t)` = palavra que não é falada.
35
+ - Tem que caber em **até ~15 caracteres por linha** (936 px). O `confere.py` avisa sobre linha larga e palavra diferente da fala.
36
+ - **Itens:** `emoji(id)`, `logo('arquivo.svg')`, `mini('filme')` (vídeo inline sem som), `icones([...])` (um ícone que se abre em etapas) e `item({w, monta, seek})` para criar o seu.
37
+ - **Blocos:** `janela(filme | [filmes], {som, trocas, quadrada, alvo, ate})`, `duo(premium, generico, {tG, tCinza})`, `cardClaude({pedido, resposta, ferramentas})` e `bloco({h, monta(el,B), seek(t,B)})` para o seu (912 × h, dentro da coluna).
38
+ - **Marcador de passo:** `contadorPasso(n, t0, t1)` mostra "Passo n de 4" pequeno no topo durante o passo. Os passos 1 e 2 estão no `p1b.js`; o 3 vai no `p1c.js` (`contadorPasso(3, F0('14') - 0.1, …)`) e o 4 no `p2.js`.
39
+ - **Notificação real com som:** `ev(t, 'notif-iphone' | 'notif-whatsapp' | 'notif-instagram' | 'notif-facebook' | 'notif-messenger' | 'imessage' | 'imessage-recebe')` toca o arquivo de `audio/sfx/`. A notificação saindo da Dynamic Island está em `p1b.js` (`notifIlha`) e pode servir de molde.
40
+ - **Fora da coluna** (tela cheia, raro): `cena(nome, t0, t1, monta, seek)` + `ocultaColuna(t0, t1)`.
41
+ - **Efeitos sonoros:** os itens e blocos já geram eventos sutis. Para outro, use `ev(t, kind, pan, v)` com o `kind` do mapa padrão (`biblioteca/som/mapa_padrao.py`) e `v` entre 0,2 e 0,35. Sem tonal em elemento.
42
+
43
+ ## Modo palco (17/10, vale a partir de 29,6 s)
44
+ O autor gostou dos primeiros ~50 s, mas disse que o resto virou "teleprompter", com texto lido demais. A partir de 29,6 s, a coluna dá lugar ao modo palco. O trecho de 0–29,6 s (`p1a.js`) continua como está.
45
+ - **A tela é do elemento** que desenha a palavra-chave da frase: leve, intuitivo, bem-humorado. Exemplos: "combinar" = duas coisas se fundindo; "o processo é o mesmo" = um caminho desenhado; "pilar" = a pasta vira um pilar; "irreplicável" = Face ID; "você" = 🫵; marca = Netflix com o "tudum". Cada peça entra e sai pelo desfoque, ou vira a próxima.
46
+ - **Legenda curta** no terço de baixo: General Sans 80 px, centro em y 1530. Mostra só o grupo da vez (≤ 6 palavras, até 2 linhas). As palavras nascem do desfoque, uma a uma, no tempo da fala, e os ícones dentro da linha saem a 66%. O grupo anterior sai inteiro e não fica histórico cinza.
47
+ - **Passo N:** `passoHeroi` mostra o emoji grande no centro com o número em destaque, sozinho na tela. A legenda e o palco somem. Depois, "Passo n de 4" fica pequeno no topo.
48
+
49
+ ```js
50
+ ocultaColuna(29.95, …); // a coluna some no trecho em modo palco
51
+ passoHeroi(1, 'u1f50d', F0('06') - 0.08, PF('06','nao') - 0.12, { ate: F0('10') - 0.25 });
52
+ legenda('06', [pula(2), ['não existe', 'vídeo', 'f|diferente'], 'sem af|referência.']); // pula(2) = "Passo um:" sem legenda
53
+ legenda('09'); // grupos automáticos (pontuação, ≤ 6 palavras, ≤ 30 letras)
54
+ legenda('09', null, { marcas: { referencia: 'af' }, itens: { gosto: emoji('u1f3a8') } }); // automático com cor e ícone
55
+ legenda('07', [...], { ate: F0('08') - 0.3 }); // ate: quando o último grupo sai
56
+ palco(t0, t1, (el, P) => { /* monta no palco (y 200–1300; centro PALCO_Y = 760) */ }, (t, P) => { /* anima */ });
57
+ palco(t0, t1, promptRefs({ tRef }), { y: 700 }); // qualquer bloco do kit (janela, duo, cardClaude, bloco) no palco
58
+ palco(t0, t1, monta, seek, { entra: false, sai: false }); // quando a peça anima a própria entrada/saída (peça que vira a próxima)
59
+ ```
60
+ - **Escala:** o kit desce o palco inteiro 60 px (`PALCO_DY`), então o centro real fica em ≈ y 820, perto da legenda. Desenhe em volta de `PALCO_Y` (760) e cresça a peça com `{ esc: 1.2–1.35 }` (escala em volta do centro). Antes de usar uma escala grande, confira que nada passa das bordas (1080 px). Vídeo mostrado tem que começar num quadro com imagem (passe um deslocamento no `toca`, como em `p1b.js` "meus vídeos").
61
+ - O palco tem câmera viva (deriva + zoom lento). Durante o `passoHeroi`, legenda e palco ficam em silêncio. Os ícones da legenda geram efeito sutil.
62
+ - **Exemplo pronto:** falas 06 e 07 no `p1b.js` (29,6–41 s): herói 🔍 + "1"; a lupa procura numa moldura de vídeo vazia e não acha nada (🤷 em "referência"); 😉 vira a caixa do prompt, onde os prints são arrastados (aprovado). Folha: `revisao-palco-v1.png`.
63
+ - **Pendente:** as falas 08 em diante ainda estão em modo coluna. Quem converter tira as `linhas(...)` da fala e troca por `legenda` + `palco`, e estende o `ocultaColuna` do `p1b.js` (hoje vai até `F0('08') + 0.3`).
64
+
65
+ ## Vídeo mostrado
66
+ ```
67
+ python comp-a/video.py <fonte.mp4> --nome meu-filme --de 3.2 --dur 4 --w 960 # 16:9 → janela
68
+ python comp-a/video.py <fonte.mp4> --nome meu-vertical --de 1 --dur 3 --crop 608:1080:656:0 --w 440 --sem-som
69
+ ```
70
+ O comando gera `img/filmes/<nome>/0001.jpg…`, `audio/videos/<nome>.wav` e o índice `img/filmes/_indice.js`. Com `som: true`, a janela registra o trecho, e o `audio.py` põe o som do vídeo e tira a trilha.
71
+ - Use `alvo: -20` com voz por cima e `-12,5` sem voz (vitrine).
72
+ - Use `trilha: 'segue'` se a música deve continuar.
73
+
74
+ ## Conferir, mixar e renderizar (pasta do projeto)
75
+ ```
76
+ python comp-a/confere.py "parte1.html?ate=60"
77
+ python comp-a/audio.py --parte 1 --ate 60
78
+ python ../../biblioteca/take-unico/render_take.py "comp-a/parte1.html?ate=60" --stills 31,35,40 --out comp-a/revisao.png
79
+ python ../../biblioteca/take-unico/render_take.py "comp-a/parte1.html?ate=60" --out render/a-p1-previa.mp4 --previa --audio comp-a/audio/mix-p1.wav --workers 3
80
+ ```
81
+ - **Trilha:** Aruarian Dance (Nujabes). O `PLANOS` do `audio.py` define onde a faixa entra; nas janelas com som ela pausa e volta de onde parou.
82
+ - **Mix:** −14 LUFS, música 15 dB abaixo da voz.
83
+ - **Conferência:** olhe as folhas antes de entregar e pergunte em cada movimento se está humano ou robotizado.
@@ -0,0 +1,179 @@
1
+ """audio.py — mix da comp-a na Mesa (07-videos/biblioteca/som/mesa.py): voz + Aruarian Dance + vídeos mostrados + efeitos.
2
+
3
+ python comp-a/audio.py --parte 1 # Parte 1 inteira → comp-a/audio/mix-p1.wav (−14 LUFS)
4
+ python comp-a/audio.py --parte 1 --ate 29.6 # só até 29,6 s (prévia de um trecho)
5
+ python comp-a/audio.py --parte 2
6
+
7
+ 1. Exporta os eventos da composição (oraculo_take.py --eventos; < 5 s, sem render): efeitos (`events`) e trechos de
8
+ vídeo mostrado (`videos`: nome, t0, t1, trilha 'para'|'segue', alvo LUFS) que as janelas registram sozinhas.
9
+ 2. Trilha: Aruarian Dance (Nujabes, instrumental). PLANO = pontos (tempo do Reel, segundo da faixa). Entre os pontos a
10
+ faixa anda junto com o vídeo; nas janelas com trilha 'para' a música sai (fade 0,3 s) e PAUSA, voltando de onde
11
+ parou (fade 0,25 s), a não ser que um ponto do PLANO diga outro lugar (ex.: voltar na entrada da bateria).
12
+ 3. Vídeos mostrados: audio/videos/<nome>.wav (feito pelo video.py), nivelado no `alvo` (−20 sob a voz, −12,5 sem voz),
13
+ no barramento direto (sem a curva da trilha).
14
+ 4. Efeitos pelo mapa padrão da Mesa, sutis (v ≈ 0,22). Sem tonais em elemento (Mesa sem tom).
15
+ """
16
+ import argparse, json, subprocess, sys
17
+ from pathlib import Path
18
+ import soundfile as sf, pyloudnorm as pyln
19
+
20
+ AQUI = Path(__file__).resolve().parent
21
+ PROJ = AQUI.parent
22
+ VIDEOS = PROJ.parents[1]
23
+ sys.path.insert(0, str(VIDEOS / "biblioteca" / "som"))
24
+ from mesa import Mesa
25
+ sys.stdout.reconfigure(encoding="utf-8")
26
+
27
+ MUS = PROJ / "audio/musica-v31/aruarian-dance.wav" # 250 s; bateria de 16,2 a 243,6 s; compasso de 2,4 s
28
+ DRE = AQUI / "audio/musica/still-dre-inst.wav" # Dr. Dre, Still D.R.E. (Instrumental): piano só até 10,36 s; bateria entra em 10,36; 92 BPM
29
+ PLANOS = {
30
+ # Parte 1 (17/10 rodada C): o gancho (0 → fim de trailer) é do rap; a Aruarian entra no FLASH, na entrada da bateria (16,2 s)
31
+ 1: "flash",
32
+ # Parte 2: começa no groove (a Parte 1 termina perto de 190 s da faixa; aqui volta para o começo da bateria)
33
+ 2: [(0.0, 16.2)],
34
+ }
35
+
36
+
37
+ def tempo(parte):
38
+ import json as _j
39
+ s = open(AQUI / "dados" / f"tempo-parte{parte}.js", encoding="utf-8").read()
40
+ return _j.loads(s[s.index("{"): s.rindex("}") + 1])
41
+
42
+
43
+ def PF(T, f, txt, fim=False):
44
+ import unicodedata, re
45
+ n = lambda x: re.sub(r"[^a-z0-9]", "", unicodedata.normalize("NFD", x.lower()).encode("ascii", "ignore").decode())
46
+ for w in T["falas"][f]["palavras"]:
47
+ if n(w["w"]) == n(txt):
48
+ return w["e"] if fim else w["s"]
49
+ raise KeyError((f, txt))
50
+
51
+
52
+ def gancho(M, EV, T):
53
+ """Apresentação (falas 01–02): impacto com o rap, opener com o som dele (o rap pausa), riser e fim de trailer.
54
+ Os instantes são os mesmos do p1a.js (T_DROP, T_HIT, T_FLASH)."""
55
+ t_drop, t_hit, t_flash = 0.30, PF(T, "02", "artificial", True) + 0.03, T["falas"]["03"]["t0"] - 0.22
56
+ off = 10.36 - t_drop # a bateria do Still D.R.E. cai no impacto
57
+ paras = sorted((v["t0"], v["t1"]) for v in EV.get("videos", []) if v["t0"] < t_hit and v.get("trilha", "para") == "para")
58
+ a, pausa, trechos = 0.0, 0.0, []
59
+ for p0, p1 in paras:
60
+ trechos.append((a, p0 + 0.05, off + a - pausa)); pausa += (p1 - 0.05) - (p0 + 0.05); a = p1 - 0.05
61
+ trechos.append((a, t_hit, off + a - pausa))
62
+ for i, (a, b, de) in enumerate(trechos):
63
+ ult = i == len(trechos) - 1
64
+ M.musica(str(DRE), entra=a, de=de, ate=de + (b - a) + (0.02 if ult else 0.12), fade_in=0.04 if a == 0 else 0.15, fade_out=0.03 if ult else 0.12)
65
+ print(f" rap {a:5.2f}–{b:5.2f} s ← faixa {de:5.2f}")
66
+ # impacto de abertura (Shelby ep. 1): golpe Collision do Vol. 3 em Lá + sub, pico 30 ms depois, com a bateria do rap
67
+ M.golpe("collision", t_drop, -17.0, nota="A", off=0.03, fade=2.5)
68
+ # fim de trailer: riser até o golpe; golpe de metais graves + sino/piano com cauda longa; nota grave de piano
69
+ M.riser("sonar-glow", t_hit, -24.0, nota="A", subida=1.8)
70
+ M.golpe("dark-danger", t_hit, -15.5, nota="A", off=0.0, fade=4.5)
71
+ M.golpe("neon-bell", t_hit, -19.0, nota="A", off=0.0, fade=4.0)
72
+ M.nota("piano", "A", 2, t_hit, g=-11.0, vel=80, dur=4.0)
73
+ print(f" gancho: impacto {t_drop:.2f} s · fim de trailer {t_hit:.2f} s · flash {t_flash:.2f} s")
74
+ return t_drop, t_hit, t_flash
75
+
76
+
77
+ def exporta(parte, ate):
78
+ comp = AQUI / f"parte{parte}.html"
79
+ url = str(comp) + (f"?ate={ate}" if ate else "")
80
+ out = AQUI / "audio" / f"eventos-p{parte}.json"
81
+ subprocess.run([sys.executable, str(VIDEOS / "biblioteca/take-unico/oraculo_take.py"), url, "--eventos", str(out)], check=True)
82
+ return json.load(open(out, encoding="utf-8"))
83
+
84
+
85
+ def trilha(M, plano, videos, dur):
86
+ """Põe a música em trechos: anda 1:1, pausa nas janelas 'para', salta nos pontos do plano."""
87
+ paras = sorted((v["t0"], v["t1"]) for v in videos if v.get("trilha", "para") == "para")
88
+ # junta janelas encostadas
89
+ jun = []
90
+ for a, b in paras:
91
+ if jun and a <= jun[-1][1] + 0.3:
92
+ jun[-1] = (jun[-1][0], max(jun[-1][1], b))
93
+ else:
94
+ jun.append((a, b))
95
+ pontos = sorted(plano)
96
+ # silêncios = janelas 'para', cortadas por um ponto do plano que cai dentro delas
97
+ sil = []
98
+ for a, b in jun:
99
+ dentro = [r for r, _ in pontos if a < r < b]
100
+ sil.append((a, min(dentro) if dentro else b))
101
+ # trechos ativos
102
+ marcas = sorted({0.0, dur, *[r for r, _ in pontos], *[x for s in sil for x in s]})
103
+ ativo = lambda t: not any(a <= t < b for a, b in sil)
104
+ pos, ult_r, ult_p, pausa = None, None, None, 0.0 # antes do 1º ponto do plano: sem trilha
105
+ trechos = []
106
+ for i in range(len(marcas) - 1):
107
+ a, b = marcas[i], marcas[i + 1]
108
+ if b - a < 0.02:
109
+ continue
110
+ p = [pp for r, pp in pontos if abs(r - a) < 1e-6]
111
+ if p:
112
+ ult_r, ult_p, pausa = a, p[0], 0.0
113
+ if ult_r is None:
114
+ continue
115
+ if not ativo(a + 1e-3):
116
+ pausa += b - a
117
+ continue
118
+ de = ult_p + (a - ult_r) - pausa
119
+ if trechos and abs(trechos[-1][1] - a) < 1e-6 and abs(trechos[-1][3] - de) < 1e-3:
120
+ trechos[-1] = (trechos[-1][0], b, trechos[-1][2], de + (b - a)) # emenda contínua
121
+ else:
122
+ trechos.append((a, b, de, de + (b - a)))
123
+ for a, b, de, fim in trechos:
124
+ fi = 0.0 if a == 0 else 0.25
125
+ fo = 0.0 if b >= dur - 1e-3 else 0.35
126
+ lead = 0.0 if a == 0 else 0.0
127
+ M.musica(str(MUS), entra=a, de=de, ate=fim + (0.1 if fo else 0), fade_in=fi, fade_out=fo)
128
+ print(f" trilha {a:6.2f}–{b:6.2f} s ← faixa {de:6.2f}–{fim:6.2f}")
129
+
130
+
131
+ def main():
132
+ ap = argparse.ArgumentParser(); ap.add_argument("--parte", type=int, default=1); ap.add_argument("--ate", type=float)
133
+ a = ap.parse_args()
134
+ EV = exporta(a.parte, a.ate)
135
+ dur = EV["dur"]
136
+ M = Mesa(dur=dur, pasta=AQUI) # sem tom: nada de tonal em elemento
137
+ M.voz(str(PROJ / f"audio/parte{a.parte}/voz.wav"))
138
+ plano = PLANOS[a.parte]
139
+ impactos = []
140
+ if plano == "flash": # Parte 1: gancho no rap; a Aruarian entra no flash
141
+ t_drop, t_hit, t_flash = gancho(M, EV, tempo(a.parte))
142
+ plano = [(t_flash, 16.2)]
143
+ impactos = [(t_drop - 0.02, t_drop + 0.35)]
144
+ trilha(M, plano, [v for v in EV.get("videos", []) if v["t0"] > plano[0][0]], dur)
145
+ for v in EV.get("videos", []):
146
+ f = (PROJ / v["arquivo"]) if v.get("arquivo") else AQUI / "audio" / "videos" / f"{v['nome']}.wav" # arquivo: som de marca etc. (comp-a: somMarca)
147
+ if not f.exists():
148
+ print(" sem som:", v["nome"]); continue
149
+ y, sr = sf.read(f); lufs = pyln.Meter(sr).integrated_loudness(y)
150
+ M.poe(str(f), v["t0"], g=v.get("alvo", -20) - lufs, alinha="ini", fade_in=0.06, fade=0.3, fim=max(0.2, v["t1"] - v["t0"]), bus="direto")
151
+ print(f" vídeo {v['nome']:22s} {v['t0']:6.2f}–{v['t1']:6.2f} s alvo {v.get('alvo')} LUFS trilha {v.get('trilha')}")
152
+ # notificações reais (audio/sfx/): ev(t, 'notif-iphone') etc.
153
+ SFX = PROJ / "audio" / "sfx"
154
+ NOTIF = {"notif-iphone": ("notif-iphone-tritone.wav", -14), "notif-whatsapp": ("notif-whatsapp.wav", -14), "notif-instagram": ("notif-instagram.wav", -15),
155
+ "notif-facebook": ("notif-facebook.wav", -15), "notif-messenger": ("notif-messenger.wav", -15), "imessage": ("imessage-envia.wav", -15), "imessage-recebe": ("imessage-recebe.wav", -15)}
156
+ mapa = {k: (lambda arq, g: (lambda M, e: M.poe(str(SFX / arq), e["t"], g + 20 * __import__("math").log10(max(e.get("v", 0.7), 0.05) / 0.7), e.get("pan", 0) * 0.6, alinha="ini")))(arq, g) for k, (arq, g) in NOTIF.items()}
157
+ if a.parte == 1: # pedidos do autor (17/10)
158
+ T = tempo(1)
159
+ def nivel(f, alvo):
160
+ y, sr = sf.read(f); return alvo - pyln.Meter(sr).integrated_loudness(y)
161
+ # "da elite": o Casimiro (youtube.com/watch?v=Ad9BO_q-Ms4, 0,44–1,30 s, voz isolada pelo MelBand Big Beta 4) com eco, discreto,
162
+ # o "elite" dele (0,20 s dentro do arquivo) junto do "elite" da narração; a cauda do eco soa depois
163
+ f = SFX / "casimiro-elite-eco.wav"
164
+ M.poe(str(f), PF(T, "05", "elite") - 0.20, g=nivel(f, -20.0), alinha="ini", bus="direto")
165
+ # "rápida": som de flash (flash-pulse + whoosh curto), junto do clarão leve do p1a.js
166
+ t_r = PF(T, "03", "rapida") + 0.06
167
+ P = "<BIBLIOTECA>/sfx-biblioteca/premium/avulsos/flash-pulse.wav"
168
+ M.poe(P, t_r, g=nivel(P, -24.0), alinha="pico", fade=0.5, fim=1.2, bus="direto")
169
+ Wf = "<BIBLIOTECA>/public/biblioteca/sfx/nivelados/whoosh-curto-2.wav"
170
+ M.poe(Wf, t_r, g=-16, alinha="pico", bus="direto")
171
+ print(f" elite (Casimiro) {PF(T, '05', 'elite'):.2f} s · flash 'rápida' {t_r:.2f} s")
172
+ M.eventos(EV, sobrepor=mapa)
173
+ if M.sem_som:
174
+ print(" eventos sem som padrão:", M.sem_som)
175
+ M.mixar(saida=str(AQUI / "audio" / f"mix-p{a.parte}.wav"), lufs=-14.0, sob_voz=-15.0, impactos=impactos, stems=False)
176
+
177
+
178
+ if __name__ == "__main__":
179
+ main()
@@ -0,0 +1,20 @@
1
+ """confere.py — abre a parte no Chromium e lista os avisos do kit (palavra diferente da fala, fala que acabou, linha larga,
2
+ linha fora de ordem, filme sem índice, emoji não achado) + erros de JS, eventos e trechos de vídeo com som.
3
+ python comp-a/confere.py parte1.html python comp-a/confere.py "parte1.html?ate=60"
4
+ """
5
+ import sys
6
+ from pathlib import Path
7
+ from playwright.sync_api import sync_playwright
8
+ sys.stdout.reconfigure(encoding="utf-8")
9
+ arg = sys.argv[1] if len(sys.argv) > 1 else "parte1.html"
10
+ path, _, q = arg.partition("?")
11
+ p = Path(path) if Path(path).exists() else Path(__file__).parent / path
12
+ with sync_playwright() as pw:
13
+ b = pw.chromium.launch(); pg = b.new_page(viewport={"width": 1080, "height": 1920})
14
+ msgs = []; pg.on("console", lambda m: msgs.append(f"{m.type}: {m.text}") if m.type in ("warning", "error") else None)
15
+ pg.on("pageerror", lambda e: msgs.append(f"ERRO JS: {e}"))
16
+ pg.goto(p.resolve().as_uri() + ("?" + q if q else "")); pg.wait_for_function("window.__ready", timeout=120000); pg.evaluate("window.__ready")
17
+ ev = pg.evaluate("window.__events()")
18
+ print(f"dur {ev['dur']:.1f} s · {len(ev['events'])} eventos · {len(ev['videos'])} trechos de vídeo com som")
19
+ for v in ev["videos"]: print(f" vídeo {v['nome']}: {v['t0']:.2f}–{v['t1']:.2f} s, trilha {v['trilha']}, alvo {v['alvo']}")
20
+ print("\n".join(msgs) or "sem avisos"); b.close()
@@ -0,0 +1 @@
1
+ window.TEMPO = {"parte": 1, "dur": 176.449, "falas": {"01": {"t0": 0.35, "t1": 4.227, "palavras": [{"w": "Como", "s": 0.35, "e": 0.55}, {"w": "faço", "s": 0.65, "e": 0.817}, {"w": "esse", "s": 0.917, "e": 1.017}, {"w": "estilo", "s": 1.083, "e": 1.283}, {"w": "de", "s": 1.35, "e": 1.417}, {"w": "vídeo", "s": 1.483, "e": 1.817}, {"w": "usando", "s": 1.883, "e": 2.283}, {"w": "cem", "s": 2.35, "e": 2.417}, {"w": "por", "s": 2.483, "e": 2.617}, {"w": "cento", "s": 2.683, "e": 2.883}, {"w": "IA", "s": 3.017, "e": 3.283}, {"w": "no", "s": 3.35, "e": 3.417}, {"w": "meu", "s": 3.45, "e": 3.55}, {"w": "processo?", "s": 3.75, "e": 4.017}]}, "02": {"t0": 4.577, "t1": 11.043, "palavras": [{"w": "Nesse", "s": 4.577, "e": 4.844}, {"w": "vídeo,", "s": 4.944, "e": 5.177}, {"w": "eu", "s": 5.344, "e": 5.377}, {"w": "vou", "s": 5.399, "e": 5.444}, {"w": "tentar", "s": 5.51, "e": 5.71}, {"w": "explicar", "s": 5.777, "e": 6.044}, {"w": "o", "s": 6.11, "e": 6.144}, {"w": "meu", "s": 6.177, "e": 6.244}, {"w": "processo", "s": 6.31, "e": 6.71}, {"w": "criativo", "s": 6.777, "e": 7.244}, {"w": "para", "s": 7.31, "e": 7.377}, {"w": "produzir", "s": 7.444, "e": 7.777}, {"w": "esse", "s": 7.877, "e": 7.977}, {"w": "tipo", "s": 8.044, "e": 8.244}, {"w": "de", "s": 8.31, "e": 8.344}, {"w": "vídeo", "s": 8.377, "e": 8.777}, {"w": "usando", "s": 8.844, "e": 9.177}, {"w": "cem", "s": 9.244, "e": 9.31}, {"w": "por", "s": 9.444, "e": 9.51}, {"w": "cento", "s": 9.644, "e": 9.877}, {"w": "da", "s": 9.91, "e": 9.944}, {"w": "inteligência", "s": 9.977, "e": 10.377}, {"w": "artificial.", "s": 10.444, "e": 10.91}]}, "03": {"t0": 12.843, "t1": 17.848, "palavras": [{"w": "A", "s": 12.843, "e": 12.91}, {"w": "ferramenta", "s": 12.976, "e": 13.343}, {"w": "que", "s": 13.376, "e": 13.41}, {"w": "eu", "s": 13.443, "e": 13.51}, {"w": "mais", "s": 13.576, "e": 13.776}, {"w": "uso", "s": 13.843, "e": 13.976}, {"w": "aqui", "s": 14.043, "e": 14.31}, {"w": "é", "s": 14.443, "e": 14.476}, {"w": "o", "s": 14.51, "e": 14.576}, {"w": "Claude", "s": 14.643, "e": 14.843}, {"w": "Code,", "s": 14.91, "e": 15.243}, {"w": "para", "s": 15.443, "e": 15.51}, {"w": "fazer", "s": 15.576, "e": 15.776}, {"w": "esse", "s": 15.843, "e": 15.91}, {"w": "estilo", "s": 15.976, "e": 16.176}, {"w": "de", "s": 16.243, "e": 16.31}, {"w": "vídeo", "s": 16.376, "e": 16.576}, {"w": "de", "s": 16.61, "e": 16.643}, {"w": "uma", "s": 16.676, "e": 16.71}, {"w": "maneira", "s": 16.776, "e": 17.11}, {"w": "bem", "s": 17.176, "e": 17.31}, {"w": "rápida.", "s": 17.376, "e": 17.71}]}, "04": {"t0": 18.128, "t1": 23.004, "palavras": [{"w": "O", "s": 18.128, "e": 18.195}, {"w": "resultado", "s": 18.428, "e": 18.661}, {"w": "fica", "s": 18.728, "e": 18.995}, {"w": "totalmente", "s": 19.061, "e": 19.528}, {"w": "diferente", "s": 19.595, "e": 20.061}, {"w": "do", "s": 20.128, "e": 20.195}, {"w": "que", "s": 20.228, "e": 20.261}, {"w": "a", "s": 20.295, "e": 20.328}, {"w": "IA", "s": 20.395, "e": 20.661}, {"w": "faz", "s": 20.728, "e": 21.061}, {"w": "e", "s": 21.128, "e": 21.195}, {"w": "gera", "s": 21.261, "e": 21.528}, {"w": "hoje", "s": 21.561, "e": 21.661}, {"w": "em", "s": 21.728, "e": 21.795}, {"w": "dia", "s": 21.861, "e": 21.995}, {"w": "de", "s": 22.061, "e": 22.128}, {"w": "forma", "s": 22.228, "e": 22.328}, {"w": "genérica.", "s": 22.395, "e": 22.861}]}, "05": {"t0": 23.284, "t1": 27.36, "palavras": [{"w": "Aqui", "s": 23.284, "e": 23.551}, {"w": "eu", "s": 23.584, "e": 23.617}, {"w": "tô", "s": 23.684, "e": 23.751}, {"w": "falando", "s": 23.817, "e": 24.084}, {"w": "da", "s": 24.151, "e": 24.217}, {"w": "elite", "s": 24.417, "e": 24.617}, {"w": "dos", "s": 24.684, "e": 24.751}, {"w": "vídeos", "s": 24.817, "e": 25.017}, {"w": "de", "s": 25.051, "e": 25.084}, {"w": "motion,", "s": 25.151, "e": 25.484}, {"w": "mais", "s": 25.784, "e": 25.884}, {"w": "ou", "s": 25.951, "e": 25.984}, {"w": "menos", "s": 26.017, "e": 26.351}, {"w": "nesse", "s": 26.417, "e": 26.617}, {"w": "estilo", "s": 26.684, "e": 26.884}, {"w": "aqui:", "s": 26.917, "e": 27.151}]}, "06": {"t0": 31.11, "t1": 34.448, "palavras": [{"w": "Passo", "s": 31.11, "e": 31.443}, {"w": "um:", "s": 31.51, "e": 31.643}, {"w": "não", "s": 32.11, "e": 32.177}, {"w": "existe", "s": 32.243, "e": 32.577}, {"w": "vídeo", "s": 32.71, "e": 32.91}, {"w": "diferente", "s": 32.977, "e": 33.51}, {"w": "sem", "s": 33.577, "e": 33.71}, {"w": "referência.", "s": 33.777, "e": 34.31}]}, "07": {"t0": 34.848, "t1": 41.984, "palavras": [{"w": "Como", "s": 34.848, "e": 35.048}, {"w": "você", "s": 35.081, "e": 35.248}, {"w": "já", "s": 35.281, "e": 35.348}, {"w": "deve", "s": 35.381, "e": 35.515}, {"w": "saber,", "s": 35.581, "e": 35.915}, {"w": "não", "s": 36.181, "e": 36.315}, {"w": "basta", "s": 36.381, "e": 36.648}, {"w": "você", "s": 36.681, "e": 36.848}, {"w": "ter", "s": 36.915, "e": 36.981}, {"w": "um", "s": 37.048, "e": 37.181}, {"w": "super", "s": 37.348, "e": 37.515}, {"w": "prompt", "s": 37.581, "e": 37.915}, {"w": "bem", "s": 37.948, "e": 38.048}, {"w": "feito", "s": 38.181, "e": 38.448}, {"w": "e", "s": 38.471, "e": 38.492}, {"w": "detalhado,", "s": 38.515, "e": 39.048}, {"w": "se", "s": 39.215, "e": 39.248}, {"w": "você", "s": 39.315, "e": 39.448}, {"w": "não", "s": 39.515, "e": 39.581}, {"w": "tem", "s": 39.648, "e": 39.715}, {"w": "referências", "s": 39.881, "e": 40.315}, {"w": "do", "s": 40.381, "e": 40.448}, {"w": "estilo", "s": 40.548, "e": 40.781}, {"w": "que", "s": 40.815, "e": 40.848}, {"w": "você", "s": 40.915, "e": 41.115}, {"w": "quer", "s": 41.181, "e": 41.315}, {"w": "pro", "s": 41.381, "e": 41.448}, {"w": "seu", "s": 41.481, "e": 41.581}, {"w": "vídeo.", "s": 41.681, "e": 41.848}]}, "08": {"t0": 42.264, "t1": 54.2, "palavras": [{"w": "Aqui,", "s": 42.264, "e": 42.531}, {"w": "por", "s": 42.597, "e": 42.664}, {"w": "exemplo,", "s": 42.731, "e": 43.064}, {"w": "eu", "s": 43.264, "e": 43.331}, {"w": "uso", "s": 43.431, "e": 43.531}, {"w": "bastante", "s": 43.664, "e": 43.997}, {"w": "o", "s": 44.031, "e": 44.064}, {"w": "estilo", "s": 44.164, "e": 44.397}, {"w": "de", "s": 44.431, "e": 44.464}, {"w": "design", "s": 44.531, "e": 44.931}, {"w": "e", "s": 44.997, "e": 45.064}, {"w": "de", "s": 45.131, "e": 45.264}, {"w": "iú", "s": 45.297, "e": 45.464}, {"w": "ái", "s": 45.564, "e": 45.664}, {"w": "da", "s": 45.731, "e": 45.797}, {"w": "Apple.", "s": 45.964, "e": 46.131}, {"w": "Então,", "s": 46.531, "e": 46.797}, {"w": "você", "s": 46.931, "e": 47.064}, {"w": "já", "s": 47.097, "e": 47.164}, {"w": "deve", "s": 47.197, "e": 47.331}, {"w": "ter", "s": 47.397, "e": 47.464}, {"w": "percebido", "s": 47.531, "e": 47.931}, {"w": "que", "s": 47.997, "e": 48.131}, {"w": "muitos", "s": 48.197, "e": 48.464}, {"w": "dos", "s": 48.531, "e": 48.597}, {"w": "meus", "s": 48.664, "e": 48.797}, {"w": "vídeos", "s": 48.864, "e": 49.197}, {"w": "seguem", "s": 49.264, "e": 49.464}, {"w": "nesse", "s": 49.531, "e": 49.631}, {"w": "estilo,", "s": 49.664, "e": 49.997}, {"w": "que", "s": 50.331, "e": 50.397}, {"w": "eu", "s": 50.464, "e": 50.531}, {"w": "particularmente", "s": 50.597, "e": 51.131}, {"w": "acho", "s": 51.231, "e": 51.331}, {"w": "bem", "s": 51.464, "e": 51.597}, {"w": "diferente", "s": 51.631, "e": 52.131}, {"w": "e", "s": 52.197, "e": 52.264}, {"w": "que", "s": 52.331, "e": 52.397}, {"w": "combina", "s": 52.464, "e": 52.731}, {"w": "bastante", "s": 52.864, "e": 53.197}, {"w": "com", "s": 53.264, "e": 53.331}, {"w": "vídeo", "s": 53.397, "e": 53.597}, {"w": "em", "s": 53.631, "e": 53.664}, {"w": "motion.", "s": 53.864, "e": 54.064}]}, "09": {"t0": 54.48, "t1": 61.948, "palavras": [{"w": "Bom,", "s": 54.48, "e": 54.68}, {"w": "cada", "s": 54.947, "e": 55.147}, {"w": "gosto", "s": 55.213, "e": 55.413}, {"w": "é", "s": 55.447, "e": 55.48}, {"w": "único,", "s": 55.547, "e": 55.88}, {"w": "mas", "s": 56.08, "e": 56.147}, {"w": "o", "s": 56.18, "e": 56.213}, {"w": "processo", "s": 56.413, "e": 56.636}, {"w": "é", "s": 56.657, "e": 56.68}, {"w": "o", "s": 56.713, "e": 56.747}, {"w": "mesmo:", "s": 56.847, "e": 57.013}, {"w": "referência", "s": 57.48, "e": 58.013}, {"w": "é", "s": 58.08, "e": 58.147}, {"w": "um", "s": 58.18, "e": 58.213}, {"w": "dos", "s": 58.28, "e": 58.347}, {"w": "pilares", "s": 58.413, "e": 58.68}, {"w": "principais", "s": 58.813, "e": 59.413}, {"w": "para", "s": 59.48, "e": 59.547}, {"w": "a", "s": 59.58, "e": 59.613}, {"w": "sua", "s": 59.68, "e": 59.88}, {"w": "\"IA\"", "s": 60.013, "e": 60.213}, {"w": "fazer", "s": 60.347, "e": 60.547}, {"w": "algo", "s": 60.613, "e": 60.813}, {"w": "realmente", "s": 60.88, "e": 61.347}, {"w": "único.", "s": 61.48, "e": 61.747}]}, "10": {"t0": 62.548, "t1": 64.75, "palavras": [{"w": "Passo", "s": 62.548, "e": 62.815}, {"w": "dois:", "s": 62.881, "e": 63.215}, {"w": "identidade", "s": 63.548, "e": 64.148}, {"w": "visual.", "s": 64.215, "e": 64.615}]}, "11": {"t0": 65.15, "t1": 69.96, "palavras": [{"w": "Sim,", "s": 65.15, "e": 65.417}, {"w": "a", "s": 65.65, "e": 65.683}, {"w": "identidade", "s": 65.75, "e": 66.15}, {"w": "visual", "s": 66.217, "e": 66.483}, {"w": "do", "s": 66.55, "e": 66.617}, {"w": "seu", "s": 66.65, "e": 66.75}, {"w": "vídeo", "s": 66.817, "e": 67.15}, {"w": "é", "s": 67.183, "e": 67.217}, {"w": "um", "s": 67.25, "e": 67.283}, {"w": "dos", "s": 67.35, "e": 67.417}, {"w": "pilares", "s": 67.483, "e": 67.95}, {"w": "que", "s": 68.017, "e": 68.083}, {"w": "fazem", "s": 68.128, "e": 68.35}, {"w": "dele", "s": 68.383, "e": 68.55}, {"w": "ser", "s": 68.65, "e": 68.75}, {"w": "algo", "s": 68.883, "e": 69.017}, {"w": "irreplicável.", "s": 69.083, "e": 69.817}]}, "12": {"t0": 70.24, "t1": 82.443, "palavras": [{"w": "Provavelmente", "s": 70.24, "e": 70.84}, {"w": "você,", "s": 70.873, "e": 71.24}, {"w": "que", "s": 71.373, "e": 71.44}, {"w": "tá", "s": 71.507, "e": 71.573}, {"w": "aí", "s": 71.607, "e": 71.707}, {"w": "me", "s": 71.74, "e": 71.773}, {"w": "assistindo,", "s": 71.907, "e": 72.24}, {"w": "sabe", "s": 72.507, "e": 72.707}, {"w": "que", "s": 72.773, "e": 72.907}, {"w": "marca", "s": 73.04, "e": 73.173}, {"w": "bem", "s": 73.207, "e": 73.307}, {"w": "feita", "s": 73.373, "e": 73.707}, {"w": "e", "s": 73.773, "e": 73.84}, {"w": "bem", "s": 73.907, "e": 74.04}, {"w": "posicionada", "s": 74.107, "e": 74.707}, {"w": "é", "s": 74.84, "e": 74.907}, {"w": "importante", "s": 75.073, "e": 75.373}, {"w": "para", "s": 75.44, "e": 75.573}, {"w": "qualquer", "s": 75.64, "e": 75.973}, {"w": "negócio.", "s": 76.073, "e": 76.44}, {"w": "Esse", "s": 76.907, "e": 77.107}, {"w": "mesmo", "s": 77.173, "e": 77.373}, {"w": "conceito", "s": 77.473, "e": 77.907}, {"w": "também", "s": 77.996, "e": 78.24}, {"w": "é", "s": 78.273, "e": 78.307}, {"w": "importante", "s": 78.44, "e": 78.773}, {"w": "para", "s": 78.84, "e": 78.907}, {"w": "construir", "s": 78.973, "e": 79.307}, {"w": "um", "s": 79.373, "e": 79.44}, {"w": "vídeo", "s": 79.507, "e": 79.707}, {"w": "bem", "s": 79.74, "e": 79.84}, {"w": "feito,", "s": 79.907, "e": 80.173}, {"w": "e", "s": 80.407, "e": 80.44}, {"w": "casa", "s": 80.507, "e": 80.707}, {"w": "muito", "s": 80.84, "e": 81.107}, {"w": "com", "s": 81.14, "e": 81.173}, {"w": "as", "s": 81.207, "e": 81.24}, {"w": "referências", "s": 81.307, "e": 81.707}, {"w": "que", "s": 81.74, "e": 81.773}, {"w": "você", "s": 81.84, "e": 81.973}, {"w": "manda.", "s": 82.04, "e": 82.307}]}, "13": {"t0": 82.723, "t1": 91.859, "palavras": [{"w": "Então,", "s": 82.723, "e": 82.99}, {"w": "é", "s": 83.223, "e": 83.256}, {"w": "importante", "s": 83.323, "e": 83.79}, {"w": "que", "s": 83.823, "e": 83.856}, {"w": "você", "s": 83.923, "e": 84.056}, {"w": "já", "s": 84.123, "e": 84.256}, {"w": "tenha", "s": 84.323, "e": 84.456}, {"w": "uma", "s": 84.523, "e": 84.59}, {"w": "identidade", "s": 84.69, "e": 85.056}, {"w": "visual", "s": 85.256, "e": 85.456}, {"w": "do", "s": 85.523, "e": 85.59}, {"w": "seu", "s": 85.623, "e": 85.723}, {"w": "vídeo", "s": 85.79, "e": 85.923}, {"w": "em", "s": 85.956, "e": 85.99}, {"w": "mente,", "s": 86.056, "e": 86.39}, {"w": "para", "s": 86.59, "e": 86.656}, {"w": "que", "s": 86.723, "e": 86.767}, {"w": "as", "s": 86.812, "e": 86.856}, {"w": "referências", "s": 86.99, "e": 87.39}, {"w": "que", "s": 87.423, "e": 87.456}, {"w": "você", "s": 87.523, "e": 87.656}, {"w": "buscar", "s": 87.723, "e": 88.056}, {"w": "sejam", "s": 88.123, "e": 88.39}, {"w": "relevantes", "s": 88.623, "e": 88.99}, {"w": "para", "s": 89.056, "e": 89.123}, {"w": "o", "s": 89.156, "e": 89.19}, {"w": "seu", "s": 89.223, "e": 89.323}, {"w": "agente", "s": 89.39, "e": 89.656}, {"w": "construir", "s": 89.723, "e": 90.056}, {"w": "com", "s": 90.123, "e": 90.256}, {"w": "base", "s": 90.323, "e": 90.523}, {"w": "no", "s": 90.59, "e": 90.656}, {"w": "branding", "s": 90.723, "e": 90.99}, {"w": "que", "s": 91.056, "e": 91.123}, {"w": "você", "s": 91.156, "e": 91.323}, {"w": "escolheu.", "s": 91.356, "e": 91.656}]}, "14": {"t0": 92.459, "t1": 94.992, "palavras": [{"w": "Passo", "s": 92.459, "e": 92.726}, {"w": "três:", "s": 92.792, "e": 93.126}, {"w": "o", "s": 93.492, "e": 93.526}, {"w": "som", "s": 93.659, "e": 93.926}, {"w": "e", "s": 93.992, "e": 94.059}, {"w": "a", "s": 94.092, "e": 94.126}, {"w": "trilha", "s": 94.192, "e": 94.392}, {"w": "sonora.", "s": 94.459, "e": 94.859}]}, "15": {"t0": 95.392, "t1": 102.927, "palavras": [{"w": "Eu", "s": 95.392, "e": 95.525}, {"w": "já", "s": 95.559, "e": 95.625}, {"w": "venho", "s": 95.659, "e": 95.792}, {"w": "batendo", "s": 95.892, "e": 96.125}, {"w": "há", "s": 96.148, "e": 96.192}, {"w": "um", "s": 96.259, "e": 96.325}, {"w": "tempo,", "s": 96.392, "e": 96.725}, {"w": "nos", "s": 96.792, "e": 96.925}, {"w": "vídeos", "s": 96.992, "e": 97.125}, {"w": "anteriores,", "s": 97.192, "e": 97.725}, {"w": "sobre", "s": 97.792, "e": 97.992}, {"w": "sound", "s": 98.125, "e": 98.325}, {"w": "design.", "s": 98.559, "e": 98.792}, {"w": "Isso", "s": 99.192, "e": 99.325}, {"w": "é", "s": 99.392, "e": 99.459}, {"w": "muito", "s": 99.525, "e": 99.725}, {"w": "importante", "s": 99.859, "e": 100.192}, {"w": "para", "s": 100.259, "e": 100.392}, {"w": "que", "s": 100.425, "e": 100.459}, {"w": "o", "s": 100.492, "e": 100.525}, {"w": "seu", "s": 100.592, "e": 100.725}, {"w": "vídeo", "s": 100.792, "e": 101.125}, {"w": "e", "s": 101.159, "e": 101.192}, {"w": "o", "s": 101.259, "e": 101.325}, {"w": "áudio", "s": 101.392, "e": 101.659}, {"w": "do", "s": 101.692, "e": 101.725}, {"w": "seu", "s": 101.792, "e": 101.925}, {"w": "vídeo", "s": 101.992, "e": 102.192}, {"w": "conversem.", "s": 102.259, "e": 102.725}]}, "16": {"t0": 103.207, "t1": 116.277, "palavras": [{"w": "Não", "s": 103.207, "e": 103.34}, {"w": "adianta", "s": 103.407, "e": 103.674}, {"w": "nada", "s": 103.74, "e": 104.007}, {"w": "você", "s": 104.04, "e": 104.207}, {"w": "ter", "s": 104.274, "e": 104.34}, {"w": "um", "s": 104.407, "e": 104.474}, {"w": "vídeo", "s": 104.54, "e": 104.674}, {"w": "que", "s": 104.707, "e": 104.74}, {"w": "seja", "s": 104.807, "e": 105.074}, {"w": "muito", "s": 105.14, "e": 105.407}, {"w": "bom", "s": 105.474, "e": 105.674}, {"w": "e", "s": 105.774, "e": 105.874}, {"w": "muito", "s": 105.907, "e": 106.14}, {"w": "bem", "s": 106.207, "e": 106.274}, {"w": "editado", "s": 106.407, "e": 106.807}, {"w": "se", "s": 106.874, "e": 106.94}, {"w": "ele", "s": 107.007, "e": 107.074}, {"w": "não", "s": 107.096, "e": 107.14}, {"w": "estiver", "s": 107.207, "e": 107.474}, {"w": "vivo.", "s": 107.54, "e": 107.807}, {"w": "Quem", "s": 108.274, "e": 108.407}, {"w": "dá", "s": 108.44, "e": 108.507}, {"w": "esse", "s": 108.54, "e": 108.674}, {"w": "avivamento", "s": 108.707, "e": 109.207}, {"w": "para", "s": 109.24, "e": 109.274}, {"w": "o", "s": 109.307, "e": 109.34}, {"w": "seu", "s": 109.374, "e": 109.54}, {"w": "vídeo", "s": 109.607, "e": 109.874}, {"w": "é", "s": 109.974, "e": 110.074}, {"w": "justamente", "s": 110.207, "e": 110.54}, {"w": "a", "s": 110.607, "e": 110.674}, {"w": "sua", "s": 110.74, "e": 110.874}, {"w": "trilha", "s": 110.907, "e": 111.074}, {"w": "sonora", "s": 111.14, "e": 111.54}, {"w": "e", "s": 111.574, "e": 111.607}, {"w": "os", "s": 111.64, "e": 111.674}, {"w": "seus", "s": 111.707, "e": 111.807}, {"w": "elementos", "s": 111.874, "e": 112.207}, {"w": "sonoros,", "s": 112.307, "e": 112.674}, {"w": "que", "s": 112.974, "e": 113.007}, {"w": "você", "s": 113.074, "e": 113.274}, {"w": "usa", "s": 113.34, "e": 113.474}, {"w": "em", "s": 113.574, "e": 113.674}, {"w": "cada", "s": 113.74, "e": 113.874}, {"w": "componente", "s": 113.94, "e": 114.363}, {"w": "que", "s": 114.384, "e": 114.407}, {"w": "aparece", "s": 114.474, "e": 114.74}, {"w": "na", "s": 114.807, "e": 114.94}, {"w": "tela,", "s": 115.051, "e": 115.274}, {"w": "no", "s": 115.34, "e": 115.407}, {"w": "momento", "s": 115.54, "e": 115.807}, {"w": "certo.", "s": 115.94, "e": 116.274}]}, "17": {"t0": 116.557, "t1": 125.426, "palavras": [{"w": "Como", "s": 116.557, "e": 116.69}, {"w": "eu", "s": 116.724, "e": 116.757}, {"w": "já", "s": 116.79, "e": 116.89}, {"w": "falei", "s": 116.957, "e": 117.157}, {"w": "nos", "s": 117.224, "e": 117.29}, {"w": "vídeos", "s": 117.357, "e": 117.49}, {"w": "anteriores,", "s": 117.557, "e": 118.157}, {"w": "não", "s": 118.324, "e": 118.424}, {"w": "tem", "s": 118.557, "e": 118.757}, {"w": "como", "s": 118.824, "e": 118.89}, {"w": "eu", "s": 118.924, "e": 118.957}, {"w": "te", "s": 118.99, "e": 119.024}, {"w": "ensinar", "s": 119.09, "e": 119.49}, {"w": "sound", "s": 119.557, "e": 119.69}, {"w": "design.", "s": 119.757, "e": 120.09}, {"w": "Isso", "s": 120.424, "e": 120.524}, {"w": "é", "s": 120.557, "e": 120.59}, {"w": "algo", "s": 120.624, "e": 120.824}, {"w": "muito", "s": 120.957, "e": 121.157}, {"w": "particular", "s": 121.224, "e": 121.624}, {"w": "seu,", "s": 121.69, "e": 121.89}, {"w": "mas", "s": 122.357, "e": 122.557}, {"w": "dá", "s": 122.624, "e": 122.724}, {"w": "para", "s": 122.757, "e": 122.824}, {"w": "você", "s": 122.89, "e": 123.024}, {"w": "praticar", "s": 123.057, "e": 123.49}, {"w": "pesquisando", "s": 123.557, "e": 124.024}, {"w": "sobre", "s": 124.09, "e": 124.29}, {"w": "sound", "s": 124.39, "e": 124.49}, {"w": "design", "s": 124.657, "e": 124.824}, {"w": "no", "s": 124.857, "e": 124.89}, {"w": "YouTube.", "s": 124.957, "e": 125.29}]}, "18": {"t0": 125.706, "t1": 138.179, "palavras": [{"w": "Não", "s": 125.706, "e": 125.839}, {"w": "é", "s": 125.873, "e": 125.906}, {"w": "tão", "s": 125.973, "e": 126.039}, {"w": "difícil", "s": 126.106, "e": 126.439}, {"w": "quanto", "s": 126.506, "e": 126.639}, {"w": "parece,", "s": 126.706, "e": 127.106}, {"w": "e", "s": 127.339, "e": 127.373}, {"w": "é", "s": 127.439, "e": 127.506}, {"w": "muito", "s": 127.573, "e": 127.773}, {"w": "mais", "s": 127.839, "e": 127.973}, {"w": "simples,", "s": 128.073, "e": 128.373}, {"w": "porque", "s": 128.573, "e": 128.706}, {"w": "você", "s": 128.773, "e": 128.906}, {"w": "só", "s": 128.95, "e": 129.039}, {"w": "tem", "s": 129.106, "e": 129.173}, {"w": "que", "s": 129.239, "e": 129.273}, {"w": "entender", "s": 129.306, "e": 129.706}, {"w": "duas", "s": 129.773, "e": 129.906}, {"w": "coisas:", "s": 129.973, "e": 130.373}, {"w": "o", "s": 130.839, "e": 130.873}, {"w": "elemento", "s": 130.906, "e": 131.306}, {"w": "tem", "s": 131.373, "e": 131.439}, {"w": "que", "s": 131.473, "e": 131.506}, {"w": "ser", "s": 131.573, "e": 131.706}, {"w": "vivo", "s": 131.773, "e": 132.039}, {"w": "no", "s": 132.073, "e": 132.106}, {"w": "seu", "s": 132.173, "e": 132.306}, {"w": "vídeo,", "s": 132.373, "e": 132.573}, {"w": "com", "s": 132.773, "e": 132.839}, {"w": "uma", "s": 132.906, "e": 132.973}, {"w": "entrada", "s": 133.206, "e": 133.439}, {"w": "e", "s": 133.473, "e": 133.506}, {"w": "uma", "s": 133.573, "e": 133.639}, {"w": "saída;", "s": 133.706, "e": 134.039}, {"w": "e,", "s": 134.506, "e": 134.573}, {"w": "nesse", "s": 134.839, "e": 134.973}, {"w": "meio-tempo", "s": 135.039, "e": 135.529}, {"w": "que", "s": 135.55, "e": 135.573}, {"w": "ele", "s": 135.606, "e": 135.639}, {"w": "está", "s": 135.706, "e": 135.839}, {"w": "na", "s": 135.906, "e": 135.973}, {"w": "tela,", "s": 136.039, "e": 136.173}, {"w": "ele", "s": 136.473, "e": 136.573}, {"w": "tem", "s": 136.639, "e": 136.706}, {"w": "que", "s": 136.773, "e": 136.839}, {"w": "conversar", "s": 136.939, "e": 137.439}, {"w": "com", "s": 137.473, "e": 137.506}, {"w": "o", "s": 137.539, "e": 137.573}, {"w": "seu", "s": 137.606, "e": 137.773}, {"w": "vídeo.", "s": 137.839, "e": 137.973}]}, "19": {"t0": 138.459, "t1": 147.26, "palavras": [{"w": "Por", "s": 138.459, "e": 138.592}, {"w": "exemplo:", "s": 138.626, "e": 138.992}, {"w": "olha", "s": 139.392, "e": 139.526}, {"w": "esse", "s": 139.592, "e": 139.659}, {"w": "círculo", "s": 139.726, "e": 139.992}, {"w": "aqui.", "s": 140.059, "e": 140.259}, {"w": "Eu", "s": 140.659, "e": 140.726}, {"w": "quero", "s": 140.792, "e": 140.926}, {"w": "que", "s": 140.959, "e": 140.992}, {"w": "ele", "s": 141.059, "e": 141.126}, {"w": "seja", "s": 141.192, "e": 141.392}, {"w": "como", "s": 141.459, "e": 141.592}, {"w": "se", "s": 141.626, "e": 141.659}, {"w": "fosse", "s": 141.792, "e": 141.992}, {"w": "uma", "s": 142.092, "e": 142.192}, {"w": "partícula", "s": 142.326, "e": 142.759}, {"w": "que", "s": 142.792, "e": 142.859}, {"w": "vai", "s": 142.926, "e": 142.992}, {"w": "escorrer", "s": 143.059, "e": 143.326}, {"w": "pelo", "s": 143.392, "e": 143.526}, {"w": "vídeo", "s": 143.592, "e": 143.726}, {"w": "inteiro,", "s": 143.859, "e": 144.126}, {"w": "fazendo", "s": 144.426, "e": 144.659}, {"w": "um", "s": 144.726, "e": 144.792}, {"w": "G", "s": 144.926, "e": 145.126}, {"w": "no", "s": 145.192, "e": 145.259}, {"w": "meio", "s": 145.292, "e": 145.392}, {"w": "da", "s": 145.459, "e": 145.526}, {"w": "tela", "s": 145.592, "e": 145.792}, {"w": "para", "s": 145.859, "e": 145.992}, {"w": "construir", "s": 146.059, "e": 146.326}, {"w": "a", "s": 146.359, "e": 146.392}, {"w": "marca", "s": 146.459, "e": 146.659}, {"w": "do", "s": 146.692, "e": 146.726}, {"w": "Google.", "s": 146.792, "e": 147.059}]}, "20": {"t0": 147.54, "t1": 153.552, "palavras": [{"w": "Se", "s": 147.54, "e": 147.673}, {"w": "essa", "s": 147.74, "e": 147.807}, {"w": "partícula", "s": 147.873, "e": 148.273}, {"w": "for", "s": 148.34, "e": 148.473}, {"w": "apenas", "s": 148.54, "e": 148.807}, {"w": "um", "s": 148.84, "e": 148.873}, {"w": "elemento", "s": 149.04, "e": 149.273}, {"w": "sem", "s": 149.34, "e": 149.54}, {"w": "som,", "s": 149.607, "e": 149.807}, {"w": "sem", "s": 150.073, "e": 150.207}, {"w": "efeito", "s": 150.307, "e": 150.54}, {"w": "sonoro,", "s": 150.64, "e": 150.94}, {"w": "desenhando", "s": 151.207, "e": 151.54}, {"w": "na", "s": 151.607, "e": 151.673}, {"w": "tela,", "s": 151.74, "e": 152.007}, {"w": "ela", "s": 152.373, "e": 152.473}, {"w": "é", "s": 152.54, "e": 152.573}, {"w": "um", "s": 152.607, "e": 152.64}, {"w": "elemento", "s": 152.673, "e": 153.007}, {"w": "morto.", "s": 153.073, "e": 153.407}]}, "21": {"t0": 156.982, "t1": 161.586, "palavras": [{"w": "Agora,", "s": 156.982, "e": 157.315}, {"w": "a", "s": 157.549, "e": 157.582}, {"w": "mesma", "s": 157.715, "e": 157.915}, {"w": "partícula,", "s": 157.982, "e": 158.449}, {"w": "fazendo", "s": 158.582, "e": 158.849}, {"w": "a", "s": 158.893, "e": 158.938}, {"w": "mesma", "s": 158.982, "e": 159.182}, {"w": "coisa,", "s": 159.315, "e": 159.649}, {"w": "só", "s": 159.782, "e": 159.882}, {"w": "que", "s": 159.915, "e": 159.982}, {"w": "agora", "s": 160.049, "e": 160.315}, {"w": "sendo", "s": 160.382, "e": 160.605}, {"w": "um", "s": 160.626, "e": 160.649}, {"w": "elemento", "s": 160.815, "e": 161.049}, {"w": "vivo.", "s": 161.115, "e": 161.382}]}, "22": {"t0": 165.516, "t1": 174.249, "palavras": [{"w": "Pegou", "s": 165.516, "e": 165.716}, {"w": "a", "s": 165.738, "e": 165.76}, {"w": "visão?", "s": 165.783, "e": 166.116}, {"w": "Não", "s": 166.449, "e": 166.516}, {"w": "é", "s": 166.549, "e": 166.583}, {"w": "difícil.", "s": 166.649, "e": 167.049}, {"w": "Só", "s": 167.383, "e": 167.483}, {"w": "tem", "s": 167.516, "e": 167.583}, {"w": "que", "s": 167.649, "e": 167.683}, {"w": "entender", "s": 167.716, "e": 168.116}, {"w": "que", "s": 168.216, "e": 168.316}, {"w": "cada", "s": 168.349, "e": 168.583}, {"w": "coisa", "s": 168.649, "e": 168.916}, {"w": "tem", "s": 168.983, "e": 169.049}, {"w": "que", "s": 169.083, "e": 169.116}, {"w": "ter", "s": 169.183, "e": 169.249}, {"w": "um", "s": 169.316, "e": 169.383}, {"w": "som", "s": 169.449, "e": 169.516}, {"w": "específico", "s": 169.583, "e": 170.183}, {"w": "de", "s": 170.216, "e": 170.249}, {"w": "assimilação,", "s": 170.316, "e": 170.783}, {"w": "por", "s": 171.083, "e": 171.183}, {"w": "mais", "s": 171.249, "e": 171.383}, {"w": "sutil", "s": 171.449, "e": 171.716}, {"w": "que", "s": 171.749, "e": 171.783}, {"w": "ele", "s": 171.849, "e": 171.916}, {"w": "seja,", "s": 171.983, "e": 172.249}, {"w": "para", "s": 172.449, "e": 172.516}, {"w": "não", "s": 172.583, "e": 172.649}, {"w": "atrapalhar", "s": 172.716, "e": 173.116}, {"w": "o", "s": 173.149, "e": 173.183}, {"w": "andamento", "s": 173.216, "e": 173.583}, {"w": "do", "s": 173.616, "e": 173.649}, {"w": "seu", "s": 173.683, "e": 173.783}, {"w": "vídeo.", "s": 173.849, "e": 174.049}]}}, "cenas": {"vitrine": {"t0": 27.51, "t1": 30.51}, "demo_morto": {"t0": 153.702, "t1": 156.702}, "demo_vivo": {"t0": 161.736, "t1": 165.236}}};
@@ -0,0 +1 @@
1
+ window.TEMPO = {"parte": 2, "dur": 96.264, "falas": {"23": {"t0": 1.6, "t1": 3.408, "palavras": [{"w": "Passo", "s": 1.6, "e": 1.867}, {"w": "quatro:", "s": 1.933, "e": 2.267}, {"w": "elementos.", "s": 2.6, "e": 3.267}]}, "24": {"t0": 3.808, "t1": 15.412, "palavras": [{"w": "Aqui", "s": 3.808, "e": 4.208}, {"w": "é", "s": 4.275, "e": 4.341}, {"w": "uma", "s": 4.408, "e": 4.475}, {"w": "das", "s": 4.541, "e": 4.608}, {"w": "partes", "s": 4.675, "e": 5.008}, {"w": "mais", "s": 5.075, "e": 5.275}, {"w": "importantes,", "s": 5.508, "e": 5.875}, {"w": "que", "s": 6.008, "e": 6.075}, {"w": "muita", "s": 6.208, "e": 6.475}, {"w": "gente", "s": 6.541, "e": 6.741}, {"w": "erra.", "s": 6.808, "e": 7.075}, {"w": "Em", "s": 7.541, "e": 7.675}, {"w": "muitos", "s": 7.719, "e": 7.941}, {"w": "vídeos", "s": 8.008, "e": 8.208}, {"w": "que", "s": 8.275, "e": 8.308}, {"w": "a", "s": 8.341, "e": 8.386}, {"w": "inteligência", "s": 8.43, "e": 8.741}, {"w": "artificial", "s": 8.808, "e": 9.208}, {"w": "faz,", "s": 9.275, "e": 9.608}, {"w": "quando", "s": 9.775, "e": 9.875}, {"w": "você", "s": 9.941, "e": 10.075}, {"w": "não", "s": 10.208, "e": 10.341}, {"w": "dá", "s": 10.408, "e": 10.475}, {"w": "o", "s": 10.508, "e": 10.541}, {"w": "direcionamento", "s": 10.608, "e": 11.075}, {"w": "correto", "s": 11.141, "e": 11.541}, {"w": "para", "s": 11.641, "e": 11.741}, {"w": "ela,", "s": 11.841, "e": 11.941}, {"w": "o", "s": 12.275, "e": 12.341}, {"w": "resultado", "s": 12.541, "e": 12.741}, {"w": "sai", "s": 12.775, "e": 13.008}, {"w": "muito", "s": 13.075, "e": 13.208}, {"w": "bem", "s": 13.275, "e": 13.341}, {"w": "feito,", "s": 13.475, "e": 13.741}, {"w": "porém", "s": 14.041, "e": 14.408}, {"w": "muito", "s": 14.541, "e": 14.741}, {"w": "genérico.", "s": 14.808, "e": 15.275}]}, "25": {"t0": 15.693, "t1": 27.832, "palavras": [{"w": "Por", "s": 15.693, "e": 15.826}, {"w": "exemplo,", "s": 15.86, "e": 16.16}, {"w": "se", "s": 16.426, "e": 16.46}, {"w": "eu", "s": 16.493, "e": 16.526}, {"w": "estiver", "s": 16.56, "e": 16.826}, {"w": "falando", "s": 16.893, "e": 17.16}, {"w": "de", "s": 17.226, "e": 17.293}, {"w": "WhatsApp", "s": 17.36, "e": 17.826}, {"w": "conectando", "s": 17.893, "e": 18.293}, {"w": "com", "s": 18.36, "e": 18.426}, {"w": "Facebook,", "s": 18.493, "e": 19.026}, {"w": "Instagram", "s": 19.426, "e": 19.693}, {"w": "e", "s": 19.76, "e": 19.826}, {"w": "o", "s": 19.86, "e": 19.893}, {"w": "Elon", "s": 19.96, "e": 20.093}, {"w": "Musk,", "s": 20.16, "e": 20.493}, {"w": "no", "s": 20.593, "e": 20.626}, {"w": "seu", "s": 20.693, "e": 20.826}, {"w": "vídeo,", "s": 20.893, "e": 21.093}, {"w": "cada", "s": 21.46, "e": 21.626}, {"w": "elemento,", "s": 21.86, "e": 22.16}, {"w": "ícone", "s": 22.36, "e": 22.693}, {"w": "e", "s": 22.76, "e": 22.793}, {"w": "imagem", "s": 22.826, "e": 23.226}, {"w": "tem", "s": 23.293, "e": 23.426}, {"w": "que", "s": 23.46, "e": 23.493}, {"w": "aparecer", "s": 23.526, "e": 23.893}, {"w": "corretamente", "s": 23.96, "e": 24.56}, {"w": "no", "s": 24.66, "e": 24.76}, {"w": "tempo", "s": 24.86, "e": 24.982}, {"w": "em", "s": 25.004, "e": 25.026}, {"w": "que", "s": 25.093, "e": 25.126}, {"w": "está", "s": 25.16, "e": 25.293}, {"w": "sendo", "s": 25.36, "e": 25.493}, {"w": "falado.", "s": 25.56, "e": 25.826}, {"w": "Senão,", "s": 26.26, "e": 26.493}, {"w": "as", "s": 26.626, "e": 26.693}, {"w": "pessoas", "s": 26.76, "e": 27.026}, {"w": "não", "s": 27.071, "e": 27.16}, {"w": "vão", "s": 27.226, "e": 27.293}, {"w": "entender.", "s": 27.36, "e": 27.693}]}, "26": {"t0": 28.112, "t1": 32.382, "palavras": [{"w": "O", "s": 28.112, "e": 28.179}, {"w": "seu", "s": 28.245, "e": 28.345}, {"w": "vídeo", "s": 28.379, "e": 28.645}, {"w": "tem", "s": 28.712, "e": 28.779}, {"w": "que", "s": 28.812, "e": 28.845}, {"w": "ser", "s": 28.912, "e": 28.979}, {"w": "desenhado", "s": 29.045, "e": 29.512}, {"w": "com", "s": 29.612, "e": 29.712}, {"w": "base", "s": 29.845, "e": 29.979}, {"w": "no", "s": 30.045, "e": 30.112}, {"w": "que", "s": 30.145, "e": 30.179}, {"w": "está", "s": 30.245, "e": 30.379}, {"w": "sendo", "s": 30.445, "e": 30.579}, {"w": "falado", "s": 30.645, "e": 31.045}, {"w": "no", "s": 31.079, "e": 31.112}, {"w": "seu", "s": 31.179, "e": 31.312}, {"w": "áudio.", "s": 31.345, "e": 31.645}, {"w": "Entendeu?", "s": 31.912, "e": 32.245}]}, "27": {"t0": 32.662, "t1": 38.798, "palavras": [{"w": "Exemplo:", "s": 32.662, "e": 33.129}, {"w": "\"A", "s": 33.512, "e": 33.529}, {"w": "Tesla,", "s": 33.662, "e": 33.995}, {"w": "do", "s": 34.095, "e": 34.129}, {"w": "Elon", "s": 34.195, "e": 34.329}, {"w": "Musk,", "s": 34.395, "e": 34.662}, {"w": "acabou", "s": 34.862, "e": 35.195}, {"w": "de", "s": 35.262, "e": 35.329}, {"w": "divulgar", "s": 35.395, "e": 35.662}, {"w": "ontem", "s": 35.762, "e": 35.929}, {"w": "no", "s": 35.962, "e": 35.995}, {"w": "YouTube", "s": 36.062, "e": 36.462}, {"w": "a", "s": 36.529, "e": 36.562}, {"w": "demonstração", "s": 36.595, "e": 37.129}, {"w": "do", "s": 37.195, "e": 37.262}, {"w": "seu", "s": 37.295, "e": 37.462}, {"w": "primeiro", "s": 37.629, "e": 37.929}, {"w": "carro", "s": 37.995, "e": 38.195}, {"w": "voador.\"", "s": 38.262, "e": 38.595}]}, "28": {"t0": 42.228, "t1": 52.299, "palavras": [{"w": "Percebe", "s": 42.228, "e": 42.628}, {"w": "que,", "s": 42.695, "e": 42.895}, {"w": "quando", "s": 43.128, "e": 43.228}, {"w": "você", "s": 43.295, "e": 43.495}, {"w": "desenha", "s": 43.595, "e": 43.828}, {"w": "na", "s": 43.895, "e": 43.961}, {"w": "tela", "s": 44.028, "e": 44.228}, {"w": "o", "s": 44.261, "e": 44.295}, {"w": "que", "s": 44.328, "e": 44.361}, {"w": "está", "s": 44.428, "e": 44.561}, {"w": "falando,", "s": 44.628, "e": 44.961}, {"w": "é", "s": 45.161, "e": 45.228}, {"w": "muito", "s": 45.295, "e": 45.495}, {"w": "mais", "s": 45.528, "e": 45.695}, {"w": "fácil", "s": 45.761, "e": 46.028}, {"w": "para", "s": 46.095, "e": 46.161}, {"w": "a", "s": 46.184, "e": 46.206}, {"w": "pessoa", "s": 46.228, "e": 46.428}, {"w": "assimilar", "s": 46.495, "e": 46.828}, {"w": "o", "s": 46.895, "e": 46.928}, {"w": "que", "s": 46.961, "e": 46.995}, {"w": "está", "s": 47.028, "e": 47.128}, {"w": "acontecendo?", "s": 47.161, "e": 47.628}, {"w": "Ela", "s": 48.095, "e": 48.228}, {"w": "fica", "s": 48.295, "e": 48.428}, {"w": "muito", "s": 48.561, "e": 48.761}, {"w": "mais", "s": 48.828, "e": 48.895}, {"w": "entretida", "s": 48.961, "e": 49.428}, {"w": "no", "s": 49.495, "e": 49.561}, {"w": "seu", "s": 49.595, "e": 49.695}, {"w": "vídeo.", "s": 49.761, "e": 49.961}, {"w": "Senão,", "s": 50.295, "e": 50.628}, {"w": "o", "s": 50.795, "e": 50.828}, {"w": "seu", "s": 50.861, "e": 50.961}, {"w": "vídeo", "s": 51.028, "e": 51.161}, {"w": "acaba", "s": 51.195, "e": 51.361}, {"w": "sendo", "s": 51.428, "e": 51.628}, {"w": "chato!", "s": 51.695, "e": 52.095}]}, "29": {"t0": 52.58, "t1": 63.586, "palavras": [{"w": "Entendendo", "s": 52.58, "e": 53.113}, {"w": "e", "s": 53.147, "e": 53.18}, {"w": "aplicando", "s": 53.247, "e": 53.513}, {"w": "esses", "s": 53.647, "e": 53.78}, {"w": "passos,", "s": 53.913, "e": 54.247}, {"w": "agora", "s": 54.48, "e": 54.647}, {"w": "é", "s": 54.713, "e": 54.78}, {"w": "só", "s": 54.847, "e": 54.98}, {"w": "juntar", "s": 55.013, "e": 55.247}, {"w": "tudo", "s": 55.38, "e": 55.58}, {"w": "isso", "s": 55.647, "e": 55.913}, {"w": "e", "s": 55.98, "e": 56.047}, {"w": "mandar", "s": 56.147, "e": 56.313}, {"w": "pra", "s": 56.347, "e": 56.38}, {"w": "sua", "s": 56.447, "e": 56.58}, {"w": "IA.", "s": 56.613, "e": 56.78}, {"w": "Com", "s": 57.213, "e": 57.247}, {"w": "as", "s": 57.28, "e": 57.313}, {"w": "ferramentas", "s": 57.38, "e": 57.713}, {"w": "necessárias,", "s": 57.78, "e": 58.313}, {"w": "você", "s": 58.447, "e": 58.58}, {"w": "vai", "s": 58.613, "e": 58.713}, {"w": "ter,", "s": 58.78, "e": 58.98}, {"w": "com", "s": 59.069, "e": 59.113}, {"w": "certeza,", "s": 59.18, "e": 59.647}, {"w": "um", "s": 59.747, "e": 59.78}, {"w": "vídeo", "s": 59.847, "e": 60.047}, {"w": "diferente", "s": 60.136, "e": 60.513}, {"w": "de", "s": 60.547, "e": 60.58}, {"w": "noventa", "s": 60.647, "e": 61.047}, {"w": "e", "s": 61.113, "e": 61.18}, {"w": "nove", "s": 61.213, "e": 61.313}, {"w": "por", "s": 61.447, "e": 61.58}, {"w": "cento", "s": 61.68, "e": 61.813}, {"w": "dos", "s": 61.847, "e": 61.98}, {"w": "vídeos", "s": 62.047, "e": 62.247}, {"w": "de", "s": 62.28, "e": 62.313}, {"w": "motion", "s": 62.38, "e": 62.647}, {"w": "que", "s": 62.68, "e": 62.713}, {"w": "tão", "s": 62.78, "e": 62.847}, {"w": "rodando", "s": 62.913, "e": 63.18}, {"w": "por", "s": 63.213, "e": 63.247}, {"w": "aí.", "s": 63.313, "e": 63.447}]}, "30": {"t0": 63.866, "t1": 66.676, "palavras": [{"w": "As", "s": 63.866, "e": 63.999}, {"w": "ferramentas", "s": 64.033, "e": 64.466}, {"w": "que", "s": 64.499, "e": 64.533}, {"w": "eu", "s": 64.566, "e": 64.599}, {"w": "uso", "s": 64.733, "e": 64.933}, {"w": "estão", "s": 64.999, "e": 65.166}, {"w": "aparecendo", "s": 65.199, "e": 65.599}, {"w": "na", "s": 65.666, "e": 65.733}, {"w": "tela", "s": 65.799, "e": 65.999}, {"w": "agora:", "s": 66.066, "e": 66.466}]}, "31": {"t0": 66.956, "t1": 86.031, "palavras": [{"w": "Áfter", "s": 66.956, "e": 67.289}, {"w": "Éfects", "s": 67.356, "e": 67.823}, {"w": "e", "s": 67.956, "e": 68.023}, {"w": "EffectCraft,", "s": 68.156, "e": 68.823}, {"w": "que", "s": 69.023, "e": 69.089}, {"w": "é", "s": 69.123, "e": 69.156}, {"w": "open", "s": 69.256, "e": 69.356}, {"w": "source.", "s": 69.423, "e": 69.756}, {"w": "Remotion,", "s": 70.089, "e": 70.623}, {"w": "bem", "s": 70.889, "e": 71.023}, {"w": "raramente.", "s": 71.089, "e": 71.556}, {"w": "ElevenLabs,", "s": 71.889, "e": 72.623}, {"w": "para", "s": 72.756, "e": 72.823}, {"w": "gerar", "s": 72.889, "e": 73.089}, {"w": "essa", "s": 73.156, "e": 73.223}, {"w": "voz", "s": 73.289, "e": 73.489}, {"w": "aqui", "s": 73.523, "e": 73.689}, {"w": "narrada.", "s": 73.723, "e": 74.089}, {"w": "Spotify,", "s": 74.423, "e": 74.956}, {"w": "para", "s": 75.056, "e": 75.089}, {"w": "as", "s": 75.156, "e": 75.223}, {"w": "playlists", "s": 75.323, "e": 75.689}, {"w": "de", "s": 75.723, "e": 75.756}, {"w": "música.", "s": 75.823, "e": 76.156}, {"w": "Mobbin,", "s": 76.489, "e": 76.889}, {"w": "um", "s": 77.056, "e": 77.089}, {"w": "MCP", "s": 77.223, "e": 77.623}, {"w": "para", "s": 77.689, "e": 77.756}, {"w": "buscar", "s": 77.823, "e": 78.023}, {"w": "referência", "s": 78.089, "e": 78.489}, {"w": "de", "s": 78.523, "e": 78.556}, {"w": "tela", "s": 78.689, "e": 78.956}, {"w": "e", "s": 79.023, "e": 79.089}, {"w": "de", "s": 79.156, "e": 79.223}, {"w": "iú", "s": 79.256, "e": 79.423}, {"w": "ái.", "s": 79.523, "e": 79.623}, {"w": "As", "s": 79.889, "e": 79.956}, {"w": "referências", "s": 80.023, "e": 80.356}, {"w": "de", "s": 80.423, "e": 80.456}, {"w": "projetos", "s": 80.489, "e": 80.956}, {"w": "do", "s": 81.023, "e": 81.089}, {"w": "Clube", "s": 81.156, "e": 81.289}, {"w": "do", "s": 81.323, "e": 81.356}, {"w": "Motion.", "s": 81.423, "e": 81.756}, {"w": "E", "s": 82.023, "e": 82.089}, {"w": "bibliotecas", "s": 82.156, "e": 82.623}, {"w": "Python,", "s": 82.689, "e": 83.023}, {"w": "como", "s": 83.189, "e": 83.289}, {"w": "librosa,", "s": 83.356, "e": 83.823}, {"w": "Whisper,", "s": 84.089, "e": 84.423}, {"w": "Essentia", "s": 84.623, "e": 85.223}, {"w": "e", "s": 85.256, "e": 85.289}, {"w": "Playwright.", "s": 85.423, "e": 85.889}]}, "32": {"t0": 86.312, "t1": 91.718, "palavras": [{"w": "E,", "s": 86.312, "e": 86.512}, {"w": "obviamente,", "s": 86.745, "e": 87.312}, {"w": "o", "s": 87.445, "e": 87.512}, {"w": "Claude", "s": 87.645, "e": 87.845}, {"w": "Code,", "s": 87.912, "e": 88.179}, {"w": "que", "s": 88.345, "e": 88.379}, {"w": "faz", "s": 88.445, "e": 88.645}, {"w": "todo", "s": 88.779, "e": 88.979}, {"w": "o", "s": 89.001, "e": 89.023}, {"w": "trabalho", "s": 89.045, "e": 89.312}, {"w": "pesado.", "s": 89.379, "e": 89.712}, {"w": "Eu", "s": 90.045, "e": 90.112}, {"w": "só", "s": 90.145, "e": 90.245}, {"w": "penso", "s": 90.312, "e": 90.445}, {"w": "no", "s": 90.512, "e": 90.579}, {"w": "roteiro,", "s": 90.712, "e": 90.979}, {"w": "basicamente.", "s": 91.156, "e": 91.579}]}, "33": {"t0": 91.997, "t1": 94.464, "palavras": [{"w": "É", "s": 91.997, "e": 92.13}, {"w": "isso.", "s": 92.23, "e": 92.397}, {"w": "Tem", "s": 92.664, "e": 92.73}, {"w": "alguma", "s": 92.797, "e": 92.997}, {"w": "dúvida?", "s": 93.03, "e": 93.33}, {"w": "Chama", "s": 93.597, "e": 93.797}, {"w": "na", "s": 93.864, "e": 93.93}, {"w": "DM!", "s": 93.997, "e": 94.33}]}}, "cenas": {"tesla_desenhado": {"t0": 38.948, "t1": 41.948}}};