Bitfocus AS
logo
logo
Bitfocus AS
logo
logo
Sign upSign in

Loading...

Bitfocus

Subscribe to our newsletter

The latest news, articles, and resources, sent to your inbox.

FacebookInstagramGitHubYouTubeLinkedIn

Products

  • Buttons
  • Companion

Integrations

  • Supported Devices
  • Developer Community
  • Connection Development

Support

  • Support Overview
  • Documentation
  • Video Tutorials
  • Community Forum

Sales

  • Resellers & Integrators
  • Buttons Pricing

Updates

  • Case Studies
  • Events & Trade Shows
  • Press Releases
  • Product Updates
  • Webinars

Legal

  • Legal Overview
  • Privacy Policy
  • Buttons EULA
  • Terms & Cookie Policy

Company

  • About us
  • Press kit
  • Careers

© 2026 Bitfocus AS. All rights reserved.

TSL/UMD connections
Docs for
Overview
Getting started
What is Bitfocus Buttons?
Install Buttons and get started
Manage your Buttons license
Activate Buttons offline
Find your way around Buttons
Create your first backup
Add an ATEM connection
Choose a control method
Choose an installation path
Install Buttons on Debian or Ubuntu
Understand HA clustering
Kubernetes HA
Update or remove Buttons
Positions
Understand positions
Create a position
Add controls and sections to a position
Create your first button
Use a connection's presets
Build more capable button actions
Add more feedback to a button
Organize controls in a section
Shift Section
Organize controls with a Folder Section
Add a Popover Section
Build and reuse a Shared Section
Build a Router Section
Understand Custom Routers
Custom Router panel
Surfaces
Surface compatibility
Add and attach a surface
Device orientation
Connections
Update a connection's module safely
Monitor and troubleshoot a connection
Router integrations
VideoHub and AJA KUMO
Utah Scientific BPS
Generic SW-P-08
Nevion VideoIPath
Arkona BLADE//runner
Routing
Physical routing
Configure ports and labels
Take a physical route
Understand route status
Topology graph
Routing Presets
Get started with virtual routing
Configure Nested Shapes
Reverse routing
Tielines
Routing Projects
Routing settings
Troubleshoot a route
Tally
Understand the Tally system
Send ATEM tally and labels to a UMD
Interpret Active Tally state
TSL/UMD connections
Diagnose tally problems
NMOS
Understand NMOS in Buttons
Connect Buttons to an NMOS Registry
Built-in Registry Server
Configure NMOS connections
Discover and adopt
Browse the NMOS inventory
Manage NMOS multicast addresses
Diagnose NMOS problems
Understand Cuelists
Build a Cuelist
Read and advance a running Cuelist
Control a Cuelist from a Position
Workflows
Understand workflows
Build your first workflow
Reuse a group of workflow nodes safely
Troubleshoot a workflow
Recipes
Sequence a timed automation
Call an HTTP endpoint from a workflow
REST endpoint
Use variables
Understand variable scope
Understand nested variables
Update expressions for v1.8
Plan and use Tags
Access
Create and manage users
Create roles and assign permissions
Grant access to specific resources
Show different controls by role
Sessions
Set up PIN and NFC sign-in
SSO
Get started with SSO
Connect a generic OIDC provider
Connect LDAP or Active Directory
Map identity claims to roles
Secure a Buttons deployment
Integrations
External control
Connect to Bitfocus Listener
USB Relay
Install USB Relay on Windows
Install USB Relay on macOS
Install USB Relay on Linux
Install USB Relay on a Raspberry Pi
Get started with the Control API
Secure and monitor the Control API
Control API reference
API reference
Administration
Enable and manage installable features
Services and health
Configure and monitor scheduled backups
Restore a backup and verify it
Export or import Buttons configuration
Store and rotate connection secrets
Replace the HTTPS certificate
HA backup and recovery
Settings
Collect support information
Reference
Glossary
Button Inspector reference
Network ports reference
Expressions
Internal actions reference
Routing Presets panel reference
Startup configuration reference
Workflow nodes
Connection workflow nodes
Workflow workflow nodes
Internal workflow nodes
Position workflow nodes
API workflow nodes
Utility workflow nodes

Loading...

Previous
← Interpret Active Tally state
Next
Diagnose tally problems →
Contact support →
You are viewing documentation for Buttons 1.8.See the docs for Buttons 1.6
Buttons/Tally/TSL/UMD connections

TSL/UMD connections

A TSL connection can help you speak the same protocol in either direction: send tally and labels out to a multiviewer or UMD display, or receive tally state in from another system that controls it. Both directions use the same connection type, so one system handles both without separate integrations.
This page covers choosing a direction, the protocol and network settings, and confirming the result. For creating the Tally Channels, Providers, and Consumers a TSL connection works with, see Send ATEM tally and labels to a UMD and Understand the Tally system.

Before you begin#

You need:
  • Access to Routing → Tally / UMD → TSL Connections.
  • For sending: the display's IP address or hostname and its TSL port.
  • For receiving: the address and port the sending system will connect to, and awareness of which network interface should accept that connection.
  • The TSL version and transport your display or upstream system actually supports.

