Tally Arbiter 1.3 – Support for sending tally data to the cloud, feedback/control on a stream deck, and tally output on an M5StickC arduino

If you haven’t read about my Tally Arbiter project, you can read about it here and here. Today I’m excited to release version 1.3 which offers some exciting new features!

First, Tally Arbiter Cloud! Now you can send tally data from your local instance of Tally Arbiter to a server in the cloud. Anyone can connect to your cloud server without having to tunnel into your private production network. And, if you are doing remote production with switchers in multiple physical locations or networks, each location can run an instance of Tally Arbiter and the cloud server can aggregate all of the data together in real time! All you need in order to make a connection is a Cloud Key provided by the local client that matches on the server. Keys can be made and revoked at any time.

I’ve set up an Amazon EC2 instance running Ubuntu, with Tally Arbiter running on it. I set a cloud key and set up a cloud destination on my local server to send the data to the server running on EC2. Now, I can log into my EC2 server’s Tally Arbiter web interface and view the tally data from anywhere without having to VPN to the church network. This will make it easy for volunteers to use their personal phones to view tally without having to be in the private network.

Here is a video to show it in action:

Second, Feedbacks and Control through Bitfocus Companion on your stream deck! Companion 2.1 is out now, and if you run the latest build, you can use the new “TechMinistry Tally Arbiter” module to view live tally data from Tally Arbiter on any button on your stream deck. It also supports the ability to “flash” any connected listener client.

Third, a new tally listener client – the M5StickC! This is an inexpensive Arduino ESP32 “finger computer”. A friend of mine in the UK recommended this to me for a possible integration with the project. I bought mine off Amazon for $20 but you can buy them directly from the manufacturer for less than $10. It is a portable, easy-to-use, open source, IoT development board.

Programming this thing was fun because the code is all in C++ which I haven’t used since high school. The power of websockets and the socket.io protocol means that this microcontroller can connect to my Tally Arbiter server and communicate the same way any of the other listening clients do.

Here’s a video to show how it works and how to program one:

Version 1.3 of Tally Arbiter also comes with some other perhaps less exciting but still helpful updates:

  • All Settings, REST API, and Producer page now require a Basic Auth username/password to access.
  • In the settings or producer page, if you mouse over the preview and program boxes, Tally Arbiter will show you which sources currently have that device in that bus
  • The settings page will now show the number of device sources and device actions assigned to a device in the list.
  • Sources will now attempt to auto-reconnect if the connection is lost with a max retry of 5 times.

Lastly, I’ve set up a website for this project to help others who want to share about it. You can access it at: http://www.tallyarbiter.com

You can get the source code for Tally Arbiter and the listener clients from the Github repository: http://github.com/josephdadams/tallyarbiter

100% free and ready for you to use!

