CommunityImagegithub.com

polywright-blender

Utilisez cette compétence dès que Blender est scripté, automatisé ou débogué, avant d'écrire du code bpy : exécutions headless signalant les erreurs (pw.py bpy), les pièges de l'API bpy (importateurs supprimés, sockets renommés, noms EEVEE), recettes testées (modificateurs, booléens, remesh, UV, bakes, tournettes, passes de profondeur, exports par lots), serveurs MCP Blender et leurs risques, et autres outils 3D par OS. À utiliser sur « écrire un script Blender », « automatiser Blender », « exporter par lots .blend », toute traceback bpy ou…

Qu'est-ce que polywright-blender ?

Cette compétence fournit un guide complet et fiable pour piloter Blender de manière scriptée et headless, optimisé pour les agents d'IA et les développeurs. Elle centralise les pièges de l'API bpy pour Blender 5.x (importateurs supprimés, sockets renommés, noms EEVEE) et propose des recettes testées pour les tâches courantes comme les modificateurs, les booléens, le remaillage, les UV, les bakes et les exports par lots. La compétence s'appuie sur le script `pw.py` pour l'exécution headless des scripts, l'inspection et le rendu, et documente les serveurs MCP (officiel et communautaire) pour les sessions live, avec leurs risques de sécurité. Elle inclut également des références pour les outils 3D complémentaires (OpenSCAD, FreeCAD, meshroom) et des conseils de maintenance pour suivre les mises à jour de Blender. Le tout est organisé en étapes claires, avec des fichiers de référence dédiés pour les pièges, les recettes, les scènes et la physique.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/m4bwav/polywright/tree/HEAD/skills/polywright-blender

Installed? Explore more Image skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Demander à votre IA préférée

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

Documentation

Que fait polywright-blender ?

Blender est le cheval de bataille : gratuit, tous les OS, scriptable jusqu'au dernier bouton. Un agent le conduit mieux en mode headless, sur des copies, avec des rapports textuels courts, pas à travers des captures d'écran d'une session live. Retour au hub : ../polywright/SKILL.md. Profondeur : references/bpy-api-traps.md, references/bpy-recipes.md, references/bpy-recipes-scenes.md et references/bpy-recipes-physics.md (chaque recette est exécutée par la suite de tests), references/mcp-bridges.md, references/tools-by-os.md.

Étape 1 : quel Blender

python ../polywright/scripts/pw.py doctor le trouve (POLYWRIGHT_BLENDER, PATH, dossiers d'installation sur Windows, macOS et Linux) et affiche la version. Ciblez la LTS actuelle (5.2, supportée jusqu'en juillet 2028). Écrivez la version dans le premier commentaire du script ; les faits d'API ci-dessous sont pour la 5.2.

Étape 2 : exécuter des scripts en headless

python ../polywright/scripts/pw.py bpy build.py [--blend in.blend] [--timeout 1800] -- <args du script>

Les propres options de pw.py peuvent se placer avant ou après le nom du script ; tout ce qui suit -- va au script. Il exécute blender --background --factory-startup --python-exit-code 3 --python build.py -- args, supprime le bruit des logs de Blender et renvoie ok, les lignes de sortie du script et la traceback. Sans --python-exit-code, une erreur Python dans Blender renvoie encore 0 : ne jugez jamais le succès par le seul code de sortie sinon. Affichez vos propres lignes [pw] pour les nombres dont vous avez besoin (tailles, comptages, vérifications).

