You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1. Add a directory under `templates/`, e.g. `templates/headless-batch-script-template/`.
87
94
2. Include all files needed for an immediate copy-paste starting point. For add-on templates, include `blender_manifest.toml`, `__init__.py`, and a brief `README.md`.
1. Add `showcase/<kebab-name>/` with a script, a README that includes an
102
+
exit-code table, and a falsifier that breaks one pipeline stage so a
103
+
**named** budget fails.
104
+
2. List the directory in `.cursor-plugin/plugin.json``"showcase"` and add a
105
+
`tests/smoke/catalog.json` row. The runner takes opaque script paths.
106
+
3. Add a `showcase/gallery.json``pieces[]` entry, render a still, and run
107
+
`python scripts/build_gallery.py`. Do not hand-edit `docs/gallery/` HTML.
108
+
4. Update the README showcase-piece count. `validate-counts` checks it
109
+
separately from the example total.
110
+
89
111
## Blender Version Targeting
90
112
91
113
Content targets **Blender 5.2 LTS** as primary, **Blender 5.1** as prior stable, and **Blender 4.5 LTS** as fallback. When the API differs, branch on `bpy.app.version` and document both paths. Example:
@@ -169,7 +191,7 @@ The drift-check workflow enforces these on every push and PR.
169
191
170
192
## Aggregate Counts
171
193
172
-
`README.md` declares aggregate counts (e.g. "8 skills, 4 rules, 1 template, and 10 snippets"). The `validate-counts` job in `.github/workflows/validate.yml` enforces these substrings against the filesystem on every push and PR. When you add or remove content, update the README counts in the same commit.
194
+
`README.md` declares aggregate counts (e.g. "16 skills, 9 rules, 3 templates, 27 snippets, 59 examples, and 1 showcase piece"). 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.
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, and 59 examples** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
40
+
This repository ships **16 skills, 9 rules, 3 templates, 27 snippets, 59 examples, and 1 showcase piece** for Blender Python development targeting Blender 5.2 LTS (current stable) with Blender 4.5 LTS fallback support. Blender 5.1 is prior stable.
40
41
41
42
The content is consumed by AI coding agents (Cursor, Claude Code, any MCP-capable client) when working on Blender add-ons, geometry nodes scripts, batch pipelines, or animation tooling. There is no build step. Edit the markdown and Python files directly.
42
43
@@ -45,7 +46,8 @@ The content is consumed by AI coding agents (Cursor, Claude Code, any MCP-capabl
|**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 |
47
48
|**Templates**| A working Extensions Platform add-on starter, a headless batch script starter, and a GLB-in engine-ready asset pipeline |
48
-
|**Snippets**| 24 small standalone Python files demonstrating canonical patterns |
49
+
|**Snippets**| 27 small standalone Python files demonstrating canonical patterns |
50
+
|**Showcase**| Budget-conformance props under [`showcase/`](showcase/). Not examples. Conventions: [`showcase/README.md`](showcase/README.md)|
| Blender 5.1 | Prior stable (weekly cron; PR via `needs-5.1` or manual dispatch) |
70
72
| Blender 4.5 LTS | Fallback supported (skills show both code paths where 4.x and 5.x APIs diverge) |
71
73
74
+
## Showcase
75
+
76
+
Budget-conformance props. Not examples. Conventions: [`showcase/README.md`](showcase/README.md).
77
+
78
+
<ahref="showcase/shipping-crate/"><imgsrc="showcase/shipping-crate/preview.webp"alt="Shipping crate: a wooden slat crate with iron corner brackets on a dark studio floor, warm wedge on the back wall" /></a>
79
+
80
+
First piece: [`shipping-crate`](showcase/shipping-crate/) — procedural crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets. Falsifier `--skip-decimate` exits 9.
81
+
72
82
## Examples
73
83
74
84
Runnable, smoke-gated demos live in [`examples/`](examples/) — each is executed headless on
Copy file name to clipboardExpand all lines: ROADMAP.md
+5Lines changed: 5 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -106,6 +106,11 @@ Provider-agnostic GLB-in / engine-ready-out. This repo does not generate meshes.
106
106
107
107
Not committed; target list for the next content version. (v0.3.0 shipped the smoke-gated `examples/` track.)
108
108
109
+
-~~Showcase sibling tree + shipping-crate pilot~~**SHIPPED** as `showcase/shipping-crate/` — budget-conformance crate composing bake, LOD, collider, Unity glTF; `--skip-decimate` exits 9 on the LOD1 ratio band; DECIMATE COLLAPSE ratios diverge on 5.2 vs 4.5/5.1
110
+
- Procedural terrain or landscape showcase using Geometry Nodes scatter
111
+
- Hero prop with a more complex silhouette (lantern or treasure chest) as a second showcase piece
112
+
- Small modular kit showcase on recognizable geometry (`modular-kit-snap` contract)
113
+
109
114
-~~Custom ID-property delete witness~~**SHIPPED** as `examples/cross-version-property-delete/` — IDs built via `bpy.data.objects.new` (not `active_object`); `property_unset` is TypeError and leaves the key; `del` removes it on 4.5 LTS and 5.x
110
115
-~~USD export evaluation_mode witness~~**SHIPPED** as `examples/usd-export-evaluation-mode/` — probed `wm.usd_export` on CI Linux portables 5.2.1 (`9e2066aef7ef`) and 4.5.13 (`daeeeca98fb0`); TESSELLATE+VIEWPORT 26/24, TESSELLATE+RENDER 98/96; BEST_MATCH writes the 8-vert catmullClark cage so the mode is silent
111
116
-~~Repeat Zone / For Each Element pairing witness~~**SHIPPED** as `examples/gn-zone-iterate/` — `pair_with_output` is load-bearing (unpaired evaluates 0 verts); Repeat `8×(1+N)` with X-centers at `k×STEP`; For Each `8×P` with Z-centers at `i×STEP`; For Each main Geometry is a passthrough (6 verts); count-only is insufficient (`--no-offset` still 32 verts, one X-center)
<aclass="card-media" href="shipping-crate/" aria-label="shipping-crate example detail page">
890
+
<imgsrc="assets/shipping-crate-hero.webp" alt="shipping-crate — A procedural shipping crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract." loading="lazy" decoding="async" />
<pclass="teaches">A procedural shipping crate through UVs, bake, LOD, collider, and Unity glTF, asserting recomputed budgets rather than an API contract.</p>
895
+
<pclass="witnesses"><spanclass="tag">witnesses</span> Recomputed: 552 tris, two materials, UVs in 0..1 with zero AABB overlap, outer AABB 1.256×0.856×0.748 m, LOD ratios in band (5.2 COLLAPSE more aggressive), convex collider 20 tris, non-empty glTF. --skip-decimate exits 9 on the LOD1 ratio budget.</p>
896
+
<aclass="card-link" href="shipping-crate/">View example <spanaria-hidden="true">→</span></a>
897
+
</div>
898
+
</article>
887
899
</div>
888
900
<pclass="noresults" id="noResults" hidden>No examples match the current filters.
889
901
<buttonclass="chip" id="resetFilters" type="button">Clear search and tags</button></p>
0 commit comments