Skip to content

dlgambill/u1hub

Repository files navigation

U1 Print Hub

A small local dashboard for a farm of Snapmaker U1 printers. From your phone or any browser on the same network you can:

  • Browse a folder of sliced G-code and see the colors each job needs.
  • See every machine's loaded colors and live status (idle / printing %) at a glance.
  • Push a job to any machine — and optionally pre-map each color to the head you want it to print from, so the machine's mapping screen comes up already correct.
  • Watch an upload progress bar while a file is sent, so a big push isn't a silent wait.
  • Pause, resume, or cancel a running print from any card.
  • Skip a single object mid-print from a tap-to-skip plate map — salvage the rest of a plate when one part fails instead of scrapping the whole bed.
  • Set the bed temperature per machine.

It talks straight to each printer's built-in Moonraker API. Nothing leaves your network.


Download (no Node.js needed)

Grab the build for your OS from the Releases page, put it in its own folder, and run it — a browser opens to the dashboard.

  • Windows (U1-Print-Hub-Windows-x64.exe): SmartScreen may warn "unknown publisher" (the app isn't code-signed). Click More info -> Run anyway.
  • macOS (U1-Print-Hub-macOS-AppleSilicon / -Intel): right-click -> Open the first time to clear Gatekeeper, or run xattr -dr com.apple.quarantine <file> once. You may need to chmod +x it.
  • Linux (U1-Print-Hub-Linux-x64): chmod +x then run it.

config.json and a gcode/ folder are created next to the executable on first run. Use Settings in the page to add your printers.

Already running on port 4545? Only one copy can use the port. If a launch flashes and closes, something else (often a second copy) already has 4545 — close it first.


Run with Docker (Raspberry Pi / NAS / homelab)

For always-on hosts, run the hub in a container. It serves the same dashboard.

git clone https://github.com/dlgambill/u1hub.git
cd u1hub
cp config.example.json config.json     # a writable config the hub persists to
mkdir -p gcode                          # point your slicer here, or mount your real folder
docker compose up -d

Then open http://<this-host-ip>:4545.

About auto-discovery: the "Discover on network" scan only works with host networking, which docker-compose.yml enables by default (Linux hosts). On Docker Desktop (macOS/Windows) host networking behaves differently — comment out network_mode: host, uncomment the ports: block, and just add printers by IP in Settings (that always works, container or not).

Edit the volumes in docker-compose.yml to point at your real Orca output folder.


Run from source (developers)

1. Install

You need Node.js 18 or newer — get the LTS build from https://nodejs.org and run the installer (defaults are fine). Then:

  1. Unzip this folder somewhere permanent, e.g. C:\u1-print-hub.
  2. Start it:
    • Windows: double-click start-windows.bat
    • Mac / Linux: run ./start-mac-linux.sh in a terminal

The first launch installs what it needs (takes a minute) and then opens http://localhost:4545 in your browser.

Use it from your phone: find the IP of the computer running the hub and open http://THAT-IP:4545 on your phone — e.g. http://192.168.1.20:4545. Keep the hub running on a computer that stays on (or set the launcher to run at startup).

2. First-time setup (all in the browser)

The Settings panel opens automatically the first time. Three steps:

  1. Add your printers. Click Discover on network to scan your LAN and list any Snapmaker U1s it finds — click Add on each. (Or Add manually and type an IP.)
  2. Set your G-code folder. Point it at the folder Snapmaker Orca saves sliced files to.
  3. Save.

Reopen Settings anytime with the gear button.


Using it

  • Pick a file from the left to see the colors it needs.
  • Each machine card shows its four heads with the colors currently loaded, plus status and bed temp. When a job is selected, you get a per-color "Send each color from" picker (defaulted to the best match) and Upload / Print buttons.
  • Press Print to send to that machine; a progress bar tracks the upload, then the print starts with your color mapping already applied.
  • While a machine is printing, the card shows Pause / Resume and Cancel, plus a Plate button that opens a live map of the bed. Tap any object to skip it — the rest of the plate keeps printing. (Skipping is irreversible.) The map's bottom edge is the front of the bed.

Keep your printer IPs from changing

Open Network inventory at the bottom — it lists every machine's MAC address. In your router, add a DHCP reservation binding each MAC to its current IP. After that, addresses never move and you won't have to touch anything.


Notes

  • Toolhead mapping is set the same way Snapmaker Orca does it: the hub uploads the file, sends the SET_PRINT_EXTRUDER_MAP macros for your chosen head assignment, then starts the print. The dropdowns pick which physical head prints each color.
  • Per-head colors are read from Moonraker's print_task_config object; the live plate map and skip feature use the standard Klipper exclude_object module.
  • LAN only, no password. Anyone who can reach the hub can push prints — and it controls real ~300 C hardware. Keep it on your home/shop network; don't expose it to the internet or forward a port to it, and don't leave prints unattended.

Found this useful?

Buy me a beer -> https://venmo.com/u/dgambill (Venmo @dgambill). No pressure, all appreciated.

License

MIT — see LICENSE. Free to use, change, and share.


Diagnostic: capture how Orca sends the toolhead mapping

capture-proxy.js sits between Snapmaker Orca and ONE real printer, forwards everything (so Orca works normally), and logs every request — so you can see the exact call that carries the head mapping.

  1. Find the IP of the machine running this (Windows: ipconfig; Mac/Linux: ifconfig).
  2. Run, pointing at the printer you're testing: node capture-proxy.js http://<printer-ip> 7125
  3. In Orca, edit that printer's connection host to http://<this-machine-ip>:7125 (keep type = Klipper/Moonraker). Slice, set your toolhead mapping, hit Send.
  4. Everything lands in capture-<timestamp>.log — the upload and any mapping call will be in there in plain text.
  5. When done, point Orca's host back at the real printer IP.

For maintainers: building & releasing

Single-file executables are built by @yao-pkg/pkg on native runners (each OS builds on its own runner — no cross-compiling). To cut a release, bump the version in package.json and the VERSION constants in server.js and public/index.html, then tag and push:

git tag v1.5.2
git push origin v1.5.2

.github/workflows/release.yml builds Linux, Windows, and Apple-Silicon macOS binaries and publishes them to a GitHub Release. The Intel-Mac build is a best-effort job: GitHub's free macos-13 runners are often unavailable, so it must not block the release — it attaches its binary afterward if/when a runner frees up. To build locally instead: npm install && npm run build (output in dist/).

About

A hub to hold and push gcode files to Snapmaker U1 printers

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages