Wes Ellis./ a personal notebook
Technology. Stories. Side projects.
A few things worth writing down.
← Back to Side Projects

Side Projects

CRT 90s TV: Channel Surfing Like It's 1996, on a Raspberry Pi

An old wood-cabinet television and stereo in a warmly lit living room with wooden chairs.

Part 7 of the thread The retro workbench

PROJECT AT A GLANCEOpen source
What it is
Open-source tool
My role
Creator
Year
2025
Built with
  • Python
  • Raspberry Pi
  • pygame
  • python-vlc
  • LIRC
THE SHORT VERSION4 points
  • A Raspberry Pi drives a CRT with nine themed channels: a TV guide, sitcoms, cartoons, Nicktoons, anime, Comedy Central, MTV, weather and retro games.
  • An IR remote does the channel flipping, and CRT filters and overlays sell the look.
  • Channel lineup lives in one JSON file, and most of the repo is setup docs for hardware, software and media.
  • It's a personal hobby project under MIT. Issues and pull requests are welcome.

Streaming gave us every show ever made and took away the one thing a '90s TV did best: deciding for you. You'd sit down, hit the remote, land on whatever was halfway through, and flip again if it was a commercial. There's something restful about not choosing.

crt-90s-tv is my attempt to get that back. It's a Raspberry Pi project, written in Python, that turns a tube TV into a set of themed channels you surf with an IR remote.

What it does

The idea is simple: an old CRT, a Pi behind it, and a lineup that looks like a basic-cable package from the mid-'90s. The README lays out nine channels:

Channel What's on
CH 1 TV Guide
CH 2 Sitcoms (Seinfeld, Friends, Cheers)
CH 3 Cartoons (Animaniacs, DuckTales)
CH 4 Nicktoons (Rugrats, Doug, Hey Arnold)
CH 5 Anime (Dragon Ball Z, Sailor Moon)
CH 6 Comedy Central (Beavis & Butt-Head)
CH 7 MTV (music videos, reality shows)
CH 8 Weather Channel
CH 9 Retro Games

A few of those aren't just video playlists. The weather channel is built around Weather Star 4000+, the retro Weather Channel look (I've written about a separate WeatherStar 4000 recreation if you want to go down that particular hole). Channel 9 hands you off to EmulationStation for retro games, and channel 1 is a guide channel, because what's channel surfing without a guide you ignore?

On top of the video, there are CRT filters and overlays meant to make the picture feel like it's coming off a broadcast signal rather than a file.

How it's put together

The dependencies tell you most of the story. pygame handles the screen, python-vlc handles playback, python-lirc and RPi.GPIO cover the IR remote and the Pi's pins, and OpenCV, NumPy and Pillow do the image work behind the filters. requests and schedule round it out.

The channel lineup is configured in one place, config/channels.json, so changing what's on channel 4 is a JSON edit, not a code change.

Most of the repo is documentation, split by concern:

  • Hardware: CRT integration, hardware options, and a bill of materials for a Pi terminal build.
  • Software: development setup, Pi deployment and the technical architecture.
  • Media: how to organize content for the channels.

There are also docs on FieldStation42 hardware and integration in there. FieldStation42 is its own open-source cable TV simulator, and I've written up a FieldStation42 cable box build separately; this repo keeps notes on how the two can fit together, but they're different projects.

Using it

Clone it and install the Python requirements:

git clone https://github.com/wesellis/crt-90s-tv.git
cd crt-90s-tv
pip install -r requirements.txt

From there, the README's order of operations is: assemble the hardware (see docs/hardware/), install the software (docs/software/DEVELOPMENT_SETUP.md), organize your media (docs/media/), and edit config/channels.json to set your lineup.

Note

The README points to the docs/ folder for the full hardware and software setup. Read those before you buy parts; the hardware options doc is there for a reason.

Tip

Python 3.9 or newer is the baseline, per the badge on the README.

Rough edges

This is a hobby project, and the repo says so plainly. The code side is lean: the tree has a single src/main.py alongside a lot of planning, including a development roadmap and a cost analysis. If you're expecting a polished installer, you'll be disappointed. If you're the kind of person who reads a bill of materials for fun and has a CRT in the garage, it's a decent starting point.

You also bring your own shows. The project organizes and plays media; it doesn't supply any.

It's MIT licensed, and contributions and ideas are welcome through issues or pull requests. If you've got a better Nicktoons block than mine, I'd like to see it.