Fix stretched content on Kramer and Oxygen LED walls; ordinary TVs stay at 1080p
AdSpace TV v0.2.15.
LED walls no longer stretch ads into 16:9.
On some LED processor chains (Kramer / Oxygen), the Pi used to lock onto 1920×1080 even when the wall wanted 1920×960. The picture then looked stretched. You can now pick the correct HDMI mode on that one Pi. It is saved on the device and reapplied every time the kiosk starts. Ordinary TVs keep the usual 1080p picture — this setting is not baked into the flash image.
The on-device info API (:7224) now shows the live resolution, what the display prefers, and whether a custom mode is in use.
To set a mode on one LED-wall Pi:
make display-mode PI_SSH=pi@adspace-{serial} MODE=1920x960 OUTPUT=HDMI-A-2
To go back to the display’s preferred mode:
make display-mode PI_SSH=pi@adspace-{serial} CLEAR=1
If the wall does not advertise that resolution, the Pi leaves the picture alone.
Downloads
Venue and lab Pis enroll on distinct tailnet keys; lab hostnames get a dev- prefix
AdSpace TV v0.2.14.
Split Headscale enrollment by image flavor and prefix lab hostnames with dev-.
Prod and dev flash images now use HS_PROD_KEY / HS_LAB_KEY so venue and lab Pis are distinct on the tailnet; Beszel stays on the shared token.
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.
Downloads
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.
Downloads
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.
Downloads
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
Downloads
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.
Downloads
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
Downloads
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
Downloads
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
Downloads