Skip to content

yvg/toasttv

Repository files navigation

ToastTV logo ToastTV

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.

A picture of 3 kids watching cartoons on a TV in a cozy 90s living room

One-Line Install

curl -sL toasttv.eu/install.sh | sudo bash

Getting Started

Once 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

Broadcast Control Center

The mobile-first dashboard puts you in the director's chair from any device:

Library Management

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.

Library Management

Bedtime Enforcement

One tap to "Sign Off" manually, or set automatic daily limits.

Bedtime Enforcement

Why It's Better Than a Playlist

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

TV Remote Control (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.

TV Guide Overlay

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.

TV Guide Overlay

Starter Content

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.

Penny & Chip

Development

make install   # Install Bun, MPV, FFmpeg
make start     # Start MPV + server
make dev       # Start with watch mode
make test      # Run tests

Testing Different Hardware Profiles

Force 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 profile

Available profiles: pi-zero-2w, pi-3, pi-4, pi-5, unknown

RPi Simulator Testing

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 bash

This builds a fresh tarball and serves it via a local HTTP server that mocks GitHub release endpoints.

TV Simulation (Black-Box Testing)

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 state

Tech Stack

See ARCHITECTURE.md for tech stack, and design decisions.

License

MIT