Mechanical

Blender owns enclosure geometry; LYNX prints it from STLs exported out of the part files. These are tactile-switch parts, not MX/Choc geometry. Fetch Git LFS objects before opening the files. The older Blender originals stay outside the repository, untouched.

PathWhat it holds
blender/The linked part files, one per slot or part family, and scene/: the assembled cat with its views and visibility. Ignored: milestones/ (backups), renders/, exports/
stl/Every printable part as an STL in mm, lying as it prints, and prints.json, their mesh health. Generated by ./lx mech stl; tracked so a builder needs no Blender
associations.tomlCross-domain relationships: which CAD object is which board, module, slot and firmware feature
dimensions.jsonFit requirements and unresolved dimensional conflicts
docs/How the files work, below
DocRead it for
Blender filesWhich file owns what, how files link, collections and their colors, the scene, left and right twins, checks
BoardsBringing KiCad boards into Blender and checking their fit
ExportsThe STLs and the website's scene export
Open issuesWhat the checks do not establish, missing models, untested fits, the screw and keycap-pocket decisions
Handoff logThe board imports, appended by ./lx mech sync-boards

Work on the left part in the file that owns it; the right one follows. After an edit, run ./lx mech check; it names the command that settles what it finds (./lx mech colors, sides, assemble, stl). The commands are in Blender tools.

Blender files

Edit a linked part in its own .blend file; keep library paths relative and inside this repository.

Boards

Electronics exports each board (./lx pcb export <board>): GLB and STEP with a manifest of hashes, outline, holes and components. ./lx mech sync-boards imports what changed into references.blend on a staged copy, validates units, axes, holes, components and seating, publishes it with a milestone backup, logs it in handoff-log.md and checks the fit.

Exports

./lx mech stl writes every printable part, each variant and right twin, into stl/: one STL per part in mm, evaluated in the file that owns it and placed on the bed (centred on x and y, lowest point at z = 0), and prints.json, the mesh-health report naming each part's file.

Open issues

Library propagation, silhouette checks and the scene's placements do not establish assembled fit or printability: the placements put a module where its opening was cut, not where a printed part lands.