Skip to content

TVS 6.0.0 (2026-07-14)

Choose a tag to compare

@zshall zshall released this 15 Jul 01:07
9119814

Update Notes - 6.0.0 (2026-07-14)

image

✨ New Features

Audio Routing

Component-level audio routing now lives under _component.audio.

  • Add src to play a dedicated audio file or stream while the component is mounted.
  • Omit src if the component already has its own audio and you only want it to duck or mute other managed audio.
  • Use group, priority, and interrupts to control which lower-priority audio groups are muted or ducked.
backgroundAudio: placeholders/bgm-3.mp3
backgroundAudioOptions:
  group: music

video:
  provider: youtube
  src: yXkIHyBfns8
  _component:
    audio:
      group: voice
      priority: 10
      interrupts:
      - groups:
        - music
        behavior: mute

Power-On Channel

Added the ability to revert to a default channel whenever the TV's power state changes.

startup:
  powerOnChannel: 1 # any time the power is turned off and back on again, jump to this channel.

Hidden Channels

Added the ability to hide a channel. Hidden channels won't be displayed in guides and channel lists, but can be accessed directly via number inputs.

- number: 280
  name: Hidden Channel
  abbr: HIDE
  hidden: true # Set a channel as `hidden` and it won't show up in the guide or channel lists.
  color: red

Subchannels

Added the ability to have subchannels; e.g. channels like 2.1 or 4.10. Subchannels are required to be in quotes when defined in the channel guide:

- number: "3.14"
  name: Pi Channel
  abbr: PI
  image: placeholders/apple-pie.jpg

Subchannels are not decimals. 1.1, 1.10 and 1.100 are three different channels:

  • Channel 1, subchannel 1
  • Channel 1, subchannel 10
  • Channel 1, subchannel 100

Negative subchannels and subchannels on channel zero are not allowed. Subchannels are shown in the guide and channel listings after their primary channels.

Layout updates

The mix layout has been reworked to accept an array of components stacked on top of each other rather than just a and b components, and per-component options like mixMode and opacity are now in a _mix section instead of in the top level. Read the upgrade guide below to learn how to migrate. h-split and v-split also accept arrays now and you can specify a weight for each component now rather than one splitPercentage.

‼️ Breaking Changes

  • The external listings feature of the program guide has been replaced with a new info system. The guide.externalListings option has been removed.
  • Channel title and description have been removed in favor of the info system.
  • The video-game engine has been moved out of TVS and into its own open source project
  • mix layout uses an array rather than a and b components. Options for mixMode and opacity are now under _mix.mode and _mix.opacity.
  • h-split and v-split layouts use an array rather than a and b components.

🚚 Backwards Compatibility

To help ease the transition to the new version, limited backwards compatibility has been added. If your configuration file has a 5.x schema like this at the top:

# yaml-language-server: $schema=https://gcpw.art/tvs/schemas/5.11.0.json

We'll load your config file in compatibility mode, which will translate your config file on-the-fly to work around breaking changes. Some things like removed / moved engines (basic-text and video-game) will not load but channels that can be loaded with modifications will load.

When you're ready to upgrade from 5.x to 6.x you can follow the steps below:

Upgrade Guide 5.x -> 6.0

  1. Change the schema line to the 6.0 schema:
# yaml-language-server: $schema=https://gcpw.art/tvs/schemas/6.0.0.json
  1. Replace any basic-text engine usage with character-generator. I've prepared a template that looks the same as basic-text's defaults that you can drop in:
- number: 1
  name: Basic Text backwards compatibility
  abbr: TEXT
  character-generator:
    src: placeholders/config-examples/bulletins/basic-text.json
    lines:
      line:
        - text: First line of text # put your text here
        - text: Second line of text
  1. Replace any video-game engine usage with the new iframe version. You can self-host it or use the hosted version:
- number: -1
  iframe:
    src: http://gcpw.art/tvs/engines/video-game # replace with your own server if self-hosting
    options:
      game: flappybird.nes # Required. The game library by default is from `retrobrews.github.io`. You can specify a game from there directly. Set to false to use a core that doesn't require a game.
      core: fceumm # Required. The system to emulate.
      # The video game engine doesn't support granular volume adjustment right now, but mute and unmute work.
      # BREAKING CHANGE since v6.0.0: Only game controller inputs are accepted to free up reserved keyboard keys for future use.
  1. Change usage of mix from the old to new syntax:
  • Use a list rather than a and b
  • mixMode: becomes _mix.mode
  • opacity: becomes _mix.opacity

Old syntax:

- number: 133
  name: Mix Layout
  mix:
    a:
      opacity: 0.6
      image: placeholders/example-program.webp
    b:
      mixMode: difference
      generator: test-pattern

New syntax:

- number: 133
  name: Mix Layout
  mix:
    - image: placeholders/example-program.webp
      _mix: 
        opacity: 0.6
    - generator: test-pattern
      _mix:
        mode: difference
  1. Change usage of v-split and h-split from the old to new syntax:

Old syntax:

- number: 139
  name: V-Split
  v-split:
    a:
      color: red
    b:
      color: blue

New syntax:

- number: 139
  name: V-Split
  v-split:
    - color: red
    - color: blue

splitPercentage can continue to be used but only if you have two components. The new equivalent is _split.weight:

- number: 139
  name: V-Split
  v-split:
    - color: red
    - color: blue
      _split:
        weight: 2 # This component will take up two units of weight compared to the others. The default is to distribute each component equally (1 weight per component)
    - color: green
  1. Move channel title and description to info section

Anywhere where you have a channel with title and description attributes, move these to the info section and replace description with summary.

Old syntax:

- number: 2
  name: Welcome
  abbr: WELCOME
  title: Thanks for testing Television Simulator!
  description: Welcome to TVS 6.0!

New syntax:

- number: 2
  name: Welcome
  abbr: WELCOME
  info:
    title: Thanks for testing Television Simulator!
    summary: Welcome to TVS 6.0!

Thanks to all users and supporters!

Television Simulator 6.0 has been in development for about 9 months and has undergone 188 commits, 253 files changed, +26,049, -15,436 code lines changed, and 28 prereleases. Lots of features that haven't been documented previously are now documented and there's a new video tutorial on custom themes. Whether you are new to TVS or a long-time user, thanks for checking it out!