New in this snapshot: 26 drawings, 5 STEP files, 5 documents/media.
Tools used as of this version
OSSO tools inventory
Software, libraries, file formats, techniques and services actually used on OSSO, found from the scripts in cad/, drawings/, pcb/, fab/, laser-test/, site_build/, the installed environments (/workspace/.cadvenv, system packages) and JOURNAL.md. Versions are what is installed on the box as of 2026-10-23. Two box venvs exist: /workspace/.cadvenv (older) and /workspace/.cadenv (CadQuery 2.8.0 + pyvista + trimesh, used for the tool-drop v2d model). "Not installed now" means a past script used it but the current box env lacks it.
CAD generation (3D)
| Tool |
Version |
Used for |
First used/Files |
Python (venv /workspace/.cadvenv) |
3.13.5 |
Runs every generator and verifier script |
Oct 14; all *.py |
| CadQuery |
2.8.0 |
Parametric solids for jigs, boards, stencil frames, dispenser POCs; STEP/STL export (cq.exporters.export), STEP re-import (cq.importers.importStep) |
Oct 16, cad/jig_v4b/jig_v4b.py; all cad/*/make_*.py |
| OCP (cadquery-ocp, OpenCASCADE bindings) |
7.9.3.1.1 |
Low-level B-rep work: BRepCheck_Analyzer validity, volume props, booleans |
cad/*/verify*.py, dispenser POC v3-v5 |
| numpy |
2.5.4 |
Geometry math (involute gear profiles, hole patterns, sweeps) |
most CAD/drawing scripts |
| shapely |
2.2.0 |
2D outlines, morphological closing, unary_union for gear/disc profiles |
pcb/br_g1_v1/make_br_g1.py, laser profiles |
| scipy |
1.18.1 |
Installed CadQuery dependency; numeric helpers |
venv |
| casadi / nlopt |
3.8.1 / 2.11.0 |
CadQuery solver dependencies (assemblies/sketch constraints) |
venv |
| vtk |
9.6.2 |
CadQuery visualization backend |
venv |
pyvista (venv /workspace/.cadenv) |
0.49.1 |
Offscreen preview renders of STL/STEP models (iso, close-up, section views) |
Oct 16-19, versions/v5_2026-10-19/cad/*/render.py; Oct 23, cad/tool_drop_mech_poc_v2d/render_preview.py |
| trimesh |
5.1.1 (venv /workspace/.cadenv) |
STL watertight/extent checks |
cad/stencil_v1/verify.py |
Fit check / interference method
| Tool |
Version |
Used for |
First used/Files |
CadQuery/OCC boolean intersect + Volume() |
2.8.0 / 7.9.3 |
Pairwise intersection volume between parts re-imported from the exported STEP; 0 mm³ = no interference |
Oct 21, cad/ball_dispenser_poc_v3..v5 |
OCC BRepExtrema_DistShapeShape |
7.9.3 |
Minimum clearance between non-touching parts at each sweep state (bbox prefilter first); an explicit list of intended contacts is excluded |
Oct 23, cad/tool_drop_mech_poc_v2d/ |
| Mechanism torque/force sweep |
(technique) |
Moment arm sign and size, dead-center margin, deploy/release/hold margins at mu 0.2 / 0.3 / 1.5x seal friction, pass/fail gate in fit_check.json |
Oct 23, refs/tool_drop_*, cad/tool_drop_mech_poc_v2d/ |
| Angular sweep |
(technique) |
Rotate moving parts in 2° steps (0-20°/0-30°), re-check intersection volume and minimum gap at each step (gear mesh backlash 0.035-0.037) |
POC v4/v5 |
| Probe cylinders |
(technique) |
Thin cylinders along fill/exit axes intersected with exported disc STEPs to prove paths open or blocked; hole-axis alignment asserted to 0.000 |
POC v4/v5 |
| Tolerance-case matrix |
(technique) |
All thickness combinations (e.g. 0.25/0.30 carrier, 0.711-0.813 cover) checked for pocket gap and overlap |
POC v3-v5 |
| STEP re-import + validity |
(technique) |
Every exported STEP re-read, solids counted, isValid(); STLs watertight |
Oct 16 jig v4b onward |
Drawings and 2D
| Tool |
Version |
Used for |
First used/Files |
| matplotlib |
3.11.2 |
All engineering drawings (plan, section, exploded) to PNG and multi-page PDF (PdfPages) |
Oct 15; drawings/*.py |
| ezdxf |
1.4.5 |
DXF cut profiles (laser tests, alignment patterns, BR-G1 laser, BR-C1 covers) |
laser-test/gen.py, cad/laser_align_*, br_c1_v2.dxf |
| SVG (hand-written) |
(format) |
Laser test/alignment patterns for LightBurn |
laser-test/*.svg, cad/laser_align_*/*.svg |
| Pillow |
12.3.0 (system) / 13.0.0 (venv) |
Site thumbnails, image compositing |
site_build/build_site.py |
| fontTools, kiwisolver, contourpy, pyparsing |
4.67.0 / 1.5.1 / 1.4.0 / 3.3.3 |
matplotlib dependencies |
venv |
PCB: KiCad, Gerber, drill, DRC
| Tool |
Version |
Used for |
First used/Files |
| KiCad / kicad-cli |
9.0.2 |
.kicad_pcb written by script, then kicad-cli exports Gerbers, Excellon drill, job file, and runs DRC (drc.rpt, 0 errors) |
Oct 21, pcb/br_g1_v1/make_br_g1.py, pcb/br_g2_v1/ |
| Hand-written RS-274X X2 + Excellon |
(technique) |
First Gerber set before KiCad was on the box |
Oct 16, fab/gen_v3b_gerbers.py |
| gerbv |
2.10.0 |
Render Gerbers back to PNG for visual check |
Oct 16, fab/render/, pcb/br_g1_v1/preview_gerbv.png |
| Gerber/Excellon re-parse verifier |
(technique) |
Re-read output files, count teeth/holes, compare to geometry report |
pcb/br_g1_v1/verify_br_g1.py, verify_report.json |
3D printing and laser
| Tool |
Version |
Used for |
First used/Files |
| Bambu Studio (AppImage, headless slice) |
02.08.02.61 (box); the designer 02.08.02.60 |
3MF projects for P1S, headless slice estimates |
Oct 16, cad/jig_v4*/make_3mf.py, /workspace/tools/bambu |
| LightBurn |
the designer's copy |
UV galvo laser jobs from SVG/DXF |
Oct 16, laser-test/settings.md, refs/laser/ |
| Klipper (Elegoo Neptune 4) |
stock |
Planned PnP / flux syringe motion |
Oct 21, journal |
File formats
| Format |
Tool |
Used for |
First used/Files |
| STEP (.step) |
CadQuery/OCC |
Parts and assemblies for the designer's CAD and vendors |
Oct 16, cad/*/*.step |
| STL |
CadQuery |
Print meshes |
Oct 16, cad/jig_v4b/*.stl |
| 3MF |
make_3mf.py |
Bambu Studio projects |
Oct 16, cad/jig_v4b/*.3mf |
| DXF / SVG |
ezdxf / script |
Laser and SendCutSend cut files |
Oct 15, laser-test/, br_c1_v2.dxf |
| Gerber X2, Excellon, .gbrjob, zip |
kicad-cli / script |
PCB fab uploads |
Oct 16, fab/, pcb/*/gerbers |
| PNG / PDF |
matplotlib |
Drawings |
drawings/ |
| JSON / Markdown |
Python |
Geometry/verify reports, notes, journal |
throughout |
| MP4 |
(video generation) |
Vision reels |
Oct 15, video/ |
PDF tools
| Tool |
Version |
Used for |
First used/Files |
| matplotlib PdfPages |
3.11.2 |
Multi-page drawing PDFs, tech sheets |
drawings/*.pdf, refs/laser/laser_tech_sheet.pdf |
| poppler-utils (pdftoppm, pdftotext, pdfunite) |
25.03.0 |
Rasterize/read PDFs (datasheets, checks), merge pages |
refs/ datasheets |
Docs site
| Tool |
Version |
Used for |
First used/Files |
| build_site.py (custom static generator) |
in repo |
Builds site/ from JOURNAL.md, TODO.md, PENDING, refs, versions |
Oct 20, site_build/build_site.py |
| Python-Markdown (extra, sane_lists) |
3.11.1 (system) |
Markdown to HTML |
build_site.py |
| check_links.py |
in repo |
Verifies every relative link and anchor |
site_build/check_links.py |
Versions, sync and backup
| Tool |
Version |
Used for |
First used/Files |
| GNU tar + gzip |
1.35 |
Version snapshots versions/OSSO_vN_DATE.tar.gz; sync bundles |
Oct 15, versions/ |
| sha256sum / split (coreutils) |
9.7 |
Chunked tar transfer to the designer's Macs with checksum verification (hourly sync) |
Oct 21 restore from work Mac copy |
| Google Drive mirror |
(connector) |
Daily mirror of the project, done by another assistant |
daily |
| ffmpeg |
7.1.5 |
Video/media handling |
video/ |
Research and fab services
| Service |
Version |
Used for |
First used/Files |
| Web research (search + fetch) |
live |
Vendor specs and prices |
throughout |
| PCBWay |
web |
Blank v3b (5 pcs ENIG), 5 OSSO boards, 50 BR-G1 discs; laser-cut tolerance check |
Oct 16, fab/, pcb/br_g1_v1/README_FAB.md |
| SendCutSend (site + spec API scs-specs-platform) |
web |
304 SS .030" limits; BR-C1 v2 covers ordered; Oct 23: 1008 CRS .074" armature plate for the tool-drop EPM latch (DXF) |
Oct 21, cad/ball_dispenser_poc_v5/br_c1/QUOTE_NOTES.md |
| Chip Quik |
web |
SAC305 ball/paste pricing for per-board solder cost |
Oct 21, journal |
| LCSC |
web |
Pogo pin YZD0029 datasheet drawing |
Oct 16, cad/pogo_YZD0029/ |
| eBay (NV Liquidation) |
web |
2x Neptune 4 parts units |
Oct 21, journal |
| Literature (DOI) |
web |
EPTC 2012 tacky flux ball attach; IRJMETS flip chip flux |
Oct 21, journal |
AI assistant
| Tool |
Version |
Used for |
First used/Files |
| OSSO assistant in the Grok Bot app |
app |
All scripting, CAD, drawings, fab files, site and journal, with background helper agents for parallel tasks |
Oct 14 onward |
2026-10-25 2:44 PM EDT: Real laser source measured
the designer's own unit (integration/refs/laser_actual_*.jpg): the source (white box on the arm) is 115 x 150 x 345 mm plus connectors. Its rear face has EXT CONTROL (DB25), Power (DB), RS232 (DB9) and two coolant push-fittings, so it needs about 60 mm rear clearance for cable bend radius. The galvo is on the front end with the lens below. The power supply and controller sit in the grey base, so they go in the under-bed bay. Skeleton v3c will use the real source size.
- 2:45 PM: the designer: the laser's grey base (PSU and controller) stays outside next to the chiller. Its cables and coolant come through one rear pass-through. This replaces the earlier 'laser power in the bay' decision.
- 2:45 PM: Tray drive: T8x8 lead screw on MGN12 (same as X/Y).
- 2:52 PM: Focus guide: MGN12 on the column, no locks.
- 2:56 PM: Fume: plain top duct, no nozzle or hood.
- 2:56 PM: Fume fan: external, on the duct.
2026-10-25 3:08 PM EDT: Skeleton v3c built
The real 345x115x150 source runs inline along +X with a 60 mm connector zone, and its service loop and riser are in. The tray has a T8x8 screw on MGN12. The focus guide is two MGN12H carriages on the column. The fume extraction is a plain top duct with an external fan. The frame grows to 800W x 720D x 675H (+100 W, +15 H), and the door is 740 wide. Error: the bay still holds the laser PSU placeholder even though the designer moved it outside; fix it in the next revision. Open: whether the beam is at mid-height of the source box (Q18). TODO items 46-47 were added.
- 3:08 PM: the designer accepted the 800 mm frame width.
- 3:11 PM: the designer will measure the beam exit height on the source; mid-height is the placeholder. Started v3d: laser PSU removed from the bay, laser cables through one pass-through.
- 3:12 PM: the designer measured the beam exit: 60 mm OD flange, centered 80 mm above the source bottom (115 mm side vertical). Applied in v3d.
- 3:14 PM: the designer: the machine sits on a bench with its longest side left to right. Rule: depth <= width.
- 3:21 PM: Skeleton v3d built. Frame 800x720x655 (-20 H). Bay 720x340x70. Beam exit at 80 mm. Single 50 mm gland on the right panel. Collisions: only the expected tray-row-8 vs beam cases. Open: whether the DB25 backshell fits through the gland.
- 3:29 PM: the designer chose a larger right-panel cutout with a bolted cover plate for the laser pass-through (the DB25 passes with its connector on). Being applied in v3d.
- 3:30 PM: the designer set the custom-part fabrication methods: FDM, mSLA, laser-cut sheet.
- 3:38 PM: v3d pass-through done: 90x50 right-panel cutout, split 3 mm black acrylic plate, FDM PETG clamp frame, 6x M3. Fab-method tags added.
- 3:54 PM: Decisions: tray-vs-beam interlock is sensors and firmware only (Q5 closed). Exhaust interlock is a real airflow sensor in the duct. Y stays T8x8 (default, card skipped). Started real CAD: Frame & Motion.
- 4:05 PM: Frame & Motion CAD v1 built (109 bodies, BOM 50 lines, 35 assembly steps, cut list). Torque safety factors 4.7-6.1. Differential-pressure airflow switch added to the duct. Open: head Z stack ~17 mm clash with the real X carriage; the 6 mm aluminium plates need an outside cutting service.
- 4:08 PM: the designer: shorten the head plate 17 mm at the rear and keep the needle line at Y 420. Started Head CAD.
- 4:17 PM: Head CAD v1 built (52 bodies, BOM 30 lines, 15 steps). Head 2.88 kg; X axis safety factor 4.7. Head plate cut 17 mm; collisions clean. Open: actuator type, valve location, Z stiffness, hollow housings, hot-air resin/heater.
- 4:18 PM: the designer: station actuators are spring-return pen air cylinders.
- 4:19 PM: Head decisions: pen cylinders; valves on the head; second Z block; hollow ribbed mSLA housings; hot-air heater in the bay, piped up. Applying in head v1b.
- 4:20 PM: the designer: storage is just the 8-row strip tray for now. Real tray CAD queued after head v1b.
- 4:35 PM: Tray CAD v1 built (384 parts, 8 lanes, slot optical sensors, 0.81 kg, safety factor 6.0). The head v1b decisions weren't applied; re-dispatched.
- 4:46 PM: the designer: add sprocket pins to each tray lane for exact indexing. Cover tape is peeled before loading.
- 4:50 PM: Head v1b applied: 2 Z blocks, hollow housings (0.50 kg for five), heater in the bay with a 1.8 m hose and PEEK nozzle sleeve; housing E in high-temp resin. Head 2.56 kg, X safety factor 4.8. Tray sprocket pins (24x 1.4 mm); pocket positions fixed, no teaching needed. Collisions clean.
- 4:50 PM: Snap v18