Close
0%
0%

FieldStation42 - Nostalgic TV Simulator

Over-the-air and cable broadcast nostalgia machine!

Similar projects worth following
Simulates over-the-air broadcast television experience from the last century - its a nostalgia machine!

I started this project after noting how my enthusiasm and interest in television had changed over time. With a million streaming options, why was I bored with it all? Something feels heartless about it all and it made me wonder if the experience of TV had been better when I was a kid in the late 1970's and 80s. I decided to try and recreate the experience I had with TV back in the day. While my personal experiment focuses on my own experience in the late 70's and early 80s, the hardware/software described in this project can easily extend to any era of OTA broadcast television.

Success Metrics: A convincing recreation of OTA TV in the USA in the late 70's and early 80's:

  • When the TV is turned on, a believable show for the time slot and network should be playing
  • When switching between channels, the shows should continue playing serially as though they had been broadcasting the whole time

Software

For my experiment, I wanted to simulate the 3 major networks, PBS and some local channels. To recreate that, I would need custom software that supports multiple channels to:

  • Manage video content stored on disk
  • Programming schedules that rotates weekly
  • Cut commercials and bumps to build-out schedules to start/end on hour and half-hour boundaries
  • Replay the schedule true-to-time
  • Change the channel on user's signal

The software and related documentation are available from the github repo linked to this project.

Hardware

For my experiment, I wanted the system to be completely standalone, so I used a Raspberry Pi and a Raspberry Pico. It will run fine on any Linux system with video acceleration. 

The following diagram shows the layout. The neopixel strip and momentary switch live in the channel changer device, while the rest is house in a cigar box. The tactile button on the left is used to signal a shutdown of the display software (fallback to desktop) while the one on the right is to signal a full shutdown. These commands are sent from the pico to the pi via UART serial lines.

retro-tv-setup.fzz

Fritzing file (breadboard, schematics etc)

fzz - 129.99 kB - 09/22/2024 at 22:22

