-
-
Notifications
You must be signed in to change notification settings - Fork 0
Printers
Printers are managed in Settings → Printers. The main app window shows the plugin catalog for whichever printer is selected in the header; use the printer selector in the top bar to switch between printers.
Bespok3d scans your local network using mDNS (Bonjour/Zeroconf) every 15 seconds. Printers running Moonraker will appear in the Add printer discovery list automatically — no IP address required.
If your network blocks mDNS between devices (common on guest WiFi or corporate networks), use the manual IP option instead. You can find the U1's IP address in the Snapmaker touchscreen UI under Settings → Network.
Click Add printer in the app header:
- Select a printer from the discovery list, or switch to Manual and enter an IP address or hostname
- Give it a nickname
- Click Add
The printer appears in the header selector immediately. At this point it's online but not yet managed — the Bespok3d base layer hasn't been installed yet.
Each printer shows a status dot next to its name:
| Dot | Meaning |
|---|---|
| 🟢 Green | Managed — daemon is running and reachable on port 4269 |
| 🟡 Yellow | Online — printer is reachable but the daemon is not running (not yet enrolled, or daemon stopped) |
| 🔴 Red | Offline — printer not reachable at the last check |
| ⚪ Grey | Checking — status not yet determined |
| ⬜ Muted | Deactivated — Bespok3d has been soft-disabled on this printer |
Status is refreshed every 15 seconds while the app is open. Managed status is saved to disk and restored when you relaunch the app — a previously enrolled printer will show as managed immediately on next open.
Enrollment installs the Bespok3d base layer and daemon on your printer. It is a one-time process, and every step is idempotent — safe to re-run if anything goes wrong.
See Quick Start for a step-by-step walkthrough.
If enrollment fails partway through, click Retry from this step on the enrollment screen. You do not need to start over — steps that already completed are skipped.
In Settings → Printers, click the History button on any enrolled printer to see a log of every enrollment step, when it completed, and which adapter was used. Useful for confirming what version of the base layer is installed or diagnosing issues.
In Settings → Printers, each row shows an editable icon and name. Click the icon area to open the picker: choose an accent colour, upload a custom image, and adjust zoom. Changes are saved immediately.
In Settings → Printers, click Deactivate on any managed printer. Deactivation soft-disables Bespok3d without removing any files:
- All plugin services are stopped
- The daemon's autostart hook is removed from
S90lmd - The bespok3d
[include]lines are removed fromprinter.cfgandmoonraker.conf - All plugin files and the daemon binary remain on the printer
After deactivation the printer boots normally with no plugins running. A yellow banner appears in the main window with a Reactivate button.
A confirmation dialog appears before deactivating. Check "Don't show again" to skip the dialog in future.
In Settings → Printers (or via the banner in the main window), click Reactivate on a deactivated printer. Reactivation restores everything:
- Removes the deactivated marker
- Re-inserts the
[include]lines intoprinter.cfgandmoonraker.conf - Re-patches the
S90lmdboot hook - Starts the daemon
- Re-applies all installed plugins via the recovery mechanism
No re-enrollment is required. All your plugins are restored.
In Settings → Printers, click Remove Bespok3d on any managed printer. This permanently removes Bespok3d from the printer:
- All plugins are uninstalled and their config changes reverted
- All config changes to
printer.cfg,moonraker.conf,S90lmd, and nginx are undone - The
/userdata/bespok3d/workspace is deleted - The printer record is removed from this app
This action cannot be undone. A mandatory confirmation dialog describes what will be removed before you proceed. To use Bespok3d again you will need to re-enroll.
In Settings → Printers, click Remove printer (the trash icon) on any row. This removes only the app's local record:
- Deletes the app's local record of the printer
- Removes it from the printer selector and all dropdowns
It does not uninstall the Bespok3d base layer or daemon from the printer hardware. The printer keeps running exactly as before. If you re-add the same printer, you can re-enroll it without any manual cleanup.
Snapmaker firmware updates wipe /home/lava/ (Klipper and Moonraker sources). Plugin files in /userdata/bespok3d/ survive the update, but symlinks into Klipper and Moonraker need to be re-created.
When the app detects a printer that has an enrollment log and installed plugins but no running daemon, it shows a yellow recovery banner at the top of the window.
- Click Recover now in the banner
- The enrollment screen opens in recovery mode — enter SSH credentials and click Start
- Bespok3d re-enrolls the printer from scratch (re-creates the overlay write layer, re-installs the daemon)
- Once the daemon is up, all installed plugins are re-applied automatically in dependency order
- A results modal shows per-plugin status: recovered, skipped (unmet dependency), or deactivated with reason
If a plugin cannot be re-applied (symlink failure, patch failure, or Klipper does not recover after install), the plugin is deactivated: its files remain in /userdata/bespok3d/usr/local/plugins/ but all symlinks are removed. A deactivated.json file is written to the plugin directory recording the reason. Check the catalog for an updated version.
Plugins are re-applied in topological order — providers before dependents. If a provider fails, its dependents are skipped (not deactivated) until the provider is fixed. A skipped plugin is shown in the results with "dependency not satisfied" as the reason.
For the Snapmaker U1, enrollment writes the following to persistent storage (all locations survive OTA firmware updates):
| Location | What it is |
|---|---|
/userdata/bespok3d/ |
Bespok3d workspace root |
/userdata/bespok3d/var/lib/demon/ |
Daemon Python source |
/userdata/bespok3d/etc/daemon/server.{crt,key} |
Daemon TLS certificate and key (unique per printer) |
/userdata/bespok3d/auth/acl.json |
Access control list — your GPG public key and bearer token |
/userdata/bespok3d/etc/init.d/autostart/s10bespok3d-daemon |
Daemon autostart entry |
/userdata/cfg/wpa_config.conf |
WiFi credentials backed up to persistent storage |
/etc/udev/rules.d/70-wlan0-mac.rules |
Pins the WiFi MAC address to prevent IP churn |
The following overlayfs files are also written (survive reboots as long as debug mode is active):
| File | What was changed |
|---|---|
/etc/init.d/S99bespok3d |
Added — the plugin init dispatcher |
/etc/init.d/S90lmd |
One line inserted delegating to S99bespok3d at boot |
/etc/nginx/sites-enabled/fluidd |
One include line added for plugin location blocks |
/etc/wpa_supplicant.conf |
Symlinked to /userdata/cfg/wpa_config.conf
|
Klipper and Moonraker config files are extended with [include] directives pointing to Bespok3d's plugin drop-in directories. No existing config is overwritten.
Bespok3d - open source under AGPL-3.0. Look mom, custom printer and no SSH.
Get started
Reference
Advanced