Skip to content

Commit ed48f75

Browse files
TMHSDigitalclaude
andcommitted
feat(skills): porting-to-blender-5 index of every 4.x to 5.x break the pack covers
"Make my add-on work on Blender 5" is one of the most common requests, and the answers were spread over 19 skills, 11 rules and a dozen examples. porting-to-blender-5 is a single entry point: - a headless triage recipe: run on the target version, fix the first traceback, repeat, then grep for the silent breaks; - a 21-row table (old code, version, what happens on 5.x, fix), where every row links to the skill, rule or runnable example that owns the measured facts; - the dual-version shim pattern. Covered: bgl, action.fcurves, use_auto_smooth, Principled sockets, .sequences, new_effect, ID properties, compositor node_tree, NodesModifier inputs, Grease Pencil v3, EEVEE id, use_nodes, bl_info, bl_ext names, the 5.2 COLOR strip and evaluated-name changes, and gpu.init. check_skill_refs verifies every link target exists. Six cross-version examples now list the skill in examples/skills.json. Counts: 20 skills. Closes #466 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: TM Hospitality Strategies <TMHospitalityStrategies@gmail.com>
1 parent 4478a82 commit ed48f75

11 files changed

Lines changed: 141 additions & 28 deletions

File tree

‎.cursor-plugin/plugin.json‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
"skills/drivers-and-app-handlers/SKILL.md",
3939
"skills/bl-info-migration/SKILL.md",
4040
"skills/vse-python/SKILL.md",
41-
"skills/gpu-drawing-and-overlays/SKILL.md"
41+
"skills/gpu-drawing-and-overlays/SKILL.md",
42+
"skills/porting-to-blender-5/SKILL.md"
4243
],
4344
"rules": [
4445
"rules/prefer-data-over-ops-in-loops.mdc",

‎AGENTS.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ a `.cursor-plugin/plugin.json` manifest so the ecosystem drift checker
2020
classifies it as a `cursor-plugin`. This is content the AI loads when the user
2121
asks Blender questions or works on Blender add-ons in Cursor or Claude Code.
2222

23-
The content base is 19 skills, 11 rules, 3 templates, 29 snippets, 66
23+
The content base is 20 skills, 11 rules, 3 templates, 29 snippets, 66
2424
examples, and 80 showcase pieces (counts are CI-enforced across README.md, the agent docs, ROADMAP.md,
2525
`site.json` and the site templates). The full inventory tables and per-item purposes live in
2626
`CLAUDE.md`. Example anatomy and authoring rules: copy `examples/bmesh-gear/`;
@@ -32,7 +32,7 @@ in `docs/VISUAL-STYLE.md`; the canonical run prompt is
3232

3333
```
3434
Blender-Developer-Tools/
35-
skills/<skill-name>/SKILL.md # 19 skill files
35+
skills/<skill-name>/SKILL.md # 20 skill files
3636
rules/<rule-name>.mdc # 11 rule files
3737
templates/<template-name>/ # 3 starter templates
3838
snippets/<snippet-name>.py # 29 standalone Python snippets

‎CLAUDE.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ The **Blender Developer Tools** repository is at **v0.154.0**. It packages skill
1717
## Repository Architecture
1818

1919
```
20-
skills/<skill-name>/SKILL.md - AI workflow definitions, 19 total
20+
skills/<skill-name>/SKILL.md - AI workflow definitions, 20 total
2121
rules/<rule-name>.mdc - Anti-pattern rules, 11 total
2222
templates/<template-name>/ - Starter projects, 3 total
2323
snippets/<snippet-name>.py - Standalone code patterns, 29 total
@@ -30,7 +30,7 @@ docs/gallery/ - Committed generated gallery pages + hero render
3030
VERSION - Source of truth for the repo version
3131
```
3232

33-
## Skills (19)
33+
## Skills (20)
3434

3535
| Skill | Purpose |
3636
| --- | --- |
@@ -52,6 +52,7 @@ VERSION - Source of truth for the repo version
5252
| vse-python | VSE timeline from Python: `.strips` vs `.sequences`, `new_effect` kwargs, 5.2 COLOR `width`/`height` bake |
5353
| extension-runtime-and-packaging | Bundled wheels, `extension_path_user` data that survives upgrades, `online_access`, `bl_ext` names, `--command extension` build in CI |
5454
| timers-modal-and-threading | `bpy.app.timers` return values and `persistent`, modal operators on `event_timer_add`, worker thread + queue + main-thread drain, no timers in `--background` |
55+
| porting-to-blender-5 | Index of every 4.x → 5.x break the pack covers (bgl, `action.fcurves`, `use_auto_smooth`, Principled sockets, `.sequences`, ID properties, compositor, NodesModifier inputs, ...), each linked to the skill, rule or example that owns the fix; headless triage recipe |
5556
| gpu-drawing-and-overlays | `gpu` instead of the removed `bgl`: `draw_handler_add`/`remove`, builtin shader names, `gpu.state` blending and depth, `POLYLINE_*` line width, `blf` text, `GPUOffScreen` with 5.2's `gpu.init()` headless |
5657

5758
## Rules (11)

‎CONTRIBUTING.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ The drift-check workflow enforces these on every push and PR.
288288

289289
## Aggregate Counts
290290

291-
`README.md` declares aggregate counts (e.g. "19 skills, 11 rules, 3 templates, 29 snippets, 69 examples, and 80 showcase pieces"). The `validate-counts` job in `.github/workflows/validate.yml` enforces these substrings against the filesystem on every push and PR. Showcase pieces are counted separately from examples. When you add or remove content, update the README counts in the same commit.
291+
`README.md` declares aggregate counts (e.g. "20 skills, 11 rules, 3 templates, 29 snippets, 69 examples, and 80 showcase pieces"). The `validate-counts` job in `.github/workflows/validate.yml` enforces these substrings against the filesystem on every push and PR. Showcase pieces are counted separately from examples. When you add or remove content, update the README counts in the same commit.
292292

293293
## Pull Request Process
294294

‎README.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
</p>
2626

2727
<p align="center">
28-
<strong>19 skills</strong> &nbsp;&bull;&nbsp; <strong>11 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>29 snippets</strong> &nbsp;&bull;&nbsp; <strong>69 examples</strong> &nbsp;&bull;&nbsp; <strong>80 showcase pieces</strong>
28+
<strong>20 skills</strong> &nbsp;&bull;&nbsp; <strong>11 rules</strong> &nbsp;&bull;&nbsp; <strong>3 templates</strong> &nbsp;&bull;&nbsp; <strong>29 snippets</strong> &nbsp;&bull;&nbsp; <strong>69 examples</strong> &nbsp;&bull;&nbsp; <strong>80 showcase pieces</strong>
2929
</p>
3030

3131
<p align="center">
@@ -44,13 +44,13 @@
4444

4545
## Overview
4646

47-
This repository ships **19 skills, 11 rules, 3 templates, 29 snippets, 69 examples, and 80 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
47+
This repository ships **20 skills, 11 rules, 3 templates, 29 snippets, 69 examples, and 80 showcase pieces** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
4848

4949
The content is consumed by AI coding agents, installed as a plugin or read from a checkout. An optional second plugin registers the official [Blender Lab MCP server](https://www.blender.org/lab/mcp-server/) for live sessions (see [Live Blender session](#live-blender-session-mcp)); the server is referenced from upstream, not part of this repository, and nothing else depends on it. Cursor and Claude Code both install it as a plugin (see [Quick start](#quick-start)): Cursor loads the skills and applies `rules/*.mdc` wherever their scope globs match; Claude Code loads the skills and gets the rules through a generated `blender-rules` skill, since it does not read Cursor `.mdc` files. An agent picks a skill up when its description matches the task. Any agent that can read files in a workspace can use it the same way. There is no build step for the content — edit the Markdown and Python files directly.
5050

5151
| Layer | Role |
5252
| --- | --- |
53-
| **Skills** | Guided workflows: scaffolding, operators, panels, properties, mesh and bmesh, headless batch, slotted actions, geometry nodes, procedural materials, depsgraph queries, drivers and handlers, `bl_info` migration, video sequencer, imported-mesh cleanup, high-to-low baking, engine export presets, extension runtime and packaging, timers, modal operators and threading, GPU drawing and viewport overlays |
53+
| **Skills** | Guided workflows: scaffolding, operators, panels, properties, mesh and bmesh, headless batch, slotted actions, geometry nodes, procedural materials, depsgraph queries, drivers and handlers, `bl_info` migration, video sequencer, imported-mesh cleanup, high-to-low baking, engine export presets, extension runtime and packaging, timers, modal operators and threading, GPU drawing and viewport overlays, porting add-ons to Blender 5 |
5454
| **Rules** | Guardrails for the most common AI mistakes: ops-in-loops, bmesh leaks, legacy `bl_info` only, prop assignments, deprecated context-copy override, per-element loops over bulk mesh data, import without scale check, export without evaluated geometry, mixed glTF/FBX axis RNA |
5555
| **Templates** | A working Extensions Platform add-on starter, a headless batch script starter, and a GLB-in engine-ready asset pipeline |
5656
| **Snippets** | 29 small standalone Python files demonstrating canonical patterns, 5 to 75 lines each |
@@ -61,14 +61,14 @@ The content is consumed by AI coding agents, installed as a plugin or read from
6161

6262
Neither agent needs a clone of `main`: both install the slim `plugin-dist` build. Clone the full repository only to [run the examples or contribute](#run-the-examples-or-contribute).
6363

64-
- **Cursor** — install it as a local plugin from the slim `plugin-dist` branch, then run **Developer: Reload Window**. **Customize** lists the 19 skills and 11 rules; the rules apply by glob scope and the agent loads a skill when its description matches the task.
64+
- **Cursor** — install it as a local plugin from the slim `plugin-dist` branch, then run **Developer: Reload Window**. **Customize** lists the 20 skills and 11 rules; the rules apply by glob scope and the agent loads a skill when its description matches the task.
6565

6666
```bash
6767
git clone --branch plugin-dist --single-branch https://github.com/TMHSDigital/Blender-Developer-Tools.git ~/.cursor/plugins/local/blender-developer-tools
6868
```
6969

7070
(On Windows the folder is `%USERPROFILE%\.cursor\plugins\local\`. Cursor skips symlinks that point outside that folder, so clone or copy rather than link.) Teams can import the repository as a team marketplace instead; it carries `.cursor-plugin/marketplace.json`. The plugin already applies the rules, so there is nothing to copy. Only to scope the pack to one project without the plugin, copy `skills/*` into that project's `.cursor/skills/` and `rules/*.mdc` into `.cursor/rules/` from a checkout; copying only the rules gives you no skills.
71-
- **Claude Code** — install as a plugin, then run `/skills` to see all 19 skills plus `blender-rules`:
71+
- **Claude Code** — install as a plugin, then run `/skills` to see all 20 skills plus `blender-rules`:
7272

7373
```text
7474
/plugin marketplace add TMHSDigital/Blender-Developer-Tools@plugin-dist
@@ -175,7 +175,7 @@ Browse both, with filters, full-size renders and each script's README, in the **
175175
## How content is organized
176176

177177
```
178-
skills/<name>/SKILL.md - 19 skill files, YAML frontmatter, one canonical pattern each
178+
skills/<name>/SKILL.md - 20 skill files, YAML frontmatter, one canonical pattern each
179179
rules/<name>.mdc - 11 rule files, anti-pattern + correction
180180
templates/<name>/ - 3 template directories (extension-addon-template, headless-batch-script-template, ai-asset-pipeline-template)
181181
snippets/<name>.py - 29 standalone Python snippets, 5 to 75 lines each

‎ROADMAP.md‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
The skill, rule and example work planned for what the plugin teaches, separate from the
1010
showcase pool further down. Each item is an open issue; nothing here is pinned to a version.
1111

12-
- **New skills:** `porting-to-blender-5`, one index of every 4.x to 5.x break the pack covers ([#466](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/466)); teach the API contracts that shipped examples prove but no skill covers yet, such as Grease Pencil v3, the 5.x compositor, constraints and image pixels ([#456](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/456))
12+
- **New skills:** teach the API contracts that shipped examples prove but no skill covers yet, such as Grease Pencil v3, the 5.x compositor, constraints and image pixels ([#456](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/456))
1313
- **Skill corrections:** the full Principled BSDF v2 socket rename table in `procedural-materials-and-shaders` ([#382](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/382))
1414
- **Verification:** run the shipped snippets and SKILL.md code blocks in CI instead of frozen copies ([#447](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/447)); a weekly, non-gating smoke run against Blender daily builds to catch API breaks before a release ([#457](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/457))
1515
- **More agents:** first-class support for Codex, Copilot, Windsurf and Gemini through `.agents/skills` and an AGENTS.md rules export ([#376](https://github.com/TMHSDigital/Blender-Developer-Tools/issues/376))
@@ -38,6 +38,7 @@ derives the actual version from conventional-commit types.
3838
| Timers, modal operators and threading | 18 | 9 | 3 | 29 | Shipped (v0.147.0) |
3939
| GPU drawing without `bgl` | 19 | 10 | 3 | 29 | Shipped |
4040
| Removed normals API rule (pre-4.1 auto smooth) | 19 | 11 | 3 | 29 | Shipped |
41+
| Porting index skill (`porting-to-blender-5`) | 20 | 11 | 3 | 29 | Shipped |
4142
| Live-session bridge (opt-in `blender-live-session` plugin, upstream Blender Lab MCP) | - | - | - | - | Shipped |
4243
| Stable (1.0) | — | — | — | — | Upcoming; criteria below |
4344

‎examples/index.json‎

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,9 @@
363363
"name": "compositor-glare",
364364
"path": "examples/compositor-glare/",
365365
"script": "examples/compositor-glare/compositor_glare.py",
366-
"skills": [],
366+
"skills": [
367+
"porting-to-blender-5"
368+
],
367369
"render": true,
368370
"min_version": "4.5",
369371
"run": "blender --background --python examples/compositor-glare/compositor_glare.py",
@@ -392,7 +394,8 @@
392394
"path": "examples/cross-version-property-delete/",
393395
"script": "examples/cross-version-property-delete/cross_version_property_delete.py",
394396
"skills": [
395-
"custom-properties"
397+
"custom-properties",
398+
"porting-to-blender-5"
396399
],
397400
"render": true,
398401
"min_version": "4.5",
@@ -648,7 +651,8 @@
648651
"path": "examples/eval-mesh-datablock-name/",
649652
"script": "examples/eval-mesh-datablock-name/eval_mesh_datablock_name.py",
650653
"skills": [
651-
"depsgraph-and-evaluated-data"
654+
"depsgraph-and-evaluated-data",
655+
"porting-to-blender-5"
652656
],
653657
"render": false,
654658
"min_version": "4.5",
@@ -1238,7 +1242,8 @@
12381242
"path": "examples/gpu-offscreen-draw/",
12391243
"script": "examples/gpu-offscreen-draw/gpu_offscreen_draw.py",
12401244
"skills": [
1241-
"gpu-drawing-and-overlays"
1245+
"gpu-drawing-and-overlays",
1246+
"porting-to-blender-5"
12421247
],
12431248
"render": false,
12441249
"min_version": "5.2",
@@ -1283,7 +1288,9 @@
12831288
"name": "grease-pencil-rosette",
12841289
"path": "examples/grease-pencil-rosette/",
12851290
"script": "examples/grease-pencil-rosette/grease_pencil_rosette.py",
1286-
"skills": [],
1291+
"skills": [
1292+
"porting-to-blender-5"
1293+
],
12871294
"render": true,
12881295
"min_version": "4.5",
12891296
"run": "blender --background --python examples/grease-pencil-rosette/grease_pencil_rosette.py",
@@ -1546,7 +1553,8 @@
15461553
"path": "examples/mesh-normals-after-41/",
15471554
"script": "examples/mesh-normals-after-41/mesh_normals_after_41.py",
15481555
"skills": [
1549-
"mesh-editing-and-bmesh"
1556+
"mesh-editing-and-bmesh",
1557+
"porting-to-blender-5"
15501558
],
15511559
"render": false,
15521560
"min_version": "4.5",

‎examples/skills.json‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,19 @@
1010
"coincident-vert-weld": ["ai-mesh-cleanup"],
1111
"collision-hull-proxy": ["ai-mesh-cleanup", "mesh-editing-and-bmesh"],
1212
"color-attribute-wheel": ["mesh-editing-and-bmesh"],
13-
"compositor-glare": [],
14-
"cross-version-property-delete": ["custom-properties"],
13+
"compositor-glare": ["porting-to-blender-5"],
14+
"cross-version-property-delete": ["custom-properties", "porting-to-blender-5"],
1515
"curve-bevel-arc": [],
1616
"custom-normals-shade": ["mesh-editing-and-bmesh"],
1717
"damped-track-aim": [],
1818
"degenerate-bevel-weld": ["ai-mesh-cleanup", "mesh-editing-and-bmesh"],
1919
"depsgraph-export": ["depsgraph-and-evaluated-data"],
2020
"driver-wave": ["drivers-and-app-handlers"],
21-
"eval-mesh-datablock-name": ["depsgraph-and-evaluated-data"],
21+
"eval-mesh-datablock-name": ["depsgraph-and-evaluated-data", "porting-to-blender-5"],
2222
"exit-pre-sidecar": ["drivers-and-app-handlers"],
2323
"export-preset-axis": ["engine-export-presets"],
2424
"extension-package-lifecycle": ["extension-runtime-and-packaging", "headless-batch-scripting"],
25-
"gpu-offscreen-draw": ["gpu-drawing-and-overlays"],
25+
"gpu-offscreen-draw": ["gpu-drawing-and-overlays", "porting-to-blender-5"],
2626
"gltf-export-roundtrip": ["depsgraph-and-evaluated-data", "engine-export-presets", "headless-batch-scripting"],
2727
"gltf-skin-roundtrip": ["depsgraph-and-evaluated-data", "engine-export-presets"],
2828
"gn-bundle-roundtrip": ["geometry-nodes-python"],
@@ -33,14 +33,14 @@
3333
"gn-socket-rename": ["geometry-nodes-python"],
3434
"gn-zone-iterate": ["geometry-nodes-python"],
3535
"gp-lineart-contour": [],
36-
"grease-pencil-rosette": [],
36+
"grease-pencil-rosette": ["porting-to-blender-5"],
3737
"image-pixels-testcard": [],
3838
"lattice-deform": ["depsgraph-and-evaluated-data", "mesh-editing-and-bmesh"],
3939
"light-link-studio": [],
4040
"lightmap-uv-channel": ["mesh-editing-and-bmesh"],
4141
"lod-decimate-chain": ["ai-mesh-cleanup", "depsgraph-and-evaluated-data", "mesh-editing-and-bmesh"],
4242
"mesh-automasking-settings": [],
43-
"mesh-normals-after-41": ["mesh-editing-and-bmesh"],
43+
"mesh-normals-after-41": ["mesh-editing-and-bmesh", "porting-to-blender-5"],
4444
"mesh-hygiene-audit": ["ai-mesh-cleanup", "mesh-editing-and-bmesh"],
4545
"modular-kit-snap": ["ai-mesh-cleanup", "mesh-editing-and-bmesh"],
4646
"ngon-triangulate": ["ai-mesh-cleanup", "mesh-editing-and-bmesh"],

‎scripts/build_plugin_dist.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
```
7070
7171
Cursor: clone this branch into `~/.cursor/plugins/local/blender-developer-tools`
72-
and reload the window (Customize then lists the 19 skills and 11 rules).
72+
and reload the window (Customize then lists the 20 skills and 11 rules).
7373
7474
Skills reference bundled files as `${CLAUDE_PLUGIN_ROOT}/snippets/...`, which
7575
Claude Code expands to this plugin's install directory. In Cursor, read it as

‎site.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
"github": "https://github.com/TMHSDigital/Blender-Developer-Tools"
1919
},
2020
"installSteps": [
21-
"<strong>Claude Code:</strong> <code>/plugin marketplace add TMHSDigital/Blender-Developer-Tools@plugin-dist</code> then <code>/plugin install blender-developer-tools@blender-developer-tools</code>. The 19 skills load when a task matches; the rules come along as the <code>blender-rules</code> skill",
22-
"<strong>Cursor:</strong> <code>git clone --branch plugin-dist --single-branch https://github.com/TMHSDigital/Blender-Developer-Tools.git ~/.cursor/plugins/local/blender-developer-tools</code>, then reload the window; Customize lists the 19 skills and 11 rules, and the plugin applies the rules for you. This clones only the 0.3 MB plugin build, not <code>main</code>",
21+
"<strong>Claude Code:</strong> <code>/plugin marketplace add TMHSDigital/Blender-Developer-Tools@plugin-dist</code> then <code>/plugin install blender-developer-tools@blender-developer-tools</code>. The 20 skills load when a task matches; the rules come along as the <code>blender-rules</code> skill",
22+
"<strong>Cursor:</strong> <code>git clone --branch plugin-dist --single-branch https://github.com/TMHSDigital/Blender-Developer-Tools.git ~/.cursor/plugins/local/blender-developer-tools</code>, then reload the window; Customize lists the 20 skills and 11 rules, and the plugin applies the rules for you. This clones only the 0.3 MB plugin build, not <code>main</code>",
2323
"<strong>Other agents (Codex, Copilot, Windsurf):</strong> clone the same slim build (<code>git clone --branch plugin-dist --single-branch https://github.com/TMHSDigital/Blender-Developer-Tools.git</code>) and copy its <code>skills/*</code> into your agent's skills folder (for example <code>.agents/skills/</code>); point it at <code>claude/blender-rules.md</code> for the rules",
2424
"<strong>Optional, live session:</strong> <code>/plugin install blender-live-session@blender-developer-tools</code> adds the official Blender Lab MCP server (needs <code>uv</code> and Blender 5.1+ with its add-on) so the agent can inspect and drive your open scene, plus a skill that has it read before it mutates and prove changes headless. See the README's <a href=\"https://github.com/TMHSDigital/Blender-Developer-Tools#live-blender-session-mcp\">Live Blender session</a>",
2525
"Grab <code>snippets/</code> and <code>templates/</code> as starting points for add-ons and headless batch jobs"

0 commit comments

Comments
 (0)