Every render here is a CI artifact.
These aren't mockups. Each example runs headless on Blender 4.5 LTS and 5.1 in the smoke workflow, asserts its own correctness, and exits non-zero if the API drifted. The render is what the code produced.
Open the gallery — code, README, and full-size renders →Workflows the AI loads by name.
Each skill is the canonical pattern for one job — operators, panels, bmesh, geometry nodes, slotted actions — plus the mistakes AI assistants actually make there. Where 4.5 LTS and 5.1 diverge, both code paths are shown.
Anti-patterns, caught before they ship.
Always-on guardrails for the failure modes that make Blender Python look right and run wrong: ops in loops, leaked bmesh, deprecated context dicts, per-vertex Python loops.
| Rule | Scope | Flags |
|---|---|---|
| always-free-bmesh | Flag bmesh.new() calls without a paired bm.free() in a try/finally block. BMesh allocates C-side memory that Python's garbage collector cannot reclaim; missing free() leaks and eventually crashes… | |
| prefer-data-over-ops-in-loops | Flag bpy.ops.* calls inside iteration over many objects, meshes, or frames. Each bpy.ops call triggers a full depsgraph evaluation and UI redraw; loops slow down by orders of magnitude. Use… | |
| prefer-temp-override-over-context-copy | Flag uses of `bpy.context.copy()` to override context for an operator call. The copy-and-pass pattern was deprecated in Blender 4.x and the override semantics were removed in 5.x. Use… | |
| target-extensions-platform-format | Flag new Blender add-ons that ship only a legacy bl_info dict without a blender_manifest.toml. New add-ons must use the Extensions Platform format. bl_info may appear alongside as a fallback for… | |
| type-annotate-props-and-defend-context | Flag two related anti-patterns. (1) bpy.props defined as class-level assignments instead of type annotations (deprecated since 2.8). (2) Code that touches bpy.context.active_object without guarding… | |
| use-foreach-set-for-bulk-data | Flag Python loops that set vertex coordinates, normals, UVs, or other bulk per-element data one element at a time. For meshes of more than a few thousand elements, this is 100x to 1000x slower than… |
Canonical patterns, five to fifty lines.
Standalone, paste-ready answers to the questions that come up every session: the right way to create and delete objects, read bulk vertex data, bind properties, bridge the 4.x/5.x API boundary.
Plus 2 starter templates: extension-addon-template and headless-batch-script-template — a complete Extensions-Platform add-on and a headless batch job with CI exit codes.
Clone it. Point your AI at it.
- Clone the repo:
git clone https://github.com/TMHSDigital/Blender-Developer-Tools - Cursor: copy
rules/into your project's.cursor/rules/— they auto-apply via scope globs; reference skills by name in chat - Claude Code: copy
skills/andrules/into your project workspace, or point Claude Code at the checkout - Grab
snippets/andtemplates/as starting points for add-ons and headless batch jobs