Releases: zshall/program-guide
TVS 5.9.2-beta (2026-03-16)
Update Notes - 5.9.2 (2026-03-16)
🔧 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-splitorv-splitlayout 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)
Update Notes - 5.9.1 (2026-03-15)
🔧 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 the1989program guide theme, but it'll be used in upcoming engines as well.
TVS 5.9.0-beta (2026-03-09)
Update Notes - 5.9.0 (2026-03-09)
✨ New Features
- Added new
sat1992OSD 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 definethemeOptionsin 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-backgroundengine, which can currently apply two different visual effects to an image of your choice;wave1andwave2.
- 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: 300TVS 5.8.0-beta (2026-02-09)
Update Notes - 5.8.0 (2026-02-09)
✨ New Features
- Added new
daily-scheduleengine 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
pixelatedoption to theimageengine 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.
TVS 5.7.2-beta (1-15-2026)
Update Notes - 5.7.2 (2026-01-15)
🔧 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)
Update Notes - 5.7.1 (2026-01-10)
Television Simulator's 40th GitHub release!
🔧 Bug Fixes
- Added a 10-second cooldown when
backgroundAudiofails 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.externalListingsoption 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. Thetitleanddescriptionoptions for channels will also be deprecated in favor of a newinfooption 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)
Update Notes - 5.7.0 (2025-12-28)
✨ New Features
-
Added new TV state messages to the IFrame API:
TVS.Volume,TVS.MutingandTVS.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
backgroundoption to the PiP layout that allows you to set a background color behind the PiP content. -
Added
aspectRatioBehavioroption to the Video engine that allows you to control how videos are displayed in their container. Options arecontain,coverandstretch. Default iscontain.
- 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)
Update Notes - 5.6.0 (2025-12-20)
✨ 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
WELCOMEchannel.
TVS 5.5.0-beta (12-14-2025)
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
limitoption 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-2We'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)
Update Notes - 11/23/2025 (5.4.1)
📢 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: 0wasn't actually disabling noise.
For global noise,noise: 0will set the default noise to 0 per channel but can still be overridden per-channel,
whilenoise: falsewill 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.