Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ ehthumbs.db

# Local planning docs (not published)
docs/site-upgrade-plan.md
docs/new-example-prompt.md

# Landing-page build outputs (generated at deploy time by scripts/site/build_site.py;
# docs/gallery/ stays committed)
docs/index.html
Expand Down
42 changes: 21 additions & 21 deletions docs/gallery/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ <h1>Examples Gallery</h1>
<div class="grid">
<article class="card" data-tags="materials rendering">
<a class="card-media" href="swatch-grid/" aria-label="swatch-grid example detail page">
<img src="assets/swatch-grid-hero.webp" alt="swatch-grid — Procedural Principled materials — metal and dielectric, the emission pattern, and the cross-version set_specular shim" loading="lazy" decoding="async" />
<img src="assets/swatch-grid-hero.webp" alt="swatch-grid — Procedural Principled materials — metal and dielectric, the emission pattern, and the cross-version set_specular shim." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="swatch-grid/">swatch-grid</a></h2>
Expand All @@ -216,7 +216,7 @@ <h2><a href="swatch-grid/">swatch-grid</a></h2>
</article>
<article class="card" data-tags="animation">
<a class="card-media" href="turntable/" aria-label="turntable example detail page">
<img src="assets/turntable-hero.webp" alt="turntable — A slotted-actions Z-rotation turntable keyed through the cross-version channelbag path (get_channelbag_for_slot)" loading="lazy" decoding="async" />
<img src="assets/turntable-hero.webp" alt="turntable — A slotted-actions Z-rotation turntable keyed through the cross-version channelbag path (get_channelbag_for_slot)." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="turntable/">turntable</a></h2>
Expand All @@ -227,7 +227,7 @@ <h2><a href="turntable/">turntable</a></h2>
</article>
<article class="card" data-tags="geometry-nodes materials">
<a class="card-media" href="gn-sdf-remesh/" aria-label="gn-sdf-remesh example detail page">
<img src="assets/gn-sdf-remesh-hero.webp" alt="gn-sdf-remesh — A Geometry Nodes SDF remesh (MeshToSDFGrid → GridToMesh at the SDF zero-level), with a Set Material node carrying the material through the remesh" loading="lazy" decoding="async" />
<img src="assets/gn-sdf-remesh-hero.webp" alt="gn-sdf-remesh — A Geometry Nodes SDF remesh (MeshToSDFGrid → GridToMesh at the SDF zero-level), with a Set Material node carrying the material through the remesh." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="gn-sdf-remesh/">gn-sdf-remesh</a></h2>
Expand All @@ -238,7 +238,7 @@ <h2><a href="gn-sdf-remesh/">gn-sdf-remesh</a></h2>
</article>
<article class="card" data-tags="depsgraph export">
<a class="card-media" href="depsgraph-export/" aria-label="depsgraph-export example detail page">
<img src="assets/depsgraph-export-hero.webp" alt="depsgraph-export — The depsgraph lifetime contract — evaluated_get()" loading="lazy" decoding="async" />
<img src="assets/depsgraph-export-hero.webp" alt="depsgraph-export — The depsgraph lifetime contract — evaluated_get().to_mesh() paired with to_mesh_clear() — measured against an OBJ export of the same object." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="depsgraph-export/">depsgraph-export</a></h2>
Expand All @@ -249,7 +249,7 @@ <h2><a href="depsgraph-export/">depsgraph-export</a></h2>
</article>
<article class="card" data-tags="mesh performance">
<a class="card-media" href="wave-displace/" aria-label="wave-displace example detail page">
<img src="assets/wave-displace-hero.webp" alt="wave-displace — Bulk vertex IO at real scale — 9,409 vertices displaced into a standing wave with one foreach_get and one foreach_set, no per-vertex access" loading="lazy" decoding="async" />
<img src="assets/wave-displace-hero.webp" alt="wave-displace — Bulk vertex IO at real scale — 9,409 vertices displaced into a standing wave with one foreach_get and one foreach_set, no per-vertex access." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="wave-displace/">wave-displace</a></h2>
Expand All @@ -260,7 +260,7 @@ <h2><a href="wave-displace/">wave-displace</a></h2>
</article>
<article class="card" data-tags="drivers animation">
<a class="card-media" href="driver-wave/" aria-label="driver-wave example detail page">
<img src="assets/driver-wave-hero.webp" alt="driver-wave — A driver_namespace function driving sixteen column heights through SCRIPTED drivers — the sine skyline is entirely driver-evaluated" loading="lazy" decoding="async" />
<img src="assets/driver-wave-hero.webp" alt="driver-wave — A driver_namespace function driving sixteen column heights through SCRIPTED drivers — the sine skyline is entirely driver-evaluated." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="driver-wave/">driver-wave</a></h2>
Expand All @@ -271,7 +271,7 @@ <h2><a href="driver-wave/">driver-wave</a></h2>
</article>
<article class="card" data-tags="mesh bmesh">
<a class="card-media" href="bmesh-gear/" aria-label="bmesh-gear example detail page">
<img src="assets/bmesh-gear-hero.webp" alt="bmesh-gear — A 14-tooth gear built entirely with bmesh — profile ring, face, extrude — with bm" loading="lazy" decoding="async" />
<img src="assets/bmesh-gear-hero.webp" alt="bmesh-gear — A 14-tooth gear built entirely with bmesh — profile ring, face, extrude — with bm.free() in a try/finally, exactly as the ownership contract demands." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="bmesh-gear/">bmesh-gear</a></h2>
Expand All @@ -282,7 +282,7 @@ <h2><a href="bmesh-gear/">bmesh-gear</a></h2>
</article>
<article class="card" data-tags="materials node-groups">
<a class="card-media" href="shader-node-group/" aria-label="shader-node-group example detail page">
<img src="assets/shader-node-group-hero.webp" alt="shader-node-group — One reusable shader group declared via tree" loading="lazy" decoding="async" />
<img src="assets/shader-node-group-hero.webp" alt="shader-node-group — One reusable shader group declared via tree.interface.new_socket, instanced in two materials with different Tint values — two spheres, one group, two colors." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="shader-node-group/">shader-node-group</a></h2>
Expand All @@ -293,7 +293,7 @@ <h2><a href="shader-node-group/">shader-node-group</a></h2>
</article>
<article class="card" data-tags="operators context">
<a class="card-media" href="temp-override-join/" aria-label="temp-override-join example detail page">
<img src="assets/temp-override-join-hero.webp" alt="temp-override-join — Join three unit cubes into a staircase under bpy" loading="lazy" decoding="async" />
<img src="assets/temp-override-join-hero.webp" alt="temp-override-join — Join three unit cubes into a staircase under bpy.context.temp_override — the supported replacement for the removed context.copy() dict-pass form." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="temp-override-join/">temp-override-join</a></h2>
Expand All @@ -304,7 +304,7 @@ <h2><a href="temp-override-join/">temp-override-join</a></h2>
</article>
<article class="card" data-tags="geometry-nodes instancing">
<a class="card-media" href="gn-instance-grid/" aria-label="gn-instance-grid example detail page">
<img src="assets/gn-instance-grid-hero.webp" alt="gn-instance-grid — A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances → Set Shade Smooth — attached as a NODES modifier with no Group Input geometry" loading="lazy" decoding="async" />
<img src="assets/gn-instance-grid-hero.webp" alt="gn-instance-grid — A generative Geometry Nodes tree — Mesh Grid → Instance on Points → Realize Instances → Set Shade Smooth — attached as a NODES modifier with no Group Input" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="gn-instance-grid/">gn-instance-grid</a></h2>
Expand All @@ -315,7 +315,7 @@ <h2><a href="gn-instance-grid/">gn-instance-grid</a></h2>
</article>
<article class="card" data-tags="mesh shape-keys">
<a class="card-media" href="shape-key-blend/" aria-label="shape-key-blend example detail page">
<img src="assets/shape-key-blend-hero.webp" alt="shape-key-blend — A relative Tall shape key that lifts and flares the top face — authored via shape_key_add / key_blocks / " loading="lazy" decoding="async" />
<img src="assets/shape-key-blend-hero.webp" alt="shape-key-blend — A relative Tall shape key that lifts and flares the top face — authored via shape_key_add / key_blocks / .value — read back from the depsgraph-evaluated mesh." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="shape-key-blend/">shape-key-blend</a></h2>
Expand All @@ -326,7 +326,7 @@ <h2><a href="shape-key-blend/">shape-key-blend</a></h2>
</article>
<article class="card" data-tags="curves bevel">
<a class="card-media" href="curve-bevel-arc/" aria-label="curve-bevel-arc example detail page">
<img src="assets/curve-bevel-arc-hero.webp" alt="curve-bevel-arc — A beveled Bezier semicircle authored on bpy" loading="lazy" decoding="async" />
<img src="assets/curve-bevel-arc-hero.webp" alt="curve-bevel-arc — A beveled Bezier semicircle authored on bpy.types.Curve — splines.new(&#x27;BEZIER&#x27;), bezier_points, bevel_depth, use_fill_caps — so the curve renders as a solid…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="curve-bevel-arc/">curve-bevel-arc</a></h2>
Expand All @@ -337,7 +337,7 @@ <h2><a href="curve-bevel-arc/">curve-bevel-arc</a></h2>
</article>
<article class="card" data-tags="compositor rendering">
<a class="card-media" href="compositor-glare/" aria-label="compositor-glare example detail page">
<img src="assets/compositor-glare-hero.webp" alt="compositor-glare — Bloom where it actually lives — a compositor Glare (Fog Glow) node fed by Render Layers, wired via scene" loading="lazy" decoding="async" />
<img src="assets/compositor-glare-hero.webp" alt="compositor-glare — Bloom where it actually lives — a compositor Glare (Fog Glow) node fed by Render Layers, wired via scene.compositing_node_group on 5.x and scene.node_tree on…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="compositor-glare/">compositor-glare</a></h2>
Expand All @@ -348,7 +348,7 @@ <h2><a href="compositor-glare/">compositor-glare</a></h2>
</article>
<article class="card" data-tags="constraints animation">
<a class="card-media" href="damped-track-aim/" aria-label="damped-track-aim example detail page">
<img src="assets/damped-track-aim-hero.webp" alt="damped-track-aim — Aim constraints via the data API — Object" loading="lazy" decoding="async" />
<img src="assets/damped-track-aim-hero.webp" alt="damped-track-aim — Aim constraints via the data API — Object.constraints.new(&#x27;DAMPED_TRACK&#x27;) with target and TRACK_Z, not bpy.ops.object.constraint_add in a headless loop." loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="damped-track-aim/">damped-track-aim</a></h2>
Expand All @@ -359,7 +359,7 @@ <h2><a href="damped-track-aim/">damped-track-aim</a></h2>
</article>
<article class="card" data-tags="mesh materials attributes">
<a class="card-media" href="color-attribute-wheel/" aria-label="color-attribute-wheel example detail page">
<img src="assets/color-attribute-wheel-hero.webp" alt="color-attribute-wheel — The modern color-attributes API — mesh" loading="lazy" decoding="async" />
<img src="assets/color-attribute-wheel-hero.webp" alt="color-attribute-wheel — The modern color-attributes API — mesh.color_attributes.new() on the CORNER domain, filled by expanding per-vertex HSV across face corners with…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="color-attribute-wheel/">color-attribute-wheel</a></h2>
Expand All @@ -370,7 +370,7 @@ <h2><a href="color-attribute-wheel/">color-attribute-wheel</a></h2>
</article>
<article class="card" data-tags="objects transforms">
<a class="card-media" href="parent-inverse-orrery/" aria-label="parent-inverse-orrery example detail page">
<img src="assets/parent-inverse-orrery-hero.webp" alt="parent-inverse-orrery — Data-API parenting for a brass orrery — the keep-world idiom (child" loading="lazy" decoding="async" />
<img src="assets/parent-inverse-orrery-hero.webp" alt="parent-inverse-orrery — Data-API parenting for a brass orrery — the keep-world idiom (child.parent = pivot; child.matrix_parent_inverse = pivot.matrix_world.inverted()) carrying arms…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="parent-inverse-orrery/">parent-inverse-orrery</a></h2>
Expand All @@ -381,7 +381,7 @@ <h2><a href="parent-inverse-orrery/">parent-inverse-orrery</a></h2>
</article>
<article class="card" data-tags="grease-pencil attributes">
<a class="card-media" href="grease-pencil-rosette/" aria-label="grease-pencil-rosette example detail page">
<img src="assets/grease-pencil-rosette-hero.webp" alt="grease-pencil-rosette — Grease Pencil v3&#x27;s attribute-based API — layer → frames" loading="lazy" decoding="async" />
<img src="assets/grease-pencil-rosette-hero.webp" alt="grease-pencil-rosette — Grease Pencil v3&#x27;s attribute-based API — layer → frames.new(1).drawing → add_strokes → per-point position/radius/opacity/vertex_color — drawing five nested…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="grease-pencil-rosette/">grease-pencil-rosette</a></h2>
Expand All @@ -392,7 +392,7 @@ <h2><a href="grease-pencil-rosette/">grease-pencil-rosette</a></h2>
</article>
<article class="card" data-tags="armature depsgraph">
<a class="card-media" href="armature-bend/" aria-label="armature-bend example detail page">
<img src="assets/armature-bend-hero.webp" alt="armature-bend — Rigging end to end in the data API — edit_bones chain construction, name-bound vertex groups with smoothstep blend zones, posing, and depsgraph evaluation — bending a tapered tube through rest, half, and full curl" loading="lazy" decoding="async" />
<img src="assets/armature-bend-hero.webp" alt="armature-bend — Rigging end to end in the data API — edit_bones chain construction, name-bound vertex groups with smoothstep blend zones, posing, and depsgraph evaluation" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="armature-bend/">armature-bend</a></h2>
Expand All @@ -403,7 +403,7 @@ <h2><a href="armature-bend/">armature-bend</a></h2>
</article>
<article class="card" data-tags="curves depsgraph rendering">
<a class="card-media" href="text-version-stamp/" aria-label="text-version-stamp example detail page">
<img src="assets/text-version-stamp-hero.webp" alt="text-version-stamp — The TextCurve data API — curves" loading="lazy" decoding="async" />
<img src="assets/text-version-stamp-hero.webp" alt="text-version-stamp — The TextCurve data API — curves.new(type=&#x27;FONT&#x27;), live body text from bpy.app.version_string, extrude and bevel_depth solids, and evaluated-mesh conversion…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="text-version-stamp/">text-version-stamp</a></h2>
Expand All @@ -414,7 +414,7 @@ <h2><a href="text-version-stamp/">text-version-stamp</a></h2>
</article>
<article class="card" data-tags="images performance rendering">
<a class="card-media" href="image-pixels-testcard/" aria-label="image-pixels-testcard example detail page">
<img src="assets/image-pixels-testcard-hero.webp" alt="image-pixels-testcard — The Image pixel-buffer contract — a procedural broadcast test card written into bpy" loading="lazy" decoding="async" />
<img src="assets/image-pixels-testcard-hero.webp" alt="image-pixels-testcard — The Image pixel-buffer contract — a procedural broadcast test card written into bpy.data.images.new() with one pixels.foreach_set (589,824 floats), byte vs…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="image-pixels-testcard/">image-pixels-testcard</a></h2>
Expand All @@ -425,7 +425,7 @@ <h2><a href="image-pixels-testcard/">image-pixels-testcard</a></h2>
</article>
<article class="card" data-tags="mesh bmesh uv materials">
<a class="card-media" href="uv-layer-grid/" aria-label="uv-layer-grid example detail page">
<img src="assets/uv-layer-grid-hero.webp" alt="uv-layer-grid — The UV-layer authoring hazard — bmesh" loading="lazy" decoding="async" />
<img src="assets/uv-layer-grid-hero.webp" alt="uv-layer-grid — The UV-layer authoring hazard — bmesh.ops.create_grid(..., calc_uvs=True) is a silent no-op unless a UV layer already exists; without one an Image Texture…" loading="lazy" decoding="async" />
</a>
<div class="card-body">
<h2><a href="uv-layer-grid/">uv-layer-grid</a></h2>
Expand Down
Loading
Loading