Communitygithub.com

EssouliAnas/court-métrage-3d

Créez un court métrage realistic explainer 3D (30-60 s, vertical 1080x1920) dans Blender, avec un humain réaliste sur fond neutre et un travelling à l'intérieur du corps. Demande d'abord la voix (ElevenLabs, clone de votre voix, votre propre enregistrement ou uniquement des sous-titres), l'apparence, le personnage principal (fichier riggé fourni, créé dans Blender, téléchargé gratuitement ou aucun), le moteur de rendu et la durée.

Qu'est-ce que court-métrage-3d ?

Cette compétence permet de générer automatiquement un court métrage explainer 3D réaliste d'une durée de 30 à 60 secondes, au format vertical 1080x1920, entièrement réalisé dans Blender à l'aide de scripts Python. Contrairement aux modèles d'IA générative d'images ou de vidéos, chaque image est un rendu réel de Blender, garantissant une qualité photoréaliste et un contrôle précis sur la scène. La compétence est conçue pour fonctionner avec Blender 5.x sur Windows et nécessite une installation préalable de dépendances Python (numpy, opencv-python-headless, pillow) et ffmpeg. Le processus débute par une série de questions interactives en trois rounds pour déterminer la voix (via ElevenLabs ou un enregistrement personnel), le style visuel (fond de studio, arrière-plans photo, personnage principal personnalisé), le moteur de rendu (EEVEE ou Cycles) et la durée. Le script généré est fact-checké et original, et la scène 3D est construite automatiquement à partir de références mesurées image par image.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/EssouliAnas/blender-3d-short/tree/HEAD

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Court métrage 3D réaliste (Blender + Python)

Chaque image est un rendu Blender réel d'une scène construite par Claude en Python. Aucun modèle IA d'image ou de vidéo. Résultat final : 1080×1920, 30 i/s, H.264 limité à 30 Mb/s. Chemins : <skill> = ce dossier. Les épisodes sont stockés dans <projet>/blender-shorts/<slug>/, les ressources téléchargées dans <projet>/blender-shorts/assets/, les choix de chaîne dans <projet>/blender-shorts/brand.json. Exécutez les scripts avec python <skill>/scripts/<nom>.py.

