Releases: MadsRudolph/srm-cam
Release list
SRM-CAM v0.5.0 — the setup sheet, panels, Linux
The setup sheet is the app, boards share a sheet, and it runs on Linux.
The setup sheet
One window built on the run plan. The rail lists the job in the order you send the files, numbered steps for files and plain rows for what you do by hand. The stage draws the bed, the copper and the job. The inspector shows the selected step: what it needs, the file, the parameters. The machine bar keeps STOP within reach whatever is open.
- Two tiers: Essential is the whole single-sided job; Full adds cutting parameters, double-sided, rework, output format, streaming.
Interface → What the two tiers differ by…lists it. - Checks on screen before anything is written: fits the bed, Z reach, shorts, copper overhang, screw heads. The worst finding stays on the rail.
- The first interface is still shipped:
SRM-CAM --original, its own Start-menu entry and desktop entry. Same engine, same files.
Several boards on one sheet
Open more than one Gerber folder, place the boards side by side (drag, arrow-key nudge, arrange, butt together) and export one job: one isolation pass, one drill file, one cut-out, one dry run. Boards that touch share a single cut between them; nothing is cut along the sheet's edge.
Probing that follows a real board
- A height map per face; the top is never warped by the bottom's surface.
- A flex allowance for a screwed-down board: a quarter of the measured arch, capped, settable by hand.
- The probe grid stays on copper the machine can reach, and a grid with points outside the travel is refused rather than probed. The map is applied to the export as soon as probing finishes.
Double-sided
Reference holes sized for the bit and found automatically, dowel or fiducial registration, a flip that sticks, and the top files re-written to where the board landed. The cut-out is warped to the measured flip too.
The machine, from SRM-CAM (Full tier)
Firmware v3 wires up the whole SPI command set: spindle, pause and resume, the machine's status word, Z jog. Escape is STOP and now survives an open dialog.
Linux
An AppImage is built on CI next to the Windows installer, from its own lock, with desktop entries for both interfaces. The 3D views work on Linux.
Guide
Rewritten for the setup sheet: https://madsrudolph.github.io/srm-cam/
Known issues (firmware, fixed only by flashing while the machine is idle)
- STOP does not lift the bit. Motion and spindle stop; raise the bit with Page Up.
- After STOP, click-to-jog and "view position" do nothing until a move clears the hold.
- The fiducial surface reference can plunge 6 mm into bare laminate. Pick a reference direction with copper under it.
Files
SRM-CAM-Setup.exe (Windows, unsigned: SmartScreen warns on first run; compare with SHA256SUMS.txt) and SRM-CAM-0.5.0-x86_64.AppImage (Linux, SHA256SUMS-linux.txt).
1046 automated tests.
v0.2.7 — crash-proof entry, editable parameters, width card
V-bit day: a snapped tip turned into three fixes.
Crash-proof cut entry
A V-bit died at first plunge because the approach rapid stopped only 0.2 mm above the believed surface — any Z-zero error (classic after a bit change) buried the tip at rapid speed. Now:
- The rapid stops 0.5 mm up; the final approach descends as a feed move at plunge feed. A Z error costs a scrapped line, not a tool.
- The ramp lead-in also runs at plunge feed instead of XY feed (steep-descent detection — leveling's gentle warps stay at full speed).
Job parameters in the UI
The cut-parameter forms (bit, depths, feeds, V-bit tip/angle/target width) were preset-only. New Job parameters group on the Setup page — click Edit values for live Traces/Drill/Cutout tabs. Edits update the preview immediately; Save... keeps them as your preset.
V-bit width test card
Sub-0.1 mm line widths can't be measured with calipers. New coupon at examples/vbit_width: 8 tracks stepping 0.40 → 0.05 mm design width, each with its own probe-pad pair — the narrowest track that still beeps on a multimeter brackets the actual cut width to 50 µm. Reading table in the folder's README.
468 automated tests.
v0.2.6 — rework detection v4: ranked, dust-proof
Detect-from-photo retrained on the hardest real-world case: a dusty board photographed straight off the machine.
Rework detection v4
v0.2.5's detector used absolute brightness thresholds — on a dusty, unevenly lit in-machine photo it flagged 40% of the board. Retrained against 16 fresh operator-marked ground-truth regions on exactly such a photo:
- A channel stretch is only suspect when it is dead for millimetres (contiguous near-zero run) and dark relative to its neighbourhood (15 mm local reference — absorbs lighting and dust gradients; floored so a fully dead zone can't declare itself normal).
- Suspect tiles are clustered and ranked by evidence — real defects cluster, photo noise scatters. Up to 12 boxes are proposed, most-evidence first, so the table order is the confidence order: review from the bottom, the last few are the doubtful ones.
- Validation on the dusty photo: 16/16 ground-truth regions found with 12 ranked proposals (v3: 13/16, buried in 90 flagged tiles).
Photo tips for best results: vacuum the dust off before shooting, get close (the detector wants ≥12 px/mm on the board), even light, no glare.
464 automated tests.
v0.2.5 — phone photos via relay, zero setup
Phone photos now work on networks that block device-to-device traffic (eduroam) — with zero configuration.
Photo relay
v0.2.4's phone QR upload needs the phone to reach the PC directly — client-isolating wifi kills that. Now the phone and the app both talk to a tiny relay instead of to each other, so it works on any network, mobile data included, and the PC accepts no inbound traffic.
- Zero setup: the team relay (
srm-cam-relay.madsrudolph.dev, a Cloudflare Worker inrelay/) is the default. Open the dialog, scan, shoot — done. - Photos live at an unguessable 128-bit token URL, are handed over exactly once, and expire after 10 minutes.
- The dialog's Relay field switches transport: another relay URL to self-host (deploy guide in
relay/README.md), or typelanfor the original direct-LAN mode (no internet needed).
460 automated tests.
v0.2.4 — phone photo hand-off with auto-crop
Board photos now go phone → GUI in one scan, cropped and ready to click.
Phone photo hand-off (QR)
New Phone... button next to Load photo on the Rework page:
- The app shows a QR code; scan it with the phone camera.
- The phone opens a take-photo page — tap, shoot, done. The photo lands directly in the app and the anchor dialog opens.
- No cloud, no cables, no companion app. One-shot local server with a random URL token, alive only while the dialog is open.
- Phone and PC must share a network — on eduroam (client isolation) connect the PC to the phone's hotspot.
Auto-crop to the copper board
Phone shots include the whole machine; the app now finds the copper stock by color (pink-brown vs. the yellower spoilboard, grey machine, saturated clips) and crops the photo to it at full resolution — so Detect-from-photo keeps its accuracy and the anchor dialog opens showing just the board. Falls back to the raw photo when no convincing board is found. Validated against operator reference crops of real machine photos.
Also
- User guide website: https://madsrudolph.github.io/srm-cam/ — install, workflow, double-sided, bed leveling, photo/rework, hardware, troubleshooting.
- Docs corrected: probe wiring needs only the red D7 clip on the copper — the tool grounds through the collet.
454 automated tests.
v0.2.3 — trained photo rework detection + automatic fiducial finding
Two features that remove the last squinting from the workflow — both validated against a real production board.
Detect from photo, retrained on real ground truth
v0.2.2's photo rework detector didn't survive contact with a real board photo. It has been retrained against actual ground truth (the operator's rework boxes from a production MegaPCB run, evaluated on the real photo):
- The discriminating signal is the channel cross-profile, not color: a properly cut channel reads bright (exposed substrate floor + burred edges catching light), a failed channel — cut too shallow or never cut — reads flat/dark like the surrounding copper.
- The detector now re-reads the original photo at full resolution (the signature dies in downscaled warps) and scores 8 mm tiles rather than single samples.
- Validation on the ground-truth board: 20 of 21 rework regions found, 13 boxes proposed, 4 extras (all in a zone the mesh had under-measured — plausibly real).
- It refuses honestly when a photo can't answer (soft focus, glare, misaligned anchors) instead of proposing garbage.
Automatic fiducial finding (firmware v2, reflash to get it)
The flip-registration grind — jog to each fiducial by eye, read VPanel, type four coordinate pairs — becomes one button per hole:
- New firmware
Hhole test: a shallow touch that descends at most 0.2 mm past the known copper surface; contact = copper, silence = hole. - The Auto button in the Fiducial alignment dialog walks the hole edges and bisects the true center to ~50 µm (~25–35 touches, about a minute per fiducial). Click-jog roughly over the hole, press Auto, the measured X/Y fills in and the fit RMS updates live.
Also in this release: everything from v0.2.2 (photo workflow, drift-corrected verified probing, mesh check, isolation DRC, tool wear ledger, workflow chips, experimental SPI streaming). One Arduino reflash of hardware/srm20_spi_probe covers all firmware features including the new hole test.
434 automated tests.
Post-release refresh (same day)
- Fixed the Fiducial alignment dialog clipping the new Auto column off-screen.
- A real app icon (copper PCB traces) on the exe, desktop shortcut, window/taskbar, and installer — no more generic python icon.
v0.2.2 — photo workflow, trustworthy probing, machine intelligence
The board-photo release: SRM-CAM now closes the loop between what you cut and what you meant to cut — and the probing that failed a real board got rebuilt end to end.
Photo workflow
- Photo overlay: photograph the board on the bed from any angle, click 4 anchor holes, and the photo warps into machine coordinates under the toolpaths — rework boxes are drawn on the real copper. A live angle guide catches a wrong anchor before you click it, drag-to-pan + scroll zoom navigate the photo, and a Traces dim slider fades the toolpaths so the copper reads clearly.
- Detect from photo (Rework panel): walks every isolation channel in the aligned photo and proposes rework boxes where copper still shows, with a coverage report.
- Feed card: export the feed-ladder test card (4–15 mm/s blocks), cut it on scrap, photograph it — every block gets scored and the app recommends the fastest clean feed.
Trustworthy probing (reflash hardware/srm20_spi_probe — firmware v2)
- Debounced, two-stage verified touches (coarse 25 µm, then 10 µm re-touch that must agree) — one flaky reading can no longer poison a height map.
- Drift compensation: the reference point is re-touched during the grid and every point corrected for spindle-warm-up/board-settling drift.
- Mesh check: flags points no smooth board surface can explain, recommends a cut depth that survives the mesh's uncertainty, and inserts extra probe rows where the surface changes too fast.
- Probe boxes: probe each rework box center and auto-deepen where the real surface sits higher than the mesh believed.
- Zero Z on machine (
W): verified touch-off writes origin Z at the copper — no VPanel round-trip (verify G54 Z once before NC use).
Guardrails & awareness
- Isolation DRC: spots where two separate nets sit closer than the bit are marked with a red X and the measured gap — guaranteed shorts, caught before any G-code exists.
- Tool wear ledger: every export logs the bit's cut distance; past 25 m the status warns the bit is worn.
- Workflow chips (status bar): board / mesh / fit / photo / boxes / machine link at a glance.
- Live run progress + time remaining, driven by the machine's real position.
Sessions & workspace
- Rework boxes (with per-box depths) and the photo now save with the session — the photo is copied next to the session file, so setups survive the original moving.
- Per-user workspace at
Documents\SRM-CAM\{sessions,exports,photos}; every file dialog opens where you last used it.
Experimental
- SPI toolpath streaming (
Stream (exp.)): drive the job over the SPI link move-by-move, bypassing VPanel. Dry-run (Z held 2 mm high) is the default and mandatory first step; wet runs are double-gated. Speed units are uncalibrated — treat as a research feature.
434 automated tests. Reflash the Arduino once to unlock everything probe-related.
SRM-CAM 0.2.1
What's new since 0.2.0
Preview & correctness
- Copper is rendered as a faint fill under the toolpaths — pads and vias connected to copper pours no longer look like phantom drill holes floating in empty space.
- Machine-frame drill view: the Drill tab with View=Bottom/Top now shows the holes exactly as physically cut on the bed (previously it always drew the design-frame X-ray under an "AS MILLED" badge, so bottom holes appeared mirrored and click-to-jog missed them).
- Cutout tab fixed in double-sided X-ray view — it now shows the edge-cut path (with a real time estimate) instead of repeating the trace isolation.
- Mirror / preview-frame controls grey out in double-sided mode (the View selector owns the frame there); the DEMO badge now clears when loading a saved setup.
Double-sided workflow
- Manual fiducial placement: a third placement mode — drag the gold pins anywhere on the preview (waste strips, cut-away corners) when the corner schemes don't fit your stock. The flip axis and realignment math are unchanged, and the export mirrors the points so drilled holes land exactly where previewed. Fiducial settings + positions now persist in Save/Load setup.
Live machining
- Align overlay: one click to trim the live crosshair/trail/progress/click-to-jog onto the machine's actual work origin (e.g. when G54 differs from where you zeroed) — display-only, safe mid-run, Ctrl+click to clear.
- Live 3D tracking: the 3D viewer follows the actual bit in real time (● LIVE button). Scrub the timeline to skip ahead and see what's coming; LIVE snaps back to where the machine really is.
V-bit
- Tool cross-section graphic on the Project page: the active bit drawn through copper/stock with width, depth, tip and angle annotated — hover to read the cut width at any depth (W = T + 2·D·tan(θ/2) made visible).
Install
Download and run SRM-CAM-Setup-0.2.1.exe — no Python required. Upgrades replace the existing install.
One-click latest-version link: https://github.com/MadsRudolph/srm-cam/releases/latest/download/SRM-CAM-Setup.exe
SRM-CAM 0.2.0
What's new since 0.1.0
- V-bit engraving support for tight SMD traces — use a V-bit profile for isolation routing where a flat end mill can't fit between pads.
- Spindle spin-up settle + ramped lead-in — the spindle gets time to reach speed before touching copper, and cuts enter the material on a ramp to soften engagement.
- MIT License added to the project.
- Auto bed-leveling hardware docs — Arduino UNO probe firmware reference and wiring guide for the SPI probe setup.
- Trimmed README with app screenshots and a link to the DTU Ballerup step-by-step CNC guide; detailed usage moved to
docs/usage.md.
Install
Download and run SRM-CAM-Setup-0.2.0.exe — no Python required. Upgrades replace the existing install.
One-click latest-version link: https://github.com/MadsRudolph/srm-cam/releases/latest/download/SRM-CAM-Setup.exe
SRM-CAM 0.1.0
Adds a guided walkthrough that teaches the whole workflow, on top of the 0.0.1 feature set.
New in 0.1.0
- First-launch guided tour — a gated coachmark walkthrough on the preloaded demo board: load → preset → preview → placement → export, where each step waits for the real action.
- Section guides — opt-in mini-tours for Double-sided, Bed leveling and Rework. Each branch page has its own Guide button to jump straight in; the top-bar Guide runs the full tour. Auto-runs once on first launch.
- Hardware probing walkthrough — the Bed-leveling guide covers connecting the Arduino, the VPanel coordinate systems (Machine / User / G54), setting the G54 Z origin (X/Y stays at the machine origin; keep machine Z above −50 mm) and clipping the probe (red → copper, black → bit). Wording follows the SRM-20 manual, now bundled in the repo.
Install
Download SRM-CAM-Setup-0.1.0.exe below and run it. No Python required.