primocode 10.16.0 → 10.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/LICENSES/edit-ia-pro.txt +32 -0
  2. package/LICENSES/fontes-OFL.txt +476 -0
  3. package/LICENSES/hyperframes-Apache-2.0.txt +205 -0
  4. package/LICENSES/permanent-marker-Apache-2.0.txt +204 -0
  5. package/LICENSES/selfie-multiclass-Apache-2.0.txt +227 -0
  6. package/LICENSES/three-MIT.txt +23 -0
  7. package/LICENSES/video-use-MIT.txt +24 -0
  8. package/LICENSES/woven-sfx-CC0.txt +16 -0
  9. package/LICENSES/yunet-MIT.txt +21 -0
  10. package/README.md +2 -2
  11. package/bin/primocode.js +11 -2
  12. package/editor/LICENSE.md +11 -0
  13. package/editor/README.md +321 -0
  14. package/editor/SKILL.md +307 -0
  15. package/editor/THIRD_PARTY_NOTICES.md +228 -0
  16. package/editor/assets/baixar.json +591 -0
  17. package/editor/assets/fonts/anton/OFL.txt +93 -0
  18. package/editor/assets/fonts/caveat/OFL.txt +93 -0
  19. package/editor/assets/fonts/figtree/OFL.txt +93 -0
  20. package/editor/assets/fonts/fonts.json +10 -0
  21. package/editor/assets/fonts/montserrat/OFL.txt +93 -0
  22. package/editor/assets/fonts/permanentmarker/LICENSE.txt +202 -0
  23. package/editor/assets/models/SELFIE_MULTICLASS_LICENSE.txt +227 -0
  24. package/editor/assets/models/YUNET_LICENSE.txt +21 -0
  25. package/editor/assets/sfx/licencas/bass_drop.txt +32 -0
  26. package/editor/assets/sfx/licencas/cash.txt +76 -0
  27. package/editor/assets/sfx/licencas/charge.txt +31 -0
  28. package/editor/assets/sfx/licencas/click.txt +46 -0
  29. package/editor/assets/sfx/licencas/coin.txt +50 -0
  30. package/editor/assets/sfx/licencas/count.txt +47 -0
  31. package/editor/assets/sfx/licencas/data.txt +31 -0
  32. package/editor/assets/sfx/licencas/error.txt +32 -0
  33. package/editor/assets/sfx/licencas/flash.txt +31 -0
  34. package/editor/assets/sfx/licencas/gears.txt +82 -0
  35. package/editor/assets/sfx/licencas/keyboard.txt +48 -0
  36. package/editor/assets/sfx/licencas/metal_hit.txt +62 -0
  37. package/editor/assets/sfx/licencas/metal_riser.txt +61 -0
  38. package/editor/assets/sfx/licencas/mouse_click.txt +50 -0
  39. package/editor/assets/sfx/licencas/notification.txt +54 -0
  40. package/editor/assets/sfx/licencas/pop.txt +38 -0
  41. package/editor/assets/sfx/licencas/rewind.txt +32 -0
  42. package/editor/assets/sfx/licencas/rise.txt +46 -0
  43. package/editor/assets/sfx/licencas/sinteticos.txt +21 -0
  44. package/editor/assets/sfx/licencas/snap.txt +50 -0
  45. package/editor/assets/sfx/licencas/success.txt +40 -0
  46. package/editor/assets/sfx/licencas/synth_hit.txt +32 -0
  47. package/editor/assets/sfx/licencas/tick.txt +14 -0
  48. package/editor/assets/sfx/licencas/whoosh.txt +47 -0
  49. package/editor/assets/sfx/licencas/wind.txt +31 -0
  50. package/editor/assets/sfx/sfx.json +832 -0
  51. package/editor/assets/sfx/sfx_sinteticos.json +317 -0
  52. package/editor/assets/sfx/sfx_woven.json +387 -0
  53. package/editor/assets/sfx/woven/LICENCA.md +16 -0
  54. package/editor/fichas/briefing-do-video.md +45 -0
  55. package/editor/fichas/conferencia-da-amostra.md +56 -0
  56. package/editor/fichas/matriz-de-ganchos.csv +3 -0
  57. package/editor/fichas/padrao.json +16 -0
  58. package/editor/fichas/planilha-de-cenas.csv +4 -0
  59. package/editor/fichas/planilha-de-versoes.csv +4 -0
  60. package/editor/fichas/plano-em-blocos.md +32 -0
  61. package/editor/fichas/registro-de-materiais.json +27 -0
  62. package/editor/helpers/assets_ocr/ocr_vision.swift +41 -0
  63. package/editor/helpers/bordas_precisas.py +272 -0
  64. package/editor/helpers/camera_viva.py +426 -0
  65. package/editor/helpers/captions.py +601 -0
  66. package/editor/helpers/common.py +308 -0
  67. package/editor/helpers/compose_final.py +3555 -0
  68. package/editor/helpers/conferir_corte.py +234 -0
  69. package/editor/helpers/conferir_dados.py +405 -0
  70. package/editor/helpers/contact_sheet.py +282 -0
  71. package/editor/helpers/corte_por_onda.py +433 -0
  72. package/editor/helpers/corte_seco.py +595 -0
  73. package/editor/helpers/denoise.py +971 -0
  74. package/editor/helpers/efeitos.py +408 -0
  75. package/editor/helpers/efeitos_gerar.py +159 -0
  76. package/editor/helpers/elevenlabs_api.py +442 -0
  77. package/editor/helpers/face_layout.py +570 -0
  78. package/editor/helpers/fetch_images.py +423 -0
  79. package/editor/helpers/ganho_por_trecho.py +214 -0
  80. package/editor/helpers/gen_image.py +312 -0
  81. package/editor/helpers/gen_music.py +316 -0
  82. package/editor/helpers/gen_sfx.py +148 -0
  83. package/editor/helpers/grade.py +307 -0
  84. package/editor/helpers/icloud.py +119 -0
  85. package/editor/helpers/make_sfx.py +940 -0
  86. package/editor/helpers/matte.py +1342 -0
  87. package/editor/helpers/medir_referencia.py +2232 -0
  88. package/editor/helpers/mixar_trilha.py +354 -0
  89. package/editor/helpers/montar_corte.py +295 -0
  90. package/editor/helpers/motion/__init__.py +13 -0
  91. package/editor/helpers/motion/engine.py +1915 -0
  92. package/editor/helpers/motion/registry.py +510 -0
  93. package/editor/helpers/motion/render.py +665 -0
  94. package/editor/helpers/motion/templates/barra_progresso.py +370 -0
  95. package/editor/helpers/motion/templates/carimbo.py +132 -0
  96. package/editor/helpers/motion/templates/checklist.py +271 -0
  97. package/editor/helpers/motion/templates/comentario_cta.py +380 -0
  98. package/editor/helpers/motion/templates/contador.py +222 -0
  99. package/editor/helpers/motion/templates/destaque.py +263 -0
  100. package/editor/helpers/motion/templates/etiqueta_preco.py +461 -0
  101. package/editor/helpers/motion/templates/grafico_barras.py +510 -0
  102. package/editor/helpers/motion/templates/grafico_linha.py +462 -0
  103. package/editor/helpers/motion/templates/notificacao.py +266 -0
  104. package/editor/helpers/motion/templates/palavra_impacto.py +410 -0
  105. package/editor/helpers/motion/templates/passos.py +321 -0
  106. package/editor/helpers/motion/templates/riscado.py +298 -0
  107. package/editor/helpers/motion/templates/selo_garantia.py +150 -0
  108. package/editor/helpers/motion_render.py +241 -0
  109. package/editor/helpers/motion_sugerir.py +961 -0
  110. package/editor/helpers/noise_check.py +134 -0
  111. package/editor/helpers/pack_transcripts.py +223 -0
  112. package/editor/helpers/palavras_na_onda.py +176 -0
  113. package/editor/helpers/plano_sfx.py +839 -0
  114. package/editor/helpers/portao.py +427 -0
  115. package/editor/helpers/preview_server.py +1177 -0
  116. package/editor/helpers/rastrear_rosto.py +298 -0
  117. package/editor/helpers/render_cut.py +1256 -0
  118. package/editor/helpers/respiros.py +89 -0
  119. package/editor/helpers/sincronizar_cameras.py +571 -0
  120. package/editor/helpers/speech_regions.py +423 -0
  121. package/editor/helpers/style_catalog.json +231 -0
  122. package/editor/helpers/style_samples.py +246 -0
  123. package/editor/helpers/tela_verde.py +2113 -0
  124. package/editor/helpers/text_render.py +2059 -0
  125. package/editor/helpers/texto_na_tela.py +366 -0
  126. package/editor/helpers/timeline_view.py +292 -0
  127. package/editor/helpers/tira_de_quadros.py +113 -0
  128. package/editor/helpers/transcribe.py +734 -0
  129. package/editor/helpers/transcribe_batch.py +129 -0
  130. package/editor/helpers/trilhas.py +1146 -0
  131. package/editor/helpers/trilhas_humores.json +66 -0
  132. package/editor/helpers/valores.py +187 -0
  133. package/editor/helpers/verify_cut.py +820 -0
  134. package/editor/helpers/voice_levels.py +233 -0
  135. package/editor/helpers/voz_check.py +386 -0
  136. package/editor/helpers/voz_limpa.py +81 -0
  137. package/editor/helpers/watch_preview.py +372 -0
  138. package/editor/modelo-projeto/LEIA.md +402 -0
  139. package/editor/modelo-projeto/assets/fontes/OFL-Caveat.txt +93 -0
  140. package/editor/modelo-projeto/assets/fontes/OFL-JetBrainsMono.txt +93 -0
  141. package/editor/modelo-projeto/assets/fontes/OFL-Montserrat.txt +93 -0
  142. package/editor/modelo-projeto/assets/fontes/larguras.json +1 -0
  143. package/editor/modelo-projeto/assets/three/BufferGeometryUtils.js +1438 -0
  144. package/editor/modelo-projeto/assets/three/GLTFLoader.js +4895 -0
  145. package/editor/modelo-projeto/assets/three/LICENSE +21 -0
  146. package/editor/modelo-projeto/assets/three/ORIGEM.txt +17 -0
  147. package/editor/modelo-projeto/assets/three/RoomEnvironment.js +185 -0
  148. package/editor/modelo-projeto/assets/three/three.core.min.js +6 -0
  149. package/editor/modelo-projeto/assets/three/three.module.min.js +6 -0
  150. package/editor/modelo-projeto/build.py +4828 -0
  151. package/editor/modelo-projeto/compositions/cenas/2d/k2d_antes_depois.html +199 -0
  152. package/editor/modelo-projeto/compositions/cenas/2d/k2d_arquivo.html +232 -0
  153. package/editor/modelo-projeto/compositions/cenas/2d/k2d_busca.html +315 -0
  154. package/editor/modelo-projeto/compositions/cenas/2d/k2d_comando.html +304 -0
  155. package/editor/modelo-projeto/compositions/cenas/2d/k2d_conversa.html +217 -0
  156. package/editor/modelo-projeto/compositions/cenas/2d/k2d_esquema.html +289 -0
  157. package/editor/modelo-projeto/compositions/cenas/2d/k2d_medidor.html +249 -0
  158. package/editor/modelo-projeto/compositions/cenas/2d/k2d_notas.html +233 -0
  159. package/editor/modelo-projeto/compositions/cenas/3d/k3d_caminho.html +197 -0
  160. package/editor/modelo-projeto/compositions/cenas/3d/k3d_explodida.html +152 -0
  161. package/editor/modelo-projeto/compositions/cenas/3d/k3d_tela.html +167 -0
  162. package/editor/modelo-projeto/compositions/cenas/3d/k3d_volume.html +124 -0
  163. package/editor/modelo-projeto/compositions/cenas/3d/motor-three.js +728 -0
  164. package/editor/modelo-projeto/compositions/cenas/LEIA.md +177 -0
  165. package/editor/modelo-projeto/ferramentas/medir_fontes.py +65 -0
  166. package/editor/modelo-projeto/ferramentas/pessoa_recortada.py +176 -0
  167. package/editor/modelo-projeto/ferramentas/rastrear_maos.py +189 -0
  168. package/editor/modelo-projeto/hyperframes.json +12 -0
  169. package/editor/modelo-projeto/package.json +11 -0
  170. package/editor/modelo-projeto/projeto.json +16 -0
  171. package/editor/preview/app.css +1009 -0
  172. package/editor/preview/app.js +2122 -0
  173. package/editor/preview/index.html +307 -0
  174. package/editor/pyproject.toml +23 -0
  175. package/editor/references/3d.md +236 -0
  176. package/editor/references/animacao-catalogo.md +672 -0
  177. package/editor/references/animacao.md +498 -0
  178. package/editor/references/comandos.md +92 -0
  179. package/editor/references/corte-seco-como-funciona.md +50 -0
  180. package/editor/references/corte-seco.md +88 -0
  181. package/editor/references/corte.md +290 -0
  182. package/editor/references/direcao-por-blocos.md +218 -0
  183. package/editor/references/enquadramento.md +654 -0
  184. package/editor/references/estilos-prontos.md +355 -0
  185. package/editor/references/estudio.md +100 -0
  186. package/editor/references/exemplo-eventos.json +67 -0
  187. package/editor/references/lettering.md +252 -0
  188. package/editor/references/modelos.md +494 -0
  189. package/editor/references/phase2.md +1007 -0
  190. package/editor/references/referencia-aplicar.md +203 -0
  191. package/editor/references/referencia-medir.md +375 -0
  192. package/editor/references/revisao.md +335 -0
  193. package/editor/references/som-e-trilha.md +146 -0
  194. package/editor/references/tabela-de-sons.md +130 -0
  195. package/editor/references/variacoes.md +234 -0
  196. package/editor/uv.lock +1141 -0
  197. package/lib/act.js +36 -8
  198. package/lib/catalogo.js +4 -0
  199. package/lib/chamada-torta.js +81 -0
  200. package/lib/editor-pro.js +786 -0
  201. package/lib/entrega.js +58 -0
  202. package/lib/estudio/conferencia-visual.js +76 -0
  203. package/lib/estudio/diretor.js +6 -1
  204. package/lib/estudio/exportar.js +3 -1
  205. package/lib/estudio/gosto.js +45 -4
  206. package/lib/estudio/index.js +8 -5
  207. package/lib/estudio/kit-ae/base.jsx +119 -13
  208. package/lib/estudio/kit-ae/cenas.jsx +47 -15
  209. package/lib/estudio/kit-ae/guarda.jsx +274 -0
  210. package/lib/estudio/kit-ae/primitivas.jsx +180 -24
  211. package/lib/estudio/maquina-diretor.js +61 -7
  212. package/lib/estudio/maquina-foto.js +177 -0
  213. package/lib/estudio/maquina-guarda.js +207 -0
  214. package/lib/estudio/maquina-layout.js +22 -1
  215. package/lib/estudio/maquina.js +60 -11
  216. package/lib/estudio/referencias.js +1 -1
  217. package/lib/estudio/visao/visao.swift +97 -0
  218. package/lib/estudio/visao.js +60 -0
  219. package/lib/local/cerebro.json +192 -6
  220. package/lib/local/motor.js +5 -2
  221. package/lib/nuvem.js +11 -1
  222. package/lib/passagem.js +50 -0
  223. package/lib/perigo.js +19 -11
  224. package/lib/protecao.js +134 -0
  225. package/lib/titulo-conversa.js +46 -0
  226. package/lib/tools.js +3 -0
  227. package/lib/ui.js +1 -1
  228. package/package.json +3 -2
  229. package/skills/editar-meu-video/SKILL.md +6 -2
  230. package/skills/editar-video/SKILL.md +113 -0
  231. package/studio/pessoa.py +52 -0
  232. package/voz/primo_voz/app.py +43 -4
  233. package/voz/primo_voz/chat.html +17 -6
  234. package/voz/primo_voz/painel_dados.py +134 -0
