Retro Tech
Building a FieldStation42 Cable Box
Part 1 of the thread The retro workbench
- FieldStation42 turns a pile of your own video files into scheduled cable channels, commercials and all.
- One Raspberry Pi 4 feeds a CRT over composite. It does TV and only TV.
- A 3D-printed cable box with a keypad and a red LED display tunes channels. Channel 00 is the guide, 01 is my WeatherStar 4000.
- Everything's encoded at 640x480. Pay-per-view codes with a printed booklet are still just an idea.
There's a specific feeling you only get from flipping channels on a tube TV. You're not picking something. You're landing on whatever happens to be on, halfway through, commercials and all. Streaming killed that, and I didn't realize I missed it until I found FieldStation42.
This is a build log, not a victory lap. The box isn't finished. But the plan has settled down enough that it's worth writing up.
What FieldStation42 actually is
FieldStation42 is Shane Mason's open-source broadcast and cable TV simulator. You point it at your own video files, define channels, and it builds schedules for them: daily lineups, prime time blocks, commercial breaks, station bumps between shows. Then it plays them on a clock. Turn to a channel and you join whatever's scheduled at that moment, just like the real thing.
It runs on Linux or a Raspberry Pi (Raspberry Pi OS Bookworm is the recommended base), uses MPV for playback, and has a web console for configuration. It supports several channel types, including a guide channel.
You can drive it from:
- a web remote
- an IR remote through a Flirc receiver
- its REST API
If you've ever wanted to build your own local cable company out of a closet full of old shows, this is the project.
The hardware
The whole thing runs on one Raspberry Pi 4 feeding a CRT over composite. That's it. The Pi's composite output is a big part of why this works so nicely; you get real interlaced standard-definition video on a real tube, not an upscaled HDMI signal pretending to be old.
Note
My first plan was to cram more onto that same Pi. FieldStation42 for TV, and Batocera on the side for retro gaming. I dropped that idea. Two very different jobs sharing one little computer and one video output felt like asking for trouble. The Pi does TV now, and only TV.
The enclosure: a cable box you can actually touch
The part I'm most excited about is the box itself. Shane Mason designed a 3D-printed cable box enclosure for FieldStation42, and the repo includes the script that brings it to life: fs42/pi/cable_box.py.
The enclosure holds two bits of hardware:
- A 3x4 matrix keypad, the classic phone-style layout, for punching in channels and stepping up and down.
- A TM1637 four-digit LED display, the cheap red seven-segment kind, which shows the channel number the way an old cable box did.
The script reads the keypad over the Pi's GPIO pins, drives the LED display, and tells FieldStation42 to change channels through a local socket. Type two digits, pause for a beat, and it tunes. It can also show the time when you're not doing anything, which is exactly what those old boxes did sitting on top of the TV.
That little red display is doing a lot of nostalgic heavy lifting. Building mine is the current job.
The lineup
I'm keeping it under 95 channels. Two of them are spoken for:
- Channel 00 is the guide. The scrolling program guide was half the experience back then, and FieldStation42 has a guide channel type built in.
- Channel 01 is the weather. That's my own WeatherStar 4000 recreation, running as the local weather channel. Blue gradients, smooth jazz, the whole deal.
Everything else is TV and movies. The goal is for it to feel like a real cable lineup, not a playlist with extra steps.
Why everything is 640x480
All the content gets encoded at 640x480 before it goes anywhere near the Pi. It's a 4:3 CRT fed over composite, so there's no point storing or decoding anything bigger.
A Pi 4 is a capable little machine, but it's a lot happier playing small files than scaling down big ones on the fly, and consistent input makes the whole system more predictable. It also keeps the library a sane size.
The pay-per-view idea
Here's the part that isn't built yet, and might be the most fun.
Remember VCR Plus+? The TV listings printed a short code next to each show, you typed it into a gadget, and it figured out the channel and time for you. I want that, but for pay-per-view.
The plan: punch a longer code on the keypad and the box plays one specific movie. Next to the TV sits a printed booklet, laid out like an old TV guide, listing the movies with their codes. You flip through it, find what you want, type in the number, and it starts.
Out of the box, cable_box.py handles two-digit channel entry, so this will mean extending it: collect a longer code, look it up, and hand the right file to a channel set up for it. The four-digit display is a happy accident here, since it can show the code as you type it.
The booklet is going to be its own little design project, and honestly I'm looking forward to that part as much as the code.
Where it stands
Here's the short version:
| Piece | Status |
|---|---|
| Pi 4 with FieldStation42 on composite | The plan is locked |
| WeatherStar on channel 01 | My own project, ready to slot in |
| Cable box enclosure, keypad and LED display | Being built |
| Lineup and 640x480 encoding | In progress |
| Pay-per-view codes and the booklet | Still just an idea on paper |
I'll post again once the box is together and something is actually playing on the tube.