Current: v0.27.3
Themes are listed in order. Shipped themes note the release they landed in (for reference, not a commitment); upcoming themes are intentionally not pinned to a version number, so shipping another example or skill never forces a roadmap renumber. The release pipeline derives the actual version from conventional-commit types.
| Theme | Skills | Rules | Templates | Snippets | Status |
|---|---|---|---|---|---|
| Foundation | 8 | 4 | 1 | 10 | Shipped (v0.1.0) |
| Materials, drivers, migration | 12 | 6 | 2 | 17 | Shipped (v0.2.0) |
| Examples and demos (smoke-gated) | 12 | 6 | 2 | 17 | Shipped (v0.3.0) |
| More examples (turntable, SDF remesh) | 12 | 6 | 2 | 17 | Shipped (v0.4.0) |
| 5.2 LTS sweep, modal operators, USD | — | — | — | — | Upcoming |
| Stable | — | — | — | — | Upcoming |
The 8 skills:
addon-scaffolding-- Extensions Platform manifest, file layout, register/unregister symmetryoperators--bpy.types.Operatorlifecycle,bl_idname, redo, defensive context handlingui-panels--bpy.types.Paneldeclarativedraw(), layout primitives, conditional UIcustom-properties--bpy.propsannotations, PropertyGroup, PointerProperty, storage tradeoffsmesh-editing-and-bmesh-- when to use bpy.data vs bpy.ops vs bmesh, foreach_set, depsgraph evalheadless-batch-scripting--blender --background --python, temp_override, argparse after--slotted-actions-animation-- Blender 5.x Slotted Actions, channelbag, 4.5 LTS fallback bridgegeometry-nodes-python-- programmatic GN tree construction, interface sockets, NODES modifier
The 4 rules:
prefer-data-over-ops-in-loopsalways-free-bmeshtarget-extensions-platform-formattype-annotate-props-and-defend-context
The 1 template:
extension-addon-template-- Extensions Platform format, register_classes_factory, PointerProperty binding, symmetric register/unregister
The 10 snippets:
canonical-object-creation.pycanonical-object-deletion.pydepsgraph-evaluated-mesh.pybmesh-load-edit-free.pytemp-override-context.pyforeach-set-vertices.pyregister-classes-factory.pypointerproperty-binding.pycross-version-property-delete.pyaction-ensure-channelbag-for-slot.py
The 4 new skills:
procedural-materials-and-shaders-- node tree construction for Principled BSDF, emissive, node groups; cross-version socket-name handling forSpecular IOR Leveldepsgraph-and-evaluated-data--evaluated_getplusto_meshplusto_mesh_clearlifetime contract, OBJ-style exporter worked exampledrivers-and-app-handlers-- driver expressions,bpy.app.driver_namespaceescape hatch, application handler pattern with@persistent, the new 5.1exit_prehandlerbl-info-migration-- three-step migration from legacybl_infoto Extensions Platform, before-and-after diff, dual-format pattern
The 2 new rules:
prefer-temp-override-over-context-copy--bpy.context.copy()deprecation in 4.x, removal in 5.x,temp_overridereplacementuse-foreach-set-for-bulk-data-- per-element Python loops over mesh data versusforeach_setandforeach_get
The 1 new template:
headless-batch-script-template-- argparse after--, mesh iteration, modifier apply via temp_override, glTF export, explicit exit codes
The 7 new snippets:
principled-bsdf-material.pydriver-with-custom-function.pyapp-handler-registration.pyshader-node-group.py(cross-versioninterfacevsinputs/outputs)foreach-get-vertices.pyversion-branch-skeleton.pyusd-export-evaluation-mode.py
Audit pass on v0.1.0 content: standards-version markers bumped from 1.9.1 to 1.9.4 across all skills, rules, AGENTS.md, CLAUDE.md, and ROADMAP.md. Verified the bpy_extras.anim_utils.action_ensure_channelbag_for_slot import path against the current Blender 5.1 API reference and removed the stale "verify before production" caveat in slotted-actions-animation/SKILL.md.
Not committed; target list for the next content version. (v0.3.0 shipped the smoke-gated examples/ track.)
Fleet Pages facelift + examples supportRESOLVED differently (2026-07-03): the meta-repo migration was dropped — the fleet template only scaffolds new tools, and each tool's site evolves independently after that. This repo vendored the site build intoscripts/site/, redesigned landing + gallery as the Blender-viewport system (seedocs/gallery/DESIGN_NOTES.md), added the examples grid, nav link, and full hero stats locally.scripts/build_gallery.pyandexamples/gallery.jsonare now permanent, not a prototype awaiting lift-and-shift.modal-operatorsskill --invokereturningRUNNING_MODAL, themodal()event handler, modal cancellation patternsusd-pipelinesskill -- USD export options,evaluation_mode, instancing, the USD vs glTF tradeoffsmathutils-patternsskill --mathutils.Vector,Matrix,Quaternion, common transforms, the@operator- Blender 5.2 LTS sweep (after the 5.2 LTS release in mid-2026)
- Refresh the
slotted-actions-animationskill against any 5.2 changes - Bump
blender_version_minin the templates if 5.2 APIs are used - Additional snippets for asset library scripting, EXR baking, multi-file extensions
- Gallery coverage follow-ups from the GPv3 review: light-linking (
grease-pencil-rosette,armature-bend,text-version-stamp,image-pixels-testcard, andvse-cut-listshipped first) UV-layer authoring witnessSHIPPED asexamples/uv-layer-grid/—create_grid(..., calc_uvs=True)silent no-op without a pre-existing UV layer; closed-form UV fill + explicit assignment fallback; dual-panel render (flat texel (0,0) vs neon checker)Image save-format witnessSHIPPED asexamples/png-exr-alpha/— float→PNG is RGBA16 and false-unpremultiplies as if associated-alpha (closed-form err 0.98 at RGB 0.02 / a=1/255); OpenEXR preserves float RGBA; byte→PNG is straight RGBA8;EXR color_mode='RGB'drops alpha- Attribute domain witness: writing a POINT-domain color attribute and reading it as if it were CORNER (or vice versa) silently shears colors across shared verts — companion to
color-attribute-wheel Light-linking collection witnessSHIPPED asexamples/light-link-studio/— the API isobj.light_linkingon the light OBJECT (ld.light_linkingis an AttributeError on both versions); linked ratio 4.0x at projected-center luminance samples, unlink raises the decoy 244–251% with 0.0% hero drift in the same two-render check; EEVEE Next honors linking too (5.5x on 4.5.11, 5.9x on 5.1.2), Cycles pinned for deterministic samplesVSE sequences-to-strips witnessSHIPPED asexamples/vse-cut-list/—.sequencesremoved on 5.x (4.5 bridges to.strips),new_effectend kwargframe_end=(4.5) vslength=(5.x),frame_final_*deprecated in favor ofleft_handle/right_handle/duration, TRANSFORM effect type removed, GAMMA_CROSS clamps to the source overlap, effect strips consume inputs only when stacked above them, same-scene scene strips render transparent; save/reload round-trip + tiny-render pixel witnessglTF export round-trip witnessSHIPPED asexamples/gltf-export-roundtrip/—export_yupbakes(x,y,z)→(x,z,−y)into vertex data with no node rotation (probed identical on 4.5.11 and 5.1.2),export_applyships the evaluated mesh (one disk vertex per evaluated loop), TEXCOORD_0 is V-flipped on disk, per-triangle material bindings survive; exporter/importer RNA signatures byte-identical between 4.5.11 and 5.1.2 (guarded against future renames);Mesh.calc_normals()removal on 5.x surfaced during authoringLOD decimate chain witnessSHIPPED asexamples/lod-decimate-chain/— Decimate COLLAPSE evaluated through the depsgraph is non-destructive (obj.data keeps closed-form counts), evaluated tris hitratio × basewithin 5% (measured 0.0–0.44%), silhouette bbox survives within 1e-3 (measured 7.7e-6); a stacked Decimate halves the effective ratio, an aggressive 0.02 ratio collapses the nose tip — both caught failure modesVertex weight limit witnessSHIPPED asexamples/vertex-weight-limit/— the 4-influence engine cap enforced via the data API (v.groups+VertexGroup.remove+ renormalize); unit sums (measured 3e-8), pose preserved (4.9e-3), exact LBS from the mesh's own deform layer (2.7e-7), Root mount pinnedTriangulate + tangent-space witnessSHIPPED asexamples/triangulate-tangents/—calc_tangentsaborts on any ngon (back cap must be an explicit fan); mikktspace matches the edge/UV-delta formula within welding tolerance on smooth fields (2.3e-6 measured); planar UVs on a cylindrical wall collapse tangents onto normals (dot 0.998);MeshUVLoopLayerhandle dangles acrosscalc_tangents()on 4.5 (471 phantom flips, silent exit 0) while the mikktspace math is byte-identical on 4.5.11 and 5.1.2- UV-handle lifetime snippet: re-fetch attribute/UV layers by name after any CustomData-reallocating call (
calc_tangents,VertexGroup.add, modifier edits) — held handles dangle silently on 4.5, survive by luck on 5.1 (found authoringtriangulate-tangents) - glTF skinned-mesh export witness: follow-up to
gltf-export-roundtrip+vertex-weight-limit— SHIPPED asexamples/gltf-skin-roundtrip/—skins[0].jointsnames every bone, JOINTS_0/WEIGHTS_0 with unit sums (3e-8), weights bit-exact, rest matrices to 2.4e-07, deformation to 4.8e-07; exporter welds duplicate loops (sorted-multiset comparisons mispair — compare by rest-key); unparented skinned meshes make the exporter bind an armature by name - Degenerate-bevel weld hazard (snippet or rule): bevel width ≥ half a box dimension creates zero-area faces whose loops weld on glTF export (found authoring
gltf-export-roundtrip, where the count check caught a 36-vertex weld) GAMMA_CROSS blend-curve witnessSHIPPED asexamples/vse-gamma-cross/— the cross blends in a gamma-0.5 space:((1-t)·√A + t·√B)²witht = (frame − start)/duration, never 1 inside the effect; mid-cross dips 0.115 below the sRGB lerp from crimson/teal (closed form (0.341, 0.349, 0.463) confirmed per frame); AgX-default sampling poisons the fit (0.146 red-channel error,view_transform='Standard'mandatory); deleting a consumed input orphans-and-deletes the effect — follow-up tovse-cut-list- Falsy
bpy_prop_collectiontrap snippet: an empty collection is falsy, soeditor.strips or editor.sequencessilently falls through to the legacy accessor on an empty timeline — always branch onhasattr; likely generalizes across the API (found authoringvse-cut-list)
- Asset library and asset browser scripting skill
- Cycles vs EEVEE Next render API skill
- Geometry Nodes 5.x feature parity (volumes, fields)
- Animation rigging from Python (constraints, drivers across bones)