No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-09-09 17:43:48 +02:00
.github/workflows v1 2026-09-08 21:09:10 +02:00
cad v2 2026-09-09 17:43:48 +02:00
docs v2 2026-09-09 17:43:48 +02:00
models v2 2026-09-09 17:43:48 +02:00
scripts v2 2026-09-09 17:43:48 +02:00
.gitignore v1 2026-09-08 21:09:10 +02:00
CONTRIBUTING.md v2 2026-09-09 17:43:48 +02:00
LICENSE v1 2026-09-08 21:09:10 +02:00
LICENSE-MIT v1 2026-09-08 21:09:10 +02:00
NOTICE v2 2026-09-09 17:43:48 +02:00
README.md v2 2026-09-09 17:43:48 +02:00
requirements-dev.txt v2 2026-09-09 17:43:48 +02:00

Stair finial — Blender remaster

A printable replacement for the spherical brass finials on a stair railing, with a deep socket for longer mounting studs. The design, threads, fit samples, materials, lighting, dimensions and typography are rebuilt in Blender. The project does not import the previous meshes or use OpenSCAD.

Open the editable Blender project · Dimensioned section · Fit samples

Blender studio render of the polished finial and its socket section

Prototype v0.2 — photo-derived dimensions; physical fit is untested. M6 × 1 right-hand is a working assumption. Confirm it with a known nut and print a fit sample before a complete finial.

The Blender project

cad/stair_finial.blend contains four named scenes:

Scene Contents
01 · STUDIO Polished brass exterior, a true cutaway, studio materials and lights; ready to render with F12
02 · DIMENSIONS The actual section contour, dimensions, leaders and editable Blender text
03 · FIT SAMPLES All three samples with their real engraved clearance values
04 · PRINT MASTERS (mm) Six complete, editable manufacturing meshes, each at its own local Z=0

Print masters share the same origin; reveal one at a time using the Outliner eye icons. The default finial is visible when you switch to the print scene. Presentation objects share the full masters' mesh data at metre scale. Cutaways and display discs are marked as illustrations and excluded from the printable exports.

The .blend includes the design scripts, presets, packed fonts and a START HERE text block. No photos, HDRIs or image textures are needed to open or render it. The included fonts retain their licence.

Print one first

  1. Try an ordinary M6 × 1 nut on an exposed stud by hand. Identify the actual thread if it does not run freely.
  2. Print the 0.35 mm fit sample, broad grip flat on the bed, using the intended filament and layer height.
  3. If it binds, try 0.45 mm; if it has excessive play, try 0.25 mm. The engraved number is added diametral clearance, not thread size.
  4. Print the matching finial collar down. Support the lower outside of the sphere; block supports inside the socket. Start with PETG, a 0.4 mm nozzle, 0.12–0.16 mm layers, four walls and 20–25% infill.
  5. Remove support and brim, then check that the collar seats on both a short and a long stud. Tighten by hand.
Clearance Fit sample Complete finial
0.25 mm, tighter STL STL
0.35 mm, starting point STL STL
0.45 mm, looser STL STL

All STLs use millimetres and sit on Z=0. Confirm 47 mm width in the slicer. Use the complete finial for printing; the illustrated section is intentionally cut open. Brass and sample colours are illustrative finishes.

Blender render of the three engraved fit samples

Dimensions and longer studs

Feature Supplied design
Sphere Ø47 mm, estimated from the reference photographs
Collar Ø16 × 4 mm, with a 0.16 mm outside foot chamfer
Overall height 49.596 mm, including the collar
Socket Assumed M6 × 1 right-hand; 10 mm threaded region; 0.8 mm lead-in
Upper relief Ø7.2 mm, extending to Z=32 mm from the seating face
Suggested longest stud 31 mm above its seating face, allowing 1 mm tip clearance
Roof Closed 45° cone, apex Z=35.6 mm; the cone is beyond the usable depth
Fit sample Ø16 × 10 mm boss; approximately 32 × 16 mm footprint; 2.4 mm rounded grip with a 0.36 mm deboss

The 32 mm depth includes the threaded region. It is measured from the collar's bottom seating face. A roughly 9 mm short stud engages about 8.2 mm after the lead-in. The longer relief accepts the rest of a threaded stud; it does not admit a wider unthreaded shoulder through the M6 opening.

Dimensioned section built and rendered in Blender

The longest installed stud has not been measured. Set rod_depth to at least its projection plus 1 mm, and retain room for the conical roof and crown. See measurements and assumptions and printing and fitting.

Rebuild or change the design

Use official Blender 4.5 LTS or newer. Blender supplies its own Python and geometry tools, including the closed-solid Boolean solver used for the engraved samples; no external modelling package is required.

# Blender must be on PATH, or set BLENDER=/path/to/blender.
python3 scripts/build.py
python3 scripts/render.py

# A fast visual check, written separately to .work/render-previews/.
python3 scripts/render.py --quick

# Rebuild one preset without touching the supplied project or STLs.
python3 scripts/build.py --preset M6x1_c035 --output-dir .work/custom

Edit cad/presets.json for dimensions and clearances, cad/finial.py for the native geometry, and cad/studio.py for the presentation. The sphere is a stitched surface of revolution; its interior is a continuous helical mesh. Blender booleans integrate each rounded grip and engrave its label. The entry chamfer clips the real thread, and the finial retains a closed crown.

For an exploratory edit inside Blender, switch to 04 · PRINT MASTERS, select a master, change its Object Custom Properties, and run the embedded rebuild_selected.py in the Text Editor. This updates that master and its full-model instances. Regenerate the project from the presets for a release so the cutaways, dimensions, exports and manifests agree. Do not scale an STL to adjust fit: that also changes pitch.

The render script detects builds without OpenImageDenoise and renders without it. For F12 rendering in such a build, turn off Render Properties → Sampling → Render → Denoise. Official Blender 4.5 includes the denoiser used for the supplied artwork.

Verify and package

python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements-dev.txt
python scripts/validate.py
python scripts/inspect_blend.py
python scripts/package.py

models/validation.json records mesh integrity, single-solid connectivity, dimensions, bed placement, thread profile/pitch/handedness, the open relief and closed crown. The Blender inspection reopens the saved project and checks its masters against the actual STL exports, embedded source and render scenes. Render provenance ties the PNGs to the saved Blender project.

These checks verify digital geometry and the delivered project. Printer tolerances, strength and physical fit still require an actual print. See development for the complete reproduction and checking workflow.

scripts/package.py creates dist/stair-finial-v0.2.0.zip, containing the Blender project, source, six STLs, artwork, reports and guides. Local reference photos and downloaded tools are excluded. The design, meshes and documentation use CERN-OHL-P-2.0; helper scripts and CI use MIT. See NOTICE and release notes.

This is a decorative replacement; the railing's structural fixings are separate.