primocode 10.15.2 → 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 +74 -9
- 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 +38 -8
- package/lib/app-chat.js +97 -0
- package/lib/catalogo.js +7 -1
- 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/tela.html +1349 -0
- package/lib/estudio/gosto.js +305 -0
- package/lib/estudio/index.js +12 -1
- 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 +70 -12
- 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 +64 -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/headless.js +15 -3
- package/lib/local/cerebro.json +285 -7
- package/lib/local/motor.js +5 -2
- package/lib/memoria-usuario.js +164 -0
- package/lib/nuvem.js +33 -2
- package/lib/passagem.js +50 -0
- package/lib/perigo.js +19 -11
- package/lib/protecao.js +134 -0
- package/lib/repeticao.js +1 -1
- package/lib/sandbox.js +57 -9
- package/lib/titulo-conversa.js +46 -0
- package/lib/tools.js +23 -4
- package/lib/ui.js +2 -2
- 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/__main__.py +55 -40
- package/voz/primo_voz/app.py +500 -4
- package/voz/primo_voz/chat.html +1773 -0
- package/voz/primo_voz/conversa.py +0 -26
- package/voz/primo_voz/hud.html +8 -2
- package/voz/primo_voz/hud.py +129 -5
- package/voz/primo_voz/identidade.py +1 -1
- package/voz/primo_voz/painel_dados.py +134 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
# Lettering: texto com ordem de leitura
|
|
2
|
+
|
|
3
|
+
Lettering é decisão de edição, não uma segunda legenda. Você escolhe a palavra ou a frase que muda a leitura do
|
|
4
|
+
vídeo, dá a ela o peso certo e faz o movimento reforçar o que ela diz. Serve para destaque de frase forte,
|
|
5
|
+
título animado, texto em camadas e chamada. Serve também para arrumar um lettering existente em que tudo pesa
|
|
6
|
+
igual.
|
|
7
|
+
|
|
8
|
+
Leia junto: `references/animacao.md` (tempo da palavra e cena própria) e `references/enquadramento.md` (rosto,
|
|
9
|
+
zona segura e texto atrás da pessoa).
|
|
10
|
+
|
|
11
|
+
## O estilo que o André já aprovou
|
|
12
|
+
|
|
13
|
+
O André tem um lettering aprovado, guardado na skill `lettering-reels` (quando ela está instalada). É um
|
|
14
|
+
ponto de partida bom para Reels e anúncio dele e da Vit:
|
|
15
|
+
|
|
16
|
+
- cada frase vira uma tela de 2 a 4 linhas, centralizada, com as palavras entrando no tempo da fala;
|
|
17
|
+
- a palavra que manda em Montserrat 900 grande, lilás (ou rosa; laranja para urgência), contorno escuro forte,
|
|
18
|
+
levemente inclinada, entrando com uma batida;
|
|
19
|
+
- o miolo da frase em Montserrat 900 branca, caixa alta, contorno forte;
|
|
20
|
+
- conectivos e complementos à mão, em Caveat amarela, minúsculas;
|
|
21
|
+
- a frase sobe e some quando começa a próxima;
|
|
22
|
+
- "modo leve" (palavras só sobem e aparecem, sem batida) para vídeo mais emocional.
|
|
23
|
+
|
|
24
|
+
Nesse estilo o lettering escreve a própria fala, então a legenda não repete o que está escrito grande: ou sai
|
|
25
|
+
daquele trecho, ou (legenda `discreta`, com `legenda_junto`) continua só nas palavras que não estão grandes. A hierarquia continua
|
|
26
|
+
valendo: a palavra lilás é a principal, a branca é apoio, a amarela é ligação. Dentro do projeto HyperFrames, a
|
|
27
|
+
peça `lettering` (seção abaixo) faz esse trabalho; um visual que ela não faz vira cena própria. A skill
|
|
28
|
+
`lettering-reels` é outro caminho (gera arquivo transparente para o CapCut) e não precisa ser chamada aqui.
|
|
29
|
+
|
|
30
|
+
Se a pessoa tem outra marca, outro estilo pedido ou uma referência medida, siga isso. O estilo do André é
|
|
31
|
+
opção, não obrigação.
|
|
32
|
+
|
|
33
|
+
## O que escrever
|
|
34
|
+
|
|
35
|
+
- O pedaço exato da fala. Números, negações, condições, termos técnicos e acentos como foram ditos.
|
|
36
|
+
- Paráfrase curta só se não muda a afirmação. Cortar muleta ("né", "tipo") pode.
|
|
37
|
+
- Nunca benefício, resultado, oferta, número ou função que não foram ditos.
|
|
38
|
+
- Quantidade:
|
|
39
|
+
- destaque de frases fortes: 2 a 4 expressões por trecho, formando um raciocínio completo (menos, se a
|
|
40
|
+
gravação não oferece tantas);
|
|
41
|
+
- anúncio com prova na tela: no máximo duas ideias escritas;
|
|
42
|
+
- corte de conversa ou podcast: uma ou duas expressões.
|
|
43
|
+
|
|
44
|
+
## Três papéis
|
|
45
|
+
|
|
46
|
+
Todo texto na tela tem um papel. Classifique antes de desenhar.
|
|
47
|
+
|
|
48
|
+
| papel | o que é | como aparece |
|
|
49
|
+
|---|---|---|
|
|
50
|
+
| principal | a ideia que manda naquele instante | maior, mais peso, mais contraste, no lugar mais forte |
|
|
51
|
+
| apoio | um complemento curto e indispensável | menor, mais leve, ao lado do principal |
|
|
52
|
+
| chamada | o convite à ação | no fim, com o texto inteiro legível antes de sair |
|
|
53
|
+
|
|
54
|
+
- Só uma ideia principal na tela. Ao lado dela, no máximo um apoio breve.
|
|
55
|
+
- O olho chega primeiro no principal pela escala, pelo peso, pelo lugar e pelo contraste. Não por animação forte
|
|
56
|
+
em tudo.
|
|
57
|
+
- A ordem também é de tempo: o principal termina de chegar antes de o apoio começar. Enquanto o principal muda,
|
|
58
|
+
o apoio fica parado.
|
|
59
|
+
- Tempo de leitura depois que o texto está completo: pelo menos 1 s para até 4 palavras e uns 0,3 s por palavra
|
|
60
|
+
a mais. Se não dá para ler sem pausar o vídeo, aumente a permanência ou diminua o texto.
|
|
61
|
+
- No fim do vídeo o tempo de leitura vence o corte seco: quando a frase escrita termina na última palavra, o
|
|
62
|
+
`segura_fim` do `projeto.json` segura a tela depois da fala (nunca um respiro deixado no corte). A última
|
|
63
|
+
expressão fica legível até o último quadro.
|
|
64
|
+
- Em fala rápida, conte o tempo antes de escolher as expressões: cada uma ocupa uns 2 s (chegar, 1 s de leitura e
|
|
65
|
+
sair) e a próxima entra na palavra dela. Em 10 s de fala rápida cabem 3. Quando não cabe, tire uma ou junte duas
|
|
66
|
+
numa peça só (a segunda vira o apoio); o build avisa qual expressão fica sem tempo.
|
|
67
|
+
|
|
68
|
+
## A peça `lettering` do projeto
|
|
69
|
+
|
|
70
|
+
No `projeto.json`, em `animacoes`, uma peça por tela de texto grande:
|
|
71
|
+
|
|
72
|
+
```json
|
|
73
|
+
{"id": "sozinho", "tipo": "lettering", "principal": "Editou *sozinho*", "apoio": "enquanto eu gravava o próximo",
|
|
74
|
+
"chamada": "Veja como", "em": "editou", "sai": "próximo", "posicao": "topo", "estilo": "bloco"}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`principal` é obrigatório; `apoio` e `chamada` são opcionais; `em` e `sai` são a palavra ou o segundo; `posicao`
|
|
78
|
+
é `topo`, `meio` ou `base` (sem ela, a primeira que não cobre o rosto, nessa ordem); `estilo` é `bloco` (Montserrat
|
|
79
|
+
900, caixa alta, contorno forte) ou `manuscrito` (Caveat, à mão). Os outros campos e o código estão no
|
|
80
|
+
`references/animacao-catalogo.md`, peça 12.
|
|
81
|
+
|
|
82
|
+
O que a peça garante, sem você escrever nada:
|
|
83
|
+
|
|
84
|
+
- a ordem de leitura: o principal chega primeiro e maior, o apoio só depois que ele terminou, a chamada por último;
|
|
85
|
+
- cada palavra na hora em que é dita: o principal e o apoio entram palavra por palavra, no tempo medido na onda
|
|
86
|
+
quando existe o `palavras_onda.json` do corte (`helpers/palavras_na_onda.py`, e não no do Whisper), antecipando no
|
|
87
|
+
máximo 0,15 s; as letras de cada palavra aparecem dentro do tempo em que ela é dita;
|
|
88
|
+
- a letra por letra por grafema (o acento junto da letra), com a linha já montada no lugar final;
|
|
89
|
+
- nenhum quadro que mude o sentido: número inteiro de uma vez (com "R$", "mil", "%"), negação solta junto da palavra
|
|
90
|
+
de antes;
|
|
91
|
+
- o encaixe na ordem desta página: largura medida com a fonte de verdade no peso usado
|
|
92
|
+
(`modelo-projeto/assets/fontes/larguras.json`), até 3 palavras grandes por vez, quebra por sentido em até 3
|
|
93
|
+
linhas, dois momentos (duas telas) quando passa de 3 palavras, e a letra menor só por último, até caber sem
|
|
94
|
+
cobrir o rosto;
|
|
95
|
+
- a fonte carregada antes de medir, também na página (a timeline é montada depois do `document.fonts.ready`);
|
|
96
|
+
- a legenda escondida no trecho, ou, com `legenda_junto` (o padrão quando a legenda é `discreta`), a legenda
|
|
97
|
+
continuando nas palavras que não estão escritas grandes naquele instante;
|
|
98
|
+
- a última expressão legível até o último quadro, quando o `sai` é o fim do corte (também no `segura_fim`);
|
|
99
|
+
- o aviso quando o texto completo não fica tempo suficiente para ser lido, dizendo se dá para atrasar o `sai` ou se
|
|
100
|
+
é preciso tirar uma expressão ou juntar duas;
|
|
101
|
+
- o som de cada entrada: pop suave na batida do principal (um pouco mais forte na conclusão, a última expressão do
|
|
102
|
+
vídeo), pop baixo no pouso do apoio, pop na chamada;
|
|
103
|
+
- uma linha `nota:` com o tamanho da letra e por que não foi maior (a largura ou o rosto).
|
|
104
|
+
|
|
105
|
+
O que continua com você: escolher as expressões (o pedaço exato da fala, 2 a 4 por trecho), o papel de cada
|
|
106
|
+
texto, o momento e o estilo. Um movimento que ela não faz (trocar uma palavra por outra no mesmo lugar, duas
|
|
107
|
+
opções frente a frente) é cena própria, com as regras desta página.
|
|
108
|
+
|
|
109
|
+
## Legenda e lettering
|
|
110
|
+
|
|
111
|
+
- A legenda fica na região dela (no peito) e acompanha a fala, com até 3 palavras por vez numa linha: é o
|
|
112
|
+
`legenda.max_palavras` 3 do projeto (o `max_letras` quebra antes quando as palavras são longas). Mais que
|
|
113
|
+
isso já é lettering, e vira decisão de hierarquia, não legenda.
|
|
114
|
+
- Lettering só nas palavras que mudam o jeito de entender a frase.
|
|
115
|
+
- Uma frase nunca aparece escrita grande duas vezes (lettering e legenda juntos). Onde o lettering escreve a fala, a
|
|
116
|
+
legenda sai daquele trecho, ou continua sem as palavras escritas grandes. Na peça `lettering` o build faz isso
|
|
117
|
+
sozinho: com a legenda `discreta`, o padrão é `"legenda_junto": true` (a legenda segue nas palavras que não estão
|
|
118
|
+
grandes, e a fala não fica sem texto enquanto a letra grande é lida); com a legenda `padrao` (grande), a legenda
|
|
119
|
+
sai do trecho. Numa cena própria: `"esconde_legenda": true` ou `"legenda": {"esconder": [[de, ate]]}`.
|
|
120
|
+
- Nenhuma palavra dita some da legenda: a frase é dividida por sentido ("Eu gravei" / "esse vídeo" / "uma vez só,")
|
|
121
|
+
e a palavra que ficaria piscando sozinha junta com a vizinha.
|
|
122
|
+
- Rosto livre (olhos e boca) e zona segura do Reels: texto entre y 230 e 1530 e entre x 140 e 940 no 9:16.
|
|
123
|
+
|
|
124
|
+
## Fonte
|
|
125
|
+
|
|
126
|
+
- Escolha pela identidade da pessoa, pelo tamanho da frase e pelo tamanho na tela. Condensada (Anton, Bebas
|
|
127
|
+
Neue) serve a título curto, não a tudo. Nunca comprima a letra na horizontal para caber.
|
|
128
|
+
- Fonte local em arquivo, com licença que cubra o uso. As do modelo (Montserrat, Caveat, JetBrains Mono) são
|
|
129
|
+
OFL e estão em `modelo-projeto/assets/fontes/`.
|
|
130
|
+
- Confira se a fonte tem os caracteres do português antes de usar:
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
# uv run --directory "<SKILL>" python checar_fonte.py '<caminho completo da fonte>'
|
|
134
|
+
import sys
|
|
135
|
+
from PIL import ImageFont
|
|
136
|
+
f = ImageFont.truetype(sys.argv[1], 80)
|
|
137
|
+
vazio = bytes(f.getmask("")) # desenho de caractere que não existe
|
|
138
|
+
faltam = [c for c in "ãõçáéíóúâêôàÃÕÇÁÉÍÓÚÂÊÔÀ" if bytes(f.getmask(c)) == vazio]
|
|
139
|
+
print("faltam:", "".join(faltam) or "nada")
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
- Cada peso usado precisa existir em arquivo (ou a fonte ser variável com esse peso).
|
|
143
|
+
- Carregue antes de medir e antes do render: `@font-face` com o arquivo. Fonte do sistema não carrega no
|
|
144
|
+
navegador do render.
|
|
145
|
+
- Faltou a fonte pedida: escolha uma substituta pela função (mesma largura, mesmo peso), confira as quebras de
|
|
146
|
+
novo e diga a troca na entrega.
|
|
147
|
+
|
|
148
|
+
## Movimento pelo que a frase quer dizer
|
|
149
|
+
|
|
150
|
+
Escolha o movimento pelo sentido:
|
|
151
|
+
|
|
152
|
+
- **revelar uma conclusão:** a frase monta e a última palavra chega com mais peso;
|
|
153
|
+
- **montar uma ideia:** pedaços que se juntam numa frase só;
|
|
154
|
+
- **trocar uma palavra por outra:** a palavra velha sai inteira e a nova entra no lugar;
|
|
155
|
+
- **pôr duas opções frente a frente:** os dois lados na mesma escala, a diferença em destaque.
|
|
156
|
+
|
|
157
|
+
Fases: um preparo curto, a transformação que dá para entender, uma pausa para ler e a saída, que libera a tela
|
|
158
|
+
para o próximo. Às vezes uma fase é tão curta que nem se nota. Entradas que funcionam: crescer, surgir aos poucos,
|
|
159
|
+
deslizar um pouco. Sem ricochete forte (`elastic`, `back` exagerado) em frase longa ou em informação que precisa
|
|
160
|
+
ser lida na hora.
|
|
161
|
+
|
|
162
|
+
## Sincronia
|
|
163
|
+
|
|
164
|
+
- Pela fala real, com a transcrição do corte (`python3 build.py palavras`). Pode antecipar até 0,15 s. A
|
|
165
|
+
transcrição adianta o começo da palavra até 0,3 s: a palavra que manda (a batida da palavra lilás, o pouso
|
|
166
|
+
de uma palavra grande) entra no tempo medido na onda, com `helpers/palavras_na_onda.py` (`references/corte.md`,
|
|
167
|
+
passo 6), posto em segundos no `projeto.json` ou na cena.
|
|
168
|
+
- Com várias palavras, cada uma entra no tempo dela, não a expressão inteira de uma vez no começo: "GAGUEJEI"
|
|
169
|
+
escrito inteiro 0,36 s antes de ser dito é texto adiantado. A peça `lettering` faz isso sozinha; numa cena
|
|
170
|
+
própria, use o tempo de cada palavra das `palavras` do trecho.
|
|
171
|
+
- Nunca escreva antes o que a pessoa ainda vai desmentir no fim da frase.
|
|
172
|
+
- A negação entra junto ou antes da palavra que ela nega. "PRECISA" sozinho na tela por meio segundo, antes do
|
|
173
|
+
"NÃO", diz o contrário do que ela falou.
|
|
174
|
+
- Efeito de digitação: o tempo de leitura só começa quando a frase está completa.
|
|
175
|
+
|
|
176
|
+
## Encaixe de frase longa
|
|
177
|
+
|
|
178
|
+
Desça a lista de cima para baixo e pare no primeiro passo que fizer a frase caber:
|
|
179
|
+
|
|
180
|
+
1. A conta da largura só vale feita com a letra que vai aparecer: o mesmo arquivo de fonte e o mesmo peso do
|
|
181
|
+
vídeo. Em Python, `ImageFont.truetype(fonte, px).getlength(texto)`. A Montserrat do modelo engana: é variável
|
|
182
|
+
e, se ninguém mexer, é medida no peso 100, bem mais fina que a 900 da tela. Chame antes
|
|
183
|
+
`set_variation_by_axes([900])`; sem isso, uma linha como "EDITA SOZINHO EM 5 MINUTOS" cabe na conta e passa do
|
|
184
|
+
x 940 no render. No navegador, a medida só acontece depois que `document.fonts.ready` resolve, e a timeline é
|
|
185
|
+
montada por último (regra da `hyperframes-core`).
|
|
186
|
+
2. Dê largura ao bloco: no 9:16 são até 800 px (x 140 a 940).
|
|
187
|
+
3. Quebre por unidade de sentido. Não separe artigo do nome, número da unidade, "não" do verbo.
|
|
188
|
+
4. Redistribua as linhas ou divida a frase em dois momentos (duas telas).
|
|
189
|
+
5. Encurte só preservando o conteúdo autorizado. Nome, valor dito, negação e condição nunca somem.
|
|
190
|
+
6. Só então diminua a letra. Abaixo do tamanho da legenda (60 px no 9:16) já não funciona como lettering.
|
|
191
|
+
7. Confira máscara, contorno e sombra com a linha mais alta, inclusive com acento em cima (Á, É, Ã) e cedilha
|
|
192
|
+
embaixo (Ç). Nada mordido.
|
|
193
|
+
|
|
194
|
+
## Animação letra por letra
|
|
195
|
+
|
|
196
|
+
- Separe por caractere que se vê, não por código. Normalize e use o `Intl.Segmenter`. `[...texto]` separa o til
|
|
197
|
+
do A quando o texto veio decomposto, e o acento some ou pula:
|
|
198
|
+
|
|
199
|
+
```js
|
|
200
|
+
const seg = new Intl.Segmenter("pt", { granularity: "grapheme" });
|
|
201
|
+
const letras = [...seg.segment(texto.normalize("NFC"))].map(s => s.segment); // "NÃO" vira N, Ã, O
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
- Espaços e quebras não podem sumir. Ponha cada palavra num `<span>` com `white-space: nowrap` e as letras dentro
|
|
205
|
+
dela; entre as palavras, o espaço normal.
|
|
206
|
+
- Ancoragem: monte a linha inteira com todas as letras já no lugar final, invisíveis (`opacity: 0`), e só revele.
|
|
207
|
+
Linha que se recentraliza a cada letra nova faz o título andar de lado.
|
|
208
|
+
- Troca de palavra: nenhum quadro no meio da troca pode formar outra palavra, esconder uma negação ou mostrar um
|
|
209
|
+
valor errado. Na dúvida, troque a palavra inteira.
|
|
210
|
+
|
|
211
|
+
## Texto atrás do corpo
|
|
212
|
+
|
|
213
|
+
Letra passando por trás da pessoa só com o recorte aprovado no teste (`references/enquadramento.md`, "Portão do
|
|
214
|
+
recorte") e alinhado com o vídeo. Sem esse recorte, ponha o texto num espaço vazio ao lado da pessoa ou encostado
|
|
215
|
+
em algo que já está no cenário, e não diga na entrega que tirou o fundo. A palavra escondida em parte tem que continuar
|
|
216
|
+
legível.
|
|
217
|
+
|
|
218
|
+
## Teste de fundo
|
|
219
|
+
|
|
220
|
+
Confira o texto em cima da parte mais clara e da parte mais cheia de detalhe que passam de verdade naquele
|
|
221
|
+
trecho, não num quadro qualquer. Se some em alguma, mais contorno, sombra ou outro lugar.
|
|
222
|
+
|
|
223
|
+
## Revisão de hierarquia
|
|
224
|
+
|
|
225
|
+
A queixa costuma vir assim: "tá tudo do mesmo tamanho", "tá pesado", "não sei pra onde olhar". O conserto é por
|
|
226
|
+
papel, não por gosto:
|
|
227
|
+
|
|
228
|
+
- Todo texto da tela ganha um papel: é a legenda da fala, o título que manda naquela tela, um apoio menor ou a
|
|
229
|
+
chamada do fim. O que não tem papel sai, e o que só repete a legenda também.
|
|
230
|
+
- Palavra nova não entra nessa revisão. Na tela fica o que a pessoa falou ou o que ela já aprovou por escrito.
|
|
231
|
+
- Cada papel tem um tamanho, um peso e um lugar, e isso vale do primeiro ao último segundo. Título enorme no gancho
|
|
232
|
+
e miúdo no meio do vídeo é justamente o "tudo igual" ao contrário.
|
|
233
|
+
- Fonte e cores aprovadas ficam, a não ser que atrapalhem a leitura. Fala, cortes e oferta nem entram na conversa.
|
|
234
|
+
- Para ela decidir, mande o mesmo trecho duas vezes, como estava e como ficou, com três ou quatro linhas do que
|
|
235
|
+
mudou. Por exemplo: "o 'EDITADO COM IA' agora é o único texto grande; o 'sem abrir o CapCut' desceu para apoio,
|
|
236
|
+
menor, embaixo dele".
|
|
237
|
+
|
|
238
|
+
## Conferir
|
|
239
|
+
|
|
240
|
+
No arquivo exportado, olhe três coisas: a frase mais comprida, toda a acentuação e a animação mais trabalhosa.
|
|
241
|
+
Está certo quando:
|
|
242
|
+
|
|
243
|
+
- dá para perceber o que manda numa tela de celular;
|
|
244
|
+
- o texto inteiro se lê sem pausar o vídeo;
|
|
245
|
+
- nenhuma letra sai cortada por máscara, borda ou outra peça;
|
|
246
|
+
- o texto diz o que a pessoa disse, na hora em que ela disse.
|
|
247
|
+
|
|
248
|
+
## Na entrega
|
|
249
|
+
|
|
250
|
+
Registre as fontes usadas: família, peso, arquivo (caminho relativo ao projeto), origem e licença, e qualquer
|
|
251
|
+
substituição. A fonte só vai junto com os arquivos entregues se a licença deixar redistribuir; fonte comercial
|
|
252
|
+
instalada no computador não vai.
|