Skip to content

Releases: zshall/program-guide

TVS 5.9.2-beta (2026-03-16)

17 Mar 03:49
9119814

Choose a tag to compare

Update Notes - 5.9.2 (2026-03-16)

image

🔧 Bug Fixes

  • Fixed #115 which was a problem I traced back to a Svelte framework issue. Svelte 5.53.7 exhibited this issue but Svelte 5.53.12 has fixed it. The issue manifested itself in TVS as a problem when changing channels too quickly; we would unload a channel rapidly while it's still loading and this would cause multiple channels to be loaded at the same time despite using a {#key} block to prevent this. The zombie channels would never unload and would stick around until we refreshed the page.

  • Added a 200ms throttle on channel change operations to help prevent any future issues with changing channels too fast. If you hold down the channel up / down button we no longer change channels as fast as possible; we'll change channels about 5 channels per second instead. If you mash channel up and down buttons rapidly we'll ignore any button presses shorter than 200ms apart.

  • Fixed an issue with the YouTube playlist engine where if you use it inside a h-split or v-split layout the player would take up 100% of the screen rather than 100% of its container meaning that we were losing half the image. YouTube playlists resize to fit their container properly now.

TVS 5.9.1-beta (2026-03-15)

15 Mar 21:59
9119814

Choose a tag to compare

Update Notes - 5.9.1 (2026-03-15)

image

🔧 Bug Fixes

  • Fixed #113; the <marquee> tag is broken in Chrome 146, so I switched to a custom implementation. This runs at 60 FPS and behaves similarly to the real marquee tag. Currently it is only available in the 1989 program guide theme, but it'll be used in upcoming engines as well.

TVS 5.9.0-beta (2026-03-09)

10 Mar 00:31
9119814

Choose a tag to compare

Update Notes - 5.9.0 (2026-03-09)

✨ New Features

  • Added new sat1992 OSD theme based on C-Band satellite TV from the early 90's. This theme brings with it some interesting customization options; true to the way the real receivers work, we simulate a satellite dish on a motorized base. You can optionally define a list of known satellites with positions based on motor pulses (these values can be any arbitrary number). You can then define themeOptions in individual channels to specify the satellite that the picture would be received from. When you go to a channel that uses a different satellite than the one that you were on previously, the simulated motor will display progress saying it's turning to the position that you specified.
osd:
  theme: sat1992 # 1990's analog C-band satellite receiver theme
  themeOptions:
    # showChannelInterference: false # by default, we display overlays of 
    satellite: C1 # the default satellite for all channels to be on. If unset, only channels with a satellite option set will display one.
    satellites: # you can define a list of different satellites; they'll be a letter and number combination followed by a 4-digit number representing the location in the sky
      C1: 3600 # these are all arbitrary numbers
      C3: 4100
      C4: 4300
      C5: 4550
      G1: 4550
      G2: 4700
      G3: 5100
      G4: 6200
      T3: 6900

channels:
- number: 1
  name: Test Channel
  color: blue
  themeOptions: # optional section for theme-specific metadata
    satellite: C3 # you can designate a channel as being on a particular satellite; choose from the list you defined in the OSD themes

- number: 2
  name: Test Channel 2
  color: red
  themeOptions:
    satellite: G2

- number: 3
  name: Test Channel 3
  color: green # if a channel doesn't specify a satellite, it defaults to the one specified in the OSD options, or no satellite if one isn't specified there either
  • Added a new abstract-background engine, which can currently apply two different visual effects to an image of your choice; wave1 and wave2.
- number: 143
  name: Abstract background 1
  abstract-background:
    type: wave1

- number: 144
  name: Abstract background 2
  abstract-background:
    type: wave2

- number: 145
  name: Abstract background with custom image
  abstract-background:
    src: placeholders/example-program.webp
    type: wave2
    width: 400
    height: 300

TVS 5.8.0-beta (2026-02-09)

10 Feb 03:58
9119814

Choose a tag to compare

Update Notes - 5.8.0 (2026-02-09)

image

