Communitygithub.com

Ameliawampler/blender-product-video

Créez un film produit silencieux et guidé par le texte, où un décor photoréaliste Blender porte une métaphore visuelle et un bloc-grille 2D final épelle le titre et l'appel à l'action. À utiliser lorsque quelqu'un souhaite une vidéo de lancement, une explication de produit ou un court film de marque rendu depuis du code avec Blender (bpy), Python et ffmpeg, en particulier sur une machine sans GPU.

Qu'est-ce que blender-product-video ?

Ce skill permet de générer automatiquement un film produit court (45 à 75 secondes) entièrement en code, sans interface graphique. Il utilise Blender (bpy) pour créer un décor photoréaliste (herbe, portail, ciel), une animation par objets mobiles, et un compositeur Python/ffmpeg pour assembler les rendus en deux passes (plaque fixe + calques animés). Le film se termine par une grille de blocs 2D qui se retournent pour former le titre et l'appel à l'action, lisible même en mode silencieux. Il est conçu pour fonctionner sans GPU, en optimisant le temps de rendu via des boucles, des animations sur deux images et un système de reprise après interruption. Il convient aux développeurs et créateurs de contenu technique qui veulent produire des vidéos produit reproductibles et programmatiques.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ameliawampler/blender-product-video/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

Film produit Blender

Méthode et exemple fonctionnel pour un film produit de 45 à 75 secondes qui se lit son coupé. Un décor photoréaliste (herbe, un portail en bois, un vrai ciel) porte une métaphore visuelle. De courts superpositions de texte disent ce que les images ne peuvent pas. Le film se termine en se transformant en grille plate de blocs colorés qui se retournent pour épeler le titre et l'appel à l'action.

Tout est code : le décor, l'animation, le compositing. Rien n'est ouvert dans une interface graphique.

Contenu de ce dossier

CheminCe que c'est
film.jsonPalette, texte superposé avec minutage, lignes de fin. Modifiez d'abord ceci.
scripts/blender/build.pyLe décor : colline avec herbe à particules, portail, blocs givrés, ciel, brume, paramètres de rendu.
scripts/blender/mascot.pyPersonnage exemple : une chouette voxel assez petite pour tenir sur un poteau de clôture.
scripts/blender/film.pyPlans, caméras, animation par image. Rendu des plates et layers.
scripts/post/comp.pyCompositeur : plaques + calques, mouvements de caméra 2D, texte, étalonnage, fin en blocs 2D, encodage ffmpeg.
assets/Deux plaques de ciel (doré, couvert). Remplacez par les vôtres.
examples/Images d'un film réalisé avec ce pipeline.

Le film exemple est "La Porte" : des blocs identiques roulent à travers un portail ouvert à un rythme constant, puis arrivent dans toutes les tailles, puis essaiment. Le portail se ferme, et après, les blocs sont laissés passer, comptés ou arrêtés. Traitez-le comme une référence pour la structure, puis remplacez la métaphore par celle qui correspond au produit.

Flux de travail