Download

  • Added Loop Channel Support

    Shane C Masona day ago 0 comments

    This allows for simulating channels that play a set of videos on a loop, like a community bulletin channel.

    Note: This feature is highly experimental and is only included in the main branch for testing. Use at your own risk.

    To get started, copy loop.json from confs/examples/ into confs

    cp confs/examples/loop.json confs/

    The example configuration provides the minimum configuration to enable the guide channel with the default view.

    {"station_conf" : {    
       "network_name" : "MyLoop",    
       "network_type" : "loop",    
       "channel_number": 2,    
       "runtime_dir" : "runtime/loop",
       "content_dir" : "catalog/loop", 
       "catalog_path": "catalog/loop.bin",
       "schedule_path": "runtime/loop_schedule.bin"
    }}
    

    About content_dir: Files in this directory will be read into the catalog when you run station_42.py and will be played in alpha-numeric order.

    Limitations


    Currently, subfolders and temporal hints are not supported. Since this specific channel type is meant to work with shorter content, it has not yet been tested with content over an hour in length and is not likely to work.

  • Guide/Preview Channel Prototype

    Shane C Mason3 days ago 0 comments

    Added a guide channel prototype. The guide channel is highly experimental and is currently only included in the main branch for testing. Documentation and hardening of this module is ongoing - use at your own risk :) Currently, video playback is in progress.

    Copy `guide.json` from `confs/examples/` into `confs`

    cp confs/examples/guide.json confs/

    cp confs/examples/guide.json confs/

    The example configuration provides the minimum configuration to enable the guide channel with the default view.

    {"station_conf" : {
        "network_name" : "Guide",
        "network_type" : "guide",
        "channel_number": 3,
        "runtime_dir" : "runtime/guide",
        "content_dir" : "catalog/indie42_catalog/commercial/December"
    }}

    The guide channel's appearance is controlled through a set of parameters. The default parameters can be overridden. To override a parameter, just put it into the configuration file with the new value. The following parameters (shown with their default values) are available:

        "width" : 720,
        "height": 480,
    
        "top_bg" : "blue3",
        "bottom_bg" : "blue4",
    
        "pad" : 10,
    
        "messages" : ["Hello FieldStation42\nGuide preview", "Cheers!\nFrom us to you!", "FieldStation42 Guide\nOn cable mode."],
        "message_rotation_rate" : 10,
        "message_fg" : "white",
        "message_font_family" : "Arial",     "message_font_size" : 25,
    
        "network_font_family" : "Arial",
        "network_font_size" : 12,
    
        "schedule_font_family" : "Arial",
        "schedule_font_size" : 12,
        "schedule_highlight_fg" : "yellow",
        "schedule_fg" : "white",
    
        "schedule_border_width" : 4,
        "schedule_border_relief" : "raised",
    
        "footer_messages" : ["You are watching FieldStation42", "Now with cable mode."],
        "footer_height" : 50,
    
        "schedule_row_count" : 3

    See the github repo for more details.

  • Added Temporal Scheduling Hints

    Shane C Mason11/06/2024 at 03:39 0 comments

    New Feature: Sub-Folders as content hints

    Subfolders, when specially named, can be used to restrict content to certain times.

    Monthly based scheduling hints

    Sub-folders with the name of a month will only be played in slots falling in that month. The names need to be fully spelled out (October, not Oct).

    Quarterly scheduling hints

    Sub-folders with the name of a quarter will only be played during that quarter of the year. Q1 is the first 3 months, Q2 is the second 3 months and so on. Valid quarter names are Q1, Q2, Q3 and Q4.

    Date range scheduling hints

    Content in sub-folders with a date range and works across year boundary. Some examples include:

    • Sub-folder with name December 1 - December 25 would only be played between the first day of December through the 25th day of December.
    • Sub-folder with name November 15 - April 10 would only be played between November 15 through April 19th.

  • More formats and better scheduling

    Shane C Mason11/02/2024 at 05:00 0 comments

    Multiple improvements and fixes are live now, including:

    • Extended support for multiple video formats mp4, mpg, mpeg, avi, mov, mkv
    • Improvements to fill content for commercials and bumps - allowing for the scheduler to try and get as close as possible to the target duration without hard failing when it can't get close enough.
    • Fixed an issue with how subdirectories were being read

  • Some Big Updates

    Shane C Mason10/20/2024 at 18:38 0 comments

    Several updates to improvements and overall QOL features for users:

    • Added sub-folder support for content folders - this enables a lot of use cases for reusing content.
    • Major code reorganization to clean up the top level of the repository
    • Added install script to handle python virtual environment setup and simplify the overall process.
    • Added all new documentation on setup and install process: https://github.com/shane-mason/FieldStation42/wiki
    • If station runtime directories don't exist, the scheduler will attempt to create

  • Added JSON Station configuration support

    Shane C Mason09/30/2024 at 15:03 0 comments

    Added JSON formatted station configurations to replace the python module versions - though both can be used currently.

  • QOL Updates

    Shane C Mason09/28/2024 at 16:54 0 comments

    Several updates are now available in the github repo, including:

    • Added `--rebuild_catalog` switch to force rebuilding all catalogs before generating schedules - this is useful when the content has been updated. To only rebuild a specific catalog, just delete that station's catalog.bin file.
    • Added installation and setup documentation to the README

  • Added sign-off video and off-air video configuration

    Shane C Mason09/26/2024 at 15:02 0 comments

    Added two new configuration options for specifying a signoff video to the per-station configurations:

    #used at sign-off time (played once)
    'sign_off_video': "catalog/anthem_signoff.mp4",
    #used when the channel is offair 
    'off_air_video': "catalog/off_air_pattern.mp4",

    and then an option in the schedule configuration to note when to run it - the following will cause sign-off at 3am:

    3: {'event' : 'signoff'

    About Sign Off events

    A signoff event is specified by assigning a time slot to {'event' : 'signoff'} and will cause the video file specified by sign_off_video to be played once at the top of the hour. If off_air_video is specified, then the remainder of the hour will be filled by looping off_air_video.

    About Off Air time
    If a time slot is not specified, it will be considered as off-air for schedule creation. If off_air_video is specified, then the slot will be filled by looping off_air_video.

View all 8 project logs

Enjoy this project?

Share

Discussions

Dan Maloney wrote 09/25/2024 at 23:32 point

Very cool, just wrote this up for the blog. Great work, thanks for the nostalgia overload!

  Are you sure? yes | no

Shane C Mason wrote 09/26/2024 at 14:53 point

I just gave it a read - thanks! It was well done!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates