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.
- package/LICENSES/edit-ia-pro.txt +32 -0
- package/LICENSES/fontes-OFL.txt +476 -0
- package/LICENSES/hyperframes-Apache-2.0.txt +205 -0
- package/LICENSES/permanent-marker-Apache-2.0.txt +204 -0
- package/LICENSES/selfie-multiclass-Apache-2.0.txt +227 -0
- package/LICENSES/three-MIT.txt +23 -0
- package/LICENSES/video-use-MIT.txt +24 -0
- package/LICENSES/woven-sfx-CC0.txt +16 -0
- package/LICENSES/yunet-MIT.txt +21 -0
- package/README.md +2 -2
- package/bin/primocode.js +11 -2
- package/editor/LICENSE.md +11 -0
- package/editor/README.md +321 -0
- package/editor/SKILL.md +307 -0
- package/editor/THIRD_PARTY_NOTICES.md +228 -0
- package/editor/assets/baixar.json +591 -0
- package/editor/assets/fonts/anton/OFL.txt +93 -0
- package/editor/assets/fonts/caveat/OFL.txt +93 -0
- package/editor/assets/fonts/figtree/OFL.txt +93 -0
- package/editor/assets/fonts/fonts.json +10 -0
- package/editor/assets/fonts/montserrat/OFL.txt +93 -0
- package/editor/assets/fonts/permanentmarker/LICENSE.txt +202 -0
- package/editor/assets/models/SELFIE_MULTICLASS_LICENSE.txt +227 -0
- package/editor/assets/models/YUNET_LICENSE.txt +21 -0
- package/editor/assets/sfx/licencas/bass_drop.txt +32 -0
- package/editor/assets/sfx/licencas/cash.txt +76 -0
- package/editor/assets/sfx/licencas/charge.txt +31 -0
- package/editor/assets/sfx/licencas/click.txt +46 -0
- package/editor/assets/sfx/licencas/coin.txt +50 -0
- package/editor/assets/sfx/licencas/count.txt +47 -0
- package/editor/assets/sfx/licencas/data.txt +31 -0
- package/editor/assets/sfx/licencas/error.txt +32 -0
- package/editor/assets/sfx/licencas/flash.txt +31 -0
- package/editor/assets/sfx/licencas/gears.txt +82 -0
- package/editor/assets/sfx/licencas/keyboard.txt +48 -0
- package/editor/assets/sfx/licencas/metal_hit.txt +62 -0
- package/editor/assets/sfx/licencas/metal_riser.txt +61 -0
- package/editor/assets/sfx/licencas/mouse_click.txt +50 -0
- package/editor/assets/sfx/licencas/notification.txt +54 -0
- package/editor/assets/sfx/licencas/pop.txt +38 -0
- package/editor/assets/sfx/licencas/rewind.txt +32 -0
- package/editor/assets/sfx/licencas/rise.txt +46 -0
- package/editor/assets/sfx/licencas/sinteticos.txt +21 -0
- package/editor/assets/sfx/licencas/snap.txt +50 -0
- package/editor/assets/sfx/licencas/success.txt +40 -0
- package/editor/assets/sfx/licencas/synth_hit.txt +32 -0
- package/editor/assets/sfx/licencas/tick.txt +14 -0
- package/editor/assets/sfx/licencas/whoosh.txt +47 -0
- package/editor/assets/sfx/licencas/wind.txt +31 -0
- package/editor/assets/sfx/sfx.json +832 -0
- package/editor/assets/sfx/sfx_sinteticos.json +317 -0
- package/editor/assets/sfx/sfx_woven.json +387 -0
- package/editor/assets/sfx/woven/LICENCA.md +16 -0
- package/editor/fichas/briefing-do-video.md +45 -0
- package/editor/fichas/conferencia-da-amostra.md +56 -0
- package/editor/fichas/matriz-de-ganchos.csv +3 -0
- package/editor/fichas/padrao.json +16 -0
- package/editor/fichas/planilha-de-cenas.csv +4 -0
- package/editor/fichas/planilha-de-versoes.csv +4 -0
- package/editor/fichas/plano-em-blocos.md +32 -0
- package/editor/fichas/registro-de-materiais.json +27 -0
- package/editor/helpers/assets_ocr/ocr_vision.swift +41 -0
- package/editor/helpers/bordas_precisas.py +272 -0
- package/editor/helpers/camera_viva.py +426 -0
- package/editor/helpers/captions.py +601 -0
- package/editor/helpers/common.py +308 -0
- package/editor/helpers/compose_final.py +3555 -0
- package/editor/helpers/conferir_corte.py +234 -0
- package/editor/helpers/conferir_dados.py +405 -0
- package/editor/helpers/contact_sheet.py +282 -0
- package/editor/helpers/corte_por_onda.py +433 -0
- package/editor/helpers/corte_seco.py +595 -0
- package/editor/helpers/denoise.py +971 -0
- package/editor/helpers/efeitos.py +408 -0
- package/editor/helpers/efeitos_gerar.py +159 -0
- package/editor/helpers/elevenlabs_api.py +442 -0
- package/editor/helpers/face_layout.py +570 -0
- package/editor/helpers/fetch_images.py +423 -0
- package/editor/helpers/ganho_por_trecho.py +214 -0
- package/editor/helpers/gen_image.py +312 -0
- package/editor/helpers/gen_music.py +316 -0
- package/editor/helpers/gen_sfx.py +148 -0
- package/editor/helpers/grade.py +307 -0
- package/editor/helpers/icloud.py +119 -0
- package/editor/helpers/make_sfx.py +940 -0
- package/editor/helpers/matte.py +1342 -0
- package/editor/helpers/medir_referencia.py +2232 -0
- package/editor/helpers/mixar_trilha.py +354 -0
- package/editor/helpers/montar_corte.py +295 -0
- package/editor/helpers/motion/__init__.py +13 -0
- package/editor/helpers/motion/engine.py +1915 -0
- package/editor/helpers/motion/registry.py +510 -0
- package/editor/helpers/motion/render.py +665 -0
- package/editor/helpers/motion/templates/barra_progresso.py +370 -0
- package/editor/helpers/motion/templates/carimbo.py +132 -0
- package/editor/helpers/motion/templates/checklist.py +271 -0
- package/editor/helpers/motion/templates/comentario_cta.py +380 -0
- package/editor/helpers/motion/templates/contador.py +222 -0
- package/editor/helpers/motion/templates/destaque.py +263 -0
- package/editor/helpers/motion/templates/etiqueta_preco.py +461 -0
- package/editor/helpers/motion/templates/grafico_barras.py +510 -0
- package/editor/helpers/motion/templates/grafico_linha.py +462 -0
- package/editor/helpers/motion/templates/notificacao.py +266 -0
- package/editor/helpers/motion/templates/palavra_impacto.py +410 -0
- package/editor/helpers/motion/templates/passos.py +321 -0
- package/editor/helpers/motion/templates/riscado.py +298 -0
- package/editor/helpers/motion/templates/selo_garantia.py +150 -0
- package/editor/helpers/motion_render.py +241 -0
- package/editor/helpers/motion_sugerir.py +961 -0
- package/editor/helpers/noise_check.py +134 -0
- package/editor/helpers/pack_transcripts.py +223 -0
- package/editor/helpers/palavras_na_onda.py +176 -0
- package/editor/helpers/plano_sfx.py +839 -0
- package/editor/helpers/portao.py +427 -0
- package/editor/helpers/preview_server.py +1177 -0
- package/editor/helpers/rastrear_rosto.py +298 -0
- package/editor/helpers/render_cut.py +1256 -0
- package/editor/helpers/respiros.py +89 -0
- package/editor/helpers/sincronizar_cameras.py +571 -0
- package/editor/helpers/speech_regions.py +423 -0
- package/editor/helpers/style_catalog.json +231 -0
- package/editor/helpers/style_samples.py +246 -0
- package/editor/helpers/tela_verde.py +2113 -0
- package/editor/helpers/text_render.py +2059 -0
- package/editor/helpers/texto_na_tela.py +366 -0
- package/editor/helpers/timeline_view.py +292 -0
- package/editor/helpers/tira_de_quadros.py +113 -0
- package/editor/helpers/transcribe.py +734 -0
- package/editor/helpers/transcribe_batch.py +129 -0
- package/editor/helpers/trilhas.py +1146 -0
- package/editor/helpers/trilhas_humores.json +66 -0
- package/editor/helpers/valores.py +187 -0
- package/editor/helpers/verify_cut.py +820 -0
- package/editor/helpers/voice_levels.py +233 -0
- package/editor/helpers/voz_check.py +386 -0
- package/editor/helpers/voz_limpa.py +81 -0
- package/editor/helpers/watch_preview.py +372 -0
- package/editor/modelo-projeto/LEIA.md +402 -0
- package/editor/modelo-projeto/assets/fontes/OFL-Caveat.txt +93 -0
- package/editor/modelo-projeto/assets/fontes/OFL-JetBrainsMono.txt +93 -0
- package/editor/modelo-projeto/assets/fontes/OFL-Montserrat.txt +93 -0
- package/editor/modelo-projeto/assets/fontes/larguras.json +1 -0
- package/editor/modelo-projeto/assets/three/BufferGeometryUtils.js +1438 -0
- package/editor/modelo-projeto/assets/three/GLTFLoader.js +4895 -0
- package/editor/modelo-projeto/assets/three/LICENSE +21 -0
- package/editor/modelo-projeto/assets/three/ORIGEM.txt +17 -0
- package/editor/modelo-projeto/assets/three/RoomEnvironment.js +185 -0
- package/editor/modelo-projeto/assets/three/three.core.min.js +6 -0
- package/editor/modelo-projeto/assets/three/three.module.min.js +6 -0
- package/editor/modelo-projeto/build.py +4828 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_antes_depois.html +199 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_arquivo.html +232 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_busca.html +315 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_comando.html +304 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_conversa.html +217 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_esquema.html +289 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_medidor.html +249 -0
- package/editor/modelo-projeto/compositions/cenas/2d/k2d_notas.html +233 -0
- package/editor/modelo-projeto/compositions/cenas/3d/k3d_caminho.html +197 -0
- package/editor/modelo-projeto/compositions/cenas/3d/k3d_explodida.html +152 -0
- package/editor/modelo-projeto/compositions/cenas/3d/k3d_tela.html +167 -0
- package/editor/modelo-projeto/compositions/cenas/3d/k3d_volume.html +124 -0
- package/editor/modelo-projeto/compositions/cenas/3d/motor-three.js +728 -0
- package/editor/modelo-projeto/compositions/cenas/LEIA.md +177 -0
- package/editor/modelo-projeto/ferramentas/medir_fontes.py +65 -0
- package/editor/modelo-projeto/ferramentas/pessoa_recortada.py +176 -0
- package/editor/modelo-projeto/ferramentas/rastrear_maos.py +189 -0
- package/editor/modelo-projeto/hyperframes.json +12 -0
- package/editor/modelo-projeto/package.json +11 -0
- package/editor/modelo-projeto/projeto.json +16 -0
- package/editor/preview/app.css +1009 -0
- package/editor/preview/app.js +2122 -0
- package/editor/preview/index.html +307 -0
- package/editor/pyproject.toml +23 -0
- package/editor/references/3d.md +236 -0
- package/editor/references/animacao-catalogo.md +672 -0
- package/editor/references/animacao.md +498 -0
- package/editor/references/comandos.md +92 -0
- package/editor/references/corte-seco-como-funciona.md +50 -0
- package/editor/references/corte-seco.md +88 -0
- package/editor/references/corte.md +290 -0
- package/editor/references/direcao-por-blocos.md +218 -0
- package/editor/references/enquadramento.md +654 -0
- package/editor/references/estilos-prontos.md +355 -0
- package/editor/references/estudio.md +100 -0
- package/editor/references/exemplo-eventos.json +67 -0
- package/editor/references/lettering.md +252 -0
- package/editor/references/modelos.md +494 -0
- package/editor/references/phase2.md +1007 -0
- package/editor/references/referencia-aplicar.md +203 -0
- package/editor/references/referencia-medir.md +375 -0
- package/editor/references/revisao.md +335 -0
- package/editor/references/som-e-trilha.md +146 -0
- package/editor/references/tabela-de-sons.md +130 -0
- package/editor/references/variacoes.md +234 -0
- package/editor/uv.lock +1141 -0
- package/lib/act.js +36 -8
- package/lib/catalogo.js +4 -0
- package/lib/chamada-torta.js +81 -0
- package/lib/editor-pro.js +786 -0
- package/lib/entrega.js +58 -0
- package/lib/estudio/conferencia-visual.js +76 -0
- package/lib/estudio/diretor.js +6 -1
- package/lib/estudio/exportar.js +3 -1
- package/lib/estudio/gosto.js +45 -4
- package/lib/estudio/index.js +8 -5
- package/lib/estudio/kit-ae/base.jsx +119 -13
- package/lib/estudio/kit-ae/cenas.jsx +47 -15
- package/lib/estudio/kit-ae/guarda.jsx +274 -0
- package/lib/estudio/kit-ae/primitivas.jsx +180 -24
- package/lib/estudio/maquina-diretor.js +61 -7
- package/lib/estudio/maquina-foto.js +177 -0
- package/lib/estudio/maquina-guarda.js +207 -0
- package/lib/estudio/maquina-layout.js +22 -1
- package/lib/estudio/maquina.js +60 -11
- package/lib/estudio/referencias.js +1 -1
- package/lib/estudio/visao/visao.swift +97 -0
- package/lib/estudio/visao.js +60 -0
- package/lib/local/cerebro.json +192 -6
- package/lib/local/motor.js +5 -2
- package/lib/nuvem.js +11 -1
- package/lib/passagem.js +50 -0
- package/lib/perigo.js +19 -11
- package/lib/protecao.js +134 -0
- package/lib/titulo-conversa.js +46 -0
- package/lib/tools.js +3 -0
- package/lib/ui.js +1 -1
- package/package.json +3 -2
- package/skills/editar-meu-video/SKILL.md +6 -2
- package/skills/editar-video/SKILL.md +113 -0
- package/studio/pessoa.py +52 -0
- package/voz/primo_voz/app.py +43 -4
- package/voz/primo_voz/chat.html +17 -6
- package/voz/primo_voz/painel_dados.py +134 -0
package/editor/SKILL.md
ADDED
|
@@ -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. |
|