Règles du script :

  • Commencez par bpy.ops.wm.read_factory_settings(use_empty=True) ou un .blend explicite ; ne dépendez jamais du fichier de démarrage d'un utilisateur.
  • Préférez bpy.data et bmesh à bpy.ops. Quand un opérateur est nécessaire, définissez d'abord l'objet actif et la sélection, ou utilisez with bpy.context.temp_override(...).
  • Les opérateurs de la vue échouent en headless (view3d.*, screen.screenshot, render.opengl) : cadrez les caméras à partir des limites vous-même (comme le fait pw.py render).
  • Lisez les éléments d'énumération au lieu de deviner les noms : m.bl_rna.properties["solver"].enum_items.
  • Taille réelle en mètres ; appliquez les transformations avant de mesurer ; les importations glTF arrivent en mode quaternion avec le correctif d'axe sur un parent : effacez les parents en conservant les transformations, puis appliquez, puis mesurez.
  • Écrivez chaque chemin de sortie en absolu (os.path.abspath) et affichez si le fichier existe ensuite : un render.filepath relatif a rapporté un succès et n'a rien écrit de visible (L-004).
  • Sauvegardez un .blend numéroté par étape dans work/ ; redémarrez à partir de celui-ci plutôt que de porter une longue session live.
  • Faites cuire les simulations avant le rendu, avec le dossier de cache à côté du .blend (la valeur par défaut est temporaire et perdue à la fermeture). La progression de la cuisson inonde stdout et pw.py bpy en coupe le milieu : écrivez les résultats dans un fichier JSON.
  • Deux tentatives en cas de traceback ; puis consultez l'API (fichier des pièges, introspection, recherche dans la documentation du MCP officiel) au lieu de deviner une troisième fois.

Étape 3 : les pièges (liste courte ; liste complète dans le fichier des pièges)

Écrit (ancien)Utilisez dans 5.x
bpy.ops.import_scene.obj, import_mesh.stl, import_mesh.ply, wm.collada_*wm.obj_import, wm.stl_import, wm.ply_import ; Collada a disparu
BLENDER_EEVEE_NEXTBLENDER_EEVEE
import bglle module gpu
Principled Specular, Subsurface, Transmission, Emission, ClearcoatSpecular IOR Level, Subsurface Weight, Transmission Weight, Emission Color, Coat Weight
action.fcurvesactions à slot : couches, bandes, channelbags
mod["Socket_2"] = x sur Geometry Nodesmod.properties.inputs.Socket_2.value = x
import_image.to_planeimage.import_as_mesh_planes
Workbench shading.show_shadowshading.show_shadows
obj.select = True, scene.objects.active, mesh.use_auto_smooth, scene.node_tree (livres 2.7x)select_set, view_layer.objects.active, shade_auto_smooth ou set_sharp_from_angle, scene.compositing_node_group
transform_apply(scale=True) seulapplique aussi la position et la rotation : passez location=False, rotation=False

Étape 4 : tâches courantes

pw.py fait déjà inspecter, rendre, convertir, LODs, printable et union. Pour tout le reste, prenez une recette dans references/bpy-recipes.md : images de référence à l'échelle, modificateurs et application, Booléen avec le solveur Manifold et un fallback EXACT, remaillage voxel, QuadriFlow, UV Smart et UV lightmap, bakes normal et AO du haut vers le bas, matériaux avec les sockets 5.x, photos de tournette, passes de profondeur et normale pour la vidéo, exports par moteur, et un objet conçu à partir d'une description écrite (tournage, balayage, miroir ; L-003). Scènes : references/bpy-recipes-scenes.md : dispersion Geometry Nodes, profondeur inverse, masques, Brume et normales à partir d'un rendu, argile par remplacement de matériau, Line Art, MP4 via le propre FFmpeg de Blender. Physique et armatures : references/bpy-recipes-physics.md : cuissons de corps rigides et de tissu, pourquoi une armature Rigify n'est pas un squelette de jeu, liaison à une armature à la main, remaillage de volume. Parentage, mouvement F-modifier et drivers : references/bpy-recipes-motion.md. Feuilles d'un modèle avec des pièces en miroir : élevez la caméra latérale de 10 à 15 degrés, ou une pièce en cache une autre (L-005).

Étape 5 : sessions live (MCP)

