Work/Case study
PrintBridge
Drop in a model, get a print. A self-hosted slicer and print host for the Ender-3 V3 SE.
A small self-hosted web app for a Creality Ender-3 V3 SE. It takes a 3MF, STL, or OBJ, slices it with PrusaSlicer on a built-in V3 SE profile, and sends it to the printer through a Creality Wi-Fi Box, OctoPrint, or Moonraker — with printer controls, spool tracking, calibration prints, and Home Assistant over MQTT. PrintBridge 0.3, one Docker container.
Python · FastAPI · PrusaSlicer · MQTT · Docker · Playwright
What it is
The Ender-3 V3 SE has no network of its own, and Creality’s slicer wants a desktop. PrintBridge is a web page on the home server instead: drop in a model from a phone or laptop, pick a quality and material, and it slices and uploads the G-code to whatever is plugged into the printer’s USB port, then starts the print or just leaves it there.
For the Creality Wi-Fi Box 2.0 it speaks the box’s own LAN protocol — the local API on port 81 for status and control, and FTP onto the box’s microSD card — the same one CrealityPrint uses. OctoPrint and Moonraker (Klipper) work through their REST APIs. It was built and released in a day, from 0.1 to 0.3, and verified on a Wi-Fi Box 2.0 with an Ender-3 V3 SE.
Slicing
The built-in profile targets the stock printer: a 220 × 220 × 250 mm bed, a 0.4 mm nozzle, the direct-drive extruder, and a bed that heats fully before homing so the probe measures it hot. Draft, Standard, and Fine in PLA, PETG, or TPU, with per-job infill, supports, brim, temperatures, scale, rotation, copies, and an optional fresh bed probe; saved presets load in one click, and several jobs can be combined onto one bed.
Settings inside a 3MF from Bambu Studio, Orca, Cura, or PrusaSlicer are ignored, so the G-code always matches this printer. Multi-plate 3MFs get a plate picker, and a file made for another printer says so — “made for a Bambu Lab A1 mini”, “scales the model to 80%” — with Use original size to undo it. A 3D view resizes by dimensions and previews the toolpath.
At the printer
Start, pause, resume, and cancel; preheat, cool down, home, the light, and Live Z babystepping during a print; nozzle and bed temperatures and progress from M73 lines; and a webcam relay. Spool tracking deducts filament after each print and warns before one that won’t fit on what is left. Calibration prints — a temperature tower, retraction test, size check, and first-layer test — save the chosen band to the profile.
Print history keeps totals, success rate, and a cost per print from filament prices. Email notifications carry a picture of the model, and Home Assistant discovers PrintBridge over MQTT with sensors and buttons. Models come in by upload, zip, a link, or a watch folder that slices whatever lands in it, and one click searches Printables, MakerWorld, Thingiverse, MyMiniFactory, and Cults3D.
Running it
One compose file pulls ghcr.io/doodersrage/printbridge for amd64 or arm64, built on Debian 13 with PrusaSlicer from the Debian archive; settings, jobs, and daily backups live in one volume. 0.3 was a security pass: cross-site writes are refused so another page can’t drive the printer, saved secrets never go back to the browser, link imports can’t reach local or metadata addresses, and zip imports are capped. Playwright tests run against the Docker image in CI before it is published.