Duo sketch reel (Nerd + Claude)
Um sketch 3D onde o Nerd entra em pânico e Claude (o robô laranja) responde com tom seco. Tudo é
procedural no Blender: o cenário, ambos os rigs, atuação, luzes, câmeras, monitores, sobreposição, trilha sonora e efeitos sonoros são construídos a partir de um arquivo por episódio, storyboard.json. Um novo episódio é dados, não código. Nenhuma imagem ou vídeo gerado em nenhum lugar.
Um episódio é uma pasta: <qualquer_coisa>/<YYYY-MM-DD>_<slug>/ com storyboard.json e research.md. O pipeline escreve todo o resto dentro dela (assets/, project/, renders/, final.mp4, cover.png, qa/). Dois episódios finalizados estão em examples/ do repositório: copie um para começar.
Fluxo de trabalho (em ordem, não pule)
- Tópico (5 min). Uma dor real de dev/AI e UMA dica que um desenvolvedor pode usar hoje. A piada é sobre o que o espectador faz com sua IA, não sobre uma ferramenta. Regras e banco de ideias:
references/retention.md. - Pesquisa →
research.md: cada fato na tela / na voz / legenda com URL + data verificada, fontes primárias (documentos oficiais, README, código-fonte). Uma seção separada "Ficção" para as partes inventadas da história do sketch (tempos, contagens, nomes). Descarte o que não puder verificar e diga isso. - Roteiro + storyboard →
storyboard.json(copie um exemplo e reescreva). Esquema e vocabulário:references/storyboard.md. Alvo de 30-40 s, 10-14 linhas, primeira palavra ≤ 0,5 s, um corte a cada 1,5-3 s, Nerd abre, Claude fecha, o último quadro corta de volta para o primeiro. - Prévia gratuita (macOS):
pipeline.sh <episodio> --say stills(vozes do sistema, sem créditos). Vejarenders/stills/sheet.jpg(um quadro por final de batida). Corrija colisões de enquadramento/sobreposição, execute novamente. Não está no macOS? Pule--say: grave ou gere as tomadas primeiro (passo 5), depois executestills. - Vozes. Um arquivo de áudio por linha em
assets/audio/dialogue_raw/<id da batida>.mp3(L01.mp3, ...). Os episódios de referência usam ElevenLabseleven_v4com duas vozes da biblioteca – Nerd = "Quinn - Soft Nerd Boy", Claude = "Sarcastic Nigel" – e tags de áudio em cada batidatts(ex.:[deadpan] It was ugly.). Com o conector ElevenLabs no Claude: estime uma linha primeiro (≈ 1 crédito por caractere incluindo tags), depois uma geração por linha e baixe cada tomada de seucontent_url. Um episódio de 11-14 linhas é ≈ 700-900 créditos. Suas próprias gravações funcionam também: mesmos nomes de arquivo. - Build real + stills:
pipeline.sh <episodio> stills.project/whisper_check.txtlista roteiro vs ouvido por linha (proporção < 0,8 = ouça). As tomadas são mais longas que a préviasay: verifique a folha novamente. - Final:
pipeline.sh <episodio> final(16 amostras, 3 workers ≈ 3 s por quadro em um Mac com chip M: um reel de 38 s ≈ 1 h; execute em segundo plano). Ele renderizafinal.mp4, a variante B-hookfinal_b.mp4,cover.png, e executaqa.py→qa/report.md(deve dizer Bloqueante: nenhum).
Regras rígidas
- Personagens: não redesenhe o Nerd ou o Claude (
engine/scene/nerd.py,mascot.py). Claude não tem boca: ele "fala" com compressão do corpo, saltos, olhos e braços. - Um sketch pode inventar sua história (isso é comédia), nunca um recurso de produto, número, benchmark ou citação.
- Pagamentos (carimbos, chaves, ticks) vão 0,2-0,3 s antes da palavra que ilustram, nunca na última palavra.
- Prévia gratuita antes de vozes pagas; stills antes da renderização final.
Arquivos
pipeline.sh <episodio> [--say] [build|stills|draft|final]engine/scene/Lado Blender:build_scene.py(entrada),animate.py(atuação/luzes/câmeras a partir do storyboard),env.pycenário,nerd.py,mascot.py,lights.py,tl.py(âncoras, compartilhado com scripts).engine/scripts/:build_timeline.py(tomadas → timeline + palavras whisper + lipsync),make_screens.py(modelos de monitor),make_overlay.py(hook, legendas, itens, cartão de título, captions.srt),make_audio.py+synth.py(trilha/efeitos),master_audio.py(-14 LUFS),stills.py,draft.sh,render_final.sh,encode.sh,make_cover.py,cover_title.py,qa.py,make_textures.py.- Ferramentas e caminhos (variáveis de ambiente, padrões macOS):
BLENDER(Blender 5.x binário),DUO_PYTHON(um Python com numpy, scipy, soundfile, pillow; padrão~/.venvs/duo-reel/bin/python),WHISPER_MODEL(modelo whisper.cpp, padrão~/whisper-models/ggml-medium.en.bin),whisper-clieffmpegno PATH, fontesDUO_FONT_DISPLAY/DUO_FONT_MONO/DUO_FONT_SANS/DUO_FONT_EMOJI. references/storyboard.md(esquema, cada predefinição),references/retention.md(gancho/estrutura/tópicos),references/lessons.md(coisas que deram errado uma vez).