Choose a direction#

  1. Open Routing → Tally / UMD → TSL Connections.
  2. Select Add.
  3. Enter a Label.
  4. Set Connection Type to Client (Connect) to send to a TSL server, or Server (Listen) to receive from a TSL client.
  5. Continue with the direction-specific fields below.
  6. Select Create.
Client (Connect) connects to a TSL server: this is the usual choice for sending labels and tally to a multiviewer or UMD display. New connections default to Client (Connect).
Server (Listen) listens for incoming TSL connections instead: choose this when another system, such as a switcher's own tally output or a third-party controller, needs to send tally and labels into Buttons.

Send tally and labels to a display#

With Client (Connect) selected:
  1. Enter Host: the IP address or hostname to connect to.
  2. Enter Port.
  3. Select Protocol: TSL 5.0 UDP (the default), TSL 5.0 TCP, TSL 4.0, or TSL 3.1 (Legacy). Match whatever your display actually supports; don't assume its protocol from the default.
  4. Optionally set Repeat interval (ms) if the receiver drops a lamp shortly after a one-off frame: it resends the full current tally state on that interval (100–60,000 ms) instead of only when it changes. Leave it at 0 (the default) to send only on change.
A Consumer's Reactions then send resolved labels and tally to this connection, as covered in Send ATEM tally and labels to a UMD.

Receive tally and labels from another system#

With Server (Listen) selected:
  1. Set Listen address: All interfaces (0.0.0.0) to accept connections on any network interface, or Localhost only (127.0.0.1) to accept connections only from the same machine.
  2. Enter Port, the port the sending system will connect to.
  3. Select Protocol to match the sending system.
To turn what arrives on this connection into Tally Channels on your own ports, create a Provider and set its condition type to TSL Server Input, then configure which address and tally position it should watch. This is what lets an upstream controller's own tally decisions flow into Buttons' tally model instead of staying isolated on the connection.

Read a received channel directly with the TSL Input feedback#

For a simple case, reading a Server (Listen) connection's incoming state as a button or workflow feedback directly is often faster than building a Provider and Consumer around it. Add the TSL Input internal feedback (from the same Feedback picker as any connection's own feedbacks) and configure:
  • TSL Connection: which Server (Listen) connection to read from.
  • TSL Channel: the address to watch (0–126, default 1).
  • TSL Screen: the screen to watch, or leave it at Any to merge every screen received on that address (TSL 5.0 is the only version that sends screens other than 0).
  • Read: Tally State to evaluate the tally condition below, or Label to read display text instead.
  • With Read set to Tally State, choose which condition counts as true: an overall tally (Any tally, Any red, Any green, Any amber, No tally) or the same set scoped to just the Left, Text, or Right tally position.
  • With Read set to Label, choose which field to read: Text, or the Left, Text, or Right tally color.
The feedback shows a live preview of what the connection has actually received on the selected channel once a connection is chosen, so you can confirm the address and screen are right before saving.
This is a shortcut around the full Provider/Consumer model in Understand the Tally system, not a replacement for it: use it when a button or workflow just needs to react to one TSL channel directly, and reach for a Provider and Consumer when the same tally needs to follow routing or drive more than one output.

Confirm the result#

Open the connection to see its live state:
  • A Client (Connect) connection shows Output State ("TSL data being sent to receiver"), one row per address currently receiving tally or a label.
  • A Server (Listen) connection shows Received State ("TSL data received from external devices"), one row per address the connection has actually received data for.
If a Client (Connect) connection reports Connecting/healthy but the display shows nothing, the connection succeeding doesn't prove the display is using the data: for UDP transport in particular, Buttons can send without an acknowledgement. Verify on the display itself.

Lock a tally position for testing#

Each row in Output State or Received State lets you lock an individual tally position (right-hand, text, or left-hand) to a specific value, independent of any Consumer's own Test Mode. This is useful for confirming a display responds correctly to a specific indication without needing a live route or an incoming signal to produce it.
Locked positions stay forced until you release them: Release All (N) clears every position you locked on this connection; if other connections also have locked positions, Release All Connections (N) clears all of them at once. Release test locks after you're done; a locked position keeps showing its forced value even after you close the page.

If you get stuck#

What you see
What to try
A Client (Connect) connection won't reach the display.
Confirm Host, Port, and that Protocol matches what the display actually supports.
A Server (Listen) connection never receives anything.
Confirm the sending system is configured to connect to this Buttons host's address and the configured Port, and that Listen address isn't restricted to Localhost only if the sender is on another machine.
Data arrives, but no Tally Channel ever activates.
Confirm a Provider exists with condition type TSL Server Input, watching the same address and tally position the sender is using.
A locked test value won't clear.
Use Release All (N) on the connection, or Release All Connections if locks exist on more than one connection.

Where to go next#

  • Understand the Tally system, for how Tally Channels, Providers, and Consumers use a TSL connection.
  • Send ATEM tally and labels to a UMD, for a complete first setup.
  • Diagnose tally problems.

Was this helpful?

Was this helpful?

0 of 0 users found this page helpful