KeyForge

Turns a typed name into a finished 3D-printed keychain with almost no manual work.

Node.jsOpenSCADPrusaSlicerReverse-engineered protocol3D PrintingZero dependencies

KeyForge turns a typed name into a finished 3D-printed keychain with almost no manual work. Someone types a name, and the system builds the model, checks it, slices it, finds a free printer, uploads the job, and starts the print. It is designed for events where many people may want a keychain and there is no time to prepare every file by hand.

The full pipeline is:

text name → OpenSCAD model → geometry check → STL → PrusaSlicer → G-code → queue → printer

KeyForge creating, assigning, and starting a print

It runs on the same stock Ender 3 V3 KE printers as PrintFarm and uses their local network connection. No firmware changes, no Raspberry Pi, and no USB shuffling are required. The application itself uses only Node’s built-in APIs and has zero runtime npm packages. OpenSCAD and PrusaSlicer are the only external tools needed.

From name to model

Short and long names need different spacing. KeyForge places the letters into an OpenSCAD template with four connecting rails, a ring hole, and raised text so the finished keychain prints as one solid piece. Before slicing, it checks that the geometry is a single connected solid. Invalid shapes are flagged instead of becoming failed prints. Valid models are sliced with a custom PrusaSlicer profile for the Ender 3 V3 KE, and the dashboard shows a preview before the job is sent.

Queue and printer control

Jobs live in a persistent queue with clear states: waiting, printing, failed, or recently finished. KeyForge scans the local network for printers and reads their live status. It does not store IP addresses because the printers use DHCP and addresses can change after a restart.

Jobs can be assigned to a specific printer or picked up automatically. Auto-dispatch only chooses a printer that is online, free, and has a confirmed empty bed. It uploads the G-code over HTTP, sends the start command over the printer’s WebSocket on port 9999, and waits until telemetry reports that exact file as active. When a print finishes, the printer stays locked until someone confirms the bed is clear.

The queue and history survive server restarts. Failed jobs can be retried, downloaded for inspection, or deleted.

Current status

The full flow works on stock Ender 3 V3 KE printers: a name goes in, the model is generated and validated, the job is sent to a free printer, and the system tracks it until completion. Other Creality models may use different network paths or status fields, so support is currently confirmed only on the Ender 3 V3 KE.

Source code and setup instructions: GitHub Repository.