|
17 | 17 | </p> |
18 | 18 |
|
19 | 19 | <p align="center"> |
20 | | - <strong>12 skills</strong> • <strong>6 rules</strong> • <strong>2 templates</strong> • <strong>17 snippets</strong> • <strong>19 examples</strong> |
| 20 | + <strong>12 skills</strong> • <strong>6 rules</strong> • <strong>2 templates</strong> • <strong>17 snippets</strong> • <strong>20 examples</strong> |
21 | 21 | </p> |
22 | 22 |
|
23 | 23 | --- |
24 | 24 |
|
25 | 25 | ## Overview |
26 | 26 |
|
27 | | -This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 19 runnable examples** for Blender Python development targeting Blender 5.1 (current stable) with Blender 4.5 LTS fallback support. |
| 27 | +This repository ships **12 skills, 6 rules, 2 templates, 17 snippets, and 20 runnable examples** for Blender Python development targeting Blender 5.1 (current stable) with Blender 4.5 LTS fallback support. |
28 | 28 |
|
29 | 29 | 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. |
30 | 30 |
|
@@ -332,6 +332,25 @@ but planar, that body edits regenerate geometry, that `version_string` is not ba |
332 | 332 | semver on LTS builds (`"4.5.11 LTS"`), and that a Mesh reference dies at |
333 | 333 | `to_mesh_clear()`. |
334 | 334 |
|
| 335 | +</td> |
| 336 | +</tr> |
| 337 | +<tr> |
| 338 | +<td width="46%" valign="middle"> |
| 339 | +<a href="examples/image-pixels-testcard/"><img src="examples/image-pixels-testcard/preview.webp" alt="Image pixels testcard: a studio monitor showing a procedural broadcast test card — seven neon color bars behind the classic dark circle, a luminance ramp, and a PLUGE row with a white bottom-left origin marker — over a teal underglow on a dark studio floor" /></a> |
| 340 | +</td> |
| 341 | +<td valign="middle"> |
| 342 | + |
| 343 | +### [image-pixels-testcard](examples/image-pixels-testcard/) |
| 344 | + |
| 345 | +A procedural broadcast test card written into `bpy.data.images.new()` with one |
| 346 | +`pixels.foreach_set()` call. Asserts the buffer is always flat RGBA (`channels == 4` |
| 347 | +even with `alpha=False`), that byte storage quantizes at exactly ≤ 0.5/255 and |
| 348 | +strictly > 0 while `float_buffer=True` round-trips at float32 precision, that |
| 349 | +`scale()` reallocates (stale-size reads raise), and the `save()` trap: `source` |
| 350 | +silently flips to `FILE`, the buffer drops, and later `pixels` reads come from |
| 351 | +whatever sits on disk — proven with an imposter file. `save_render()` is the |
| 352 | +non-destructive path. |
| 353 | + |
335 | 354 | </td> |
336 | 355 | </tr> |
337 | 356 | </table> |
|
0 commit comments