Skip to main content

TVManager Settings

This is a breakdown of all the options available on the TVManager component and what they are used for.

Autoplay Settings

  • Autoplay Main URL
    Pretty straight forward. This field is a place to put a media url that you wish to automatically start upon first load into the world. This only is true for the instance owner (aka master) upon first visit of a new instance (which is then synced to any late-joiners). Leave empty to not have any autoplay.

  • Autoplay Alternate URL
    This field is the complementary url field to the above one. Quest users default to using the alternate url, but will fall back to the main url if it's not present. Leave both this and the above field empty to not have any autoplay.

  • Autoplay Title
    If you want your autoplay urls to not display the domain name, you can specify a custom text to be made available to UIs instead.

  • Autoplay Loop
    Makes the autoplay URL implicitly loop. This is equivalent to adding #loop to the end of the autoplay URL.

Default TV Settings

  • Default Manager
    This is a dropdown of the video managers from which to pick the manager that the TV starts off selected with.

  • Default Volume
    Pretty straight forward. This specifies what the volume should be for the TV at load time between 0% and 100% (represented as a 0.0 to 1.0 decimal)

  • Start With 2D Audio
    Flag to specify if the TV should initialize with stereo audio mode or full spatial audio mode.

  • Start with Video Disabled
    Flag to specify if the TV should, well, start with the video disabled. This halts the blit process thus affects all Rendering Options.

  • Start with Audio Muted Flag to specify if the TV should, well, start with the audio muted. This requires calling the _UnMute action to hear audio.

