v3.3 Desktop app, Docker and npm builds →

Every switcher you own, one answer your camera op can trust.

Tally Arbiter listens to tally data from all of your video switchers at once, arbitrates Program and Preview across every source a camera is assigned to, and pushes the result to phones, ESP32 lights, GPO pins and relays in real time.

  • Free and MIT licensed
  • No per-seat cost, no cloud account
  • Runs happily on a Raspberry Pi

Speaks to gear you already have

  • Blackmagic ATEM
  • Ross Carbonite
  • vMix
  • OBS Studio
  • NewTek Tricaster
  • Panasonic
  • Roland
  • Analog Way
  • Grass Valley
  • Riedel SimplyLive
  • DataVideo
  • TSL UMD 3.1 / 5.0
How it works

The hard part isn't the light. It's the disagreement.

A camera can be live on one switcher and in preview on another. Tally Arbiter subscribes to every source at once, resolves the conflict, and gives each device a single state — so the operator behind the camera is never guessing.

Scroll the diagram sideways to follow the whole path →

How Tally Arbiter resolves tally states Four kinds of sources send bus states into Tally Arbiter. Tally Arbiter arbitrates them into one state per device — here Camera 2 resolves to Program because at least one assigned source has it on program — and that single state fans out to every connected tally output. Sources Arbitration Device state Outputs Blackmagic ATEM Cam 2 on ME1 program Ross Carbonite · TSL Cam 2 on preview OBS Studio Cam 2 not in use …and 21 more Unlimited sources, mixed freely Tally Arbiter Camera 2 is assigned to all three sources. Program on any one of them means program. Camera 2 PROGRAM Phone or tablet browser /tally on any device M5Stick · M5Atom · ESP32 Battery powered, over Wi-Fi blink(1) USB light On a Pi Zero W, wirelessly GPO pins & relays Straight into camera CCUs TSL & vMix emulation Drive multiviewers and UMDs Webhooks, OSC, MQTT Anything else you can script
  1. Add your sources

    Point Tally Arbiter at each switcher or protocol. Mix as many as you like — an ATEM, a Carbonite over TSL and an OBS machine can all run side by side.

  2. Define your devices

    A device is a real thing in the room: Camera 2, the graphics operator, the stage manager. Map it to the inputs that represent it on each source.

  3. Let it arbitrate

    Tally Arbiter watches every bus and resolves the states into one answer per device, so conflicting sources never leave an operator with a wrong light.

  4. Light it up

    Assign listener clients, actions and protocol outputs to each device. Reassign any listener from the browser mid-show without touching the hardware.

Features

Built for real productions, not demos

Everything below ships in the box, under the MIT license, with no paid tier waiting behind it.

Cloud relay

Push tally from a locked-down production network to a server in the cloud, so remote operators and volunteers can see states without a VPN or port forwarding.

Actions on state change

Fire an outgoing webhook, TCP or UDP string, OSC message, RossTalk command, Ember+ or TSL packet whenever a device enters or leaves Program or Preview.

Producer view

A dark, password-protected page showing every device and its live state at a glance — designed to sit open on a monitor for the whole service or show.

Messaging to the floor

Send messages between the server, producers and supported tally clients. Flash any listener to get an operator's attention or work out which light is which.

Protocol conversion

Take tally in from anything and send it back out as TSL 3.1, or emulate a vMix server so existing vMix tally clients and multiviewers just work.

MQTT for automation

Publish tally states to Home Assistant, openHAB or any MQTT broker, and let the rest of your building react — door signs, room lights, whatever you dream up.

Stream Deck control

The Bitfocus Companion module shows live tally feedback on your Stream Deck keys and lets you ping or flash any connected listener from the surface.

REST API & websockets

A documented HTTP API and socket interface, so you can build your own listener client, dashboard or integration in whatever language you like.

Unlimited everything

No licence keys, no device count, no seat limits. Add as many sources, devices and listener clients as your network can carry.

Tally outputs

Pick the light that fits the budget

Listener clients open a websocket to the server and update instantly. Every one of these is open source, and most cost less than a takeaway lunch.

Supported gear

Twenty-four source types, and counting

If your switcher speaks TSL UMD 3.1 or 5.0, it already works — even if it isn't named here. New source types arrive regularly, often because someone asked.

Ross Video 6 types

  • Carbonite
  • Carbonite Black SD/HD
  • Carbonite Black Solo
  • Carbonite Ultra
  • Graphite
  • Vision
  • Each Carbonite variant is its own source type, so tally can follow a specific bus (ME, MiniME, Aux) rather than the switcher's OnAir setting. Vision connects over Contribution Tally.

