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.
Camera features are now on by default for new Fuse installs and new stores. Fresh Fuse installs enable cameras, snapshot uploads, remote streaming, and a 5-second timelapse cadence out of the box, and new stores get completion snapshots and timelapse generation turned on cloud-side. Existing installs and stores keep their current settings, so nothing changes for you unless you opt in. Every setting below can still be toggled at any time.
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.
External IP / RTSP Cameras
Beyond the camera built into a printer, you can attach any standalone IP camera that exposes an RTSP or RTSPS stream (security cameras, overhead webcams, a Raspberry Pi camera server, and the like). External cameras feed the same Fuse pipeline as built-in ones, so preview snapshots, live WebRTC streaming, and timelapses all work identically.
Adding a camera
Open the printer's detail page, find the Hardware section, and expand Cameras. Click Add camera and fill in:
- Stream URL (required): the full URL including the scheme, for example
rtsp://192.168.1.50:554/stream. Usertsps://for an encrypted stream. - Name (optional): a friendly label shown on the tile, such as "Overhead" or "Chamber".
- Role (optional): Chamber, Bed, Toolhead, Overhead, or Other, used for grouping and labeling.
- Auth credentials (optional): the camera's username and password, entered as
user:pass. Leave this blank if the camera doesn't require a login or if you've already embedded the credentials in the URL. - Camera ID (under Advanced): a stable internal identifier, generated automatically from the name and role. You rarely need to change it.
A printer can hold several cameras at once, for example its built-in chamber camera plus an external overhead camera. Each camera is tagged Built-in or External on its card.
Primary camera
Exactly one camera per printer is the primary: it owns the dashboard live tile, the preview snapshots, the print-completion thumbnail, and timelapses. Newly added cameras are set primary by default, so the feed you just configured shows up right away. The primary is marked with a ★ Primary badge.
To change which camera is primary, open the ⋮ menu on a camera card and choose Set as primary. This works for both external and built-in cameras, so you can point the dashboard at an external camera and switch back to the built-in one whenever you like.
Adding, editing, removing, or re-pointing a camera takes effect within a few seconds: Fuse picks up the new configuration and reloads its streaming layer automatically, with no printer restart required.
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.
An external RTSP camera won't connect.
Confirm the Stream URL is reachable from the Fuse host (not just from your laptop) and includes the full path, for example rtsp://192.168.1.50:554/stream. If the camera requires a login, set the Auth credentials or embed them in the URL. Try the rtsps:// scheme only if the camera actually serves TLS. Most cameras expose their exact RTSP path in their own web interface or manual.
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.