The warm, crispy, 90s TV experience for your Raspberry Pi.
No more "what should we watch?" — Turn it on, and the station is already running.
The anti-algorithm for tired parents and kids who just want to watch cartoons.
curl -sL toasttv.eu/install.sh | sudo bashOnce installed, your station needs content:
- Web UI: Upload videos directly at
http://<your-pi-ip>:1993 - Manual: Copy files to
/opt/toasttv/media/videos/and restart
The mobile-first dashboard puts you in the director's chair from any device:
Upload videos, categorize content, and toggle interludes. Videos are automatically checked against your Pi's hardware capabilities. Incompatible files are flagged before they hit the playlist.
One tap to "Sign Off" manually, or set automatic daily limits.
- Smart Channel Engine: ToastTV builds a dynamic "Channel" schedule:
[Intro] → [Video] → [Video] → [Interlude] → [Video]. - Screen Time Limits: Set a daily quota (e.g. 45 mins). When time is up, the station plays the sign-off sequence and stops. No arguments.
- Seasonal Awareness: Christmas interludes in December, Spooky bumpers in October. The engine tracks dates automatically—zero config required.
- Native MPV Power: Plays MKV, AVI, MP4 directly with hardware acceleration (DRM/KMS). No transcoding, no buffering, rock-solid sync.
- Living Room Ready: No keyboard needed. Control playback with your TV remote via HDMI-CEC.
ToastTV listens for HDMI-CEC commands from your TV remote:
| Button | Action |
|---|---|
| SELECT / OK | Start playback or toggle pause |
| RIGHT → | Skip to next video |
| UP ↑ | Toggle TV guide |
| PLAY ▶ | Start playback |
| PAUSE ⏸ | Pause video |
Note: CEC support varies by TV. Arrow keys and SELECT typically work best.
Press UP on your remote for a retro Now/Next display, see what's playing, what's coming up, and how much screen time is left.
ToastTV works out of the box. It includes a full "broadcast day" so you can test the flow immediately:
Three episodes of Caminandes (by Blender Studio, CC-BY) are included.
The mascots Penny & Chip are ready to run your station.
- Good morning! — They sign on together.
- Bumpers — They keep the flow moving.
- Bedtime — They sign off for the night.
- Seasonal — They celebrate holidays together.
make install # Install Bun, MPV, FFmpeg
make start # Start MPV + server
make dev # Start with watch mode
make test # Run testsForce a specific Pi profile to test media compatibility:
make start PROFILE=pi-zero-2w # Test as Pi Zero 2 W (limited)
make start PROFILE=pi-4 # Test as Pi 4 (full capability)
make dev PROFILE=pi-zero-2w # Dev mode with profileAvailable profiles: pi-zero-2w, pi-3, pi-4, pi-5, unknown
Test the install flow locally using a Raspberry Pi VM (or any ARM64 VM):
# On your computer: start the dev server
make serve-local
# In the VM: curl install from your computer
curl -fsSL http://<computer-ip>:3000/install.sh | sudo LOCAL_SERVER=http://<computer-ip>:3000 bashThis builds a fresh tarball and serves it via a local HTTP server that mocks GitHub release endpoints.
For testing detection in a VM without real hardware:
# Deploy mock scripts to VM (one-time)
TVSIM_HOST=dietpi@192.168.x.x make tvsim
# On VM: simulate TV events
./tv-sim.sh on # TV power on
./tv-sim.sh off # TV standby
./tv-sim.sh guide # Toggle TV guide
./tv-sim.sh hdmi-plug # HDMI cable connected
./tv-sim.sh hdmi-unplug # HDMI disconnected
./tv-sim.sh status # Show current stateSee ARCHITECTURE.md for tech stack, and design decisions.
MIT