Faites ces étapes dans l'ordre. Obtenez une validation à chaque étape numérotée avant d'investir du temps de rendu sur la suivante.

  1. Brief. Une phrase chacun : pour qui c'est, le problème, le tournant, la promesse, l'appel à l'action. Décidez de la durée (45 à 75 s), du format et de l'endroit où il sera diffusé. Supposez une lecture en mode muet.
  2. Métaphore. Choisissez une image physique pour le problème et un changement de cette image pour le produit. Un seul lieu, un seul accessoire principal, un seul type d'objet en mouvement. Si cela nécessite une explication, choisissez à nouveau.
  3. Feuille de rythme. 6 à 8 plans. Pour chacun : durée, ce qui bouge, la ligne de superposition (moins de 8 mots, une idée), position de la caméra et objectif. Acte problème sous une lumière froide et couverte, acte produit sous une lumière chaude. Présentez-la sous forme de tableau et obtenez l'approbation.
  4. Personnage (optionnel). Un petit protagoniste donne à l'œil un endroit où se reposer. Proposez 3 ou 4 options sous forme de croquis plats avant de modéliser quoi que ce soit. Dimensionnez-le par rapport au décor : il doit tenir sur l'accessoire principal. Construisez-le à partir de primitives simples (la chouette fait des cubes de 1 cm).
  5. Décor en code. Adaptez build.py. Gardez les unités en mètres avec l'accessoire principal à l'origine. Rendez une image fixe par plan à faible échantillonnage et regardez chacune avant d'animer.
  6. Animation. Dans film.py, chaque plan a setup_X (créer les objets une fois) et update_X(t) (placer tout pour la seconde de film t). Fonctions pures du temps, pas d'images clés, donc n'importe quelle image peut être rendue seule et un rendu planté reprend là où il s'est arrêté.
  7. Rendu en deux passes. python scripts/blender/film.py plates, puis ... layers. Voir ci-dessous.
  8. Composition. python scripts/post/comp.py out.mp4 --draft pour une vérification rapide (une image sur six), puis sans --draft. Utilisez --only-ending pour régler la fin.
  9. Regardez. Prélevez des images fixes au milieu de chaque superposition et vérifiez : le texte est-il lisible, la chose nommée par le texte est-elle visible dans le cadre, quelque chose saute-t-il entre les plans. Corrigez et re-rendez uniquement le plan concerné (supprimez ses fichiers dans layers/).

Le rendu en deux passes

L'herbe photoréaliste est lente. Les objets en mouvement sont bon marché. Donc ils sont rendus séparément.

  • Plaques. Une image fixe par plan du décor complet (herbe, accessoire, ciel), 1280x720 à 36 échantillons dans l'exemple. Un plan qui change de lumière reçoit deux plaques que le compositeur fond en fondu enchaîné.
  • Calques. Uniquement ce qui bouge, sur fond transparent, à résolution et échantillonnage inférieurs. Le sol est un attrape-ombre pour que les objets projettent encore des ombres. Les accessoires statiques sont des caches pour que les objets passent correctement derrière eux. Le ciel reste pour l'éclairage mais est caché de la caméra.
  • Compositeur. Pose le calque sur la plaque, puis simule le mouvement de caméra avec une avance ou un dérive 2D lent par plan. Une caméra 3D verrouillée est ce qui rend la plaque réutilisable.

Trois éléments maintiennent le coût bas :

  • Boucles. Si un plan est un flux constant, rendez le mouvement périodique (espacement de 0,84 m à 0,84 m/s se répète chaque seconde) et rendez une période. LOOP dans film.py et comp.py liste ces plans.
  • Sur deux. Les calques sont rendus toutes les deux images (STEP = 2) et tenus. Cela donne un rendu de stop motion, qui convient aux petits objets bloc.
  • Reprise. Chaque image est ignorée si son fichier existe.

Pour l'échelle : le film exemple (51 s de 3D plus une fin de 12,5 s) représente 8 plaques et 456 images de calque. Il a été rendu uniquement sur CPU.

La fin 2D

comp.py la dessine directement, sans Blender. Une grille de 64x36 carrés arrondis dans la palette vole sur la dernière image 3D sur 6 colonnes de large, la caméra recule jusqu'à ce que les 64 colonnes soient visibles, puis une vague diagonale retourne chaque bloc (une compression verticale à zéro et retour, avec l'échange de couleur au milieu) vers sa couleur finale. Les couleurs finales proviennent d'une police de pixels 3x5, donc les blocs deviennent le texte.

Limites pour planifier le texte autour : jusqu'à quatre lignes, 12 caractères chacune (11 est mieux), majuscules, chiffres et . - / !. Définissez-les dans film.json sous ending avec une ligne de grille et une clé de palette.

Édition de film.json

  • palette : sept couleurs hexadécimales. primary, accent, warm, soft, deep, paper (fond de la fin et bloc par défaut), alarm (la couleur "quelque chose ne va pas").
  • overlays : [début, fin, "texte", x] en secondes de film. x est optionnel, une position horizontale de 0 à 1 pour lorsque le sujet se trouve là où le texte centré le couvrirait. Utilisez pour deux lignes.
  • ending : les lignes que les blocs épellent.
  • font : chemin vers un .ttf ou .otf pour les superpositions. Valeur de repli vers Inter, DejaVu, Helvetica ou Arial.

