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.
- package/README.md +74 -12
- package/bin/primocode.js +148 -8
- package/lib/act.js +48 -1
- package/lib/catalogo.js +12 -1
- package/lib/config.js +1 -0
- package/lib/estudio/assinaturas/gerativo.json +1 -1
- package/lib/estudio/camadas.js +4 -0
- package/lib/estudio/cota.js +150 -0
- package/lib/estudio/dados/projetos/clube-ad5.json +105 -0
- package/lib/estudio/dados/projetos/clube-ae-sem-memoria.json +107 -0
- package/lib/estudio/dados/projetos/clube-agent.json +120 -0
- package/lib/estudio/dados/projetos/clube-antes-e-agora.json +86 -0
- package/lib/estudio/dados/projetos/clube-apresentando-clube.json +110 -0
- package/lib/estudio/dados/projetos/clube-bluevisa.json +106 -0
- package/lib/estudio/dados/projetos/clube-caught-in-the-fire.json +127 -0
- package/lib/estudio/dados/projetos/clube-chat-cliente-satisfeito.json +98 -0
- package/lib/estudio/dados/projetos/clube-chatgpt-anuncios.json +120 -0
- package/lib/estudio/dados/projetos/clube-claude-dj.json +140 -0
- package/lib/estudio/dados/projetos/clube-claude-mcp.json +142 -0
- package/lib/estudio/dados/projetos/clube-cleanui.json +106 -0
- package/lib/estudio/dados/projetos/clube-clinica-take-unico.json +128 -0
- package/lib/estudio/dados/projetos/clube-clinica.json +104 -0
- package/lib/estudio/dados/projetos/clube-clube-opener.json +125 -0
- package/lib/estudio/dados/projetos/clube-clube.json +108 -0
- package/lib/estudio/dados/projetos/clube-codigo.json +101 -0
- package/lib/estudio/dados/projetos/clube-distilbook.json +104 -0
- package/lib/estudio/dados/projetos/clube-drive-upload.json +115 -0
- package/lib/estudio/dados/projetos/clube-dub.json +119 -0
- package/lib/estudio/dados/projetos/clube-enxovaly.json +105 -0
- package/lib/estudio/dados/projetos/clube-fecha7.json +118 -0
- package/lib/estudio/dados/projetos/clube-filatov.json +128 -0
- package/lib/estudio/dados/projetos/clube-frame.json +108 -0
- package/lib/estudio/dados/projetos/clube-glass.json +118 -0
- package/lib/estudio/dados/projetos/clube-letra-em-apps.json +84 -0
- package/lib/estudio/dados/projetos/clube-letra-globo-3d.json +111 -0
- package/lib/estudio/dados/projetos/clube-letra-nos-apps.json +146 -0
- package/lib/estudio/dados/projetos/clube-letra-seis-mundos.json +100 -0
- package/lib/estudio/dados/projetos/clube-lula-3.json +146 -0
- package/lib/estudio/dados/projetos/clube-morph.json +119 -0
- package/lib/estudio/dados/projetos/clube-motion-designer.json +115 -0
- package/lib/estudio/dados/projetos/clube-motion-pacote.json +112 -0
- package/lib/estudio/dados/projetos/clube-movimento.json +103 -0
- package/lib/estudio/dados/projetos/clube-not-like-us.json +117 -0
- package/lib/estudio/dados/projetos/clube-pinterest-inspiracao.json +86 -0
- package/lib/estudio/dados/projetos/clube-pixel-e-tinta.json +108 -0
- package/lib/estudio/dados/projetos/clube-ponte.json +118 -0
- package/lib/estudio/dados/projetos/clube-processo-edit-tonal.json +126 -0
- package/lib/estudio/dados/projetos/clube-processo-motion-100-ia.json +109 -0
- package/lib/estudio/dados/projetos/clube-promo.json +114 -0
- package/lib/estudio/dados/projetos/clube-proposito.json +115 -0
- package/lib/estudio/dados/projetos/clube-rankhog.json +128 -0
- package/lib/estudio/dados/projetos/clube-recursao.json +116 -0
- package/lib/estudio/dados/projetos/clube-revelar.json +118 -0
- package/lib/estudio/dados/projetos/clube-robo.json +125 -0
- package/lib/estudio/dados/projetos/clube-shelby-ep2.json +144 -0
- package/lib/estudio/dados/projetos/clube-shelby.json +97 -0
- package/lib/estudio/dados/projetos/clube-solar-eclipse.json +96 -0
- package/lib/estudio/dados/projetos/clube-soldier.json +128 -0
- package/lib/estudio/dados/projetos/clube-som-de-cena.json +108 -0
- package/lib/estudio/dados/projetos/clube-spotify-candidatura.json +112 -0
- package/lib/estudio/dados/projetos/clube-tda-app.json +118 -0
- package/lib/estudio/dados/projetos/clube-tda-ia.json +75 -0
- package/lib/estudio/dados/projetos/clube-telegram-chat.json +118 -0
- package/lib/estudio/dados/projetos/clube-telegram-ilha.json +106 -0
- package/lib/estudio/dados/projetos/clube-tennessee-nike.json +132 -0
- package/lib/estudio/dados/projetos/clube-tudo-se-move.json +112 -0
- package/lib/estudio/dados/projetos/clube-uiad.json +107 -0
- package/lib/estudio/dados/projetos/clube-viralgrow.json +108 -0
- package/lib/estudio/dados/projetos/clube-whose-side.json +140 -0
- package/lib/estudio/dados/projetos/clube-youtube-inscrever.json +108 -0
- package/lib/estudio/dados/projetos/elementos-do-site-em-movimento.json +49 -0
- package/lib/estudio/dados/projetos/explainer-narrado.json +51 -0
- package/lib/estudio/dados/projetos/lancamento-de-produto.json +51 -0
- package/lib/estudio/dados/projetos/motion-so-com-sons.json +50 -0
- package/lib/estudio/dados/projetos/titulo-em-after-effects.json +51 -0
- package/lib/estudio/dados/projetos/tour-de-saas.json +50 -0
- package/lib/estudio/dados/projetos-ae/antes-e-agora/ae/cenas.jsx +733 -0
- package/lib/estudio/dados/projetos-ae/antes-e-agora/assets/fazer_assets.py +88 -0
- package/lib/estudio/dados/projetos-ae/letra-em-apps/ae/cenas.jsx +402 -0
- package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/preparar_assets.py +17 -0
- package/lib/estudio/dados/projetos-ae/letra-em-apps/assets/svg_para_ae.py +25 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/BRIEF-AGENTES.md +31 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/README.md +53 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ROTEIRO-CENAS.md +69 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/A-agenda.jsx +148 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/B-docs.jsx +174 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/C-alttab.jsx +113 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/D-spotify.jsx +118 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/E-notas.jsx +146 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/F-jornal1.jsx +144 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/G-google.jsx +153 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/H-mapa.jsx +176 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/I-imagens.jsx +132 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/J-jornal2.jsx +191 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/K-maps.jsx +184 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera-movimentos.jsx +48 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/camera.jsx +57 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/card-spotify.jsx +98 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/digitar.jsx +38 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/jornal-comum.jsx +196 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra.jsx +23 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/letra_automatica.py +83 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/montagem.jsx +74 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/render_html.py +13 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-agenda/util.jsx +162 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/w-midia-comum.jsx +114 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/ae/wg-util.jsx +360 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/F-jornal1/render_html.py +13 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/render_w-midia.py +26 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/inclin.py +30 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_d.py +36 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/assets/w-midia-ferramentas/medir_e.py +27 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ajustar_movimentos.py +61 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/ancorar.py +74 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/assar.py +47 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/camera3d_jornal.py +172 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/comparar.py +32 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/dados_ae_jornal.py +46 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/folha_contato.py +28 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/homografia_jornal.py +74 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/integrar.py +44 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/medir_quadro_a_quadro.py +32 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/mesa_2d.py +64 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/plot_cenas.py +11 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/retificar_quadros.py +38 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/assar_ab.py +52 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/w-agenda/medir_ab.py +59 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ajustar_h.py +111 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_corrige_cam.py +17 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_ecc_cadeia.py +80 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_finalizar_cam.py +65 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/camera/wg_mosaico.py +61 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/01-gramatica-e-roteiro.md +55 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/02-camera.md +66 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/03-montagem-no-ae.md +50 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/04-render-e-conferencia.md +43 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces/05-abertura-celular-mergulho.md +43 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/guia-do-metodo/tutorial-lyric-edit-interfaces.md +42 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/atraso_imagem.py +31 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/fundo.py +56 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/juntar.py +45 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/montar.py +177 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/rastreio.py +74 -0
- package/lib/estudio/dados/projetos-ae/letra-nos-apps/transicao/sincronia.py +18 -0
- package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/ae/cenas.jsx +530 -0
- package/lib/estudio/dados/projetos-ae/pinterest-inspiracao/assets/fazer_assets.py +107 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/assets/pessoas/figurinha.py +46 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/BRIEF-A.md +83 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/audio.py +179 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/confere.py +20 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte1.js +1 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/dados/tempo-parte2.js +1 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/gerar_emojis.py +11 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/img/filmes/_indice.js +122 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/base.js +380 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/main.js +86 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1a.js +169 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1b.js +455 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p1c.js +389 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/js/p2.js +379 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/comp-a/video.py +62 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/README.md +65 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/oraculo_take.py +137 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/render_take.py +388 -0
- package/lib/estudio/dados/projetos-ae/processo-motion-100-ia/take-unico/take.js +235 -0
- package/lib/estudio/diretor.js +2 -1
- package/lib/estudio/editor.js +285 -0
- package/lib/estudio/efeitos-fabrica/terminal-digitando.jsx +2 -1
- package/lib/estudio/effectcraft.js +152 -0
- package/lib/estudio/exportar.js +181 -0
- package/lib/estudio/gerativo.js +44 -15
- package/lib/estudio/index.js +126 -5
- package/lib/estudio/kit/gerativo.jsx +15 -0
- package/lib/estudio/kit-ae/base.jsx +1146 -0
- package/lib/estudio/kit-ae/cenas.jsx +395 -0
- package/lib/estudio/kit-ae/primitivas.jsx +911 -0
- package/lib/estudio/kokoro.js +3 -1
- package/lib/estudio/maquina-diretor.js +393 -0
- package/lib/estudio/maquina-elementos.js +134 -0
- package/lib/estudio/maquina-layout.js +198 -0
- package/lib/estudio/maquina-som.js +478 -0
- package/lib/estudio/maquina-trilha.js +160 -0
- package/lib/estudio/maquina-voz.js +429 -0
- package/lib/estudio/maquina.js +516 -0
- package/lib/estudio/projetos.js +60 -0
- package/lib/estudio/remotion.js +6 -4
- package/lib/estudio/revisor.js +61 -0
- package/lib/estudio/voicestudio.js +81 -0
- package/lib/headless.js +71 -0
- package/lib/hooks.js +72 -0
- package/lib/local/cerebro.json +398 -12
- package/lib/local/entrada.js +46 -2
- package/lib/marca-kit.js +309 -0
- package/lib/mcp.js +286 -6
- package/lib/perigo.js +31 -3
- package/lib/planos.js +47 -19
- package/lib/preparar.js +111 -0
- package/lib/retomar.js +55 -0
- package/lib/sandbox.js +197 -0
- package/lib/skills.js +3 -1
- package/lib/tools.js +13 -4
- package/lib/ui.js +1 -1
- package/lib/video/auto.js +18 -3
- package/package.json +4 -2
- package/skills/after-effects/SKILL.md +52 -0
- package/skills/maquina-de-motion/SKILL.md +84 -0
- 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}}};
|