Pillarfree

Watch your over-the-air DVR recordings in any browser — and crop the pillarbox bars off classic 4:3 shows.


If you record old TV off an antenna, you have probably noticed the problem: a 4:3 show broadcast inside a 16:9 frame arrives with thick black bars down both sides. On a tablet that leaves you watching a small square in the middle of the screen, and the official apps give you no way to zoom in.

Pillarfree runs on any Linux machine on your network. It reads the recordings off your DVR, transcodes them on the fly into something a browser can actually play, and serves them as a web page you can open on an iPad, a laptop, or a phone — with a zoom control that pushes those bars off the screen.

What it does

Download

pillarfree.tar.gz  ↓ 48K  ·  sha256 18b414ad576f6d06445f71da706420f455e1d70926c8fc5d5518083b310e2463
tar xzf pillarfree.tar.gz
cd pillarfree
./install.sh

The installer checks for its dependencies (Node 18+ and ffmpeg, installing them via apt if needed), finds your DVR on the network by itself, sets it up as a service that starts at boot, and prints the address to open on your iPad. Re-running it is safe, and ./install.sh --uninstall removes the service without touching your files.

It is built to come back on its own after a reboot. If the network or the DVR isn't ready yet, it keeps retrying rather than exiting — exiting is worse than it sounds, because systemd stops restarting a service that fails a few times in quick succession, and it would sit dead until you noticed. Episodes recorded while the machine was off are picked up on the next scan, and if the DVR's address changed over DHCP it is simply found again.

What you need

It is a single Node script with no npm dependencies — just built-ins and ffmpeg — so there is nothing to audit but the source you unpack.

Why it exists

It started as a way to watch Star Trek reruns on an iPad without the black bars, and turned into a fair amount of work on the parts that are easy to get subtly wrong: segments are cut to a whole number of video frames, and audio frames are partitioned so every one belongs to exactly one segment. Skip either and the audio slowly drifts out of sync over an episode. The README that ships with it documents all of that, in case you want to build on it.