Les durées des plans se trouvent dans SHOTS en haut de film.py et comp.py. Gardez-les égales.

Configuration

python -m venv venv && . venv/bin/activate
pip install bpy==5.3.0 numpy pillow     # bpy est la roue Blender ; nécessite le Python correspondant
# ffmpeg doit être dans le PATH

TEST=1 python scripts/blender/film.py plates    # 480x270, une image par plan, quelques minutes
TEST=1 python scripts/blender/film.py layers
python scripts/post/comp.py draft.mp4 --draft

FILM_OUT=/some/dir écrit plates/ et layers/ là-bas au lieu de dans ce dossier. FILM_CONFIG pointe vers un autre film.json. GRASS_NEAR et GRASS_MID (pourcentage) éclaircissent l'herbe. Avec Blender de bureau au lieu de la roue : blender -b -P scripts/blender/film.py -- plates.

Pièges qui coûtent du temps réel

  • Longueur de l'herbe. Définir le normal_factor d'un système de particules capillaire réinitialise hair_length. Définissez hair_length en dernier ou chaque brin mesure des mètres et le champ semble flou de mouvement.
  • Parentage. Le parentage déplace l'enfant sauf si vous définissez matrix_parent_inverse. Les parties articulées sauteront de l'accessoire.
  • Ciel. Une image de ciel sur un cylindre UV s'étire. Utilisez des panneaux en miroir sur un grand cylindre, ou un plan plat si la caméra ne panoramique jamais. Gardez un soleil physique pour la lumière réelle.
  • Texte sur le sujet. Vérifiez chaque superposition par rapport à l'image en dessous. Déplacez le texte avec x avant de déplacer la caméra.
  • Les recadrages cachent des choses. Si une superposition nomme quelque chose ("Bloqué."), confirmez que le recadrage 2D le contient toujours.
  • Délavement des couleurs. Les surfaces peintes sous AgX ont besoin de couleurs de base plus foncées que le code hexadécimal de la marque. Les écrans et tout ce qui doit être lu comme une couleur exacte doivent être en émission.
  • Pas de GPU. Budget par image : chronométrez une image de calque, multipliez, puis réduisez la résolution, les échantillons ou la durée du plan jusqu'à ce que cela rentre. Ne démarrez pas un rendu que vous n'avez pas chronométré.
  • Redémarrages de conteneur. Les rendus longs sont interrompus. La vérification skip-if-exists est ce qui vous sauve.

Ce que ce pipeline ne fait pas

Soyez honnête avec la personne à ce sujet avant qu'elle ne les attende.

  • Caméras 3D en mouvement. Les plans sont verrouillés avec des mouvements 2D par-dessus. Le vrai parallaxe signifie rendre le décor à chaque image, ce qui nécessite un GPU.
  • Flou de mouvement et mouvement à 24 ips sur les calques. Augmentez les échantillons, définissez STEP = 1 et activez render.use_motion_blur lorsque le matériel le permet.
  • Les objets reposent sur l'herbe, pas dedans, car l'herbe est dans la plaque.
  • Son. Le film est conçu pour fonctionner en silence. Ajoutez de la musique et des effets après si souhaité.
  • Écrans, IUs ou logos dans le monde 3D. Volontairement omis : l'IU du produit dans un champ photoréaliste semble faux. Mettez les visuels du produit dans la fin 2D ou un plan séparé.

Pour un rendu de qualité finale

1920x1080 ou plus pour les deux passes, 128+ échantillons avec débruitage, rendu GPU (OptiX ou Metal), STEP = 1, flou de mouvement activé, et W, H dans comp.py augmentés pour correspondre. Répartissez les images sur plusieurs machines par numéro d'image ; chaque image est indépendante.

Skills associés