Blackmagic Design 2 types

  • ATEM — all models
  • Smart & Universal VideoHub
  • ATEM uses port 9910 and allows only 5 simultaneous connections. VideoHub uses 9990; any destination can be treated as a preview bus, a program bus, or both.

Analog Way 1 type

  • Livecore — Ascender, NeXtage
  • Uses port 10600. LivePremier and Aquilon support is merged and ships in the next release.

Roland 2 types

  • Smart Tally — V-60HD, V-80HD, XS-62S
  • VR — VR-50HD-MKII
  • Smart Tally takes a username and password only if the switcher has web authentication enabled.

Software switchers 3 types

  • OBS Studio
  • StudioCoast vMix
  • Riedel SimplyLive
  • OBS v28+ bundles obs-websocket, which defaults to port 4455 — watch for a clash. vMix uses 8099.

NewTek 1 type

  • Tricaster
  • Uses port 5951. Works with any Tricaster supporting NewTek's tally over Ethernet.

Panasonic 1 type

  • AV-HS410
  • Uses port 60020 and requires multicast, so the switcher and Tally Arbiter must share a subnet. Other Panasonic switchers connect over TSL instead.

DataVideo 1 type

  • SE-650
  • SE-700
  • SE-1200MU / HS-1300
  • Over the DVIP protocol.

Grass Valley 1 type

  • Contribution Tally Protocol
  • The older GV protocol, over TCP or UDP.

Open protocols 6 types

  • TSL UMD 3.1 — UDP
  • TSL UMD 3.1 — TCP
  • TSL UMD 5.0 — UDP
  • TSL UMD 5.0 — TCP
  • Open Sound Control (OSC)
  • Incoming webhook
  • Each transport is its own source type. Anything that can send a UDP packet, a TCP stream or an HTTP request can drive tally.

Anything else that speaks TSL via TSL

  • FOR-A HVS series
  • Ross Acuity, TouchDrive
  • Panasonic AV-HS6000
  • Streamstar
  • These have no dedicated source type, but emit TSL UMD 3.1 or 5.0, which Tally Arbiter accepts directly.

Still not listed?  

  • Open an issue — new source types are added regularly, and the source interface is small enough to write one yourself if you'd rather. There's a template in the repository to start from.
Request a switcher
Install

Running in about five minutes

Three ways in. The desktop app is the shortest path if you just want it working today.

Command line

Install globally from npm. Best for a headless Raspberry Pi or a server you want to start on boot. Needs Node.js 18.13 or newer.

$
npm install -g tallyarbiter

Docker

An official image on Docker Hub, plus a docker-compose.yml in the repository. Bring it up and it stays up.

$
docker compose up -d

Building from source, running it as a service, or configuring the settings interface — it's all in the installation documentation.

Watch it work

Walkthroughs and setup guides

Videos load only when you press play, so nothing phones home until you ask it to.

Introduction and walkthrough

The whole system end to end — what it does and why it exists.

Setting up with OBS Studio

A from-scratch install, wired up to OBS — a good first watch.

TSL 3.1 protocol conversion

Take tally from any supported source and relay it to TSL clients and multiviewers.

Tally Arbiter Cloud

Send tally out of a closed production network to anywhere in the world.

Control with Bitfocus Companion

Live tally feedback on Stream Deck keys, and flashing a client from the surface.

M5StickC Arduino tally

A portable ESP32 tally light, in action on a camera.

More on the Tech Ministry YouTube channel.

From the field

What people are saying

This is by far the most flexible Tally solution available.

It works flawlessly, we really can't thank you enough for your hard work on this, and generosity in distributing it under the MIT License.

Thanks for sharing!! We're a small church on a budget and I've been trying to find a way I could set up tally on our ATEM Mini without breaking the bank. You sir, are a scholar and a gentleman!

It's so good! You're incredibly generous to offer this up for other churches to use. Happier volunteers, more coordinated direction, more comprehensive worship experience, more attention on God. Thanks for doing this!

This is so awesome! I have been searching endlessly for a solution like this. I am no programmer but read through your detailed instructions and decided to give it a shot. Just ordered everything. Thanks for working on this, this will really help out our church.

Great work on this project! Huge blessing!

This is awesome! Well done and thanks for sharing!

Love this! Will definitely be testing this out this week and hope to implement it soon! Love all that you do on this blog, huge inspiration!

The project

Written for one church, given to everyone

Joseph Adams
“I wrote this software because we needed a tally system at my church, but I released it open source because I wanted a low-cost and flexible tally light solution to be available to anyone who needs it.”
Joseph Adams
Creator and maintainer

Give your camera operators a light they can trust.

Free, MIT licensed, and running in productions from single-camera church streams to multi-switcher broadcast facilities.