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
feat: target Blender 5.2 LTS and witness NodesModifier input writes
* feat: target Blender 5.2 LTS and witness NodesModifier input writes
CI was blind to the 5.2 removal of dict assignment on Geometry Nodes modifiers because no example asserted the write. Teach both sides of the split and fail the check if the value does not land.
Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* ci: remove the 5.2 smoke canary after the red run
The 5.2 job downloaded blender-5.2.1-linux-x64.tar.xz, printed Blender 5.2.1 LTS, then exited 1 on the injected canary. The matrix leg executes.
Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* fix: set VSE render size before 5.2 COLOR strips bake width/height
5.2 COLOR strips get readonly width/height from the scene resolution at new_effect. Creating at factory 1920 then rendering 96 made 0.36-scaled cells cover the frame so the mosaic pixel check sampled amber instead of crimson.
Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Signed-off-by: fOuttaMyPaint <TMhospitalitystrategies@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Copy file name to clipboardExpand all lines: CLAUDE.md
+10-9Lines changed: 10 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
8
8
9
9
## Project Overview
10
10
11
-
The **Blender Developer Tools** repository is at **v0.46.1**. It packages skills, rules, snippets, starter templates, and runnable smoke-gated examples for Blender Python development with Cursor and Claude Code. Coverage targets **Blender 5.1** (current stable) with **Blender 4.5 LTS** fallback. There is no MCP server; content is consumed directly by the AI when working in Blender add-on or scripting projects.
11
+
The **Blender Developer Tools** repository is at **v0.46.1**. It packages skills, rules, snippets, starter templates, and runnable smoke-gated examples for Blender Python development with Cursor and Claude Code. Coverage targets **Blender 5.2 LTS** (current stable) with **Blender 4.5 LTS** fallback. **Blender 5.1** is prior stable. There is no MCP server; content is consumed directly by the AI when working in Blender add-on or scripting projects.
12
12
13
13
**Version:** 0.46.1
14
14
**License:** CC-BY-NC-ND-4.0
@@ -21,7 +21,7 @@ skills/<skill-name>/SKILL.md - AI workflow definitions, 12 total
21
21
rules/<rule-name>.mdc - Anti-pattern rules, 6 total
22
22
templates/<template-name>/ - Starter projects, 2 total
23
23
snippets/<snippet-name>.py - Standalone code patterns, 17 total
24
-
examples/<name>/ - Runnable smoke-gated examples, 44 total (+ gallery.json)
24
+
examples/<name>/ - Runnable smoke-gated examples, 45 total (+ gallery.json)
25
25
scripts/build_gallery.py - Regenerates docs/gallery/ from gallery.json (stdlib only)
v0.2.0: Principled BSDF material, driver-with-custom-function via `driver_namespace`, application handler registration, shader node group with cross-version `interface` API, `foreach_get` bulk vertex read, version-branch skeleton, and USD export with `evaluation_mode='RENDER'`.
84
84
85
-
## Examples (44)
85
+
## Examples (45)
86
86
87
87
Runnable scripts at `examples/<name>/`, each asserting a real API contract with
88
88
deterministic checks (exit non-zero on failure) and optionally rendering a still via
89
-
`--output`. All of them run headless on Blender 4.5 LTS and 5.1 in `blender-smoke.yml`;
89
+
`--output`. All of them run headless on Blender 5.2 LTS and 4.5 LTS in `blender-smoke.yml` (5.1 on the weekly cron);
90
90
their renders ship in the site gallery at `docs/gallery/`. `examples/gallery.json` is the
91
91
gallery's source of truth. When authoring a new one, copy the anatomy of
92
92
`examples/bmesh-gear/` (script structure, README shape, dark-studio render recipe) and
@@ -100,8 +100,8 @@ cross-example import mechanism (see its docstring).
100
100
101
101
## Blender Runtime Discovery
102
102
103
-
- Local Blender binaries: check `.scratch/` at the repo root **first** — some machines have no system Blender install, and a prior agent run downloads official releases there (e.g. `.scratch/5.1/blender-5.1.x-.../blender[.exe]`). Then check system installs. Do not probe blindly; locate the binary, run it, and state the **exact binary path and the version the binary itself reports** in every report.
104
-
-**5.1 is the local check version. 4.5 LTS is exercised by CI when unavailable locally.** 4.4 is not a substitute for 4.5 and must never be reported as 4.5.
103
+
- Local Blender binaries: check `.scratch/` at the repo root **first** — some machines have no system Blender install, and a prior agent run downloads official releases there (e.g. `.scratch/5.2/blender-5.2.x-.../blender[.exe]`). Then check system installs. Do not probe blindly; locate the binary, run it, and state the **exact binary path and the version the binary itself reports** in every report.
104
+
-**5.2 LTS is the local check version. 4.5 LTS is exercised by CI when unavailable locally.** 4.4 is not a substitute for 4.5 and must never be reported as 4.5.
105
105
-**CI floats within each series:**`blender-smoke.yml` resolves the highest published point release at run time (`sort -V | tail -1` on the download listing), so a local 4.5.x may lag CI — its 4.5 job ran 4.5.12 LTS on PR #107 while local `.scratch/` held 4.5.11. Either way, state the exact version the binary reports.
106
106
- If `.scratch/` lacks a needed version, download an official release from download.blender.org into it. `.scratch` is gitignored.
107
107
- In scripts, version-branch on the `bpy.app.version` tuple, never on `bpy.app.version_string` — it reads e.g. `"4.5.11 LTS"`, not bare semver.
@@ -127,7 +127,7 @@ Stage with **explicit paths only** — never `git add -A` or `git add .`. Cursor
127
127
- **Asset-sheet gate (asset-type examples — game props/kits):** composite the hero asset rendered alone (neutral three-quarter view, plain studio lighting, no staging tricks, no labels, no comparison props) beside the pinned asset-quality reference set — currently `collision-hull-proxy`, `custom-normals-shade`, `vertex-weight-limit`, `lod-decimate-chain` — rendered the same way; commit under `docs/gallery/asset-sheets/`, link it in the PR body, and report a verdict. The asset ships only if it is not identifiable as the least-designed object in that lineup — a strong scene can carry a weak model; this gate removes the scene. **This list is the canonical home of the reference set** — update it here when a new asset outclasses a member. The measurable floors behind the gate (naming, material variation, edge treatment) live in `examples/gallery_asset_quality.py` — render path only, same call pattern as `gallery_framing`, exit 11 on violation — with the calibration table and dropped-floor evidence in `docs/VISUAL-STYLE.md` § Asset quality.
128
128
-**Falsification:** every check must be proven to fail once — break the contract, observe the non-zero exit, restore — with the probe and the measured error reported in the PR body. An assertion that cannot fail witnesses nothing.
129
129
-**After gallery regeneration** (`python scripts/build_gallery.py`), read the **generated HTML** character by character — the `<img alt>` text and witnesses callouts in `docs/gallery/index.html` and `docs/gallery/<name>/index.html` — not just `examples/gallery.json`. Precedent: the `teaches.split(".")[0]` bug truncated 14/21 card alts at dotted API paths like `bmesh.ops` while the source JSON looked fine (fixed in PR #68).
130
-
-**Playwright gallery captures:** gallery `<img>` tags lazy-load, so force them first (`document.querySelectorAll('img').forEach(i => i.loading = 'eager')`, then wait). **Scroll the target card into view and take a viewport capture** — `scrollIntoView({block:'center', behavior:'instant'})`, short wait, `browser_take_screenshot` with `fullPage` omitted. A `fullPage` capture is NOT a workaround: on a tall gallery page it renders every card image blank even when the images are verified loaded (`complete === true`, `naturalWidth === 1280`, `opacity === 1`) — measured on the 44-card grid at 1425x4516. Verify load state via `browser_evaluate` rather than trusting the pixels.
130
+
-**Playwright gallery captures:** gallery `<img>` tags lazy-load, so force them first (`document.querySelectorAll('img').forEach(i => i.loading = 'eager')`, then wait). **Scroll the target card into view and take a viewport capture** — `scrollIntoView({block:'center', behavior:'instant'})`, short wait, `browser_take_screenshot` with `fullPage` omitted. A `fullPage` capture is NOT a workaround: on a tall gallery page it renders every card image blank even when the images are verified loaded (`complete === true`, `naturalWidth === 1280`, `opacity === 1`) — measured on the 45-card grid at 1425x4516. Verify load state via `browser_evaluate` rather than trusting the pixels.
131
131
132
132
## Example-Run Process
133
133
@@ -149,7 +149,7 @@ The AI consumes content via:
149
149
150
150
## Key Conventions
151
151
152
-
-**Blender versions**: 5.1 primary, 4.5 LTS fallback. Skills must show both code paths when 4.x and 5.x APIs diverge.
152
+
-**Blender versions**: 5.2 LTS primary, 5.1 prior stable, 4.5 LTS fallback. Skills must show both code paths when 4.x and 5.x APIs diverge, and the 5.1-vs-5.2 NodesModifier input split.
153
153
-**Properties as annotations**: `my_prop: bpy.props.FloatProperty(...)` (correct), not `my_prop = bpy.props.FloatProperty(...)` (deprecated).
154
154
-**bmesh memory**: every `bmesh.new()` must be paired with `bm.free()` in a `try`/`finally`.
155
155
-**No `bpy.ops` in tight loops**: use `bpy.data.*` and `bmesh` for bulk work.
@@ -160,7 +160,8 @@ The AI consumes content via:
160
160
161
161
| Area | URL |
162
162
| --- | --- |
163
-
| Python API (5.1) |https://docs.blender.org/api/current/|
163
+
| Python API (5.2 LTS) |https://docs.blender.org/api/current/|
164
+
| Python API (5.1) |https://docs.blender.org/api/5.1/|
164
165
| Python API (4.5 LTS) |https://docs.blender.org/api/4.5/|
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -88,7 +88,7 @@ templates/
88
88
89
89
## Blender Version Targeting
90
90
91
-
Content targets **Blender 5.1** as primary, with**Blender 4.5 LTS** as fallback. When the API differs, branch on `bpy.app.version` and document both paths. Example:
91
+
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:
0 commit comments