Deux serveurs existent : le MCP officiel de Blender Lab (v1.0.3, Blender 5.1+, analyse de scène et recherche de documentation API) et le communautaire mcp-for-blender (anciennement blender-mcp ; recherche d'actifs et crochets de générateur). Les deux exécutent tout Python que le modèle envoie, sans sandbox, sur le port 9876. Utilisez-en un, jamais les deux ; seulement quand l'utilisateur regarde Blender et veut des modifications en direct ; ne collez jamais de texte provenant de fichiers téléchargés dans son code. Configuration et modes de défaillance : references/mcp-bridges.md. Dans une session live, enveloppez les opérateurs liés à l'éditeur dans context.temp_override(window=w, area=a, region=r) ; les opérateurs modaux et bpy.app.timers ne s'exécutent que là, jamais sous -b.

Autres outils

Vérifications et réparations de maillage sans Blender : trimesh + manifold3d (+ PyMeshLab) ; livraison web : gltf-transform ou gltfpack ; solides : OpenSCAD, build123d, CadQuery, FreeCAD ; les trancheurs ont des CLI. Versions et ce qui tourne sur quel OS : references/tools-by-os.md. Sur macOS, Blender 5.x et la roue bpy sont Apple Silicon uniquement ; la roue bpy a besoin exactement du Python que Blender empaquette (3.13 pour 5.2).

Maintenance

Unité permanente, niveau moderate (une version de Blender tous les quatre mois ; vérifier à chaque fois). Compagnons : RESEARCH.md, CHANGELOG.md, LEARNINGS.md, TESTS.md avec evals/evals.json, MAINTENANCE.md, état dans evergreen.json. Lisez evergreen.json à chaque utilisation ; rafraîchissez quand nécessaire.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

m4bwav/polywright

Start here whenever a task needs a 3D model and no sibling below clearly owns it: a model of a real or imagined thing for a game (Unity, Roblox, Unreal, three.js), a 3D print, AI video or AR, or another plugin asking for a mesh. Picks the route (find, capture, generate, code), scaffolds the asset folder and manifest other plugins read, and runs pw.py (inspect, render a sheet, convert, check a budget, bpy headless, match a picture's camera, army blockouts with depth and pose passes for AI...

m4bwav/polywright-finish

Use whenever a mesh must be made ready for a game engine, the web or AR: is it game-ready, too many polygons, LODs, retopology, UVs, baking, PBR and normal-map conventions, collision, rigging, and axis, unit and format export for Roblox, Unity, Unreal, Godot, three.js (meshopt, KTX2), USDZ and video blockouts. Use on 'is this game-ready', 'make this work in Roblox/Unity', 'optimise for the web', 'reduce polygons', 'add LODs', 'retopologise', 'bake normals', 'imports sideways or tiny', 'flip...

m4bwav/polywright-generate

Use whenever an imagined or hypothetical 3D model must be made from a prompt, a drawing, concept art, photos or a blockout: image-to-3D through ComfyUI (TRELLIS.2, Pixal3D, Hunyuan3D-2 via pw.py gen) or hosted (Meshy, Tripo, Rodin), or code (bpy, build123d, CadQuery, OpenSCAD) when it has dimensions; then texturing and the licence record. Use on 'make me a 3D model of a dragon', 'turn this drawing or concept art into 3D', 'image to 3D', 'text to 3D', 'TRELLIS', 'Hunyuan3D', 'Meshy', 'model a...

m4bwav/polywright-references

Use whenever reference images, views or textures for a 3D model are needed, before modelling or image-to-3D: orthographic front, side and back views with a height bar, A-pose turnarounds, multi-view sets, blockout renders repainted into consistent views, seamless textures and quick normal/height/roughness maps (pw.py texture). Use on 'what references do I need', 'reference sheet', 'front side back views', 'turnaround', 'seamless texture', 'PBR maps from this photo'. Not for flat graphic...

Skills associés