FakeTV: A Simulated Broadcast TV Station

Moe Fwacky
5 min readMay 8, 2017
The screen displays what’s currently playing to the television.

Well, it’s been some time since I wrote about FakeTV and a lot has changed since then, so we’re about due for an update. You might also notice that I rebranded this blog to be FakeTV specific, since that’s all I post about on here anyway.

FakeTV runs commercials in between shows

History of FakeTV

The idea started out of a desire to recreate the broadcast television experience. As somebody who likes to have TV on in the background, navigating menus to change programs is cumbersome, and binge watching isn’t always desired. Last year, I came across a python script that was capable of doing what I needed, and, after a few revisions, included the features allowing me to schedule shows and run commercials in between shows(more on this can be found in the previous blogs here and here). However, in March, the author of the script wiped the files, effectively pulling the project. I have since forked a fork of the project and made some minor changes to get the installer working. It’s not perfect, but it works. The original author of the project has since restarted the project in a limited capacity, but it is currently without license, so I won’t be using any of the new code at this time.

The various pieces of FakeTV assembled inside of a VCR shell

Overview

My FakeTV setup operates as an independent system. It is comprised of a Plex Server running on a Raspberry Pi 3 with two external hard drives, a RasPlex client running on another Raspberry Pi 3 and the Plex controller script running on a Raspberry Pi 2 B+ with a 2.8" pi tft screen.

The server was set up using this guide which was effective in getting the server setup and running on the pi and running updates. File transfers and library scans can be a bit slow (especially initially), but overall it runs well as long as all of the files are using Direct Play and not transcoding. Encoding in h.264 is a good way to ensure CPU utilization is minimal.

FakeTV Plex Server running on Raspberry Pi 3

It is also set up to reboot daily at 5am (when there is no media playing) in order to prevent any potential memory issues. I haven’t personally experienced memory problems, but I read a few comments from others mentioning 100% memory utilization after a few days of up-time. Overall the server works great and can even support playback from a second client, in case I wanted to watch something from the server outside of the FakeTV experience.

This Raspberry Pi 3 runs the RasPlex client that outputs directly to the TV over HDMI

The client, as mentioned above, is a simple RasPlex install with one tweak. In earlier installs, I was frustrated by the menu bar on each of the themes, which I felt took away from the experience. Fortunately, eliminating the menu is a matter of commenting out some lines in an xml file. I keep a test pattern as the wallpaper for more of that TV station feel when it’s between episodes/commercials or during off-air hours.

The controller and display screen run on this Raspberry Pi 2 B+ mounted in place of the LED panel

The controller is run by this python script. After installing python, plexapi, pyenchant and web.py, the controller script is ready to be installed and set up. The controller has its own database, independent of the Plex database, so that the progression of episodes isn’t tainted by other use of the Plex server. Schedules are added line by line, so I’ve created a shell script to populate the schedule all at once and another shell script to set up a specific movies to play each Sunday afternoon. Both scripts are in the scripts folder of the controller github repository.

This thrift store VCR is the new home of FakeTV

Another aspect to the controller came into play after I got my hands on an old Sony SLV-575UC VCR deck from the thrift store at the low cost of one dollar (marked down from $10). I picked this up looking for something to house FakeTV with enough space to dissipate heat. After ripping out all of the guts (and before knowing that it’s a reasonably valuable VCR), I housed all of the parts inside. While gutting the VCR, I noticed the LED panel was about the same size as the PiTFT 2.8" screen I had recently purchased for another project. I decided to hold the other project and install the screen to display Now Playing information and a clock. I managed this by forking a github project which was originally used as a digital Now Playing poster for a home theater. It requires php5 and a apache2 to create a page hosted on the controller. The screen runs a kiosk mode browser which displays the data. After getting playback information working, I set up an RSS reader to display headlines alongside the clock when it’s off-air or commercials are playing.

A tweet from Politico displays alongside the clock while commercials run.

FakeTV now looks like a proper home theater installation, with a bit of a retro flair. A couple of future improvements I’m planning are a power squid and ethernet switch to reduce the amount of wires coming out of the back . It’s a bit messy back there right now. I’d also like to get a fan installed back there to help vent the heat a little better.

I’m planning on writing up more detailed installation and setup instructions soon, but this covers the basics on how it works and what makes it run.

--

--

Moe Fwacky

Just a place where I talk about my various projects