Camera Streaming
Printago shows two kinds of camera imagery for printers connected through Fuse: low-frequency preview snapshots that keep your dashboard tiles fresh, and on-demand live WebRTC streams that play full-rate video when you click play. The two pipelines are independent — you can run snapshots without ever opening a live feed, and a live feed never replaces the snapshot poster behind it.
Camera support is currently limited to printers paired through Fuse. Printers connected directly to Bambu Cloud or other non-Fuse paths don't expose a camera to Printago today.
Permissions
Both pipelines are gated by the printer.camera permission. Without it, dashboard tiles, the dashboard's Cameras view, and the camera section on a printer's detail page are hidden entirely. The print-job detail page also won't show the camera-captured last-layer thumbnail or the timelapse video — only the slicer-rendered thumbnail.
By default this permission is granted to Store Owner, Admin, and Operator roles. Viewer does not get it by default. Adjust per-user grants under Settings → Users.
When you grant or revoke printer.camera, the affected user must refresh their browser session for the change to take effect — their token caches a camera custom claim that storage reads check against, and that claim only updates on token refresh (sign out / sign in works, or wait up to ~1 hour for natural rotation).
printer.camera grants API keys and users access to see both camera frame snapshots and live video from your printers' cameras.
Preview Snapshots
Every camera-capable printer paired to Fuse uploads a frame to Printago on an adaptive cadence: every 30 seconds while a printer is actively printing, and every 10 minutes while it's idle. The dashboard tile shows that JPEG as a freeze-frame poster, with an 2m ago (or similar) badge in the corner indicating how recently the frame was taken.
- Adaptive cadence keeps the dashboard fresh during prints (when you actually care) without burning bandwidth on idle printers.
- Storage: snapshots are overwritten every cycle. Old frames are not retained except on a Fuse instance that is building a timelapse video for a print.
"Enable snapshots" Setting
The snapshot upload pipeline is gated by an Enable snapshots sub-toggle in Fuse Settings → Cameras. With it off, Fuse won't capture or upload any frames and dashboard tiles fall back to the branded "No preview" placeholder. Live streaming is unaffected — clicking play still works as long as Allow remote stream access is on. Turn this off if you want camera-capable printers to be reachable for ad-hoc live viewing without leaving snapshots in your bucket.
Live Streaming
Click any camera tile (or the Stream affordance in the corner) and Printago opens a real-time WebRTC connection from your browser to the Fuse host on your local network, which proxies the printer's camera stream out to you.
- Direct peer-to-peer when possible. Printago uses public STUN servers to negotiate a direct connection between your browser and Fuse, keeping latency low (typically 1–3 seconds).
- TURN fallback for restrictive networks. If a direct connection can't be made, Printago falls back to a relay so the stream still works.
- Connection timeout: if the negotiation hasn't completed in 30 seconds, the tile shows an error with a Retry button. Common causes are an offline printer, a Fuse host that just restarted, or a network that blocks both direct and relay paths.
- Live indicator: while streaming, a
● Livepill appears in the corner. Hover it to swap in an✕ Closebutton — clicking that drops the live connection and falls back to the snapshot poster.
"Allow remote stream access" Setting
Live streaming requires the Allow remote stream access toggle to be on in Fuse Settings → Cameras. With it off, Fuse refuses incoming WebRTC negotiations from the cloud and you'll get a Remote camera streaming is disabled error. Snapshots are unaffected — they upload according to the "Enable snapshots" explained above.
Dashboard Camera View
The dashboard's view picker (Full / Compact / Cameras) has a third option, Cameras, that arranges every camera-capable printer as a tile-grid of posters.
The tile border color mirrors the printer's overall status:
- Green — Printing
- Blue — Ready (default)
- Purple — Waiting
- Yellow — Needs configuration
- Gray — Offline / Stale / Disabled
This palette matches the borders used in the Full and Compact dashboard views, so the same printer reads identically across all three layouts.
Virtual Printers
Virtual printers don't have real cameras. Printago synthesizes both layers:
- Preview snapshot: a generated preview image showing the virtual printer's name.
- Live stream: a generated video showing the virtual printer's name and a timer counting how long the stream has been running.
These let you test the entire camera pipeline without needing a real camera-capable printer in the room.
Timelapses
When Enable timelapses is turned on in your store's general settings, Fuse buffers JPEG frames during every print and stitches them into an MP4 when the print finishes. The finished video is uploaded and linked from the print job's detail page.
Three cadence modes (configurable per Fuse host in Settings → Cameras):
- Frame per layer (default): one frame each time the printer reports a layer change. Variable video length depending on print height — produces the most natural-looking timelapses for prints that publish layer info.
- Always ~5s video: reads the slicer's estimated print duration and spaces frames so the result is approximately 5 seconds at 30fps.
- Every 30 seconds: simple fixed timer, useful for printers that don't report layer info or duration estimates.
A local LRU cache (default 2 GB, configurable) keeps recently-finished timelapses on the Fuse host so you can browse, play, and download them from the Camera Activity page.
Privacy & Bandwidth
- Snapshots leave your network on the adaptive cadence (30s while printing, 10 min while idle) per camera-capable printer. They land in your store's private storage and are visible only to users in your store who hold
printer.camera(this includes owners). - Live streams stay peer-to-peer when network conditions allow — Printago never sees the video bytes. When TURN fallback is used the bytes pass through a relay but Printago still doesn't store or process them.
- Tearing down a Fuse host stops snapshots immediately. Already-uploaded snapshots remain in the bucket until they expire (30 days by default).
- The master Cameras toggle in Fuse Settings disables both pipelines wholesale. Use this if you want to prevent Fuse from accessing your cameras at all.
Troubleshooting
The dashboard tile shows "No preview" forever. The printer either has no camera (Klipper or PrusaLink without a configured camera source) or the Snapshots sub-toggle is off in Fuse Settings → Cameras. Open the Camera Activity page on Fuse and click Refresh all to force a cycle.
Clicking play shows "Couldn't connect to the camera after 30s". Either the printer is offline (check its status badge — gray border means offline), the Allow remote stream access toggle is off in Fuse, or your network blocks both direct WebRTC and TURN. Click Retry; if it keeps failing, verify the printer is reachable on your LAN and that Fuse is online.
The snapshot is much older than expected (30s while printing, 10 min while idle). Fuse may be having trouble uploading. Check the Camera Activity page on Fuse for recent failed uploads, and verify your Fuse host has working internet access to Google Cloud Storage.
The stream connects but immediately disconnects. Usually a TURN-relay credential expiry. The browser will request a fresh token and retry automatically; if it doesn't, refresh the page.
The stream connects but shows only a black screen. If the stream shows "LIVE" then it is connected. A black screen may mean it hasn't buffered enough data to show the image yet (this might take up to 5 seconds). Another option is that your printer is in a dark room and the camera is reporting all black, in which case if you have a light on your printer you can toggle it to see if that allows you to see the stream.