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,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}}};