Releases: zshall/program-guide
TVS 5.0.0-beta (3-30-2025)
Update Notes - 3-30-2025 (5.0.0)
5.0.0 is a substancial under-the-hood rewrite that updates every component in the system to upgrade the underlying frameworks TVS is built upon.
🚨 BREAKING CHANGES:
- Removed incompatible Vime library.
video@1
andvideo@2
have been removed and should not be used anymore. To fix your config file if it's broken, usevideo
rather thanvideo@1
orvideo@2
. hlsBugFix
option was removed fromvideo
engine since the bug that it was fixing isn't present anymore.- Video game
console
option is no longer recognized; usecore
instead (https://nostalgist.js.org/apis/launch/#core) - The "1989" theme should be specified in quotes.
- Disabled Nightwave Plaza API querying due to CORS blocking.
Replace this:
guide:
theme: 1989
To this:
guide:
theme: "1989"
📦 Dependency Updates:
- Updated to Svelte 5 and rewrote all content engines to include better type definitions.
- Updated Nostalgist library to 0.14 from 0.11 to fix some bugs in the VideoGame engine.
🐛 Bug Fixes:
- Fixed invalid HTML structure in program guide tables
- Added better teardown logic for exiting video games
- Addressed issue where channels were not properly torn down upon channel change
- Fixed audio volume issues with Visualizer engine
- Fixed aspect ratio issue in Bouncing Logo engine
- Fixed verbiage for off-air channels in Channel List engine
✨ New Features:
- Added schema validation support for configuration files. To take advantage of this, add the following line to the top of your configuration file, including the "# " at the beginning:
# yaml-language-server: $schema=https://gcpw.art/tvs/schemas/5.0.0.json
Then open the file in Visual Studio Code with the YAML extension installed.
When new versions of the schema are released I'll call them out in the notes; you'd change the 5.0.0.json
to the latest schema version to validate against it instead.
- Added
stretch
aspect ratio to the Image engine. This will stretch images to the size of their container regardless of aspect ratio. - Added
shuffle
parameter to loops that allows you to shuffle them randomly or in such a way that the entire cycle gets played through once, then repeated again.
- number: 181
name: Shuffled Loop
abbr: LSHUF
loop:
shuffle: random # You can shuffle the content in a loop. Use `random` to shuffle the content randomly, or `cycle` to shuffle the content in a cycle.
content:
- image: placeholders/sequence/0.jpg
duration: 3
- image: placeholders/sequence/1.jpg
duration: 3
- image: placeholders/sequence/2.jpg
duration: 3
- image: placeholders/sequence/3.jpg
duration: 3
- image: placeholders/sequence/4.jpg
duration: 3
- image: placeholders/sequence/5.jpg
duration: 3
- number: 182
name: Cycled Loop
abbr: LCYCL
loop:
shuffle: cycle # Cycle shuffling will play back the content in a random order but show all content before repeating.
content:
- image: placeholders/sequence/0.jpg
duration: 3
- image: placeholders/sequence/1.jpg
duration: 3
- image: placeholders/sequence/2.jpg
duration: 3
- image: placeholders/sequence/3.jpg
duration: 3
- image: placeholders/sequence/4.jpg
duration: 3
- image: placeholders/sequence/5.jpg
duration: 3
🕶️ Aesthetics:
- Updated the default welcome image with a new look.
TVS 4.5.0-beta (1-26-2025)
Update Notes 4.5.0
🐛 Bug fixes:
- Image aspect ratio behavior was incorrectly called
behavior
and now is calledaspectRatioBehavior
. - Overflow scrollbars are now hidden if content overruns the screen
- We now close an audio context when destroying it, which should help prevent issues with multiple contexts building up. Raspberry Pi 5 is confirmed to play audio better now.
✨ New features:
- New OSD tuner theme based on mid-2010's satellite TV:
sat2012
! Here's an example:
osd:
theme: sat2012
aspectRatioBehavior: stretch # Optional. The aspect ratio behavior of the screen. Values are stretch, letterbox, or hybrid. Defaults to hybrid.
# primaryColor: red
# accentColor: black
themeOptions: # certain themes have additional options that can be set like this:
# providerLogo: placeholders/no-signal.png # Optional. The provider logo to show in the info OSD. If not set the default logo will be shown. If set to false no logo will be shown.
extraMenuItemsBefore: # Non-functional extra menu items can be added for asthetic purposes.
- Messages
extraMenuItemsAfter: # More non-functional menu items.
- CC
- Last 4
- Favorites
- Audio/Video
- Parental
- Added a new about page to show the program version, credits, dependencies and special thanks. Press
alt + v
to go there.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg
TVS 4.4.0-beta (1-12-2025)
Update Notes - 4.4.0
⚙️ Enhancements
- Images can now be constrained to aspect ratios if they don't fill the screen.
- number: 2
name: Welcome
abbr: HELLO
image:
src: placeholders/welcome.png # If you use more than one option for images you need to specify the source like this.
aspectRatioBehavior: contain # Optional. The aspect ratio behavior of the image. Values are contain or cover. Defaults to cover.
✨ New features
- Ability to play background audio in the "no signal" channel
noSignalContent: # Optional. You can specify content to show when the TV is off the air.
image: placeholders/no-signal.png # Required. The image to show when the TV is off the air.
backgroundAudio: placeholders/bgm-3.mp3 # Optional. You can add background audio to the no signal screen.
- Added ability to specify custom screen dimensions in the config file. After modifying this value it will apply when your picture settings are reset.
# Screen dimensions defaults can be overridden here. If you don't specify these the TV will be 640x480 by default.
# Not all channel content will scale to fit the screen; some content will always render at its native resolution (640x480)
# **Note**: If you change these values, be sure to reset your picture settings using `alt + r` or you won't see the changes.
dimensions:
screenWidth: 1280 # Optional. The width of the screen in pixels.
screenHeight: 720 # Optional. The height of the screen in pixels.
# scaleX: 100 # Optional. The scale of the screen percentage-wise on the X axis. Default is 100.
# scaleY: 100 # Optional. The scale of the screen percentage-wise on the Y axis. Default is 100.
- Added customizable OSD behavior when displaying on different screen sizes:
- Hybrid (default): centers the OSD where a standard 4:3 screen would be, with tasteful overflow for background graphics.
- Stretch: fills the entire available space with the OSD.
- Letterbox: centers and crops the OSD to 4:3 screen.
osd:
theme: sat2007
aspectRatioBehavior: stretch # Optional. The aspect ratio behavior of the screen. Values are stretch, letterbox, or hybrid. Defaults to hybrid.
themeOptions: # certain themes have additional options that can be set like this:
showMessageIcon: true
showChannelLockIcon: true
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg
TVS 4.3.0-beta (1-5-2025)
Update Notes - 4.3.0
🐛 Bug fixes
- Fixed bug with TVS overrunning the screen by a pixel or two on certain screen sizes triggering scroll bars.
- Fixed bug with background audio that would cause audio to sometimes fail on page load.
- Fixed layout bug in examples page
- Fixed default program guide font on examples page
- Fixed bug involving screen bezel size on hard page reload
⚙️ Enhancements
- Gave OSD a very slight blur effect when global blurring is on.
✨ New features
- New OSD theme based on mid-2000's satellite TV:
sat2007
! Here's an example:
osd:
theme: sat2007
# primaryColor: "rebeccapurple" # Optional color overrides
# accentColor: "white"
themeOptions: # certain themes have additional options that can be set like this:
showMessageIcon: true # Show the message icon in the top bar
showChannelLockIcon: true # Show the channel lock icon in the top bar
- Added channel icon support. For now only the new
sat2007
theme supports them but you can add channel icons like this:
- number: 44
name: 44cast
abbr: WX
icon: placeholders/weather.png # Optional. Icon to show in the info OSD (if applicable theme applied)
- Custom "no signal" overrides for channels without content.
noSignalContent: # Optional. You can specify content to show when a channel is off the air.
image: placeholders/no-signal.png
The ability to play background audio isn't present yet here, I plan on adding it in the future.
- New engine that shows a channel slideshow:
channel-list
. Here's an example of using the default options:
- number: 171
name: Channel List
abbr: LIST
channel-list: true
More complex examples are available in the example config.tvs.yml
file.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg
TVS 4.2.2-beta (12-22-2024)
📣 New to TVS? Watch the Quick Start on Windows tutorial to get going with a static web server. I'll be making more videos (as time permits) on setting up a full Linux server with Docker and all of the external systems that TVS can use to support live video streams and live radio, as well as configuration guides. Stay tuned!
Update Notes - 4.2.2
🐛 Bug fixes
- Fixed weather icons not loading when in a subdirectory.
- Fixed issues where a long Feed Reader title or article would push the entire page off-screen; long titles now scroll horizontally.
- Updated Nostalgist.js library to 0.11.0
- Fixed issue in Video Game engine where
megadrive
wasn't a supported core despite appearing in documentation.genesis
andmegadrive
now point to the same core. - Fixed bug where webhook wasn't fired on channel up or down events.
- Mitigated bug in YouTube Playlist engine when playing private or removed videos that would crash the player by reloading the playlist from the next video.
🧪 Experimental:
length
property added to YouTube Playlist engine to specify the number of videos in the playlist manually without needing a YouTube API key for shuffled playlists. I'm still working on trying to figure out why shuffle isn't right and may change the way this engine works in the future.
- number: 17
name: Youtube Playlist Shuffled
abbr: YTSFL
youtube-playlist:
src: PLU1WjbywtZxEGdTPm-qB0KzPGkRPw6npl
shuffle: true # Optionally you can shuffle playlists this way. You need to specify the playlist ID above using src if you include more options.
length: 13 # Optionally manually specify the length of the playlist so that no API key is needed to determine it.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg
TVS 4.2.1-beta (12-21-2024)
Update Notes - 12-21-2024 (4.2.1)
🐛 Bug fixes
- Fixed bug in weather engine where radar station was being used for observations when observation stations should be used instead.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg
TVS 4.2.0-beta (12-19-2024)
Update Notes - 12-19-2024 (4.2.0)
✨ New features
- Added channel permalinks. By default now TVS will populate the document hash with the channel number. When you refresh TVS the previous channel will be loaded. You can change the way this works by using
persistCurrentChannel: localstorage
to save the current channel to local storage instead of URL on change, orpersistCurrentChannel: false
to use the old behavior of not saving the channel on change. Permalinks will work regardless. - Added toggle for animated channel change. In the config file set
animateChannelChange: false
to disable the "shake" effect when the screen changes. - Added cache busting for the config file, since often this file is often cached more aggressively than we want. To disable this feature you'll need to edit the environment file under
_app/env.js
: useexport const env={"PUBLIC_USE_CACHE_BUSTER":"false"}
instead of true. - Added webhook support for external integrations. This is for receiving data from TVS, not sending to it. TVS will call these webhooks when channel, volume or mute events occur to let your service know it. This is useful if you want to show the channel or volume information on an external display.
- All webhooks are sent as GET requests.
- The bracketed variables will be replaced at the time that the webhook is fired. If TVS is showing channel 12 then
channel={channel}
will becomechannel=12
.
# webhooks: # Optional. You can set up webhooks to send data to external services when certain events happen.
# channelChange: http://your-server/receive_update?channel={channel}&manual={isManualInput} # Optional. This is the URL that will be called when the channel changes. The channel number and whether it was a manual input will be sent as query parameters.
# volumeChange: http://your-server/receive_update?volume={volume} # Optional. This is the URL that will be called when the volume changes. The volume level will be sent as a query parameter.
# muteChange: http://your-server/receive_update?isMuting={isMuting} # Optional. This is the URL that will be called when the muting or unmuting. The mute state will be sent as a query parameter.
🐛 Bug fixes
- Fixed bug in bouncing logo engine where the logo wouldn't draw on load.
- Fixed bug with audio blips on channel changes when muted
- Fixed screen stretching function so that the entire TV container stretches, not the inside contents of the container.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg
TVS 4.1.0-beta (12-02-2024)
Update Notes - 12-02-2024 (4.1.0)
- Added ability to disable the on-screen display entirely, or parts of it.
osd: false # You can disable the on-screen displays entirely by setting this to false.
# You can also disable parts of the OSD individually. The following options are available:
osd:
tuner: false # You can disable the tuner OSD by setting this to false.
info: false # You can disable the info OSD by setting this to false.
receiver: false # You can disable the receiver OSD by setting this to false.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
TVS 4.0.1-beta (11-23-2024)
Update Notes - 11-23-2024
- Fixed zoom bug on small window sizes introduced in previous update.
- Beginning to update TVS's versions to use semantic versioning so that they show up correctly in GitHub releases and make it easier on users to tell when breaking changes occur.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
v2 Public Beta 9-25-2024 (3.4.0)
Television Simulator '99 Public Beta
2017-2024 Zach Hall
Always up to date list of 3rd party credits / contributors:
Update Notes - 9-25-2024
🔧 Hotfix to address bug surfaced in newest Chromium version (129) related to overflow.
TV screen is now overflow: hidden
.
Read this first!
Get started quickly:
- Put the files in the root directory of a web server. For now we require serving out of the root directory.
- Visit index.html and it should load the example configuration.
Basic keyboard controls:
- M toggles mute
- Up / Down control channels
- Left / Right control volume
In the browser you need to un-mute when the page loads because of autoplay restrictions.
Edit the example configuration file (config.tvs.yml
) and make it your own.
Read the documentation: https://greenhillplaza.notion.site/Television-Simulator-99-c28584f069b94f58a71b5c9fe2484dcb
Join our community on Slack to ask for help or report issues: https://join.slack.com/t/greenhillplaza/shared_invite/zt-2dq8mx6sm-3YnobHETTmxUNE02TOSPRg