Kit para o Claude Code · voz local · sem API paga

Vídeo explicativo sem rosto, do link ao 1080p

Você passa o link de uma ferramenta. O agente pesquisa, escreve o roteiro, você aprova, e cada frase vira uma cena com print real, imagem 3D e legenda palavra por palavra.

Banner do video-sem-rosto: vídeo explicativo sem câmera e sem avatar
Em resumo

O video-sem-rosto é um kit (uma "skill") que ensina o Claude Code a fazer vídeos explicativos na horizontal sem gravar nada: sem câmera, sem avatar. Serve para quem quer explicar uma ferramenta, um repositório ou uma novidade em vídeo sem aparecer e sem pagar serviço de voz. A voz é gerada no seu computador com uma voz clonada, e as cenas mostram a página real do site, imagens 3D e legenda sincronizada. Para usar, você precisa do Claude Code, ffmpeg, Python e do inemavox (que faz a voz e a transcrição) rodando na máquina.

O que é

Um estúdio de motion design que o agente opera

Cada cena é uma página HTML animada no tempo exato da fala. O Chromium avança quadro a quadro e o ffmpeg monta o vídeo.

As etapas do kit: pesquisa, roteiro aprovado, voz local, prints reais, render 1080p60 e QC

🎙️ Voz local, conferida

Chatterbox gera cada frase com a voz clonada; o Whisper local ouve, compara com o roteiro e manda gerar de novo a frase que saiu errada. Nenhuma API paga.

🖼️ Print real com zoom

O capture.py abre a página, acha o texto que a voz cita e devolve a posição dele, para o zoom e o anel caírem exatamente ali.

✅ Portões de qualidade

Nada é gerado antes do roteiro aprovado. No fim, o qc.py confere 1920x1080, 60 fps, bitrate, −14 LUFS e quadros pretos, e monta uma folha para olhar.

Como funciona

Do link ao vídeo, em 8 etapas

Voz, imagens e prints rodam em paralelo. As cenas são escritas lendo o tempo de cada palavra no words.json.

Pesquisa da fonte oficial→ Roteiro→ Você aprova→ Voz + tempo por palavra→ Imagens 3D e prints→ Cenas (job.py)→ Render 1080p60→ QC

3 looks

reel (papel ↔ preto, chips, 3D), cinema (imagem real primeiro, letterbox) e ledger (notas de versão, contadores). Alterne entre vídeos.

Tema INEMA

Preto #0c0c10, papel claro, amarelo #FACC15, títulos Sora e corpo Inter, aplicados nos três looks. FV_THEME=original volta à paleta creme/laranja.

Som limpo

Só a voz, a −14 LUFS, e uma trilha opcional baixa. Sem whoosh nos cortes (FV_WHOOSH=1 liga, se quiser).

Pré-requisitos

O que precisa estar na máquina

O setup.sh confere tudo e para com a mensagem do que falta.

Python 3 + ffmpeg

Motor das cenas e encode do vídeo.

# Ubuntu
sudo apt install python3-venv ffmpeg

inemavox (voz e transcrição)

Projeto aberto do INEMA que traz o worker do Chatterbox e um venv com faster-whisper. O kit usa os dois por caminho (INEMAVOX_DIR muda o local).

git clone https://github.com/inematds/inemavox ~/projetos/inemavox
cd ~/projetos/inemavox && python3 -m venv venv
venv/bin/pip install faster-whisper soundfile numpy

Chatterbox (gera a voz)

Modelo aberto de voz que clona a voz de um áudio curto. Roda num ambiente conda próprio (CHATTERBOX_PYTHON muda o caminho).

# Miniconda (se não tiver): https://docs.anaconda.com/miniconda/ — instala em ~/miniconda3
# outro lugar: export CHATTERBOX_PYTHON=.../envs/chatterbox/bin/python3
conda create -n chatterbox python=3.11 -y
~/miniconda3/envs/chatterbox/bin/pip install chatterbox-tts soundfile

Sua voz de referência

10 segundos de fala limpa, sem música, em .wav 24 kHz mono. Grave com o celular e converta:

ffmpeg -i gravacao.m4a -ss 2 -t 10 -ac 1 -ar 24000 ~/minha-voz.wav
echo 'export FV_VOICE=~/minha-voz.wav' >> ~/.bashrc && source ~/.bashrc

Claude Code

É quem segue o SKILL.md: pesquisa, escreve roteiro e cenas, roda os scripts.

claude

Codex CLI (opcional)

Gera as imagens 3D pela assinatura do ChatGPT (sem API): npm i -g @openai/codex e codex login. Sem ele: FV_IMG=flux se você tiver um servidor flux2-klein local, ou faça o vídeo só com prints, logos e ícones.

codex login

GPU (recomendado)

Voz e Whisper rodam bem mais rápido em GPU; os dois caem para CPU se precisar.

nvidia-smi

Termos que aparecem no guia

Whisper: modelo que transcreve fala; aqui ele ouve cada frase para medir se saiu certa e marcar o tempo de cada palavra. LUFS: medida de volume percebido; −14 é o padrão do YouTube. Folha de contato (stills): uma imagem com vários quadros do vídeo, para conferir tudo de uma vez. Look: o estilo visual do vídeo — reel (padrão), cinema (imagem real em tela cheia, faixas pretas de cinema) ou ledger (cara de notas de versão); escolha com Video(job, look="cinema"). flux2-klein: gerador de imagem que roda local; o kit chama em localhost:8000 (FV_FLUX_URL) só se você tiver esse servidor.