@@ -0,0 +1,307 @@
1
+ ---
2
+ name: editor-video
3
+ description: Edita vídeos falados gravados no celular ou na câmera (anúncio, Reels, TikTok, VSL, aula, promo) conversando com a pessoa, com qualidade de agência. Corta pausas, respiros e erros medindo a onda do áudio, escolhe a melhor tomada, e monta a edição sob medida no HyperFrames (legenda, enquadramento pelo rosto, moldura, tela verde, texto atrás da pessoa, animações que entram na palavra certa, lettering, prova na tela, efeitos sonoros e trilha), mostrando tudo no estúdio com linha do tempo antes de renderizar. Também mede e aplica o estilo de um vídeo de referência, faz versões e lote de ganchos. Use quando pedirem para editar vídeo, cortar silêncio, tirar erros ou respiros, juntar tomadas, legendar, fazer criativo, reels, tiktok ou VSL, pôr motion, animações, lettering, gancho, tela verde ou trilha, deixar "dinâmico", "igual esse reel", "no estilo dessa referência", ou quando falarem em Chip Editor ou EDIT IA PRO.
4
+ ---
5
+
6
+ # Editor de vídeo
7
+
8
+ Você é o editor e o diretor. Os helpers medem e fazem o trabalho pesado; você decide o que cortar, o que
9
+ aparece em cada momento e por quê. O jeito de trabalhar:
10
+
11
+ 1. **Corte pela onda**: uma frase por trecho, a melhor tomada, cada respiro medido e tirado.
12
+ 2. **Montagem sob medida no HyperFrames**: cada cena escrita para aquela fala, entrando na palavra certa.
13
+ 3. **Tudo revisto no estúdio do HyperFrames**, com a linha do tempo por camada, antes de qualquer render.
14
+ Primeiro o corte, depois uma amostra curta, depois o vídeo inteiro. Render só no fim.
15
+
16
+ ## Como falar com a pessoa
17
+
18
+ - Português do Brasil simples e frases curtas. A pessoa não é técnica.
19
+ - Nunca cole JSON, comandos, logs ou caminhos compridos na conversa, a não ser que ela peça. Fale do
20
+ trabalho em palavras do dia a dia: "estou ouvindo as tomadas", "tirei os respiros", "abri no estúdio".
21
+ - Tempos no formato 00:12. Nome de arquivo só quando ajuda (onde ficou o vídeo final).
22
+ - Uma decisão por vez. Ao dar opções, numere, diga qual recomenda e por quê.
23
+ - Se ela disser "decide você", decida, conte a decisão em uma linha e siga.
24
+ - Antes de um passo demorado (transcrição, recorte da pessoa, render), diga mais ou menos quanto leva.
25
+ - Mostre em vez de descrever: o estúdio aberto no ponto certo ou 3 quadros valem mais que um parágrafo.
26
+ - Pedido vago ("ficou estranho"): peça o tempo do trecho ou mostre 2 opções.
27
+
28
+ ## Princípios
29
+
30
+ 1. **A fala gravada manda.** O corte e cada entrada nascem da transcrição e da onda do áudio de verdade.
31
+ Roteiro escrito só confere palavras. Tempo tirado de estimativa não vale.
32
+ 2. **Fidelidade ao material.** Número, nome, prova, depoimento, clique, tela de sucesso, reação e oferta só
33
+ se existirem na fala ou nos arquivos. Faltou material: diga o que falta, não invente.
34
+ 3. **Amostra antes do todo.** Um trecho de 8 a 15 s com o padrão completo antes de espalhar para o vídeo
35
+ inteiro. Economiza tempo e o plano da IA da pessoa.
36
+ 4. **Modo automático.** O padrão é fazer tudo e mostrar pronto, sem pedir aprovação do corte nem da amostra:
37
+ você os confere sozinho (corte, amostra e portão de qualidade) e segue. Só se for aprovar antes quem pedir
38
+ ("quero ver o corte primeiro"). Pare sempre antes de gastar dinheiro, antes de rodar o recorte da pessoa no
39
+ vídeo inteiro e quando uma técnica pedida não funcionar. Nunca peça de novo o que já foi autorizado.
40
+ 5. **Confira em movimento e no arquivo exportado.** Quadro parado confere posição, não sincronia nem
41
+ transição. O arquivo renderizado é a referência final: o estúdio pode piscar uma camada numa emenda.
42
+ 6. **Honestidade técnica.** Camadas com paralaxe são 2,5D, não 3D. Máscara não é recorte. Toda troca
43
+ (fonte, técnica, material) vai na nota de entrega.
44
+
45
+ ## Regras fixas
46
+
47
+ - Nunca altere, mova ou apague os vídeos originais. Tudo o que você gera fica em `<EDIT>` e `<PROJ>`.
48
+ - **Respiro é erro**: nenhum silêncio de 0,25 s ou mais no vídeo, emenda com uns 0,12 s; a última tomada
49
+ inteira é a certa; nunca comer o fim da palavra (`references/corte.md`).
50
+ - Nada de animação antes do corte aprovado (ou conferido, se ela autorizou tudo).
51
+ - Tudo entra pela palavra: texto, animação, prova e som entram no tempo da palavra que chama (pode antecipar
52
+ até 0,15 s). Rode o `helpers/palavras_na_onda.py` uma vez depois do corte aprovado: o build passa a usar o
53
+ tempo medido na onda sozinho (o Whisper adianta até 0,3 s). No lettering, cada palavra grande entra no tempo
54
+ dela. Nunca tempo de estimativa.
55
+ - Uma ideia por vez na tela. Se duas coisas disputam o olho, uma sai.
56
+ - Rosto livre: nada em cima dos olhos e da boca, a não ser que o efeito seja sobre o rosto.
57
+ - Zona segura do Reels (1080x1920): texto entre y 230 e 1530 e entre x 140 e 940. Em 4:5 e 1:1 a margem é
58
+ folgada e fica "a conferir na rede" de destino.
59
+ - Várias câmeras: troque a imagem só numa fala ou reação de verdade, nunca a cada palavra.
60
+ - Legenda com até 3 palavras por vez (`legenda.max_palavras` 3), e nenhuma palavra dita some dela. Quando a
61
+ fala está escrita grande, a legenda `discreta` continua só nas palavras que não estão grandes
62
+ (`legenda_junto`); a legenda `padrao` sai do trecho.
63
+ - Som casado com o movimento: cada animação tem o seu som com o pico no quadro do movimento; sem animação, uns
64
+ 5 ou 6 sons no vídeo todo. Trilha 22 a 24 dB abaixo da voz (`references/som-e-trilha.md`).
65
+ - Nunca leia `transcripts/*.json` no contexto. Use `takes_packed.md`, `fala_do_corte.md`, `build.py palavras` e
66
+ os helpers.
67
+ - Um render por vez na mesma pasta.
68
+ - Dinheiro só com o ok da pessoa: imagem, vídeo, trilha ou efeito gerado por IA, serviço pago.
69
+
70
+ ## Onde as coisas ficam
71
+
72
+ - `<SKILL>`: a pasta deste SKILL.md. Todo helper roda assim:
73
+ `uv run --directory '<SKILL>' python helpers/<nome>.py ...`
74
+ Esse comando roda de dentro da pasta da skill: **todo caminho de arquivo vai absoluto**.
75
+ - **Aspas:** caminho e texto vindos da pessoa vão entre aspas simples, em bash, zsh e PowerShell. Aspas
76
+ duplas deixam o `$` virar outra coisa (`Oferta R$97` vira `Oferta R`). Texto com aspa simples: `'\''` no
77
+ bash e no zsh, `''` no PowerShell. Texto longo com `$` vai num arquivo.
78
+ - `<VIDEOS>`: a pasta dos vídeos brutos. `<EDIT>` é `<VIDEOS>/edit` (transcrições, `edl_manual.json`,
79
+ `edl.json`, `cut.mp4`, `cut_timeline.json`, `verify/`, `project.md`).
80
+ - `<PROJ>`: o projeto HyperFrames do vídeo, ao lado de `<EDIT>`, com um nome curto do vídeo (ex.:
81
+ `<VIDEOS>/criativo-bolsa`). É o nome que aparece no estúdio. Crie com
82
+ `python3 '<SKILL>/modelo-projeto/build.py' novo '<PROJ>' --edit '<EDIT>' --estilo laranja` (copia o modelo e anota a skill e o
83
+ corte no `projeto.json`). O `--estilo` é o combinado com a pessoa (`laranja` é o padrão do modo automático). Nunca edite o modelo original.
84
+ - Projeto criado antes de a skill ser atualizada: `python3 '<SKILL>/modelo-projeto/build.py' atualizar '<PROJ>'`
85
+ (traz o motor e os kits novos, mantém o projeto e guarda o que trocou).
86
+ - HyperFrames sempre pelo projeto, na versão fixa: `python3 build.py hf lint`, `hf check`, `hf render`,
87
+ `hf snapshot`. Nunca `npx hyperframes` sem versão. O `hf snapshot` roda sem chave de IA no ambiente (os
88
+ quadros não saem do computador); `--com-ia` só se a pessoa pedir.
89
+
90
+ O que ler e quando (leia só o que a etapa do momento pede):
91
+
92
+ | Etapa | Arquivo |
93
+ |---|---|
94
+ | Corte, conferência do corte, ajuste por tempo, conversa com várias câmeras ou lapela (`imagem_de`, `sincronizar_cameras.py`) | `references/corte.md` |
95
+ | Abrir e usar o estúdio do HyperFrames | `references/estudio.md` |
96
+ | Medir um vídeo de referência | `references/referencia-medir.md` |
97
+ | Levar a referência para o vídeo da pessoa | `references/referencia-aplicar.md` |
98
+ | Plano em blocos: o que aparece em cada momento, peça por tipo de fala, ritmo | `references/direcao-por-blocos.md` |
99
+ | Tela cheia, moldura, prova, tela verde, acompanhar a pessoa (`acompanhar`), gravação contida (`contida`), comparar lado a lado (`comparar`), texto atrás e objeto na frente, mudar formato (9:16, 16:9, 4:5, 1:1) | `references/enquadramento.md` |
100
+ | Animações e diagramas que explicam; kit 2D pronto (arquivo que muda de estado, conversa, esquema que cresce, antes e depois, pedido digitado para a IA, medidor com agulha, busca digitada com resultado e chamada, bloco de notas com a lista que se conclui) | `references/animacao.md` e `references/animacao-catalogo.md` |
101
+ | Texto animado e lettering (peça `lettering` pronta: principal, apoio, chamada) | `references/lettering.md` |
102
+ | Projeto HyperFrames (campos do `projeto.json`, cenas sob medida) | `modelo-projeto/LEIA.md` e `modelo-projeto/compositions/cenas/LEIA.md` |
103
+ | Cena em 3D de verdade (volume, câmera, luz) | `references/3d.md` |
104
+ | Efeitos sonoros e trilha | `references/som-e-trilha.md` e `references/tabela-de-sons.md` |
105
+ | Tirar pausa que sobrou num vídeo já pronto | `references/corte-seco.md` |
106
+ | Revisão, conserto de trecho, diagnóstico, voz (saturação e eco: linha Voz do `noise_check.py`), legendas, triagem de uma pasta cheia de materiais, dado pessoal no vídeo final | `references/revisao.md` |
107
+ | Versões, lote de ganchos, várias saídas | `references/variacoes.md` |
108
+ | Receitas por tipo de vídeo (13 tipos, com pedido pronto e perguntas de revisão) | `references/modelos.md` |
109
+ | Pedidos prontos que a pessoa pode usar | `references/comandos.md` |
110
+ | Briefing do vídeo (pedido e veredito), plano em blocos, planilha de cenas, conferência da amostra, planilha de versões, registro de materiais | pasta `fichas/` |
111
+ | Atalho com estilos prontos (motor antigo) | `references/estilos-prontos.md` e `references/phase2.md` |
112
+
113
+ ## O caminho
114
+
115
+ ### 0. Início
116
+
117
+ 1. **Ache os vídeos.** Se a pasta não estiver clara, pergunte. Vale .mov, .mp4, .m4v, .mkv e .webm.
118
+ Arquivos espalhados: com o ok da pessoa, copie para uma pasta nova. Nunca mova os originais. No Mac,
119
+ pasta em Mesa, Documentos ou Downloads pode ser bloqueada pela privacidade do sistema: se der erro de
120
+ permissão, explique e sugira liberar o acesso ou usar outra pasta. Vídeo que ainda está só no iCloud trava
121
+ o ffmpeg sem erro: a transcrição confere e tenta baixar; se parar com "só no iCloud", peça para ela baixar
122
+ (Finder > Baixar Agora) ou copiar a pasta para fora do iCloud.
123
+ 2. **Retome ou comece.** Se `<EDIT>/project.md` existe, leia, conte em uma linha onde vocês pararam e siga
124
+ dali (se o `<PROJ>` já existe, reabra o estúdio nele, sem criar projeto novo). Se não existe, crie `<EDIT>`
125
+ e o `project.md` (modelo abaixo).
126
+ 3. **No máximo uma pergunta**, e só se não der para deduzir: "para que é esse vídeo?" (anúncio, Reels, aula,
127
+ página). Se a pasta, a fala ou o pedido já mostram, não pergunte nada. Todo o resto tem padrão escrito, e
128
+ você conta as suposições numa frase no fim:
129
+ - formato do vídeo gravado (9:16 quando é em pé); duração: a que ficar depois do corte;
130
+ - estilo `laranja` (escuro com laranja, é o visual de anúncio; `papelaria` só se ela pedir um visual claro e
131
+ leve), legenda `discreta`, efeitos sonoros ligados (os do pacote; nada pago, nada gerado) e
132
+ câmera viva ligada;
133
+ - trilha só se a pessoa tiver uma música (uma já em `~/.editor-video/trilhas` ou um arquivo dela); o pacote
134
+ não traz música. Sem música, entregue sem trilha e diga numa frase que ela pode pôr uma depois;
135
+ - sem produto, link, chamada nem oferta quando a fala não tem (nada inventado, sem `cartao_final`);
136
+ - nomes difíceis da fala: os que a transcrição errar você corrige em `correcoes` ao conferir a fala.
137
+ O briefing completo (`fichas/briefing-do-video.md`) fica para quem pedir para conversar sobre o vídeo.
138
+ Se ela não souber o formato, siga o modelo mais parecido de `references/modelos.md` e diga qual.
139
+
140
+ ### 1. Corte
141
+
142
+ Transcrever, escolher as frases, `edl_manual.json`, corte pela onda, render, conferência e revisão no
143
+ estúdio: `references/corte.md`. O corte abre no estúdio com a legenda simples (`build.py corte`).
144
+
145
+ Sem briefing você não sabe os nomes de marca da fala. Depois de transcrever, leia `fala_do_corte.md` e procure
146
+ palavra que não combina (um verbo trocado, "digitar" por "editar", um nome de marca escrito errado). Achou: rode a
147
+ transcrição de novo com `--prompt 'palavra1, palavra2'` ou corrija em `correcoes` do `projeto.json`. Corrigir a
148
+ legenda errada custa menos que entregar o vídeo com ela.
149
+
150
+ ### 2. Referência (se tiver)
151
+
152
+ Meça com `references/referencia-medir.md` e mostre um resumo de 5 linhas do que vai ser aproveitado. A
153
+ aplicação vem no plano (`references/referencia-aplicar.md`).
154
+
155
+ ### 3. Plano em blocos
156
+
157
+ Com o corte aprovado, divida a fala por ideia e decida o que aparece em cada bloco
158
+ (`references/direcao-por-blocos.md`): uma tabela curta (bloco, fala, o que aparece, o que continua para o
159
+ próximo). Use a tabela "Que peça para cada tipo de fala": número vira contador, lista vira lista com check,
160
+ passos viram passo a passo, comparação vira antes e depois, prova vira prova, chamada vira cartão final.
161
+ **Ritmo: alguma coisa muda na tela a cada 2 a 4 s, uma ideia por vez. A pessoa fica na tela: peça pequena
162
+ por cima dela, acima da cabeça (`area: "acima_do_rosto"` nas cenas do kit, com `"sobre_a_pessoa": true` no
163
+ `cenas_proprias`), e cena de tela cheia sem a pessoa só uma a cada 15 a 20 s.** Espere o ok só se ela pediu para
164
+ aprovar antes.
165
+
166
+ ### 4. Amostra no estúdio
167
+
168
+ **Câmera viva primeiro, sempre**, a não ser que a pessoa peça um vídeo calmo:
169
+ `uv run --directory '<SKILL>' python helpers/camera_viva.py '<PROJ>'` escreve o zoom de base alternando por frase
170
+ (1,0 e 1,12) e a aproximação no rosto (1,25 a 1,3) nas palavras de ênfase, com no mínimo 2,5 s entre uma e outra.
171
+ Ela **troca todos os blocos `tela_cheia` simples** (sem `zooms`, `acompanhar` nem `borrar`) pelos dela e não
172
+ mexe nos `prova`, `contida`, `moldura`, `tela_verde` e `comparar`: escreva só esses outros blocos antes de rodá-la
173
+ (um `tela_cheia` que deve ficar como está leva `"camera_viva": false`). Os trechos que ela cria levam `"auto": "camera_viva"` e rodar de novo troca só eles. `--desfazer` tira tudo. Ela avisa os
174
+ trechos acima de 4 s sem mudança: ponha uma peça ou cena ali. Cena do `cenas_proprias` com `"sobre_a_pessoa": true`
175
+ (cartão acima da cabeça) é trecho em que a câmera fica em 1,0 e não aproxima: marque antes de rodar. Rode de novo se mudar os blocos ou o `ate` de uma cena `sobre_a_pessoa`. A câmera viva também não
176
+ aproxima o rosto enquanto um `lettering`, `rotulo` ou `carimbo` está na tela (eles ficam em cima da cabeça).
177
+ Vídeo com a cabeça alta no quadro deixa pouco espaço acima dela: o cartão do kit sai pequeno e a cena avisa;
178
+ nesse caso prefira o lettering do catálogo no topo ou a moldura.
179
+
180
+ Escolha um trecho de 8 a 15 s que tenha fala, legenda, pelo menos uma animação e uma troca de
181
+ enquadramento (nunca só a abertura). Escreva os `blocos`, as `animacoes` e as `cenas_proprias` do
182
+ `<PROJ>/projeto.json`:
183
+ - **peças prontas** do catálogo quando servem (`references/animacao-catalogo.md`): rótulo, lista, passos,
184
+ contador, `lettering` com ordem de leitura, `atras_da_pessoa` (com `frente` para o objeto na frente) e os
185
+ blocos `contida` e `comparar`;
186
+ - **cenas sob medida** quando a fala pede algo que o catálogo não tem. Antes de escrever do zero, adapte uma do
187
+ kit 2D (`compositions/cenas/2d/`) ou do kit 3D (`compositions/cenas/3d/`). Senão, uma sub-composição escrita
188
+ para aquele momento (`modelo-projeto/compositions/cenas/LEIA.md`, regras do HyperFrames nas skills `hyperframes-core` e
189
+ `hyperframes-animation`). É isso que deixa a edição com cara de agência: a peça que transforma o que está
190
+ sendo dito, não um cartão genérico.
191
+
192
+ `python3 build.py amostra <início> <fim>`, `python3 build.py hf lint` e `python3 build.py hf check` sem erro, e
193
+ abra no estúdio (`references/estudio.md`). Confira você primeiro, tocando com som: cada coisa entra na
194
+ palavra, nada cobre o rosto, dá para ler no tamanho de um celular. Depois mostre à pessoa e ajuste. Pedido
195
+ pequeno (texto, posição, cor, tempo) é mudar o `projeto.json` ou a cena e rodar o build de novo: o estúdio
196
+ recarrega, sem render. Conferência: `fichas/conferencia-da-amostra.md`.
197
+
198
+ **Sem amostra aprovada (ou conferida, se ela autorizou tudo), não monte o vídeo inteiro.** Se ela pedir para
199
+ pular a amostra, avise uma vez do custo e faça o que ela decidir.
200
+
201
+ ### 5. Vídeo inteiro no estúdio
202
+
203
+ Com o padrão da amostra: `python3 build.py completo`, `hf lint`, `hf check`, e mostre no estúdio. Não invente
204
+ estilo novo no meio. Ajustes da mesma forma que na amostra.
205
+
206
+ ### 6. Som e trilha
207
+
208
+ `references/som-e-trilha.md`. Os efeitos entram ANTES do render, no projeto: o `build.py completo` grava
209
+ `sons_sugeridos.json` (o som que cada animação pede, com o tempo do pico), o
210
+ `plano_sfx.py --projeto '<PROJ>'` escolhe, alinha e escreve os sons no `projeto.json`, e o `build.py completo`
211
+ de novo põe os sons na linha do tempo (o estúdio já toca). O plano usa o volume que cada peça pede. A trilha entra só no fim, no arquivo renderizado,
212
+ contínua, com duck, 22 a 24 dB abaixo da voz. Se a pessoa não quer som, pule.
213
+
214
+ Fim com tempo de leitura (o resultado parado depois da última palavra): `segura_fim` no `projeto.json`, em
215
+ segundos. Legenda menor e sem caixa alta: `legenda.estilo` `discreta`.
216
+
217
+ ### 7. Render, conferência e entrega
218
+
219
+ 1. Render no `<PROJ>`: `python3 build.py hf render --quality delivery --output renders/final.mp4` (os efeitos
220
+ já saem nele).
221
+ 2. Trilha no arquivo renderizado com o `mixar_trilha.py`, se for o caso (`references/som-e-trilha.md`), e
222
+ corte seco se ela pedir mais ritmo (`references/corte-seco.md`).
223
+ 3. **Portão de qualidade, obrigatório:**
224
+ `uv run --directory '<SKILL>' python helpers/portao.py '<PROJ>/renders/final.mp4' --projeto '<PROJ>'`.
225
+ Confere quadro preto, volume (-14 LUFS, margem 1,5), respiros, texto fora da zona segura ou encostado na
226
+ borda, e gera `renders/portao.png`, a folha de quadros com a zona segura desenhada. **Só entregue com
227
+ "PASSOU".** Reprovou: conserte o que ele listou, renderize e rode de novo; não mostre um vídeo reprovado.
228
+ Ele sabe de três coisas que não são defeito: o silêncio depois da última palavra não conta como respiro quando
229
+ o projeto tem `segura_fim` ou `cartao_final`; o texto que está na gravação da pessoa (blocos `prova`,
230
+ `contida`, `comparar`, `tela_verde`) não é lido; e só o volume fora do alvo se conserta sem novo render, com
231
+ `--ajustar-volume` (guarda o original ao lado). Qualquer outro motivo exige consertar no projeto e renderizar.
232
+ No Mac, a primeira vez o portão compila o leitor de texto e precisa das Command Line Tools (`xcode-select
233
+ --install`); sem leitor ele diz que não conferiu o texto: então olhe a folha de quadros. Depois confira o
234
+ arquivo exportado, não o estúdio: duração, som do começo ao fim, volume perto de -14 LUFS,
235
+ uma folha de quadros nos momentos de troca
236
+ (`uv run --directory '<SKILL>' python helpers/contact_sheet.py '<PROJ>/renders/final.mp4' --times ... -o '<EDIT>/verify/final.png'`),
237
+ nenhum respiro (`helpers/respiros.py '<PROJ>/renders/final.mp4' --fim-parado` quando há `segura_fim`),
238
+ nomes, números, oferta e chamada iguais ao material, nada em cima do rosto. Com tela gravada, conversa,
239
+ print ou borrão, rode o `helpers/conferir_dados.py` no arquivo exportado até sair 0 achado
240
+ (`references/revisao.md`, "Dado pessoal no arquivo exportado").
241
+ Se a fala cita algo que a pessoa não deu (um 3D, um recibo, um print, uma tela), não invente nem faça
242
+ maquete: deixe só a pessoa em cena naquele trecho e diga na nota de entrega o que faltou. O render de
243
+ entrega costuma sair com 100 a 200 MB: diga isso e, se ela for postar ou mandar, ofereça uma versão leve
244
+ (`ffmpeg -i final.mp4 -c:v libx264 -crf 24 -maxrate 4M -bufsize 8M -pix_fmt yuv420p -c:a aac -b:a 160k
245
+ -movflags +faststart leve.mp4`). O recorte da pessoa (texto atrás dela) leva uns 2 a 3 min mesmo num trecho curto.
246
+ 4. Entregue com uma nota curta: onde está o arquivo, o que foi feito, as decisões que mudam a percepção e
247
+ qualquer troca ou limite (ex.: "o texto atrás de você e o objeto na frente são composição 2,5D"). Nunca
248
+ prometa desempenho de anúncio.
249
+ 5. **Guarde o padrão aprovado** em `<PROJ>/padrao.json` (modelo em `fichas/padrao.json`): no próximo vídeo,
250
+ comece dele e a pessoa só confere.
251
+
252
+ ### Depois da entrega
253
+
254
+ Conserto de um trecho, diagnóstico de edição carregada, voz, legendas: `references/revisao.md`. Outro
255
+ gancho, versão curta, lote de ganchos, várias versões: `references/variacoes.md`. Mudar o formato (9:16, 16:9, 4:5 ou
256
+ 1:1): `references/enquadramento.md`.
257
+
258
+ ## Atalho: estilos prontos
259
+
260
+ Se a pessoa quer algo rápido e simples ("só legenda e gancho"), pede um estilo pronto pelo nome
261
+ (`papelaria`, `impacto`, `manchete`...) ou o computador não roda o HyperFrames, use o motor antigo depois do
262
+ mesmo corte: `references/estilos-prontos.md`. Diga que é o atalho e que a edição sob medida fica melhor.
263
+
264
+ ## Memória: project.md
265
+
266
+ Crie no início e acrescente uma linha a cada decisão. Nunca apague o histórico; só o briefing pode ser
267
+ reescrito.
268
+
269
+ ```markdown
270
+ # Criativo bolsa
271
+ Vídeos: /Users/ana/Filmes/bolsa · projeto: /Users/ana/Filmes/bolsa/criativo-bolsa · criado em 28/09/2026
272
+
273
+ ## Briefing
274
+ - Produto: lista de fornecedores de bolsas (link na bio)
275
+ - Clique: Saiba Mais para a página de vendas
276
+ - Duração: 30 a 40 s · vertical · Reels
277
+ - Nomes na fala (prompt): Hubla, Shopee
278
+ - Aprovação: corte e amostra antes (ou: pode fazer tudo)
279
+ - Som: efeitos nas animações e trilha animada
280
+ - Na imagem: já tem legenda escrita (sem a nossa legenda, combinado)
281
+
282
+ ## Decisões
283
+ - 28/09 14:02 · corte: 5 partes, tomada 3 no gancho, 34 s
284
+ - 28/09 14:20 · corte aprovado no estúdio. Nota: "ficou ótimo"
285
+ - 28/09 14:40 · amostra 00:12 a 00:24 aprovada (moldura + lista riscada + carimbo)
286
+ - 28/09 15:10 · final: criativo-bolsa/renders/final.mp4
287
+
288
+ ## Preferências
289
+ - Gosta de corte bem seco
290
+ ```
291
+
292
+ ## Quando algo dá errado
293
+
294
+ - `'ffmpeg' não encontrado` ou `npx` não encontrado: a instalação não terminou. Peça para rodar o
295
+ instalador do pacote de novo (ele põe o ffmpeg e o Node em `~/.editor-video`) e reabrir o app.
296
+ - Erro de biblioteca faltando ou `uv` desconhecido: rode `uv sync` na pasta `<SKILL>` ou o instalador.
297
+ - Permissão negada na pasta dos vídeos (Mac): Ajustes do Sistema > Privacidade e Segurança > Arquivos e
298
+ Pastas para o app em uso, ou use outra pasta.
299
+ - Estúdio não abre ou abre vazio: `references/estudio.md`.
300
+ - Render com tela preta ou piscando: veja o que entrou fora da ordem na linha do tempo (tempo negativo,
301
+ elemento sem opacidade inicial) em `references/animacao.md`.
302
+ - Voz escorregou depois de mexer no áudio: compare a duração antes e depois; mixar nunca encurta o vídeo.
303
+ - Palavra longa demais na transcrição ou rajada de voz com uma palavra só: tomada repetida escondida. Ouça.
304
+ - A mesma correção falhou duas vezes: pare, compare o que devia sair com o que saiu, teste um palpite de
305
+ cada vez no trecho mais curto que mostra o defeito e conte o que testou (`references/revisao.md`).
306
+ - Erro de um helper: leia a mensagem (vem em português), corrija a entrada e tente de novo. Não repita o
307
+ mesmo comando esperando outro resultado.
@@ -0,0 +1,228 @@
1
+ # Avisos de terceiros
2
+
3
+ O editor-video usa partes de software de código aberto, fontes, um modelo de detecção de rosto e um
4
+ modelo de recorte de pessoa com licença livre, efeitos sonoros e alguns serviços externos opcionais. Este arquivo lista cada um com a
5
+ licença original, que continua valendo nos termos de quem criou.
6
+
7
+ ## 1. Código adaptado de browser-use/video-use
8
+
9
+ Parte do código dos helpers foi adaptada do projeto **video-use**
10
+ (https://github.com/browser-use/video-use), distribuído sob a licença MIT.
11
+
12
+ Arquivos deste projeto que têm código adaptado (todos começam com a linha
13
+ `# Adapted from browser-use/video-use (MIT, (c) 2026 Browser Use). See THIRD_PARTY_NOTICES.md.`):
14
+
15
+ - `helpers/transcribe.py`
16
+ - `helpers/transcribe_batch.py`
17
+ - `helpers/pack_transcripts.py`
18
+ - `helpers/render_cut.py`
19
+ - `helpers/grade.py`
20
+ - `helpers/timeline_view.py`
21
+
22
+ Texto da licença, como publicado pelo projeto original:
23
+
24
+ ```
25
+ MIT License
26
+
27
+ Copyright (c) 2026 Browser Use
28
+
29
+ Permission is hereby granted, free of charge, to any person obtaining a copy
30
+ of this software and associated documentation files (the "Software"), to deal
31
+ in the Software without restriction, including without limitation the rights
32
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
33
+ copies of the Software, and to permit persons to whom the Software is
34
+ furnished to do so, subject to the following conditions:
35
+
36
+ The above copyright notice and this permission notice shall be included in all
37
+ copies or substantial portions of the Software.
38
+
39
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
40
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
42
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
43
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
44
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
45
+ SOFTWARE.
46
+ ```
47
+
48
+ ## 2. Fontes incluídas
49
+
50
+ As fontes ficam em `assets/fonts/`, cada uma na sua pasta, junto com o arquivo de licença
51
+ completo. Elas são usadas para desenhar legendas, ganchos, chamada e aviso nos vídeos.
52
+
53
+ | Fonte | Arquivo | Autor | Licença | Texto da licença |
54
+ |---|---|---|---|---|
55
+ | Anton | `assets/fonts/anton/Anton-Regular.ttf` | Copyright 2020 The Anton Project Authors | SIL Open Font License 1.1 | `assets/fonts/anton/OFL.txt` |
56
+ | Montserrat | `assets/fonts/montserrat/Montserrat-Variable.ttf` | Copyright 2024 The Montserrat.Git Project Authors | SIL Open Font License 1.1 | `assets/fonts/montserrat/OFL.txt` |
57
+ | Figtree | `assets/fonts/figtree/Figtree-Variable.ttf` | Copyright 2022 The Figtree Project Authors | SIL Open Font License 1.1 | `assets/fonts/figtree/OFL.txt` |
58
+ | Caveat | `assets/fonts/caveat/Caveat-Variable.ttf` | Copyright 2014 The Caveat Project Authors | SIL Open Font License 1.1 | `assets/fonts/caveat/OFL.txt` |
59
+ | Permanent Marker | `assets/fonts/permanentmarker/PermanentMarker-Regular.ttf` | Copyright (c) 2010 Font Diner, Inc. | Apache License 2.0 | `assets/fonts/permanentmarker/LICENSE.txt` |
60
+
61
+ As fontes sob a SIL Open Font License podem ser usadas, embutidas e distribuídas junto com
62
+ software, mas não podem ser vendidas sozinhas. "Permanent Marker" é marca da Font Diner, Inc.
63
+
64
+ O projeto-modelo do HyperFrames (`modelo-projeto/assets/fontes/`) leva as próprias cópias de Montserrat,
65
+ Caveat e JetBrains Mono (Copyright 2020 The JetBrains Mono Project Authors), todas sob a SIL Open Font
66
+ License 1.1, com o texto da licença ao lado de cada uma (`OFL-Montserrat.txt`, `OFL-Caveat.txt` e
67
+ `OFL-JetBrainsMono.txt`). Elas vão junto porque o modelo é copiado para a pasta dos vídeos e o render do
68
+ HyperFrames só usa fonte em arquivo.
69
+
70
+ ## 3. Modelos incluídos
71
+
72
+ Os modelos ficam em `assets/models/`, cada um com o arquivo de licença completo. O de rosto é usado para
73
+ achar o rosto de quem fala e não pôr texto nem imagem em cima dele (`helpers/face_layout.py`,
74
+ `helpers/render_cut.py`, `helpers/compose_final.py`, `helpers/style_samples.py`). O de recorte separa a
75
+ pessoa do fundo da gravação na tela verde (`helpers/matte.py`, `helpers/tela_verde.py`).
76
+
77
+ | Modelo | Arquivo | Origem | Autor | Licença | Texto da licença |
78
+ |---|---|---|---|---|---|
79
+ | YuNet (face_detection_yunet_2023mar) | `assets/models/face_detection_yunet_2023mar.onnx` | OpenCV Zoo (https://github.com/opencv/opencv_zoo) | Copyright (c) 2020 Shiqi Yu | MIT License | `assets/models/YUNET_LICENSE.txt` |
80
+ | MediaPipe Selfie Multiclass Segmentation 256x256 (selfie_multiclass_256x256) | `assets/models/selfie_multiclass_256x256.onnx` | Google MediaPipe (https://ai.google.dev/edge/mediapipe/solutions/vision/image_segmenter) | Google (autor no cartão do modelo: Adel Ahmadyan) | Apache License 2.0 | `assets/models/SELFIE_MULTICLASS_LICENSE.txt` |
81
+
82
+ Sobre o modelo de recorte:
83
+ - A licença está no cartão oficial do modelo ("LICENSED UNDER Apache License, Version 2.0"):
84
+ https://storage.googleapis.com/mediapipe-assets/Model%20Card%20Multiclass%20Segmentation.pdf
85
+ - Arquivo original (TFLite), baixado em 16/09/2026:
86
+ https://storage.googleapis.com/mediapipe-models/image_segmenter/selfie_multiclass_256x256/float32/latest/selfie_multiclass_256x256.tflite
87
+ (sha256 `c6748b1253a99067ef71f7e26ca71096cd449baefa8f101900ea23016507e0e0`).
88
+ - Mudança feita por este projeto (Apache-2.0, seção 4b): só o formato. O arquivo foi convertido de TFLite
89
+ para ONNX com o tf2onnx 1.17.0 (Apache-2.0, usado só na conversão, não vai junto), sem mudar os pesos.
90
+ Arquivo incluído: sha256 `35549e14dc62c73b34f0fd04ec1765d9f1577230a2d068cb25c39f600350f477`. Os detalhes e o
91
+ texto completo da licença estão em `assets/models/SELFIE_MULTICLASS_LICENSE.txt`. O Google não publica um
92
+ arquivo NOTICE para este modelo.
93
+ - O cartão do modelo diz que ele não serve para vigilância nem para reconhecer pessoas; aqui ele só separa
94
+ quem fala do fundo, no computador de quem edita.
95
+
96
+ ## 4. Efeitos sonoros incluídos
97
+
98
+ Os efeitos prontos ficam em `assets/sfx/` e podem ir junto com o produto: cada um é **CC0 / domínio
99
+ público** ou feito pelo código do próprio editor-video. Nenhum deles exige crédito. O comprovante de
100
+ licença de cada som fica em `assets/sfx/licencas/<efeito>.txt`, com a página de origem, o autor, o
101
+ nome da licença, a frase da licença palavra por palavra, a data em que ela foi lida e a receita de
102
+ como o arquivo foi preparado.
103
+
104
+ | Efeito | Arquivo | Origem | Autor | Licença | Comprovante |
105
+ |---|---|---|---|---|---|
106
+ | `whoosh` | `assets/sfx/whoosh.wav` | [SSE Library: SWOOSHES](https://archive.org/details/SSE_Library_SWOOSHES) no Internet Archive (bobina de fogos) | USC Cinema / Sunset Editorial Collection | CC0 1.0 Universal | `assets/sfx/licencas/whoosh.txt` |
107
+ | `pop` | `assets/sfx/pop.wav` | [Kenney Interface Sounds](https://kenney.nl/assets/interface-sounds) (`select_006.ogg`) | Kenney (Kenney Vleugels) | CC0 1.0 Universal | `assets/sfx/licencas/pop.txt` |
108
+ | `click` | `assets/sfx/click.wav` | [Kenney UI Audio](https://kenney.nl/assets/ui-audio) (`switch3.ogg`, usado duas vezes) | Kenney Vleugels | CC0 1.0 Universal | `assets/sfx/licencas/click.txt` |
109
+ | `tick` | `assets/sfx/sinteticos/tick.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/tick.txt` |
110
+ | `rise` | `assets/sfx/rise.wav` | [Phonk Riser (1) Sample](https://commons.wikimedia.org/wiki/File:Phonk_Riser_(1)_Sample.wav) no Wikimedia Commons | UnKnownrNone (trabalho próprio) | CC0 1.0 Universal | `assets/sfx/licencas/rise.txt` |
111
+ | `cash` | `assets/sfx/cash.wav` | [Metal drawer #1](https://bigsoundbank.com/metal-drawers-1-s0792.html) + [Counter bell #4](https://bigsoundbank.com/counter-bell-4-s2532.html) na BigSoundBank | Joseph SARDIN (BigSoundBank.com) | CC0 (domínio público), nas duas partes | `assets/sfx/licencas/cash.txt` |
112
+ | `coin` | `assets/sfx/coin.wav` | [Coin in cup #1](https://bigsoundbank.com/coin-in-cup-1-s0339.html) na BigSoundBank | DavidGreck, publicado pela BigSoundBank.com | CC0 (domínio público) | `assets/sfx/licencas/coin.txt` |
113
+ | `notification` | `assets/sfx/notification.wav` | [clinking of empty glass (Toast)](https://bigsoundbank.com/clinking-of-empty-glass-toast-s0471.html) na BigSoundBank | Joseph SARDIN (BigSoundBank.com) | CC0 (domínio público) | `assets/sfx/licencas/notification.txt` |
114
+ | `success` | `assets/sfx/success.wav` | [Kenney Music Jingles](https://kenney.nl/assets/music-jingles) (`jingles_STEEL00.ogg`) | Kenney Vleugels | CC0 1.0 Universal | `assets/sfx/licencas/success.txt` |
115
+ | `error` | `assets/sfx/sinteticos/error.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/error.txt` |
116
+ | `count` | `assets/sfx/count.wav` | [Hi-Tech Button Sound Pack I](https://opengameart.org/content/hi-tech-button-sound-pack-i-non-themed) no OpenGameArt (`Button Sound 9.wav`, repetido) | Circlerun | CC0 1.0 Universal | `assets/sfx/licencas/count.txt` |
117
+ | `keyboard` | `assets/sfx/keyboard.wav` | [Computer Keyboard](https://bigsoundbank.com/computer-keyboard-s0229.html) na BigSoundBank | Joseph SARDIN (BigSoundBank.com) | CC0 (domínio público) | `assets/sfx/licencas/keyboard.txt` |
118
+ | `snap` | `assets/sfx/snap.wav` | [Snap of the fingers sounds](https://opengameart.org/content/snap-of-the-fingers-sounds) no OpenGameArt + cauda de sala feita pelo código | Vinrax | CC0 1.0 Universal | `assets/sfx/licencas/snap.txt` |
119
+ | `mouse_click` | `assets/sfx/mouse_click.wav` | [Raspberry Mouse, Single Click](https://bigsoundbank.com/raspberry-mouse-single-click-s1735.html) na BigSoundBank | Joseph SARDIN (BigSoundBank.com) | CC0 (domínio público) | `assets/sfx/licencas/mouse_click.txt` |
120
+ | `bass_drop` | `assets/sfx/sinteticos/bass_drop.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/bass_drop.txt` |
121
+ | `metal_hit` | `assets/sfx/metal_hit.wav` | [Anvil #2](https://bigsoundbank.com/anvil-2-s3590.html) na BigSoundBank + grave feito pelo código | Pablo BERGEL, publicado pela BigSoundBank.com | CC0 (domínio público) | `assets/sfx/licencas/metal_hit.txt` |
122
+ | `synth_hit` | `assets/sfx/sinteticos/synth_hit.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/synth_hit.txt` |
123
+ | `flash` | `assets/sfx/sinteticos/flash.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/flash.txt` |
124
+ | `charge` | `assets/sfx/sinteticos/charge.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/charge.txt` |
125
+ | `metal_riser` | `assets/sfx/metal_riser.wav` | [Cymbale 16" #3](https://bigsoundbank.com/cymbale-16-3-s2313.html) na BigSoundBank, de trás para frente, + grave feito pelo código | Joseph SARDIN (BigSoundBank.com) | CC0 (domínio público) | `assets/sfx/licencas/metal_riser.txt` |
126
+ | `wind` | `assets/sfx/sinteticos/wind.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/wind.txt` |
127
+ | `rewind` | `assets/sfx/sinteticos/rewind.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/rewind.txt` |
128
+ | `gears` | `assets/sfx/gears.wav` | [Winder #1](https://bigsoundbank.com/winder-1-s1674.html) na BigSoundBank + [Kenney RPG Audio](https://kenney.nl/assets/rpg-audio) (`doorClose_4.ogg`) + grave feito pelo código | Joseph SARDIN (BigSoundBank.com) e Kenney Vleugels | CC0, nas duas gravações | `assets/sfx/licencas/gears.txt` |
129
+ | `data` | `assets/sfx/sinteticos/data.wav` | gerado por `helpers/make_sfx.py` | SHK Soluções Digitais | a do editor-video, sem terceiros | `assets/sfx/licencas/data.txt` |
130
+
131
+ **Crédito não é obrigatório em nenhum deles.** CC0 é dedicação ao domínio público: dá para usar,
132
+ copiar, mudar, distribuir e vender, inclusive sozinho, sem pedir permissão e sem citar o autor. Se
133
+ você quiser agradecer de todo jeito, uma linha assim basta em qualquer lugar (descrição do vídeo,
134
+ página do produto, um arquivo de créditos):
135
+
136
+ ```
137
+ Efeitos sonoros: BigSoundBank (Joseph SARDIN, DavidGreck e Pablo BERGEL), Kenney.nl, OpenGameArt
138
+ (Circlerun e Vinrax), USC Cinema / Sunset Editorial Collection (Internet Archive) e UnKnownrNone
139
+ (Wikimedia Commons). Todos CC0 / domínio público.
140
+ ```
141
+
142
+ Alguns autores **pedem** o crédito, sem exigir: a Kenney.nl escreve no `License.txt` que "Credit
143
+ (Kenney or www.kenney.nl) would be nice but is not mandatory", a BigSoundBank pede na página de
144
+ licenças "Add in your credits: 'Additional sounds: Joseph SARDIN - BigSoundBank.com'" e o Circlerun
145
+ escreve na página do pacote dele no OpenGameArt "Just "SFX by Circlerun" will do just fine". Como a
146
+ licença é CC0, isso é pedido e não condição: usar e vender sem citar ninguém continua permitido. A
147
+ linha acima atende esses pedidos de uma vez, se você quiser.
148
+
149
+ Nenhum dos efeitos escolhidos é CC-BY, então **não existe crédito obrigatório a colocar em lugar
150
+ nenhum**. Se um dia entrar um som CC-BY no lugar de algum destes, o arquivo de licença dele vai
151
+ trazer a linha de crédito exata e onde ela precisa aparecer (na descrição do vídeo, na página do
152
+ produto ou num arquivo de créditos entregue junto).
153
+
154
+ Alguns efeitos não são uma gravação solta, e o arquivo de licença de cada um explica a receita inteira:
155
+
156
+ - **`cash`** é a soma de dois sons CC0, porque nenhum arquivo CC0 sozinho era uma caixa registradora
157
+ de verdade (gaveta batendo mais sino brilhante). A gaveta vem de "Metal drawer #1" (em 8,00 s,
158
+ ganho 0,9) e o sino de "Counter bell #4" (em 0,13 s, ganho 1,0) 50 ms depois, com uma limpeza leve
159
+ do chiado de sala.
160
+ - **`click`** é o mesmo estalo CC0 duas vezes, o segundo 30 ms depois no ganho 0,9, porque um
161
+ obturador de câmera são dois estalos e porque um estalo sozinho é tão seco que não chega no volume
162
+ certo sem estourar o pico.
163
+ - **`count`** é um bipe CC0 (Circlerun) repetido 14 vezes, um a cada 47 ms: nenhum arquivo CC0 era um
164
+ contador pronto.
165
+ - **`gears`** soma duas gravações CC0 (a catraca "Winder #1" e o baque `doorClose_4` da Kenney) a um
166
+ grave que cresce, feito pelo código.
167
+ - **`snap`**, **`metal_hit`** e **`metal_riser`** são uma gravação CC0 cada (estalo, bigorna e prato de
168
+ trás para frente) com uma camada feita pelo código deste projeto: a cauda de sala do estalo e o grave
169
+ dos outros dois. Essa camada não vem de nenhuma gravação.
170
+ - **`notification`** é uma batida num copo de vidro de verdade, afinada 2 semitons acima. Não é o som de
171
+ nenhum celular.
172
+
173
+ Os arquivos de `assets/sfx/sinteticos/` também não vêm de terceiros: são gerados pelo próprio código do
174
+ editor-video (`helpers/make_sfx.py`), com semente fixa, então rodar de novo dá os mesmos bytes. Nove
175
+ efeitos da lista vêm de lá: `tick`, `error`, `bass_drop`, `synth_hit`, `flash`, `charge`, `wind`,
176
+ `rewind` e `data`. Nenhuma gravação CC0 chegava perto desses sons, então eles são do próprio projeto.
177
+ Veja `assets/sfx/licencas/sinteticos.txt`.
178
+
179
+ Os 35 sons de `assets/sfx/woven/`, que o `helpers/plano_sfx.py` usa com o prefixo `woven:` (pop, whoosh,
180
+ impacto, notificação, clique e os outros da tabela de sons da direção), vêm do **Woven SFX**
181
+ (https://www.woven.video/sfx, repositório https://github.com/woven-video/woven-sfx) e também são
182
+ **CC0 1.0 Universal**. Os arquivos são os originais, sem nenhuma mudança: a lista com o sha256 de cada um
183
+ fica em `assets/sfx/sfx_woven.json` e a licença, com a frase do repositório palavra por palavra, em
184
+ `assets/sfx/woven/LICENCA.md`. Crédito não é obrigatório; se quiser, "Efeitos sonoros: Woven SFX (CC0)".
185
+
186
+
187
+ ## 5. Bibliotecas instaladas pelo uv
188
+
189
+ Não vêm dentro desta pasta: o instalador baixa cada uma com `uv sync`, e cada uma segue a própria
190
+ licença.
191
+
192
+ | Biblioteca | Para que serve | Licença |
193
+ |---|---|---|
194
+ | numpy | cálculos de áudio e imagem | BSD-3-Clause |
195
+ | Pillow | desenho dos textos e imagens | MIT-CMU (HPND) |
196
+ | requests | busca de imagens e OpenRouter | Apache-2.0 |
197
+ | opencv-python-headless | roda o modelo YuNet para achar o rosto; fluxo óptico, filtros e mistura da tela verde | Apache-2.0 (o pacote traz bibliotecas de terceiros, listadas no `LICENSE-3RD-PARTY.txt` que vem dentro dele) |
198
+ | onnxruntime | roda o modelo de recorte da pessoa (tela verde); também é usado pelo faster-whisper | MIT |
199
+ | mlx-whisper (Mac com chip Apple) | transcrição local | MIT |
200
+ | faster-whisper (Windows e outros) | transcrição local | MIT |
201
+
202
+ Essas bibliotecas instalam outras das quais dependem (por exemplo `mlx`, `ctranslate2`, `flatbuffers`,
203
+ `protobuf`, `coloredlogs`, `sympy`, `tokenizers` e `huggingface-hub`), cada uma com a própria licença.
204
+
205
+ O modelo de voz Whisper (OpenAI, licença MIT) é baixado do Hugging Face na primeira transcrição.
206
+
207
+ ## 6. Programas que você instala à parte
208
+
209
+ - **FFmpeg** (https://ffmpeg.org): usado para ler, cortar e montar os vídeos. Não vem junto com o
210
+ editor-video; você instala pelo Homebrew ou pelo winget. Licença LGPL ou GPL, conforme o build.
211
+ - **uv** (https://github.com/astral-sh/uv): instala o Python e as bibliotecas. Licença MIT ou
212
+ Apache-2.0.
213
+ - **Node.js e HyperFrames** (https://github.com/heygen-com/hyperframes): montam o vídeo do
214
+ `modelo-projeto/`; o `npx` baixa o HyperFrames na primeira vez. HyperFrames é Apache-2.0. O GSAP
215
+ (licença padrão da GreenSock, uso gratuito) vem do CDN ou é baixado pelo `build.py preparar`, e o
216
+ modelo de mãos do MediaPipe (Apache-2.0) é baixado na primeira vez pelo `ferramentas/rastrear_maos.py`.
217
+ Nenhum dos três vai no pacote.
218
+
219
+ ## 7. Serviços externos opcionais
220
+
221
+ Nenhum deles é necessário para cortar, legendar e montar o vídeo.
222
+
223
+ | Serviço | Quando é usado | O que vai para lá | Termos |
224
+ |---|---|---|---|
225
+ | Wikimedia Commons | `fetch_images.py` (padrão) | o texto da busca | Cada imagem tem a própria licença (CC0, domínio público, CC BY ou CC BY-SA). Autor, link e licença ficam em `edit/assets/credits.json`. Licenças CC BY e CC BY-SA pedem crédito ao autor. |
226
+ | Pexels | `fetch_images.py --source pexels`, com `PEXELS_API_KEY` | o texto da busca e a sua chave | Licença do Pexels (https://www.pexels.com/license/). Crédito em `edit/assets/credits.json`. |
227
+ | OpenRouter | `gen_image.py`, com `OPENROUTER_API_KEY` | a descrição da imagem e a sua chave | Termos do OpenRouter (https://openrouter.ai/terms) e do modelo escolhido. Cobrança por uso na sua conta. |
228
+ | Hugging Face | primeira transcrição | pedido de download do modelo | Termos do Hugging Face e licença do modelo. |