- Node.js
- Applest-Atem
- Python 3
- Naked
- Mido
- rtmidi
- Flask
- PyYAML
- Obsidian Control Systems Onyx
- Blackmagic Atem Software Control
- A way to get midi to Onyx. I use loopMIDI
On the Blackmagic switcher, plug the cameras into available slots. Note the slot you plugged it into for use in the config file later.
Upstream keys may also be set to use with the server. These are set in the right side panel in Atem Software Control.
Lighting cues are triggered by sending MIDI events to Onyx. First, a Note-On event is sent, followed immediately by a Note-Off. Here are the steps to create the cues:
-
Create the cue normally in Onyx. The program will use the input from MIDI events to trigger this cue.
-
Create an empty cue that will serve as the MIDI listener. Note that if you already have one, you can use it for multiple MIDI cues. To create listeners with different fades or delays, however, you will need a separate MIDI listener cue for each set of fades and delays.
-
Click on the new listener cue and open the
Cuelist - Values
page on the left side of the screen. ClickEdit Mode
at the top. You can now click on any existing macros and edit them. -
Click
Add Macro
at the top, and then click on the new macro. At the top in the dropdown, selectMIDIMACRO
. In the next dropdown, select the cue that should be triggered. -
Edit the macro. The MIDI event should be
Note-On
. Choose a channel for the macro to listen on. ForData 1
andData 2
, choose the sameFrom
andTo
values. These can be any values that are not overlapping with the any other MIDI Macros on the channel.From
andTo
may be the same number. The lowest number in the range is what gets sent by the server. -
Click
Apply
at the top. Run the MIDI listener scene to allow Onyx to actually start listening for data.
The config.yaml
contains the settings for the server. The file has four sections:
-
Server Information
ServerHost
andServerPort
contain the server location. The port tells Flask where to serve the program on the local machine. The host is put into the client side response to tell where to send the REST calls. -
Midi Information
MidiPort
is the name of the port on which the MIDI calls should be made. To get a list of port names, runmido.get_output_names()
in python. Note that a listener port should also be set up in Onyx. -
ATEM Information
AtemIP
is the network location of the Blackmagic switcher.AtemCameras
is a mapping of named cameras to the input in the switcher. The first input is 1. The names are used inCueGroups
below. -
Onyx Information
CueGroups
contains a list of categories. These are the groups on the returned webpage. Each category contains a list of cues in that category. These are the individual buttons on the page. Under each cue, there are the following fields:Channel
- The channel of a MIDI Macro that should be run in Onyx.NoteFrom
- The Note-From of a MIDI Macro that should be run in Onyx.NoteTo
- The Note-To of a MIDI Macro that should be run in Onyx.Live
- The Blackmagic input that should go live.Key
- The key number that should go live. If no key should be on, use0
.
- Run
python server.py
- Load the client on the host and port listed in the config file