Que fait Duo sketch reel (Nerd + Claude) ?
Un sketch 3D où le Nerd panique et Claude (le robot orange) répond avec un ton laconique. Tout est
procédural dans Blender : le décor, les deux rigs, le jeu d'acteur, les lumières, les caméras, les moniteurs, les superpositions, la musique et les effets sonores sont construits à partir
d'un seul fichier par épisode, storyboard.json. Un nouvel épisode est des données, pas du code. Aucune génération d'image ou de vidéo n'est utilisée.
Un épisode est un dossier : <n'importe_quoi>/<AAAA-MM-JJ>_<slug>/ contenant storyboard.json et research.md. Le pipeline écrit tout le reste dedans (assets/, project/, renders/, final.mp4, cover.png, qa/).
Deux épisodes terminés se trouvent dans examples/ du dépôt : copiez-en un pour commencer.
Workflow (dans l'ordre, ne sautez pas)
- Sujet (5 min). Une difficulté relatable du quotidien d'un développeur avec l'IA et UNE astuce qu'un développeur peut utiliser aujourd'hui. L'humour porte sur ce que le spectateur fait avec son IA, pas sur un outil. Règles et banque d'idées :
references/retention.md. - Recherche →
research.md: chaque fait à l'écran / dans la voix / légende avec URL + date vérifiées, sources primaires (docs officielles, README, code source). Une section « Fiction » séparée pour les éléments inventés du sketch (temps, nombres, noms). Abandonnez ce que vous ne pouvez pas vérifier et mentionnez-le. - Script + storyboard →
storyboard.json(copiez un exemple et réécrivez-le). Schéma et vocabulaire :references/storyboard.md. Durée cible 30-40 s, 10-14 lignes, premier mot ≤ 0,5 s, un plan toutes les 1,5-3 s, le Nerd ouvre, Claude ferme, la dernière image renvoie à la première. - Maquette libre (macOS) :
pipeline.sh <episode> --say stills(voix système, sans crédits). Regardezrenders/stills/sheet.jpg(une image par fin de mesure). Corrigez les collisions de cadrage/superposition, relancez. Pas sur macOS ? Ignorez--say: enregistrez ou générez les prises d'abord (étape 5), puis lancezstills. - Voix. Un fichier audio par ligne dans
assets/audio/dialogue_raw/<id de la mesure>.mp3(L01.mp3, ...). Les épisodes de référence utilisent ElevenLabseleven_v4avec deux voix de bibliothèque – Nerd = "Quinn - Soft Nerd Boy", Claude = "Sarcastic Nigel" – et des balises audio dans chaque mesuretts(p. ex.[deadpan] It was ugly.). Avec le connecteur ElevenLabs dans Claude : estimez d'abord une ligne (≈ 1 crédit par caractère, balises incluses), puis une génération par ligne, et téléchargez chaque prise depuis soncontent_url. Un épisode de 11 à 14 lignes représente ≈ 700 à 900 crédits. Vos propres enregistrements fonctionnent aussi : mêmes noms de fichiers. - Construction réelle + images clés :
pipeline.sh <episode> stills.project/whisper_check.txtliste le script vs l'audible par ligne (ratio < 0,8 = écoutez-la). Les prises sont plus longues que la maquettesay: vérifiez à nouveau la feuille. - Final :
pipeline.sh <episode> final(16 échantillons, 3 workers ≈ 3 s par image sur un Mac M-series : un sketch de 38 s ≈ 1 h ; lancez-le en arrière-plan). Il rendfinal.mp4, la variante B-hookfinal_b.mp4,cover.png, et exécuteqa.py→qa/report.md(doit indiquer Bloquant : aucun).
Règles strictes
- Personnages : ne pas redessiner le Nerd ou Claude (
engine/scene/nerd.py,mascot.py). Claude n'a pas de bouche : il « parle » par compression du corps, rebonds, yeux et bras. - Un sketch peut inventer son histoire (c'est de la comédie), jamais une fonctionnalité de produit, un nombre, un benchmark ou une citation.
- Les effets (tampons, clés, coches) apparaissent 0,2-0,3 s avant le mot qu'ils illustrent, jamais sur le dernier mot.
- Maquette libre avant les voix payantes ; images clés avant le rendu final.
Fichiers
pipeline.sh <episode> [--say] [build|stills|draft|final]engine/scene/côté Blender :build_scene.py(entrée),animate.py(jeu/lumières/caméras depuis le storyboard),env.pydécor,nerd.py,mascot.py,lights.py,tl.py(ancres, partagées avec les scripts).engine/scripts/:build_timeline.py(prises → timeline + mots whisper + lipsync),make_screens.py(modèles de moniteurs),make_overlay.py(accroche, sous-titres, éléments, carton titre, captions.srt),make_audio.py+synth.py(musique/effets sonores),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.- Outils et chemins (variables d'environnement, macOS par défaut) :
BLENDER(binaire Blender 5.x),DUO_PYTHON(un Python avec numpy, scipy, soundfile, pillow ; par défaut~/.venvs/duo-reel/bin/python),WHISPER_MODEL(modèle whisper.cpp, par défaut~/whisper-models/ggml-medium.en.bin),whisper-clietffmpegdans le PATH, policesDUO_FONT_DISPLAY/DUO_FONT_MONO/DUO_FONT_SANS/DUO_FONT_EMOJI. references/storyboard.md(schéma, chaque préréglage),references/retention.md(accroche/structure/sujets),references/lessons.md(choses qui ont mal tourné une fois).