Sync Options

  • Sync To Owner
    This setting determines whether the TV will sync with the data that the owner delivers. Untick if you want the TV to be local only (like for a music player or something).

  • Automatic Resync Interval
    This option defines how many seconds to wait before attempting to resync. This affects two separate things.

    • First is the Audio/Video sync. This particularly affects AVPro for long form videos (like movies) where after some time or excessive CPU hitching (such as repeated alt-tabbing) can cause the audio to eventually become out-of-sync with the video (usually it's the video that falls behind).
    • Second is the Owner sync. This is where the owner of the current video determines the target timestamp that everyone should be at. ProTV has a loose owner sync mechanism where it will only try to enforce sync at critical points (like switching videos, the owner seeks to a new time in the video, owner pauses the video for everyone, etc).

    The default value of 300 seconds is usually good enough for most cases, and shouldn't need to be changed unless for a specific need.

  • Play Drift Threshold
    This value determines how far away from the tv owner that non-owners are allowed to drift (aka de-sync). When this delta threshold is exceeded, the non-owner will be forcefully seek'd to the owner's timestamp. If you don't want to have a forced resync threshold, set this value to Infinity (yes the actual word) to disable the automated enforcement.

  • Pause Drift Threshold
    This is more so a visual feedback feature where if the video is paused locally but the video owner is still playing, the video will update the current playback timestamp every some number of seconds determined by this option. If you don't want the video to resync while paused, set this value to Infinity (yes the actual word) to have it never update until the user resumes the video. One way to view it is as a live slideshow of what is currently playing. This is intended to allow people to see what is visible on the TV without actually having the media actively running. Can be useful for moderators to see what is playing without having the actual video running.

Sync Tweaks

  • Enforce Sync Tweaks
    When this setting is disabled (by default) any of the other sync tweak settings will update allow non-owners to still modify tweaks that are synced.
    When this is enabled, all non-owners will not be allowed to change any of the tweaks that are synced. For example, without the setting if Sync Volume Control is enabled, when the owner volume changes, it will update for all players but they can still change their volume locally. With the setting enabled, non-owners won't be allowed to change the volume slider at all.

  • Sync Manager Selection
    This setting, when combined with Sync To Owner will sync the active video player selection to other users.

  • Sync Volume Control
    This setting, when combined with Sync To Owner will sync the owner's volume to other users.

  • Sync Audio Mode
    This setting, when combined with Sync To Owner will sync the owner's audio mode to other users.

  • Sync Video 3D Mode
    This setting, when combined with Sync To Owner will sync the owner's current 3D video settings to other users.

Media Load Options

  • Play Video After Load
    This setting determines whether or not the media that has been loaded will automatically start to play, or require manually clicking the play button to start it. This affects all video loads, including any autoplay media.

  • Buffer Delay After Load
    If you wish to have the TV implicitly wait some period of time before allowing the media to play (eg: give the media extra time to buffer)
    Note: There will always be a minimum of 0.5 seconds of buffer delay to ensure necessary continuity of the TV's internals.

  • Implicit Replay Duration
    Media will implicitly loop once, if no explicit loop was specified, when the duration of the media is less than this value.
    This is useful for things like short memes or clips where the video loading might be slower for other users and they missed most of the video.

  • Max Allowed Loading Time
    This specifies the maximum time that a media should be allowed to take to load. If this time is exceeded, the media error event will be triggered with a VideoError.PlayerError.

  • Live Media Reload Interval
    This specifies how often (in minutes) a livestream should automatically reload. If set to 0, no auto-reload will occur. The recommended value is 10-15 minutes.

  • Prefer Alternate Url For Quest
    This setting makes the quest/android platform prioritize the Alternate Urls over the Main Urls. If no alternate url is provided, it will gracefully fallback to the main url. If you wish to repurpose the dichotomy of the main/alt for whatever reason (such as a sub/dub or some other dichotomy), you will very likely want to disable this setting

  • Enable Reload Keybind
    This setting enables the keybind to reload the current video. Equivalent to clicking the reload button on a UI. Defaults to F5, but can be changed.

Security Options

  • Auth Plugin
    You may optionally provide an instance of a TVAuthPlugin to the TV for running security checks through. ProTV comes with an useful auth plugin: TVManagedWhitelist.
    If you want to learn about implementing your own authentication plugin, check out the Auth Plugin Documentation

  • Allow Master Control
    This is a setting that specifies whether or not the instance master is allowed to lock down the TV to master use only. This will prevent all other users from being able to tell the TV to play something else. This is enabled by default. NOTE: The instance owner will always have access to take control no matter what.

  • Locked By Default
    This is a setting that specifies whether or not the TV is master locked from the start. This only affects when the first user joins the instance as master. The locked state is synced for non-owners/late-joiners after that point. This is disabled by default.

Security Tweaks

  • Allow First Master Control
    When this setting is enabled, the TV will remember the first user to join the instance and treat that person as an implicit authorized user for the lifetime of the instance. This setting is helpful for group instances or public instances where there is no Udon recognizable instance owner. (The VRChat UI may specify a group or world author as owning the instance, but Udon itself does not acknowledge them as the actual instance owner). This is enabled by default.

  • First Master Super User
    Combine this with Allow First Master Control to grant the first user in the instance Super User status instead of just Authorized status. This is disabled by default.

  • Instance Owner Super User
    Determines whether the instance owner (aka instance creator of an invite or friends instance) should be treated as a Super user or just a regular authorized user. This is enable by default.

  • Super User Lock Override
    This setting determines whether a Super user can lock out regular authorized users from the TV. When this is enabled and a Super user activates the TV lock, all non-super users will be unable to activate the TV lock. This is effectively an "admin override" of sorts and can be helpful for when authorized users are doing undesired shenanigans with the TV. When this is disabled, super users can still take ownership of the TV by activating the TV lock, but it will not prevent other authorized users from taking ownership back. This is disabled by default.

  • Disallow Unauthorized Users
    When this setting is enabled, all non-authorized users will be unable to take control of the TV, even when the TV's lock state is unlocked. This setting is not necessary under some scenarios. Each world creator will need to determine the necessity of this option. This is disabled by default.

  • PlayState Change Takes Ownership
    This option makes the Play/Pause/Stop actions initiated by a user to immediately take ownership if they are authorized to do so. This effectively turns those buttons into a "Global" action where anyone (who meets the authorization requirements) can change the play state of the video for anyone else by taking ownership and syncing the play state to everyone else.

  • [Experimental] Enable Auto-Ownership
    This experimental feature is intended to deal with auto-transfer of ownership to a properly authorized user when the current owner is NOT considered authorized. For example, if the TV is locked and allow master control is disabled, when someone who passes the IsAuthorized checks is found in the instance, that player will automatically attempt to take ownership of the TV game object to ensure a valid authorized user is always in control of the TV.
    There are known issues with this, it is currently not advised to use unless you know what you are doing.

  • Authorized Users Log Trace
    This option forces all authorized users to set the logging level to Trace (most detailed logs) for the TV.
    This is helpful for post-mortem auditing when things go unexpectedly awry and is enabled by default.

  • Super Users Log Trace
    This is similar to the Authorized Users Log Trace option, but applies only to super users.
    If the previous setting is enabled, this setting doesn't do anything, as super users are considered authorized implicitly.

Domain Whitelist

  • Enable Domain Whitelist
    A flag for whether to enforce the domain whitelist check. This is disabled by default.

  • Domain Whitelist
    This is a list of domains for urls which, when the prior flag is enabled, the TV will adhere to and will only allow playing urls from said domains. This is very similar to VRChat's canonical URL Whitelist, except that it is handled on a per TV basis. The default list consists of VRChat's url whitelist domains plus a few additional ones. You can add and remove the entries as you see fit for each TV instance you have.
    The domains are searched using an 'ends with' fuzzy check. This enables subdomain passthrough for urls. For example: bandcamp.com enables the passthrough of all subdomains of bandcamp like stessie.bandcamp.com, which is necessary due to bandcamp creating a subdomain for every artist on the site. Similarly youtube.com enables the passthrough of www.youtube.com.

Error/Retry Options

  • Default Retry Count
    This is the number of times a URL should be implicitly reloaded if the media fails to load. If the URL specifies an explicit retry=X hash param value, it will be used instead.

  • Repeating Retry Delay
    This value specifies how long to wait between each retry when a URL fails to load. This only applies to multiple sequential failures after the first retry attempt.

  • Retry Using Alternate Url
    This flag makes the TV attempt to load the alternate (or main if on quest) URL if the main (or alternate if on quest) URL fails to load the first time. It will only attempt it if the other URL is present and different than the current one. Because it has graceful fallback logic, this feature is enabled by default.

Rendering Options

Internal Texture Settings

Custom Materials

  • Material
    This material will receive the currently rendered texture and the data matrix of the TV's internal state. This is compatible with any shader.

  • Texture Property
    This is used in conjunction with the respective Material to declare which texture variable of the shader you wish to assign the data to. By default it is _VideoTex, but for custom shaders you may want to use _MainTex or _Emission depending on the need. There is no need to worry about the texture flip correction as that is handled internally during the TV's Blit operation.

Custom Gamma Zone Settings

  • Texture Transform Mode
    This dropdown determines which mode should be applied for choosing where to run the AVPro gamma correction. Most of the time you won't need to modify this. If you have special shader data embedded into parts of the video that you do not want to be modified from source (color corrected), you will need to choose a valid mode to exclude that area from the gamma correction. NOTE: The values determine where the gamma correction SHOULD apply, meaning you need to make sure that your shader data area is OUTSIDE of the resulting transform zone.
    • As-Is
      This is the default value which is effectively a noop. It is equivalent to Normalized with the default (1,1,0,0) values.
    • Normalized
      This mode uses the common tiling/offset values that are typically seen in shader inspectors.
    • By Pixels
      This mode calculates the zone based on provided number of pixels. If you know the exact pixel size of your media, you can set these to the desired values.
      There are some special values you can use with this mode.
      • If either of the Pixel Size axis are set to zero , they will implicitly use the full width or height.
        eg: size 0x300y for a 1280x720y video will result in the gamma zone being 1280x300y.
      • If either of the Pixel Size axis are set to less than zero, they will be calculated from the opposite edge of the width or height.
        eg: size -208x0y for a 1920x1080y video will result in the gamma zone being 1712x1080y.
        Zero and Negative values are useful for dealing with unusual video dimensions.
    • VRSL Presets
      These are a collection of By Pixels options specifically calculated for VRSL's use-case. If you are using ProTV with VRSL, you should choose one of these options.

Standby Texture Settings

  • Show Standby On Media End
    When the TV has detected the media as finished, if enabled, it will display the standby texture instead of the last frame of the media.

  • Show Standby On Media Pause
    When the TV has been paused, if enabled, it will display the standby texture instead of the current frame of the media.

  • 3D Mode For Standby Textures
    When enabled and a standby texture is being rendered, this 3d mode will be used instead of the normal internal mode. This is specifically used for standby textures that are 3D. Generally not a common thing.

  • 3D Mode Width For Standby Textures When 3D Mode is enabled, this setting determines whether the 3D texture is full width or half width. Read more on this in the Video Guide Docs

  • Default Standby
    This is the primary texture that will be displayed, if present, when the TV is in a non-operating or halted state.

  • Sound Only
    When the TV has active media, but no video is detected (eg: soundcloud.com), this texture will be displayed instead if present.

  • Video Error
    When the TV enters a failure state (not a blocked URL nor a temporary retry state), this texture will be displayed instead if present.

  • Loading Media
    While the TV is loading a video, this texture will be displayed if present. This includes the momentary few frames that show up between videos when swapping to a new one while another one is still currently playing.

Custom Texture Settings

  • RenderTexture Target
    A RenderTexture that will receive the current frame of the TV's active VPManager. Automatically uses ProTV's internal Blit material for handling the texture transfer operation. If an explicit RenderTexture object is not provided, one will be created implicitly during runtime.

RenderTexture Update Settings

  • Allow Texture Resizing
    This flag specifies whether the user provided RenderTexture Target should be allowed to be resized or not. This is usually left enabled, but if an explicit sized texture is required, you can disable this to preserve the pixel integrity of the texture.

  • Texture Aspect Ratio
    The value to use as the aspect ratio. This is not a declaration of the ratio of the video content, but rather declaring what the expected ratio is needed to confirm to your mesh's expected physical shape or requirements. This information is passed into the shaders for them to make the ratio adjustments to the UV as needed.

  • Apply Aspect to Resize
    When Texture Resizing is enabled, this flag causes the resized texture to be enforced as having the aspect ratio specified. For example: if a source video was phone height 1080x1920 (9:16) and the texture aspect ratio was set to 0.5 (1:2), the resize would retain the smaller dimension and expand the larger one to fit the aspect ratio, resulting in the texture being resized to 1080x2160. Remember, this affects the physical pixel size of the texture before the actual blit happens.

  • Apply Aspect to Blit
    This flag tells the blit shader to resize the source image to account for the given aspect ratio. This means that with our above example having the physical texture size ends up being larger than the original texture size, the actual video texture will be placed in the middle and the video will be letter boxed (black pixels above and below the video). This is typically called 'Fit-Inside'.
    Combining these two Apply Aspect settings ensures that the end result texture is true to the source pixels, no matter the desired aspect ratio.

  • Match Gamma Zone This flag tells whether to trim the RenderTexture Target to exclude content outside of the Custom Gamma Zone setting in the Internal Texture Settings section. This is useful for handling multiple video systems like LTCGI, VRSL or ShaderMotion, notably it helps prevent VRSL video data from leaking into the LTCGI rendering.

  • Brightness Multiplier Allows you to control the brightness of the texture during baking if needed. Defaults to 1.

Global Texture Settings

  • [Avatar Support] Global Video Texture
    Also called the Global Shader Variable.
    Once you have a blit texture assigned, you can click this button to enable this TV to write to the _Udon_VideoTex global shader variables. This enables avatars to sample the video texture. Only one TV in your scene can have this active at a time.
    You can call _[Enable/Disable/Toggle]GlobalTexture on the TVs to control which one is active.

  • Texture Transform Mode
    This group of settings (only available when the [Avatar Support] option is enabled) defines the value of the _Udon_VideoTex_ST vector, which shall be used by shaders to trim the video texture based on the world's specification.
    The purpose of this feature to to handle situations where the video has a special section of it that should be used only for avatars, or if there is additional embedded data in the video that needs to be hidden (eg: DMX data for VRSL).

    • As-Is mode does not transform the texture at all. It's there mainly to signify that the transform logic should be skipped.
    • Normalized mode is effectively the same as what you'd see in a shader inspector with the Tiling and Offset values.
    • By Pixels mode allows you to specify, in pixels, the portion of the global texture to be visible via Pixel Origin and Pixel Size values.
      • Internally the values get converted into a Normalized format, relative to the source video texture size.
      • The Pixel Origin value is calculated from the Top-Left corner of the texture.
      • If you set a Pixel Size value to zero or a negative number, it will calculate the size by subtracting the value from the width of the original size of the respective axis.
    • VRSL Presets modes are pre-made selection of By Pixels options. You should used these if you are integrating ProTV with VR Stage Lighting.
  • Bake Global Texture
    If you absolutely need to keep a portion of the texture off of avatars (some shaders don't implement the _ST vector correctly), you will need to enable this flag. This causes the internal texture to be Blit'ed into a second internal render texture with the portion trimmed as desired.

    • WARNING: The baking the texture will involve an additional RenderTexture, costing some performance and memory space. Be aware of this when using the feature.
    • If you bake the texture, the _Udon_VideoTex_ST property will be set to the default value of (1, 1, 0, 0).
    • Baking is disabled when using the As-Is Texture Transform mode.
  • Show Texture Previews
    ONLY AVAILABLE DURING PLAY-MODE
    This play-mode setting will display all the active render textures for the currently selected TVManager in the inspector below the setting. Above each texture will be the respective name and the physical texture dimensions for reference.

Misc Options

  • Start Disabled
    This toggle makes it so the TV disables itself (via SetActive) after it has completed all initialization. Will disable the game object after the _TvReady event has fired for listeners.

  • Stop Media When Disabled
    This toggle makes the TV call the stop logic for the media when the TV game object itself becomes disabled.

  • Enable Local Pause This toggle allows the TV to be paused locally without affecting other users. Only applies to non-owners. If Play State Takes Ownership is enabled and the user has permissions to control the TV, they take ownership and pause for all instead of just locally.

Detected Plugins

This section will display all TVPlugins in the scene and display their relation in the scene.

  • If there is a disabled checkmark, that plugin is already connected to the selected TV.
  • If there is a plus symbol, that plugin is not connected to the selected TV. You can click the plus button to connect it.
  • For plugins that are already connected to another TV, they will be listed in the Connected to Other TVs foldout. Open that to view the rest and which TV the are connected to.

example of the detected plugins list

To read about how to interface with the TV programmatically, check out the TVManager API Documentation page.