My hope is that this project enables churches and any organization who needs tally for their productions be able to attain it at a lower cost. I’ve put a lot of hours into developing this free software. If it is helpful to you, please let me know!


  1. Hi, Thanks for this – can you tell me if this is the right link for the M5StickC?https://m5stack.com/products/stick-c I dont see anywhere where it says this version has wifi.

    There seems to be a Stick C Plus which seems to come with Wifi.

    Can you just confirm which model you have been using please?

    Thanks for the hard work on this too.


  2. Wow, you are wonderful! And your new website is very nice! I have been helping my church bring up the quality of their video (currently pre-recorded) service, and coming up with ways to help them approach live streaming from a 157 year old building. With a motley collection of cameras, an ATEM mini and a couple individual video capture devices, all feeding into OBS, we are getting close to ready for live broadcast.

    Tally was the issue I have been studying for some time, though all the published solutions I found were partial at best (or beyond my budget!). My favorite were some using the M5stickC, but they only provided ATEM mini status. A month after the search began, I came across your TallyArbiter program. I had never touched node.js, but what harm could it do to try it. I ran into install errors about missing modules, and learned how to install them from the command line. Each run coughed up another missing module, and then, IT WORKED! Amazing stuff! I see your video about the subject now, glad you made it easier for others to approach. Looking forward to playing with this more. Wondering if it has logic for a switch running into a switch running into OBS, i.e. multi level switching?

    I’m a hard core geek, and had been playing with Raspberry Pi solutions, but upon getting an M5stickC in my hands, I realized this was the device to give them tally lights at the best price possible. So much is integrated into the device that you just wanted to connect to it anyway. The RasPi is so much computer just to turn on a light! I was going to ask you to look at these M5 devices, but you already did. My plan is to plug a red and green LED into G0 & G26 PIN ports (with a translucent bit of plastic TBD) to illuminate and provide good visibility fore and aft. Glue a little cold shoe mount on the bottom, and add expansion battery for longer events.

    Thank you so much for your hard work putting this all out for everyone to use. You have lightened my load! We don’t know when we will get the OK to resume regular services and do real live streaming, but at least I have this large question solved. Had fun learning how to tame an arduino, too.


    1. Thanks for the encouragement, Steve! I’m really glad to hear it’s working for you. The M5 was my first arduino project but it was so easy, now I want to try more things! Feel free to reach out via the contact form if you have any ideas for improvement. Not sure what we can do about multi level (sum) switching, but it never hurts to look at it!


  3. What if my NUC/Raspberry is DHCP and I amend the Arduino code to read the TA server address for that day but for some reason in the future it changes? I would have to go back and update the IP?

    Hopefully related, if Samba is running on my NUC/Raspberry is it possible to amend the code to read TallyArbiter.local for host?


  4. Hello Joseph

    Nice work you did.
    Here we were also started to make tallylights for our camera’s in de church, 3d printing boxes etc. but this makes it very nice.
    What we found in our project was a problem of reconnecting the server in cause of network failure etc. we had it working now, not yet stable but we now had 3 church service’s with the lights.
    Can you tell me do you have something for automatic reconnect bij network failure, in your program?

    And second question,
    when a client connects you have to tell from the server for which camera the light is.
    But can you fix this?, so when a client connects the server knows that it is the light for camera x?

    And third question,
    When a client connects you see it’s ip address and type of connection, is it also possible to see a name of the light/client.
    Specially form mobile use, than i can give every client a number and you can see it back in de server.
    That would be great, specially for this weekend, we will have a service from 7 different locations/church in our villages.
    So in that case we can recognize which light is in use by which location.


    1. Hello Vincent! These are great questions. I will answer them to the best of my ability.

      1. Rreconnect happens between listener clients and the Tally Arbiter server automatically through the socket.IO protocol. If you’re dropping connection frequently, there are surely network issues that need to be resolved first. Any tally sources like ATEM, Tricaster, etc. where Tally Arbiter is acting as a client reconnect automatically because the server is listening to the “disconnect” event data in the protocol, and if a disconnect occurs where a user did not forcibly disable the connection, it will automatically try to reconnect for a few times.

      2. The blink(1) listener and GPO listener automatically save Device ID state, and will attempt to reconnect using the last known Device ID when restarted. I will be adding this feature to the other clients over time.

      3. Great idea to include a name! I can definitely add this to the list. Unfortunately I won’t have time to implement that by this weekend. As a workaround, you could consider adding multiple Devices with a friendlier name, and assign each listener client to a unique Device.

      Hope this helps!



  5. Thanks for your answers,

    We just installed our temporary studio for 6 september for service broadcast from 7 different locations into one stream.
    We will also use Tally Arbiter. In the studio with Arduino D1 mini connected to tally arbiter and on the remote sites with the webtally connections.

    In our test in the studio, i found a problem that my ATEM sometimes seems to have nog free connections available.
    And when i disconnect the tally arbiter i can reconnect the ATEM with controller software.
    Is it possible that Tally Arbiter makes more then one connections sometimes?
    Tonight i will also try it with a different network switch to separate it from the other network traffic maybe there is a problem, in this case i now use one (professional) switch where also 16 HD Zoom video conferencing connections over connected.

    And about my second question in the first post, i now realised that i wrote it wrong. I meant: when the tallylight disconnects e.g. by power lost etc. and reboots. then tally arbiter not recognise the tally as alright configured.
    So i have to be configure it again.
    It then connects with it’s basic id number.
    Maybe an option to write the ip in the eeprom of the client and recall that by a restart?

    but it remains a nice piece of software, keep it up.

    best regards


    1. Tally Arbiter only initiates one connection to the ATEM, so if you’re having trouble, check your network first.

      The M5Stick Arduino client will get state saving functionality in the next version. This will allow it to remember which device id it was last configured to and recall that upon next boot up.


  6. Hey Joseph,

    I’m hitting a bit of a roadblock when compiling the Arduino Sketch…
    Below are the error logs, hope someone is able to help me identify what did I do wrong.

    Thanks in advance!

    Arduino: 1.8.13 (Mac OS X), Board: “M5Stick-C, Default, 750000, None”

    Traceback (most recent call last):
    File “esptool.py”, line 57, in
    File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
    File “serial/tools/list_ports.py”, line 29, in
    File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
    File “serial/tools/list_ports_posix.py”, line 31, in
    File “/Library/Python/2.7/site-packages/PyInstaller/loader/pyimod03_importers.py”, line 389, in load_module
    File “serial/tools/list_ports_osx.py”, line 32, in
    ValueError: dlsym(RTLD_DEFAULT, kIOMasterPortDefault): symbol not found
    Failed to execute script esptool
    Multiple libraries were found for “WiFi.h”
    Used: /Users/milander/Library/Arduino15/packages/esp32/hardware/esp32/1.0.4/libraries/WiFi
    Not used: /Applications/Arduino.app/Contents/Java/libraries/WiFi
    exit status 255
    /Applications/Arduino.app/Contents/Java/arduino-builder returned 255
    Error compiling for board M5Stick-C.


      1. Thanks for the reply!

        I found out the issue… Big Sur doesn’t seem to play well with Arduino/Python at this moment.

        I did the steps on my older mac and it worked perfectly.

        Liked by 1 person

  7. Eager to see the next version of this! Can you use the built-in red LED when the device is in on program. I’d also love the ability to attach LEDs to the pins as mentioned in another comment so that both the operator and speaker can see the camera state.


    1. The current M5 Stick C client support state saving (remembers the last device assigned to it) as well as the built-in red LED for PGM. No GPO support yet, but it would be an easy add to just take a PIN high when in PGM. That’s how the built-in LED works.


  8. Hi,
    I tried so many times in differnt settings, but my m5stick stays black screen..
    after compile and upload there is nothing i can do or see on the screen, (compiling and uploading no errors or whats ever.)

    the screen works its just lighten up a bit but there is no data seen at all.

    couldnt find a solution on the internet aswell 😉 please help



Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s