Na 1ª execução o Whisper large-v3 (~3 GB) e o Chatterbox baixam os pesos dos modelos. Se o Playwright reclamar de biblioteca do sistema: sudo .venv/bin/python -m playwright install-deps chromium.

Guia de uso · passo a passo

Instale uma vez, peça quantas quiser

Use TMPDIR=$(mktemp -d /tmp/fv.XXXX) na frente do render e da captura: o Chromium aborta se o caminho temporário for longo demais.

1

Clone e instale

Cria o .venv do projeto (Playwright + Pillow), confere voz e Whisper e liga a skill em ~/.claude/skills/video-sem-rosto.

git clone https://github.com/inematds/video-sem-rosto ~/projetos/video-sem-rosto
cd ~/projetos/video-sem-rosto && bash setup.sh   # tem que terminar com SELFTEST PASS
2

Ajuste o perfil

O PROFILE.md guarda voz, chamada para ação, visual e palavras proibidas; a skill lê antes de cada vídeo. Ele vem com o perfil do INEMA (chamada para o inema.club, publicação pelo yt-pubx, avisos no bot): troque nome, chamada, canal e regras pelos seus. Os passos de publicação do SKILL.md que citam ferramentas do INEMA são opcionais.

nano PROFILE.md   # seu nome, sua voz, sua chamada (~3:00 e no fim), seu canal
3

Peça o vídeo no Claude Code

O agente pesquisa a fonte oficial, escreve script.txt e o roteiro com tempos, e para esperando sua aprovação. Depois do seu "ok", ele mesmo roda os passos 4 a 7; os comandos abaixo servem para rodar à mão ou entender o que acontece.

faz um vídeo sem rosto sobre https://github.com/dono/projeto — uns 8 minutos, me mostra o roteiro antes
4

À mão: pasta do vídeo e voz com tempo por palavra

Para rodar sem o agente, comece pelo exemplo de ~40 s (ele traz a marca INEMA no texto das cenas: troque no job.py). O tts.py lê $P/script.txt e gera vo.mp3, words.json e vo_qc.json (semelhança de cada frase).

P=~/videos/teste; mkdir -p $P/{img,cap}
cp templates/exemplo_30s.py $P/job.py && cp templates/exemplo_30s.txt $P/script.txt
python3 scripts/tts.py $P   # usa FV_VOICE; FV_LANG=pt
5

Imagens 3D e prints (em paralelo)

c_ = fundo claro, d_ = escuro; um objeto por imagem. O print devolve um .json com a caixa de cada texto pedido.

python3 scripts/images.py $P/img d_clap="a film clapperboard beside an empty tripod" d_monitor="a widescreen monitor with a play button"
TMPDIR=$(mktemp -d /tmp/fv.XXXX) .venv/bin/python scripts/capture.py https://github.com/inematds/yt-pubx $P/cap/gh.png "README"
6

Cenas, conferência e render

O job.py do exemplo usa img/d_clap.png, img/d_monitor.png e cap/gh.png (gerados no passo 5). Os tempos das cenas são os da voz do exemplo: com a sua voz, ajuste os v.scene(início, fim, …) lendo o words.json. Vídeo longo: templates/job_full_template.py. Primeiro a folha de cenas, depois o render.

TMPDIR=$(mktemp -d /tmp/fv.XXXX) .venv/bin/python $P/job.py stills   # out/stills.jpg
TMPDIR=$(mktemp -d /tmp/fv.XXXX) .venv/bin/python $P/job.py          # out/video-sem-rosto-teste.mp4
7

QC

Confere tamanho, fps, bitrate, volume e quadros pretos; sai com erro se algo reprovar e grava uma folha de 16 quadros.

python3 scripts/qc.py $P/out/video-sem-rosto-teste.mp4
Exemplos

Dois vídeos feitos com o kit, em dois looks

Voz local, tema INEMA, 1080p60, −14,3 LUFS. Baixe os dois em 1080p60 na release 1.0.1.

Exemplo 1 · look reel (padrão): o próprio kit em ~40 s — papel ↔ preto, render 3D, chips e legenda karaokê.
Exemplo 2 · look ledger: o yt-pubx em ~35 s — terminal, lista de mudanças, passos numerados e legenda de terminal.

Abaixo: a folha de contato e um quadro do exemplo 1.

Folha com 16 quadros do vídeo de teste
Folha de contato gerada pelo qc.py: papel ↔ preto, cartão amarelo, print real, legenda karaokê.
Quadro do vídeo de teste com chips Título, Print real, Imagem 3D e Legenda
Cena "Cada frase, uma cena": cada etiqueta entra no tempo da palavra falada.
Roadmap

O que vem depois

O kit já faz o vídeo inteiro. Os próximos passos são de integração com o que o INEMA já usa.

1.0 · feito
Kit funcionandoVoz local conferida, tema INEMA, 3 looks, QC, exemplo de 40 s, setup com autoteste.
próximo
Thumbs e descrição num scriptHoje o agente faz as thumbs e a descrição com capítulos seguindo o SKILL.md; o próximo passo é um script que faz isso sozinho.
depois
EN/ES num comandoTraduzir o script.txt, gerar a voz em FV_LANG=en|es e reaproveitar as cenas.