Wire Bender — operator GUI
UnreviewedBrowser GUI for the Adom wire-bender. Loads a Hydrogen Layout JSON, queues wires, and drives the RP2350 toolboard directly over WebUSB — one Next Bend button generates G-code, updates the 3D preview,
Wire Bender — operator GUI
Browser GUI for queueing and stepping through wire-bending runs on the Adom shop floor's wire-bender machine. Reads a Hydrogen Layout JSON exported from the 3D Editor and turns it into a point-and-click workflow: pick wires, build a Session Queue, hit Next Bend, and the machine bends the wire. Replaces the manual "paste G-code into device-debug" loop entirely.
What it does
- Loads a Hydrogen Layout JSON (uploaded or pasted) and shows every wire in a VS Code-style sidebar.
- Renders two 3D views — a closeup of the active wire and an overview of all breakouts + wires — both painted on a dark navy gradient with a Fusion-style ViewCube.
- Builds a Session Queue with checkboxes, shift-click ranges, and a master select-all. Or just click a wire and hit Start Session — the queue auto-populates.
- Next Bend — one button does everything: generates G-code on the server, updates the 3D preview, and sends the G-code directly to the toolboard over WebUSB. The operator cuts the wire when the machine stops, then clicks Next Bend again.
- WebUSB toolboard integration — pairs with the Adom Toolboard (RP2350, VID 0x4144) via the browser's native USB API. No copy-paste, no debug dashboard.
- Toolboard config editor — loads the Klipper-style motor/driver/encoder config from the server's
config.jsonby default. Editable in a modal; session overrides don't touch the default. Save As writes named configs to the server. - Per-wire Z-layer overrides — the layer table lets you raise/lower individual horizontal segments to deconflict overlapping routes.
AI-drivability (v0.3.0)
Every UI action has an HTTP endpoint that's curl-scriptable end-to-end:
GET /api/session/state— current snapshot (queue, current/next, progress)POST /api/session/start,POST /api/session/next,POST /api/session/quitGET /api/toolboard/config— default toolboard config (from config.json)GET /api/toolboard/configs— list saved config filesPOST /api/toolboard/config/save— save a named config (cannot overwrite default)POST /api/console— UI forwards console.log/warn/error + window.onerror hereGET /api/console— replay the last 500 UI-side log entriesPOST /api/shutdown— graceful exitGET /favicon.svg— monochrome wire-glyph favicon
Static assets served with Range-request support for video seeking.
Demo
A 1:48 captioned walkthrough is bundled at demo/media/wire-bender-walkthrough.webm.
Prerequisites
- Python 3.8+ (tested on 3.12)
pip install -r requirements.txt(one dep:numpy)- A Chromium browser (Chrome, Edge) for WebUSB support
Quick start
git clone https://github.com/adom-inc/wire-bender
cd wire-bender/last-wire-bender-app
pip install -r requirements.txt
python3 server.py
# open http://localhost:8892/ in Chrome
Operator workflow
- Open the app, click a wire (or check several)
- Click Start Session — auto-queues if empty
- Click ⎔ Connect Device to pair the toolboard
- Click Next Bend — machine purges, then bends
- Cut the wire, click Next Bend again
- Repeat until the queue is empty
Source
github.com/adom-inc/wire-bender — the GUI lives in last-wire-bender-app/. Private, org-scoped to Adom.