Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

Build Status


E2 Client, Tally system. Web UI with Presets.

Pre-built release packages can be found under the Releases.

Please refer to the Wiki for more detailed documentation, including development and feature guides.

You can also try submitting a GitHub Issue for support, which may or may not receive an answer.

Supported Devices

This implementation has been tested with the following device software versions:

  • E2 version 3.2
  • S3 version 3.2

This implementation supports the following device APIs:

  • TCP port 9876 XML (read-only, live streaming)
  • TCP port 9999 JSON-RPC (read-mostly, includes preset recall)
  • TCP port 9878 "telnet" (write-only, preset recalls and program cut/autotrans)
  • UDP port 40961 discovery



Docker images for amd64 are available from Docker Hub:

docker pull qmsk/e2
docker run --rm --net=host --name=e2-test qmsk/e2 tally --discovery-interface=eth0 --http-listen= --http-static=/opt/qmsk-e2/static

Raspberry PI

Pre-built debian packages for ARM are available from GitHub releases:

sudo dpkg -i qmsk-e2_0.6.0-dev.5_armhf.deb
sudo edit /etc/default/qmsk-e2-tally
sudo systemctl restart qmsk-e2-tally

The package installs the binaries at /opt/qmsk-e2, creates a qmsk-e2 user and configures the systemd qmsk-e2-tally.service to run using /etc/default/qmsk-e2-tally for configuration.


The project consists of a set Go applications, and a Javascript web frontend. Once built, the binary Go applications + Javascript assets can be distributed and executed without needing to install the development tools and instructions listed here.

Release binaries are built using the Docker-based setup under build


Load vendored dependencies using godep:

$ git clone
e2 $ dep ensure

Building the backend code requires Go version 1.10.

The Go binaries can also be cross-compiled for different platforms, such as building Linux ARM binaries on your laptop for use on a RaspberryPI:

GOOS=linux GOARCH=arm go build -o bin/linux_arm/server -v


cd static && npm install

Building the frontend code requires:


Tally implementation for following the state of inputs on program, preview and active destinations.


Supports the following input sources:

  • E2
  • S3


Supports the following output drivers:


Run the tally software using a network interface connected to the same network as the E2 device:

$GOPATH/bin/tally --discovery-interface=eth0

Tag the relevant inputs in EMTS with tally=ID in their Contact details field:

EMTS Contact field

Referr to the Wiki for further documentation.


Web API + frontend for following the E2 state and controlling presets.

server --discovery-interface=eth0 --http-listen=:8284 --http-static=./static

The server will connect to the first discovered E2 system.

Server Presets UI

Using the server Web UI requires the static assets for the web frontend (see Building).

Referr to the Wiki for further documentation.


go install ./cmd/client

Useful for testing the client library:

$GOPATH/bin/client --e2-address= listen


  client [OPTIONS] <command>


Help Options:
  -h, --help                    Show this help message

Available commands:
  aux-list           List Aux destinations
  config-dump        Dump XML config
  discover           Discover available E2 systems
  list-destinations  List destinations
  listen             Listen XML packets
  preset-list        List presets
  preset-show        Show preset destinations
  screen-list        List Screen destinations
  screen-show        Show screen content
  source-list        List sources