The player you flash, leave on the wall, and update in place
AdSpace TV 1.0.
Flash a card, give the Pi a network, and it plays. It enrolls itself, keeps the kiosk up, and takes a later release without another card. Prod opens https://screen.adspace.so. The lab image opens https://dev.adspace.live.
New images do not ship a shared SSH password. The password is chosen when that image is built, and the card stores only a hash. The remote agent key on those images is a new key. A card already on a wall keeps the password it was flashed with until you replace it.
A 1.0 player includes:
- The screen. The kiosk opens when the page answers. If the network drops, the Pi returns to setup and tries the saved Wi-Fi again.
- Wi-Fi from the TV. With no network, the set shows a setup page. A phone joins the Pi’s hotspot and sends the venue Wi-Fi.
- A PIN. While a PIN is set, the keyboard, mouse, and touch stay locked and the ads keep playing.
- The right picture. One LED wall can keep its own HDMI mode. A normal TV stays on the mode the display prefers.
- Find this set. Identify puts the hostname and the running release on the TV.
- A checked update. A signed command installs one release. The Pi compares the published hashes and the pinned packages first, and leaves itself alone if they do not match. The screen can follow the update until it succeeds or fails.
- A record of the device.
pi-info shows what the Pi was at first boot and what it is now. doctor is a read-only check.
Downloads
Pis install a verified release, report progress, and the kiosk comes up without the long black wait
AdSpace TV v0.3.9 (includes v0.2.19 through v0.3.8).
A Pi can now take a checked release, show that update on the TV, and reach the kiosk without sitting on the boot logo.
Signed updates (v0.2.20–v0.3.3)
A player only changes when a signed update command asks for a release. The updater checks the published module hashes and the pinned package versions first, and leaves the Pi untouched if something does not match.
Each release is published where the Pis read it, including the prod and dev flash images. Those files are publicly readable. pi-info shows the last release that was actually applied. The identify flash also prints that version under the hostname.
Follow an update (v0.3.2)
While an update runs, the Pi writes a line the screen can follow. Each line says whether it is still running, and ends in success or an error.
Doctor (v0.3.0)
doctor.sh is a read-only check. It prints what is healthy and what is not. It does not restart services or write files.
The kiosk starts sooner (v0.3.7–v0.3.9)
The picture used to stay black between the boot logo and the ads. The logo is now stopped as root, and the kiosk waits until that stop has finished before it takes the screen. A missed start retries in one second instead of eight.
The first boot no longer waits 15 seconds after a slow network check. The kiosk starts as soon as the page answers.
Downloads
Kiosk can read this Pi's version and CPU serial on :7224
AdSpace TV v0.2.9.
Add a localhost device-info API on :7224 so the kiosk can read this Pi's version and CPU serial.
First boot no longer curls install.sh from the internet
AdSpace TV v0.2.8.
Vendor Tailscale's official installer so first boot does not curl install.sh.
Bake tailscale-install.sh into the image via cloud-init; bootstrap runs the local copy and only fetches from tailscale.com if it is missing.
Screen can tell a Pi from a phone via a stamped Chromium user-agent
AdSpace TV v0.2.7.
Identify kiosk Chromium as AdspaceTV/rpi- so screen can tell a Pi from a phone.
Dump Chromium's real UA at bootstrap, stamp it with the release tag, and pass --user-agent on every launch.
make indicate pulses the ACT LED and flashes the hostname without stopping the kiosk
AdSpace TV v0.2.6.
What’s new
- Identify which TV a Pi is on:
make indicate pulses the ACT LED and flashes the hostname on the HDMI display without stopping the kiosk
- Version-commit body is now used as the GitHub Release changelog
The kiosk pointer is gone, and every release ships prod and dev images
AdSpace TV v0.2.5.
Flashable images now ship with every release. Download from GitHub Releases and flash with Raspberry Pi Imager — no customisation.
What’s new
- Two images per release.
adspace-tv-v0.2.5.img.xz — prod, kiosk at https://screen.adspace.so
adspace-tv-v0.2.5-dev.img.xz — dev, kiosk at https://dev.adspace.live, office apt cache
- One-step releases. Commit
v0.2.5 on main. CI tags, builds the API, frontend, and both images.
- Headscale on new flashes. Fresh images join the AdSpace tailnet on first boot.
- Hidden cursor. The kiosk pointer is gone — compositor and Chromium.
- Test without hardware.
make qemu boots the image on a Mac. --gui opens a window.
- Linux embed + fleet SSH. CI cuts images on Linux; the fleet key is baked in from first boot.
Each release now ships a production image and a office-dev image
AdSpace TV v0.2.4.
What’s new
adspace-tv-vX.Y.Z.img.xz — prod kiosk at https://screen.adspace.so
adspace-tv-vX.Y.Z-dev.img.xz — dev kiosk at https://dev.adspace.live, with the office apt cache
- Local embeds can set
APT_PROXY and ADSPACE_URL in .env to cut a matching dev image
Commit vX.Y.Z on main and CI creates the tag and the release
AdSpace TV v0.2.3.
What’s new
- Push a commit on
main whose first line is exactly v1.2.3 — CI creates the tag, then builds the API, frontend, and flash image in the same run
- Manual
git tag && git push still works
Every tag now publishes a ready-to-flash Raspberry Pi image
AdSpace TV v0.2.2.
What’s new
- GitHub Actions downloads Raspberry Pi OS Lite, runs
embed.sh, and attaches adspace-tv-vX.Y.Z.img.xz to the release
- You can also trigger the image job by hand and attach it to an existing tag
- Docs now say: download the image and flash with Raspberry Pi Imager — no Imager customisation