Render — música, som, legendas, exportação final
Entrada: videos/<video>/ com um storyboard.json aprovado (ajustado à narração: possui audio
e timing) e um audio/voice-script.json aprovado. Saída:
audio/music.wav música escolhida ou gerada
audio/mix.wav trilha sonora final (voz + música com ducking + SFX), -14 LUFS
audio/mix.json cada evento sonoro (cena, cue, arquivo, tempo) para verificação
render/final.mp4 1080x1920 (por formato), 30 fps, H.264 + AAC
render/cover.png capa / thumbnail em resolução total
render/qc.json relatório de verificação de qualidade
Esta etapa não altera visuais ou palavras. Animação ou temporização errada → skills de storyboard / narração. Grátis por padrão: música de biblioteca ou gerada por código, efeitos sonoros gerados por código. Música paga (geração por IA) somente se o usuário solicitar ou aprovar um orçamento.
Passo 1 — Música
- Leia o
music.mood/notesdo storyboard e a duração do vídeo. - Procure em
studio/library/music/(index.jsonlista faixas com tags de clima, bpm, licença). Escolha a melhor correspondência; se nenhuma servir, informe. - Sem correspondência → gere o fallback gratuito, com o "drop" no início da cena de revelação
(tempo de início da cena — calcule a partir de durações/transições):
node studio/scripts/make-music.mjs --out videos/<video>/audio/music.wav --duration <s> --mood upbeat|calm|cinematic|tense --bpm <n> --drop <s> [--silence <de>-<até>](tense: tom menor, pulsação de batimento cardíaco, final não resolvido;--silencesilencia uma janela antes de um som de revelação — no clima tenso, um relógio o segue). Vídeo do universo: sigauniverse.json→music/sfx. Faixas da biblioteca: copie/converta paraaudio/music.wav; cortes, fades e ducking ocorrem na mixagem. - Registre em
storyboard.json→music.file,music.source(faixa + licença, ou "code-generated"), opcionalmusic.db(padrão -16 dB antes do ducking).
Passo 2 — Efeitos sonoros
As cues já estão em cada cena no sfx (palavras simples, ancoradas a frames ou palavras faladas
pela etapa de narração). O mixer mapeia palavras → sons via studio/library/sfx/index.json
(gerado por node studio/scripts/make-sfx.mjs; sons personalizados vão em custom, verificados
primeiro). repeat + every tocam uma cue várias vezes; syncEnd: true a coloca no final da
cena; risers terminam em sua cue. Whooshes de transição são opcionais (--auto-whoosh) — o
usuário prefere som contido: apenas momentos marcantes (≈ no máximo 1 cue a cada 2 s, nenhum na
maioria das transições). Se um storyboard tiver muito mais cues do que isso, reduza-as aos
momentos chave antes de mixar e informe. Corrija quaisquer linhas "Nenhum som correspondido" do
mixer adicionando palavras-chave ou um som personalizado — nunca alterando o design do storyboard.
Passo 3 — Mixagem
node studio/scripts/mix.mjs videos/<video> (--dry para visualizar primeiro a contagem de eventos)
A voz fica no topo; a música sofre ducking pela voz (sidechain) e fade no final; SFX em
-12 dB (--sfx-db, ou storyboard.sfxDb); master limitado e normalizado para -14 LUFS / -1,5 dBTP. Define
storyboard.finalAudio. Reexecute após qualquer alteração de áudio.
Passo 4 — Legendas
Ativadas por padrão para formatos sociais. Em storyboard.json:
"captions": { "enabled": true, "y": 83, "size": 50, "skipLines": ["L11"] }
- Frases (≤ 4 palavras, equilibradas, divididas em pausas) vêm das marcações de narração; a palavra falada é destacada na cor de destaque da marca.
skipLines: linhas de narração cujas palavras já estão na tela (números de telefone, URLs).- Por cena:
captionY(% do frame) para movê-las,captions: falsepara ocultá-las onde as mesmas palavras estão na tela (ex.: um terço inferior com nome). - Mantenha-as dentro da zona segura (padrão 83%) e longe de elementos importantes do design.
Verifique com uma folha de contato (legendas aparecem nos frames onde alguém fala):
node studio/scripts/render.mjs videos/<video>/storyboard.json --sheet --scale 0.25 --out <scratchpad>/captions-sheet.png
Examine uma vez; corrija colisões com captionY / captions: false.
Passo 5 — Renderização final, capa, QC
node studio/scripts/render.mjs videos/<video>/storyboard.json --final
node studio/scripts/render.mjs videos/<video>/storyboard.json --cover
node studio/scripts/qc.mjs videos/<video>
O QC deve passar: resolução, taxa de quadros, codecs, duração = storyboard, loudness -14 ±1,5 LUFS.
Avisos (pico verdadeiro, silêncios, frames pretos) → explique ou corrija. Não assista ao MP4;
envie render/final.mp4 (e a capa) para o usuário com o resumo do QC e o que está na
mixagem (fonte da música, número de eventos sonoros, legendas ativadas/desativadas).
Passo 6 — Aprovação
Usuário satisfeito → "status": "final" em storyboard.json → render, concluído. Alterações:
ajustes de música/som/legendas → Passos 1–5 aqui; alterações visuais ou de temporização →
skill de storyboard / narração, depois reexecute esta etapa.