Skip to content

feat: add text-version-stamp example (TextCurve solids + self-labeling renders)#59

Merged
TMHSDigital merged 1 commit into
mainfrom
feat/text-version-stamp-example
Jul 18, 2026
Merged

feat: add text-version-stamp example (TextCurve solids + self-labeling renders)#59
TMHSDigital merged 1 commit into
mainfrom
feat/text-version-stamp-example

Conversation

@TMHSDigital

Copy link
Copy Markdown
Owner

Summary

Adds examples/text-version-stamp/ — a beveled 3D stamp of the running Blender version. The TextCurve body is the live bpy.app.version_string, so every render self-documents which Blender produced it; CI artifacts made this way are self-labeling. Fills the top-priority TextCurve gap from the gallery coverage review (ROADMAP candidate pool).

API contract witnessed

  • bpy.data.curves.new(type='FONT') returns a TextCurve that is a Curve subclass; the object is type='FONT' and the built-in font ("Bfont Regular") is always loaded, even headless.
  • body is plain assignable text; editing it regenerates geometry (appending characters strictly widens the evaluated mesh).
  • Solids closed form: evaluated mesh z-extent = 2 × (extrude + bevel_depth) (exact to 1e-4), and the round bevel widens the outline in-plane by 2 × bevel_depth. Flat text (no extrude/bevel) is filled (faces exist) but strictly planar.
  • Lifetime hazard: after to_mesh_clear() the returned Mesh reference is dead — access raises ReferenceError. The check proves the reference dies.

4.5 / 5.1 divergence: version_string is "5.1.2" on 5.x but "4.5.11 LTS" on 4.5 — the LTS suffix is part of the string, so it is not bare semver. The check asserts the contract that holds on both (version_string.startswith("%d.%d.%d" % bpy.app.version)); the README tells readers to branch on the tuple, not parse the string.

Visual notes

Brass beveled numerals scaled to a constant width (frame holds for any version-string length), small steel B L E N D E R caption (also a TextCurve), teal emissive underline, dark-studio floor/wall with warm key + cool fill + warm rim — matching the fleet's dark-studio recipe. Inspected at full 1280×720 and at thumbnail size; numerals read clearly in both.

Test plan

Proven by live run (local):

  • Check-only path on Blender 5.1.2 and 4.5.11 LTS (portable builds): both exit 0, closed-form output matches (solid z-extent=0.1600 = 2*(0.06+0.02)).
  • Full render on 5.1.2 (EEVEE), pixels visually inspected at full size and thumbnail scale.
  • python scripts/build_gallery.py regenerated docs/gallery/ (19 detail pages); gallery.json and plugin.json re-parsed as valid JSON.

Established by inspection only (verified live by CI on this PR):

  • The new blender-smoke.yml step under xvfb-run on CI's own 4.5/5.1 builds.
  • validate-counts / validate-manifest against the 18→19 bumps in README/AGENTS/CLAUDE and the manifest entry.

🤖 Generated with Claude Code

…g renders)

The gallery covered mesh, curves-with-bevel, GPv3, and armatures but nothing
exercised the TextCurve data API, which AI-generated code routinely gets wrong
(parsing version_string as bare semver, expecting to_mesh results to outlive
to_mesh_clear). The stamp's body is the live bpy.app.version_string, so every
render self-documents which Blender produced it and CI artifacts become
self-labeling. The check asserts the closed-form solids contract (evaluated
z-extent = 2 x (extrude + bevel_depth), bevel widening the outline by
2 x bevel_depth), that flat text is filled but planar, that body edits
regenerate geometry, that version_string starts with the dotted version tuple
("4.5.11 LTS" is not bare semver), and that a Mesh reference dies at
to_mesh_clear().

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added documentation Improvements or additions to documentation ci labels Jul 18, 2026
@TMHSDigital
TMHSDigital merged commit 6b2d0f8 into main Jul 18, 2026
9 checks passed
@TMHSDigital
TMHSDigital deleted the feat/text-version-stamp-example branch July 18, 2026 22:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant