Building a Camera Tally Controller for Spyder in 2022

A whole 7 years ago I published a blog post and a couple YouTube videos showing a cool Tally (camera relay) system that anyone could make with a $35 Raspberry Pi device and $10 relay board. Back then this was running Windows on the Raspberry Pi 2 – a special stripped-down version of Windows called IoT Core that was designed to run on the Pi.

In seven years, a lot has changed. I started sprouting some gray hairs, Microsoft has all but abandoned Windows IoT Core on the Pi, .Net Core has become a mature way to deploy applications on Linux, and the Pi itself has had a powerful version 4 on the shelves for almost two years now. In this blog post, we’re going to modernize our prior approach and add some cool new features like a front panel display and a configuration/monitoring web interface.

Features and Overview

  • Works with Spyder 200 / 300 / X20 / X80 hardware
  • Works with every major release version of Spyder software
  • Supports different servers and rules per individual tally
  • Built-in web server for remote configuration and monitoring
  • Front panel shows device IP and on/off tally icons for quick viewing of status

If you have a Spyder video processor of any generation, this device will work as a tally controller. For those wondering what tallies are, imagine a live show where multiple cameras are pointed at talent on a stage. Lights are usually physically positioned on top of the cameras and light up when a camera is ‘live’ to help the talent know which camera they should be looking at. The tally controller described here contains relays (electronically controlled contact closures) which open and close when specific sources are shown or hidden in windows on Spyder.

The video below walks through the device hardware and software, providing probably a better end-to-end overview than this blog post for those of us out there who prefer to consume video content.

Parts you Need

First off, you’re going to need to buy some parts. Here’s a list of what you need, some of which you may have around the house:

3D Printing a Chassis

I used TinkerCad to design a simple chassis to hold a 4-relay board. You can copy and modify this design as you see fit, but for most folks you can simply download the 3D print STL files for the top and bottom pieces, and either print them yourself or send them off to a 3D printing service. If you watch the video from earlier in this blog post you’ll see the Raspberry Pi and the tally board are on the wrong sides of the chassis, and I’ve corrected this in the current design.

Chassis Top PieceChassis Bottom Piece
View in TinkerCadView in TinkerCad
3D Chassis Parts for Tally

Building the unit is quite easy once you’ve acquired and printed the parts required. The open frame views in the video show off mounting the raspberry pi, tally board, and LCD front panel display in the chassis.

Wiring the pieces together

You can use simple breadboard style wiring connectors to save yourself from any kind of soldering, making the assembly a ‘Lego-like’ plug and play experience. The images below show the connections you’ll wire up from the Raspberry Pi to the LCD display and the relay board. If you’re creating a tally controller with more than the 4 relays shown, you’ll simply pick some more GPIO ports on the Pi for the additional connections (just be sure to write down which pins are connected to the relay pins for later configuration).

Spyder Tally wiring pinout
Wiring diagram for connecting Pi to the LCD display
Wiring diagram for connecting Pi to the Relay board

Installing the Pre-Built Raspberry Pi Software

Download SD Card Image for Raspberry Pi and/or release binaries here

Installing the pre-built software image for the Raspberry Pi is the easiest way to get going. You can download the SD card image directly from the Spyder Tally GitHub project’s releases page and use the official Raspberry Pi Imager tool to write that image file onto an SD card.

After writing the image file to the SD card, insert it into the Raspberry pi, connect an Ethernet (network) cable and power it up. It shouldn’t be necessary to connect a monitor to the Pi, but it does feel nice to keep an eye on it during the first boot where it will perform one-time tasks like expanding the file system to fill the SD card. That first boot will take several minutes, but eventually you should see the front panel light up and show the unit’s IP address.

Note that the software will wait for the network to become available before launching, and so you will not see anything until after the network is plugged in.

Installing Manually (Raspberry Pi or Other Devices)

If you’d like to use a device different than the Raspberry Pi, or if you want to build your own Raspberry Pi image for whatever reason, you’re in luck because it’s easy to do! The software may need some tweaking (particularly around hardware interface control) but should readily run on a wide variety of Linux devices including x86, x64, and ARM hardware with minimal tweaking.

The steps involved in creating your own disk image can be extrapolated from this README up on the project’s GitHub site.

One tweak I made when building the v1.0.0 SD card image – instead of installing the .Net Core framework on the device, I compiled the app as a ‘self-contained’ deployment. This kind of deployment bundles in all the .Net runtime pieces needed to run the application, and can both slim down the overall disk footprint and decouple the app from needing to be deployed on a target with a compatible .Net framework version. I like this approach and will likely continue this trend in future releases.

Summary

Spyder is an excellent product, and I’ve always been proud to have been a part of its history during my years at Vista / Christie Digital. Making accessory software and devices like this tablet controller still make me incredibly happy even years later. I hope you enjoy making your own as much as I enjoyed creating it. Let me know what cool environments you end up using it in!

