Flash. Pair. Display.
The first successful setup needs no knowledge of Raspberry Pi OS, shell commands, kiosk flags, or remote desktop software.
- 1
Flash the image
Download the DisplayOps image and write it to a microSD card with Raspberry Pi Imager or balenaEtcher. Optionally preload Wi-Fi.
- 2
Connect the Pi
HDMI to the screen, power on, Ethernet or Wi-Fi. The device boots directly into the player and shows a pairing code and QR code.
- 3
Pair it in the portal
Sign in, enter or scan the code, give the screen a name. The device receives its own cryptographic identity. No shared passwords.
- 1
Choose what to show
Website, image, video, slideshow, or message. Set a refresh interval, rotation, and screen-on hours.
- 2
Watch it run
The dashboard shows online state, telemetry, and a screenshot. Health events tell you when something changes.
- 3
Keep it running
Watchdog, local cache, safe updates with rollback, and desired-state convergence after any outage. From the portal or the API.
A desired-state model, not a remote control
You describe what each screen should be showing. The device converges to it, and keeps converging after reboots, network drops, and updates.
- Small Go agent on the device: a static binary that supervises the browser and reports health.
- Persistent, authenticated control channel for commands, heartbeats, and status. Commands are timestamped and replay-resistant.
- Each device gets its own identity at pairing time. There is no fleet-wide credential to leak.
- Content is hashed and cached on the device. A 50-screen fleet does not download the same video 50 times a day.
- Signed agent and player updates with automatic rollback if the new version does not check in.
- No general remote shell. Diagnostics come as a support bundle you can download, not an open door.
What a heartbeat carries
{
"display": "dsp_8k2m",
"ts": "2026-09-04T14:02:11Z",
"agent": "0.4.2",
"player": { "state": "healthy", "url": "https://…", "since": 3553200 },
"hdmi": { "connected": true, "mode": "1920x1080@60" },
"cpu_temp_c": 51.2,
"mem": { "used_mb": 812, "total_mb": 3884 },
"disk": { "used_gb": 6.1, "total_gb": 29.1 },
"wifi": { "ssid": "office", "rssi_dbm": -58 },
"uptime_s": 3553200
}Connect a screen. Tell it what to display. We keep it running.
Three displays are free. No card, no sales call, no signage jargon.