✨ New Features

  • Added new daily-schedule engine that allows you to specify content to show at different times of the day. Acts as a timed loop (using your browser's time zone).
  • Added pixelated option to the image engine that allows you to use pixelated scaling when the image is scaled up, which can be desirable for low-resolution images or pixel art.
- number: 240
  name: Daily Schedule
  abbr: SCHED
  daily-schedule: # The daily schedule engine allows you to define content based on a 24-hour schedule. You can go overnight, but you can't overlap content. The schedule will repeat each day.
    noSignalContent: # Optional. You can specify content to show when there's nothing else scheduled.
      color: black
    
    content:
    - startTime: "20:00" # Time to start this item, in 24 hour format. Required.
      endTime: "05:00" # Time to end this item, in 24 hour format. Required.
      image: # The content to show. Required.
        src: placeholders/schedule-night.png
        pixelated: true

    - startTime: "05:00"
      endTime: "11:00"
      image:
        src: placeholders/schedule-morning.png
        pixelated: true
    
    - startTime: "11:00"
      endTime: "20:00"
      image:
        src: placeholders/schedule-day.png
        pixelated: true

🔧 Bug Fixes

  • Fixed an issue where content inside loops couldn't access channel information.

Changelog

TVS 5.7.2-beta (1-15-2026)

15 Jan 05:31
9119814

Choose a tag to compare

Update Notes - 5.7.2 (2026-01-15)

image

🔧 Bug Fixes

  • Fixed a longstanding issue where the Web Remote QR code doesn't display the Peer ID correctly.
  • Fixed issue where the Web Remote QR code would display on localhost or 127.0.0.1, which can't be reached from other devices. The pairing code is still shown in these cases.
  • Changed Web Remote pairing code to be alphanumeric to further prevent collisions.

TVS 5.7.1-beta (1-10-2026)

11 Jan 01:31
9119814

Choose a tag to compare

Update Notes - 5.7.1 (2026-01-10)

Television Simulator's 40th GitHub release!

🔧 Bug Fixes

  • Added a 10-second cooldown when backgroundAudio fails to load before retrying to prevent potentially thousands of requests in a short period of time if the audio source isn't available.

❗ Deprecation Notice

  • Television Simulator 6.0.0 will replace the external listing feature of the program guide with a new system designed to work with the currently-in-development Television Simulator Studio companion server. The guide.externalListings option will be removed in 6.0.0 and in its place will be a new API to sync guide data from an external source. More details will be provided closer to release. The title and description options for channels will also be deprecated in favor of a new info option that will include more advanced functionality; more information will be provided later.

⚙️ Example Config File Changes

  • Added TVS Update Channel (feed reader of the latest changelog updates) on channel 4.
  • Changed the "no content" channel to channel 8.

TVS 5.7.0-beta (12-28-2025)

28 Dec 20:20
9119814

Choose a tag to compare

Update Notes - 5.7.0 (2025-12-28)

image

✨ New Features

  • Added new TV state messages to the IFrame API: TVS.Volume, TVS.Muting and TVS.Power.
    These messages inform IFrame applications about changes in volume, mute and power states, respectively. See the TVS IFrame API documentation for more details on how to use these new messages.

  • Added background option to the PiP layout that allows you to set a background color behind the PiP content.

  • Added aspectRatioBehavior option to the Video engine that allows you to control how videos are displayed in their container. Options are contain, cover and stretch. Default is contain.

- number: 2
  name: You're Watching Television Simulator
  abbr: TVS
  video:
    src: placeholders/tvs-loop.mp4
    aspectRatioBehavior: cover # Optional. The aspect ratio behavior of the video. Values are contain, cover, or stretch. Defaults to contain.

TVS 5.6.0-beta (12-20-2025)

21 Dec 03:21
872d619

Choose a tag to compare

Update Notes - 5.6.0 (2025-12-20)

new loop placeholder image

Full Changelog

✨ New Features

  • Added the beginnings of a new IFrame API that allows web applications embedded in an IFrame engine to access options defined in the TVS config file. See the TVS IFrame API documentation for more details on how to use this feature.

⚙️ Other Changes

  • Added new placeholder video loop: placeholders/tvs-loop.mp4, a seamless 4:3 loop of the TVS logo.
  • Updated the example config file to include the placeholder loop on channel 2. Channel 3 is the new WELCOME channel.

TVS 5.5.0-beta (12-14-2025)

15 Dec 02:55
872d619

Choose a tag to compare

Update Notes - 12/14/2025 (5.5.0)

📢 Get the new Television Simulator Launcher over at its GitHub release page.

View the entire Changelog here!

✨ New Features

  • Added a new limit option to the loop engine that allows for more advanced content selection capabilities.

Consider this example:

refs:
  loop-1:
    loop:
      shuffle: random
      limit: 1
      content:
      - image: placeholders/sequence/1.jpg
        duration: 3
      - image: placeholders/sequence/2.jpg
        duration: 3
  
  loop-2:
    loop:
      shuffle: random
      limit: 2
      content:
      - image: placeholders/sequence/3.jpg
        duration: 3
      - image: placeholders/sequence/4.jpg
        duration: 3
      - image: placeholders/sequence/5.jpg
        duration: 3

channels:
- number: 185
  loop:
  - ref: loop-1
  - ref: loop-2

We'll loop from loop-1 to loop-2 then back again, but each time we start up one of these, we'll choose only
one item from loop-1 and only two items from loop-2. The nested loops and shuffling makes it work!

🔧 Bug Fixes

  • Fixed an issue where parents of nested loops (loops within loops) would advance to the next content after the default duration (30 seconds) instead of waiting for an inner loop to finish.

TVS 5.4.1-beta (11-23-2025)

24 Nov 04:36
84f4db3

Choose a tag to compare

Update Notes - 11/23/2025 (5.4.1)

image

📢 Get the new Television Simulator Launcher over at its GitHub release page.

View the entire Changelog here!

🔧 Bug Fixes

  • Picture static (noise) loads more efficiently by caching noise frames and reusing them, reducing CPU usage and improving animation smoothness.
    We render at 60fps instead of as fast as possible.

  • Fixed #103 where noise: 0 wasn't actually disabling noise.
    For global noise, noise: 0 will set the default noise to 0 per channel but can still be overridden per-channel,
    while noise: false will globally disable noise no matter what.

  • Basic Text engine now supports custom aspect ratios properly.

  • Video engine better supports custom aspect ratios as we removed a hard-coded reference to 4:3 aspect ratio.