If you run into any snags or have ideas for improvement on the project, the easiest way to communicate is to file issues up on the project’s official GitHub repository issue tracker. I do keep an eye out for comments and will try to reply as I can, but I tend to have a bad habit of not checking for comments for months at a time 🙂

11 thoughts on “Building a Camera Tally Controller for Spyder in 2022

  1. Daniel

    I write it on a SD Card, boot and get a message in the Browser:
    502 Bad Gateway
    nginx/1.18.0

    Is it my network or is it Bug?

    I will check this in detail after xmas, because i will set up 3 Systems for our 3 Spyder Systems 🙂

    Greetings from Hamburg / Germany

    Reply
    1. dsmithson Post author

      Merry belated Christmas and happy New Year! Did you get that working by chance? I haven’t run into any snags, but that kind of error feels like the tally app crashing in the background and causing Nginx to not be able to route requests to it. If you’re in this state and can either SSH into the Pi or have a local terminal connected you could run `sudo systemctl status SpyderTallies` to verify if the service is running (or not) and possibly glean hints into what might be going on.

      Reply
  2. craig

    How would I set a static IP Address?
    My Spyder is not connected to a dhcp server so it has a static address in a 192 scope.

    Reply
    1. dsmithson Post author

      The web UI doesn’t have IP address configuration settings, so you’ll probably need to hook up a keyboard/monitor to log in locally (spyder/spyder for creds), and then run `sudo raspi-config` to launch the text-based UI to change the network configuration.

      Reply
  3. craig

    Load the premade image onto a Pi today.
    Ethernet is connected.
    I see it on the network, and get an NGNX screen when I enter it into a browser “Bat Gateway”.

    After the first reboot, and a bunch of lines of “OK” it sits on “raspberrypi login: ”

    Should it do something from here?

    Reply
    1. dsmithson Post author

      Could be related to the network settings – if the device is failing to get a DHCP address and isn’t configured (from your prior comment) with a static IP, it could cause issues with the app trying to run. The website on the device is indeed brokered by nginx, so it seems like the app isn’t up and running. Could be something else going on, but I should probably add some better testing and handling of instable / changing network conditions in the app regardless as I have my device set up on my desk in a super stable environment.

      Reply
  4. craig

    meant to show this:
    ● SpyderTallies.service – Spyder Tally application by Derek Smithson (Knightware)
    Loaded: loaded (/etc/systemd/system/SpyderTallies.service; enabled; vendor preset: enabled)
    Active: activating (auto-restart) (Result: exit-code) since Tue 2023-04-11 23:05:55 BST; 549ms ago
    Process: 732 ExecStart=/home/spyder/app/SpyderTallyControllerWebApp (code=exited, status=217/USER)
    Main PID: 732 (code=exited, status=217/USER)
    CPU: 10ms

    Reply
  5. craig

    I see notes that I can use a larger relay (8 port) but what do I do with that information once I have it?
    Where does the information go? It looks like I need to fix that for 1-4 as well, or rewire my kit as the diagram is not the same as the previous version.

    Reply
    1. craig

      Also, when I boot 4 relays have a red light. FORCE OFF – turns the light on, FORCE ON – turns the light off.
      On for Program or on for Program/Preview doesn’t seem to do anything.

      Are the pinouts in the digram correct?

      Struggling…

      Reply
      1. dsmithson Post author

        The relay boards have normally open and normally closed wiring available, so it’s possible that I had wired up the logic to be high/on when we want the tally to be low/off, but the quick and easy fix could be simply switching from using the normally-open to normally-closed pins on each relay (or vice-versa). The ‘On for Program’ and ‘On for Program/Preview’ will only turn the relay on when the associated server/source specified in the config is actually visible in a program / preview PixelSpace in Spyder. If that is the case then there might be some network connectivity preventing the Tally controller from seeing network traffic from the Spyder – most likely network subnetting?

        Obligatory apologies for a super late reply – I just saw your note and I quietly hope you solved these woes quite a while ago 🙂

        Reply
    2. dsmithson Post author

      There is a deviceConfig.json file located in the ~/app folder, and this file contains the number of tallies and the mapping between tally index and GPIO pin on the Raspberry Pi. After updating this file and restarting the Tally application, the web UI will automatically update to show the correct number of status indicators and configuration lines. There is actually no hard limit at 8; it’s technically limited to the number of GPIO pins available.

      Here’s an example of this file, and there is a default deviceConfig.json on the GitHub repo here for reference.


      {
      "TallyCount": 4,
      "TallyGpioPinAssignments": {
      "0": 24,
      "1": 27,
      "2": 22,
      "3": 23
      }
      }

      Reply

Leave a Reply to Daniel Cancel reply

Your email address will not be published. Required fields are marked *