All apps · 0 apps
printspy
Docker app from ccmpbll's Repository
Overview
Readme
View on GitHub
PrintSpy
A self-hosted dashboard for monitoring multiple 3D printers — OctoPrint and PrusaLink — from a single web interface.
Early Development — expect rough edges, breaking changes, and evolving APIs. Feedback and contributions welcome.
What it does
Each printer gets a row: webcam/snapshot, GCode thumbnail, progress/ETA, temps, layer progress (OctoPrint + DisplayLayerProgress), and smart plug power state/control. Updates push live via SSE. Everything's configured through the settings page — no config files, no restart needed.
Features
- Real-time SSE updates, no manual refresh
- Auto-detects camera stack, printer name, and installed plugins
- Smart plug power control + energy monitoring — auto-detected via OctoPrint (Tasmota, PSU Control), or talk directly to a Tasmota device independent of any plugin, assignable to any printer type
- Print control (pause/resume/cancel) and one-click reprint from recent files
- Multi-user login with per-account passwords, no roles/tiers
- Config backup/restore as YAML
- Snapshot/live toggle, printer reordering, dark mode, responsive layout
- Multi-arch (x86 + ARM)
Supported platforms
- OctoPrint — fully supported
- PrusaLink — experimental (Only tested on MK4S and Core One)
Plugin architecture — new platforms are straightforward to add.
Quick start
docker run -d \
--name printspy \
-p 8080:8080 \
-v printspy-data:/data \
ccmpbll/printspy:latest
Open http://localhost:8080 — first run prompts you to create a login. Once in, click the settings gear and add your first printer. You'll need the printer's URL and OctoPrint API key.
Docker Compose
services:
printspy:
image: ccmpbll/printspy:latest
ports:
- "8080:8080"
volumes:
- printspy-data:/data
restart: unless-stopped
volumes:
printspy-data:
Configuration
All printer management is done through the web UI — open the settings page to add, edit, reorder, and remove printers. No config files needed.
Login
First run redirects to a setup page to create the first account. Add or remove additional users from Settings → Users. No roles or permission tiers — every account has full access.
Smart plugs
OctoPrint printers with the Tasmota or PSU Control plugin installed get power control automatically — nothing to configure. For everything else (PrusaLink, Klipper, or an OctoPrint printer without the plugin), add a Tasmota device directly under Settings → Smart Plugs and assign it to a printer. Plugs are managed independently of printers, so deleting a printer unassigns its plug instead of deleting it.
Environment variables
| Variable | Default | Description |
|---|---|---|
PRINTSPY_PORT |
8080 |
HTTP server port |
PRINTSPY_DATA_DIR |
/data |
SQLite database location |
Getting your OctoPrint API key
- Open your OctoPrint web interface
- Go to Settings (wrench icon) → API
- Copy the Global API Key, or create a new one under Application Keys
Tech stack
- Go backend — single binary, low resource usage
- SQLite — no external database needed
- Vanilla HTML/CSS/JS frontend — no build step, no framework
- Docker — multi-arch container (amd64 + arm64)
Building from source
# Requires Go 1.25+ and CGO (for SQLite)
make build
# Or with Docker
make docker
Contributing
PrintSpy is in early development. If you'd like to contribute:
- Open an issue to discuss before submitting large changes
- Bug reports with
docker logsoutput are especially helpful - Plugin implementations for Moonraker/Klipper are welcome
License
AGPL-3.0 — see LICENSE for details.
Install Printspy on Unraid in a few clicks.
Find Printspy in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
ccmpbll/printspy:latestRuntime arguments
- Web UI
http://[IP]:[PORT:8080]- Network
bridge- Shell
sh- Privileged
- false
Template configuration
HTTP web interface port
- Target
- 8080
- Default
- 8080
- Value
- 8080
Path to store PrintSpy database and configuration
- Target
- /data
- Default
- /mnt/user/appdata/printspy
- Value
- /mnt/user/appdata/printspy