How it works

Flash. Pair. Display.

The first successful setup needs no knowledge of Raspberry Pi OS, shell commands, kiosk flags, or remote desktop software.

  1. 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. 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. 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. 1

    Choose what to show

    Website, image, video, slideshow, or message. Set a refresh interval, rotation, and screen-on hours.

  2. 2

    Watch it run

    The dashboard shows online state, telemetry, and a screenshot. Health events tell you when something changes.

  3. 3

    Keep it running

    Watchdog, local cache, safe updates with rollback, and desired-state convergence after any outage. From the portal or the API.

Under the hood

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.