“Hey Jarvis, what’s the weather?”
I said it across the game room, not to my phone, not to a smart speaker. To the TV.
A 1987 Magnavox sat across the room, doing its cable TV thing. Then the picture tore like a weak signal, and a low-poly head in shades cut in over the channel. Neon lines turning behind him. His line typing out underneath. And then he said it, out loud: “It’s 67 degrees and clear in Boston, Massachusetts. High of 67, low of 45.”
That’s Jarvis, the new on-screen host of CABLE 82. He’s the reason I made a new video, and he’s a good excuse to write a new blog post about the project.
Your own cable network
CABLE 82 is an open-source project for a Raspberry Pi that gives you your own cable network, and you set the programming.
If you caught the original build story, it started as a single bulletin board channel, and it has grown a lot since.
Under the hood it’s one dependency-free Node.js server (Node 18+) and one browser. It runs on anything from a laptop to a Raspberry Pi 3 B+, and mine is a Pi feeding that 1987 Magnavox over RF, because if you’re going to do cable, do cable.
It’s made for CRTs: 4:3, overscan, and a broadcast-safe palette. If you only have a flat panel, there’s a faux CRT mode that puts the picture inside a drawn wood console that fills the screen, with a channel dial that turns on every tune. Curve, scanlines, noise, bloom, and vignette are all settings, so you can dial in exactly how much 1982 you want.

Flipping around the dial
Channel 82 is still home base. It’s the Community Bulletin Board: your messages, the time, fun facts, dad jokes (you knew I’d get those in there), weather from Open-Meteo, RSS headlines, a crawl along the bottom, and background music. The crawl even carries the CheerLights color, so you’ll see things like “THE WORLD IS SET TO PURPLE” scroll by.
Then there are the video channels. A folder of videos is a channel. They play on a broadcast clock, so if you tune away and come back, you land mid-program, like real TV. You can’t pause or rewind. You missed it, pal.
If you want something to watch right away, run node channels/fetch-demo-channel.js and it downloads RETRO TV, eight public-domain Prelinger films, including Duck and Cover, Design for Dreaming, and One Got Fat.
- Scheduled hours. Put a channel on the air Saturday 8:00 to 11:30, and the rest of the week it shows a test card that reads PROGRAMMING RESUMES SATURDAY 8:00 AM.
- Commercial breaks. Point it at a second folder and it cuts to commercials every so many minutes, then the movie picks up where it left off.
- CABLEVUE. The program guide lives on channel 0.
- Channels on any drive. A
channelsfolder on a USB stick or a network share joins the dial. - External channels. Any web page can be a channel, like a retro weather app.

The on-screen display looks like one a cable box drew, with the channel on every tune and volume as a meter of cells. There’s a beat of tuner static between channels. And when you switch it off, it goes like a tube: the picture folds to a bright line, snaps to a dot, and the phosphor fades.
You can tune from the keyboard, a USB gamepad, an Atari joystick, an HTTP call, or the remote control page on your phone. I use the Atari joystick (of course I do). The phone remote does channel up, channel down, volume, and power, and it installs to your home screen with the 82 icon.

Everything else lives in the control room at /config. It’s all on one page with one Save button, and the set picks up the change at once.
The host with the most (polygons)
Jarvis is the station’s on-screen host. He’s a 1980s computer-generated head who cuts in over the channel to say a line or answer a question: the weather, the CheerLights color, the time, or a joke. He talks out loud when the machine has a voice.
He jerks between poses and tears like a weak signal, his line types out underneath, and a JARVIS caption flag tells you who’s talking. My favorite detail is his mouth. It’s an oscilloscope trace of his own voice, so it moves with every word.

The voice is espeak-ng. On the Pi that’s one sudo apt install espeak-ng. Without it, he still shows up and talks with a drawn mouth, he just doesn’t make a sound (the strong, silent type).
Their name, voice, speed, and pitch are in the control room’s Jarvis group, along with a box to try him live. Hal? Alexa er. Alexis? SimONE?

Anything that can send a web request
This is the part the DevRel side of my brain loves. Anything that can send a web request can put Jarvis on the air.
Give him a line to say:
curl -X POST http://cable82.local:1982/api/jarvis -d '{"text":"Good evening, and welcome to CABLE 82."}'
Or ask him something, and the station writes the answer from what it already knows:
curl -X POST http://cable82.local:1982/api/jarvis -d '{"ask":"weather"}'
ask takes weather, cheerlights, time, or joke. The repo’s examples/jarvis folder has him wired up from the shell, Python, Node, and Home Assistant, so your doorbell, your build server, or your smart home can all make an announcement on your cable network. I’m not saying you should have Jarvis tell you your tests passed. I’m not saying you shouldn’t, either.
How I talk to him
Getting “Hey Jarvis” from across the room onto the Magnavox takes a second Raspberry Pi. This one wears a 2017 MATRIX Creator board, an LED ring and eight microphones, which I revived this month. It listens for “hey Jarvis” with openWakeWord, catches the command with Vosk, and then calls the CABLE 82 Jarvis API. All of it runs on the Pi, with no cloud.
The same ring shows the CheerLights color. CheerLights is one global color anyone in the world can set, and every connected light follows. So in the video, when I ask, “Hey Jarvis. What’s the CheerLights color?” and he answers, “CheerLights is yellow right now,” the ring on the shelf is yellow too.

Bringing that 2017 board back to life is its own story, and I’ll write that one up separately.
Try it
You don’t need a Pi or a CRT to start. A laptop works.
git clone https://github.com/nothans/cable-82
cd cable-82
node server.js
Open http://localhost:1982 and you’re watching your own cable network. The control room is at /config, and the remote is at /remote-control.
Then put Jarvis on the air (swap in localhost if you’re running it on your laptop):
curl -X POST http://cable82.local:1982/api/jarvis -d '{"text":"Good evening, and welcome to CABLE 82."}'
When you’re ready to go all the way to a real tube, the step-by-step build tutorial walks through the Raspberry Pi 3 B+ and the old CRT. The code is at github.com/nothans/cable-82.
I started this project wanting a channel that felt like 1982. Now I talk to my TV, and my TV talks back. He’s a pretty good host, too, for a guy made of polygons…
