Skip to content

Tenting Legs & LED Diffuser

Two parts that are not needed for a working keyboard, but that most builds end up wanting. Both are in the PolyKybd hardware repo under parts/.

The legs stick under each half and incline it towards you. Worth printing if you chose the stepped keycap stem profile, which is designed around the keyboard sitting at 5 degrees or more.

Part File
Legs, 8 per plate parts/export/legs/legs_r2_8p.stl

One plate is the whole set: eight legs in four mirrored pairs, 119 × 39 × 3.8 mm, so a single print does both halves. legs_v0_1p.stl beside it is an older single leg, kept for reference.

The source is parts/legs/legs.scad; re-export it with parts/build_parts.sh legs.

Each key has an LED behind it, shining through a half-round hole in the plate. Left bare, the light reads as a bright point rather than an even glow. The diffuser is a small light pipe that clips into that hole and spreads it.

The current generation is a one-piece frame: all 36 diffusers per half, held at their exact plate positions and rotations by a web that runs underneath the plate, through the solid material between the switch openings. So you fit one part per half instead of placing 36 loose pieces.

Part File
Frame, left half parts/export/diffuser/diffuser_frame_left.stl
Frame, right half parts/export/diffuser/diffuser_frame_right.stl
Four stacked per plate ..._left_4x.stl / ..._right_4x.stl

Print it in resin (SLA). It is a fine, spidery part, and the web is deliberately close to the minimum wall a print service will accept.

The frame is not drawn by hand — parts/diffuser/gen_diffuser_frame.py reads the plate PCB (poly_kybd/poly_kybd_split72_plate_<side>.kicad_pcb) directly and emits the OpenSCAD from it. The board is the authoritative source for where every LED hole is and how it is rotated; the Split72’s thumb keys sit at up to 20 degrees off axis, and those rotations are lost in the SVG exports.

So if you change the plate, regenerate rather than nudge the model:

Terminal window
parts/diffuser/build_frame.sh # regenerate from the PCB, export, verify
parts/diffuser/build_frame.sh --check # verify the committed meshes only

The verify step is not decoration — parts/diffuser/check_frame.py gates the result on watertightness, minimum wall thickness, left/right symmetry, whether the frame is trapped by the plate, and clearance against the spacer in both flip orientations.

Before the frame there were loose caps: 76 individual light pipes on a torus sprue (parts/export/diffuser/diff_v2.stl, from parts/diffuser/led_caps.scad), clipped in one at a time. It still prints, and it is what earlier builds used, but the frame is much less fiddly to assemble.