printspy printspy 3d printer monitor octoprint dashboard print farm ccmpbll/printspy:latest https://hub.docker.com/r/ccmpbll/printspy bridge sh false https://github.com/ccmpbll/printspy/issues https://github.com/ccmpbll/printspy https://github.com/ccmpbll/printspy/blob/main/README.md Self-hosted dashboard for monitoring multiple 3D printers from a single web interface. Connects to OctoPrint instances and displays real-time status, webcam feeds, temperatures, print progress, and more via Server-Sent Events. Features include smart plug power monitoring and control (Tasmota/PSU Control), print control (pause/resume/cancel), recent files with one-click reprint, layer progress, and GCode thumbnails. Open the web UI, add your printers with their OctoPrint URL and API key, and you're set. No config files needed. Web interface: http://UNRAID_IP:8080 Tools:Utilities http://[IP]:[PORT:8080] https://raw.githubusercontent.com/ccmpbll/unraid-docker-templates/refs/heads/master/templates/printspy.xml https://raw.githubusercontent.com/ccmpbll/unraid-docker-templates/main/images/printspy.png ###2026-07-02b - Direct Tasmota smart plug support — talk to devices directly over HTTP, independent of any auto-detected plugin (works for PrusaLink, Klipper, or OctoPrint without the Tasmota plugin) - Plugs managed independently of printers (Settings > Smart Plugs) — survive printer deletion instead of being removed with it - Assignable to any printer type, including OctoPrint, for a second plug an auto-detected one doesn't cover - Per-plug label visibility toggle for the dashboard power button - Power toggles now reflect instantly instead of waiting on the next poll cycle - Bumped to Go 1.25 ###2026-07-02a - Larger, centered logo on the login/setup pages - Self-service password change from Settings > Your account ###2026-07-02 - Multi-user login — bcrypt-hashed accounts, SQLite-backed sessions, first-run setup page - Login rate-limited to 5 attempts per 15 minutes per username - Fixed SSRF via printer URL field (blocks loopback/link-local addresses, including the cloud metadata endpoint) - Added X-Content-Type-Options: nosniff header - Added CI (build/test) on every PR and push to main ###2026-07-01a - Dead code removal, SSE broadcast dedupe ###2026-07-01 - Dedupe digest-auth retry and idle-reload code paths ###2026-06-27e - Fix idle power consumption (watts) not displaying on printer cards - Fix recent files not updating after changing count in settings - Fix potential crash when PrusaLink camera snapshot fails to load - Fix digest auth using wrong URI path for snapshot proxy ###2026-06-27d - New PrusaLink printer plugin — connect Prusa MK4/MK4S, MK3.9, Mini+, XL, and Core One directly via PrusaLink API - HTTP Digest authentication, status monitoring, print control, recent files, and camera snapshots - Automatic print history recording for both OctoPrint and PrusaLink printers - Printer type selector with conditional fields, pause confirmation dialog ###2026-06-27c - Multi-plug Tasmota support with per-plug labeled controls - Smart printing guard: only protects printer plug, auxiliary plugs (lights, fan) can be toggled while printing - Global poll interval setting - YAML config export/import for backup and restore - Pause confirmation dialog ###2026-06-27b - Recent files dropdown with thumbnails, print status, and one-click reprint - Print control: pause, resume, cancel from the dashboard - Recent files count configurable in settings - Security fixes: path traversal guard, XSS fix in reprint handlers ###2026-06-27 - Smart plug power monitoring and control (Tasmota and PSU Control) - Per-printer and bulk power on/off with printing safety guard - Live power consumption display (watts) for Tasmota energy devices ###2026-06-24 - Full code review: 23 issues fixed across bugs, security, performance - API keys stripped from list/SSE responses - Graceful shutdown, settings validation, typed SSE messages - go-sqlite3 bumped for CVE fixes ###2026-06-22 - Initial release - Real-time SSE dashboard with webcam, temps, progress, thumbnails - OctoPrint plugin detection (DisplayLayerProgress, camera-streamer) - Mobile responsive layout with dark mode 8080 /mnt/user/appdata/printspy