À lire en premier : references/style.md (les règles), references/traps.md (avant d'inventer une correction).

Installation (une fois par PC)

  • Blender 5.x (trouvé automatiquement dans Program Files ; sinon définir BLENDER=<chemin_vers_blender.exe>).
  • python -m pip install numpy opencv-python-headless pillow ; ffmpeg dans le PATH.
  • Vérifier que le pipeline fonctionne : copier examples/test-cell/ vers blender-shorts/test-cell/, puis build, still, frames, finish. Sur un RTX 3080 Laptop, EEVEE rend rapidement ses 90 images en 1080×1920 en environ 2 minutes.

Étape 0 : questions préliminaires (toujours, avant tout travail)

Demander avec l'outil AskUserQuestion, en deux séries de quatre questions maximum, puis une troisième série qui dépend de la réponse vocale. Si blender-shorts/brand.json existe, poser d'abord une question : « Mêmes réglages que la dernière fois ? » (les afficher en une ligne) avec « Oui » / « Modifier certains ». En cas de « Oui », passer à la partie thématique de la série 3. Option recommandée en premier. Enregistrer chaque réponse dans brand.json (pour la chaîne) et dans le fichier episode.json de l'épisode.

Série 1 : quoi et comment ça parle

  1. Sujet : « Suggérez-moi 3 sujets » / « J'en ai un » (ils le tapent sous Autre). Suggestions : questions sur le corps ou le fonctionnement des choses qui sont des images, vérifiées sur YouTube pour l'originalité de l'angle.
  2. Voix :
    • Voix ElevenLabs (recommandée) : une voix standard, générée à partir du script avec les timings exacts des mots.
    • Cloner ma voix (ElevenLabs) : ils téléversent 1 à 3 min de parole propre une fois ; chaque épisode parle ensuite avec leur voix. Uniquement leur propre voix, ou une voix pour laquelle ils ont un consentement écrit.
    • Je l'enregistrerai moi-même : ils enregistrent le script ; Claude le nettoie, trouve les timings des mots et construit l'image en conséquence.
    • Pas de voix, uniquement des sous-titres : le script est chronométré à 2,8 mots/s constants, les sous-titres sont incrustés et un fichier captions.srt leur permet d'enregistrer ou d'ajouter une voix plus tard dans leur éditeur avec exactement ce timing.
  3. Durée : 30 s (recommandée pour une première) / 45 s / 60 s. À 2,8 mots/s, cela donne ~80 / 120 / 165 mots.
  4. Vidéos de référence : « Non, utiliser les règles de style intégrées » (recommandé) / « Oui, je vais donner des fichiers ou des liens » (mesuré avec measure.py, étude privée uniquement).

Série 2 : l'apparence

  1. Apparence : Fond de studio (recommandé : une couleur signature derrière tout, le look du genre) / Fond photo réel (stade, rue, ciel derrière la 3D) / Mix (fond, avec des lieux réels pour les moments « où »).
  2. Couleur de fond (sauter si pas de fond) : Pêche #F2D7C9 (la nôtre jusqu'à présent) / Menthe #CFE8DF / Bleu marine foncé #1F2A44 / Personnalisée (hex). Ne jamais utiliser la couleur de la chaîne de référence.
  3. Personnage principal : « Y a-t-il un personnage principal ? » (references/characters.md)
    • Je fournirai un personnage riggé : leur fichier .blend / .fbx / .glb (Mixamo, Character Creator, un magasin).
    • Créez-en un pour moi (recommandé s'ils n'en ont pas) : construit dans Blender avec MPFB, pas de compte, notre logo sur le t-shirt.
    • Télécharger un personnage riggé gratuit : Claude propose 2-3 candidats (source, licence, aspect) ; sur les sites nécessitant un compte (Mixamo, Renderpeople, Sketchfab), l'utilisateur le télécharge et donne le chemin.
    • Pas de personnage : uniquement des objets, des parties du corps et des lieux. Une fois qu'un personnage principal existe (assets/host/host.blend), cette question devient « Utiliser à nouveau ? ».
  4. Moteur de rendu :
    • Auto (recommandé) : EEVEE rapide partout, Cycles rapide uniquement pour les plans qui échouent au jugement sur les gros plans de peau, les nuages, le verre ou les cheveux.
    • EEVEE rapide uniquement : le plus rapide, ~1 s par image.
    • Cycles rapide uniquement : environ 2× plus lent, lumière plus douce et naturelle.
    • Haute qualité : les préréglages high, environ 2-3× plus lents que rapide.

Série 3 : dépend de la réponse vocale

  • ElevenLabs ou clonage : le point clé. Vérifier la présence de ELEVENLABS_API_KEY= dans un fichier .env du projet ou au-dessus (ne jamais l'afficher). Si elle existe, dire « J'ai trouvé votre clé ElevenLabs » et ne pas demander. Sinon, demander : « Ajoutez votre clé : collez-la ici et je l'enregistrerai dans .env, ou ajoutez vous-même la ligne ELEVENLABS_API_KEY=... dans .env (elle reste hors du chat) ». Enregistrer une clé collée dans <projet>/.env uniquement, ne jamais la répéter, ne jamais la mettre dans un autre fichier, commit ou journal.
  • ElevenLabs : Voix : Narrateur calme (id par défaut dans sound.py) / « Choisir dans ma bibliothèque ElevenLabs » (lister avec GET /v1/voices, afficher uniquement les noms) / ID de voix (ils le tapent). Modèle vocal : eleven_multilingual_v2 (recommandé : stable, meilleurs timings de mots) / eleven_v3 (plus expressif, moins prévisible).
  • Clonage : demander les fichiers d'échantillon (chemins), puis sound.py <ep> clone <fichiers> --name "<nom> voix" ; l'ID de la voix est sauvegardé et réutilisé pour chaque épisode suivant.
  • Propre enregistrement : leur dire d'attendre que le script soit approuvé, puis de l'enregistrer en une prise, téléphone à bout de bras, pièce calme, et de donner le chemin du fichier. (L'enregistrement sur le script approuvé est ce qui synchronise l'image et la voix.)
  • Personnage principal, selon la réponse de la série 2 :
    • Fournir : demander le chemin du fichier (et le dossier de textures si séparé).
    • Créer : demander la tranche d'âge, la morphologie, le style de coiffure et de vêtements (mots simples) ; puis demander d'installer MPFB.
    • Télécharger : montrer les 2-3 candidats comme options (nom, aspect, licence, compte nécessaire) et les laisser choisir.
  • Chaque option vocale : Sous-titres incrustés ? Oui / Non (pas de voix = toujours des sous-titres).
  • Chaque option : Musique : Aucune, uniquement effets et bruit ambiant (recommandé pour une première) / Ma propre piste (chemin du fichier, ils confirment avoir les droits) / Piste de la bibliothèque audio YouTube (ils la téléchargent et donnent le chemin).

Ne pas demander autre chose ; tout ce qui suit a une valeur par défaut. Questions « modèle spécifique » : il n'y a pas de modèle IA d'image ou de vidéo dans ce pipeline. Les choix qui en tiennent lieu sont le moteur de rendu (série 2), le modèle vocal ElevenLabs (série 3) et le modèle Claude exécutant la compétence : Opus à effort élevé donne les meilleurs résultats.

Préréglages du moteur (les réglages choisis par l'utilisateur, les conserver)

  • EEVEE rapide (par défaut, b3d.EEVEE_PRESETS['fast']) : 16 échantillons, ray tracing et GI à demi-résolution, 1 rayon d'ombre. ~0,9-1,2 s par image en 1080p sur la 3080, 99-99,9 % de similarité avec high.
  • Cycles rapide (b3d.CYCLES_PRESETS['fast']) : 32 échantillons, limite de temps 1 s, débruitage OptiX, 2-3 rebonds, approximation GI rapide, Persistent Data. ~1,7 s par image. Si le débruitage bave sur un gros plan, donner à ce plan une limite de 2 s.
  • --quality draft | fast | high au moment du rendu, pas de reconstruction. Moteur par scène : setup_render(engine=...), ou B3D_ENGINE=CYCLES python render.py <ep> build pour A/B sans édition. Des moteurs mixtes dans un même court métrage conviennent (rendre la plage d'images de chaque plan depuis son propre .blend) si le fond et le grading correspondent.

Pipeline (enregistrer après chaque étape ; montrer à l'utilisateur des images, pas des murs de texte)

  1. Sujet et faits. Travailler chaque nombre et l'écrire avec sa source dans episode.json sous science. Les nombres célèbres incertains sont précédés de « Les scientifiques estiment ». Le même sujet qu'une grande chaîne convient ; leurs mots ne sont pas les nôtres.
  2. Mesurer la référence (uniquement si la série 1 a répondu oui) : measure.py <dossier> --out <ep>/reference.json. Sinon, utiliser les valeurs par défaut dans style.md.
  3. Script dans episode.json (examples/episode.template.json) : deuxième personne, ~2,8 mots/s, durée choisie, structure des beats dans style.md. Le montrer et attendre une validation. Après validation, « exécutez-le » jusqu'aux stills.
  4. Voix et timing, selon la réponse de la série 1 :
    • ElevenLabs / clone : sound.py <ep> voice → audio/voice.wav, words.json, captions.srt.
    • Propre enregistrement : attendre leur fichier, puis sound.py <ep> own <fichier> (timings des mots : faster-whisper si installé, sinon ElevenLabs speech-to-text s'il y a une clé, sinon estimés à partir des silences ; proposer pip install faster-whisper si l'estimation est erronée).
    • Pas de voix : sound.py <ep> captions → words.json + captions.srt à "wps" (2,8). Puis écrire shots.md : par beat, la plage d'images (d'après les timings des mots), le mouvement de caméra (dolly avant / maintien + dérive / dolly arrière / survol) et ce qui reste en mouvement pendant chaque maintien. Maximum un cut franc pour ~7 transitions.
  5. Le test des 9 secondes d'abord. Un beat avec le pipeline complet avant le court métrage entier : scene.py avec les helpers b3d. Rendu, finish, measure.py, et compare.py reference.json ours.json s'il y a une référence. La différence est la liste des tâches. Corriger la caméra jusqu'à ce que les saccades et le mouvement latéral correspondent (un axe, clés adoucies).
  6. Monde et personnage. Personnage en premier, selon son chemin dans references/characters.md, toujours via b3d.import_character(chemin, height=1.75) : il le met à l'échelle réelle avec les pieds au sol, supprime les caméras et lumières parasites, lie les parties pondérées au rig et imprime un rapport (type de rig, parties ne suivant pas le rig, formes du visage x/52, textures manquantes). Corriger chaque élément du rapport, puis une image de rotation, puis enregistrer assets/host/host.blend. Monde depuis references/assets.md (liste des téléchargements, source + licence + taille, demander une fois). Règle : si un vrai existe, le télécharger, ne jamais le modéliser.
  7. Stills et le juge. render.py <ep> still <images...> --pct 50 pour chaque beat. Puis lancer un agent séparé (outil Agent) avec les stills et references/realism.md ; il note sur 10 et nomme les trois pires signes de non-réalisme. Corriger, relancer le rendu, rejuger. Ne rendre qu'à 8,5+. Montrer à l'utilisateur les stills et la note. En moteur « Auto », un plan qui échoue sur un raccourci EEVEE passe ici en Cycles rapide.
  8. Rendu. Exécuter render.py <ep> frames dans le terminal de l'utilisateur (run_in_terminal) pour qu'il voie la barre en direct (images faites, s par image, ETA) ; lire <ep>/progress.json pour répondre à « Où en est-on ? ». Reprise possible. Ensuite render.py <ep> times ; si trop lent, travailler sur references/render-speed.md sur les images les plus lentes.
  9. Son. beds (un bruit ambiant par monde) et sfx (chacun sur son mot : « coup d'os » sur « os ») dans episode.json, puis sound.py <ep> sfx (nécessite une clé ; sans, sauter les effets ou utiliser des fichiers fournis par l'utilisateur dans audio/sfx/<nom>.mp3) et sound.py <ep> mix. Règle du mix : musique +3 dB, effets à moitié, voix inchangée.
  10. Finish. finish.py <ep> --audio <ep>/audio/mix.wav [--captions] → out/<slug>-final.mp4. Le regarder en taille téléphone. Épisodes sans voix : fournir également captions.srt et dire que la voix se place à ces moments.
  11. Rapport : le chemin final, la dernière note du juge, les minutes de rendu, les crédits ElevenLabs (costs.json) et le texte de crédits pour la description (licences assets.md). Ne jamais prétendre que la chaîne de référence utilise un outil quelconque.

Scripts

ScriptS'exécute dansFait
b3d.pyBlenderconfiguration du rendu + préréglages (EEVEE/Cycles, GPU, look), fond + HDRI, capture d'ombre (réel sur Cycles, simulé sur EEVEE), lumières, caméra dolly un axe adouci, matériaux, import_character (tout .blend/.fbx/.glb riggé, mis à l'échelle, lié, rapporté), parent_to_bone, clés de forme, compositeur, chronomètre
render.pyshellbuild, still, frames (barre de progression live, progress.json, reprise possible), times ; --quality
sound.pyshellvoice (ElevenLabs), clone, own (enregistrement utilisateur), captions (pas de voix), sfx, mix ; chaque mode vocal écrit captions.srt
finish.pyshellimages + mix → mp4 1080×1920, couche caméra réelle, incrustation --captions
measure.py / compare.pyshellmétriques image par image de toute vidéo ; référence vs nôtre avec une liste de tâches

scene.py est appelé comme blender -b --factory-startup --python scene.py -- <skill>/scripts <ep>/scene.blend ; commencer à partir de examples/test-cell/scene.py (appeler shadow_catcher après les lumières).

Skills associés