Enzyme MIDI · build 2026-10-30 (web) · generated 2026-10-30 13:33

Enzyme MIDI

A MIDI fader box, pad controller or Mackie-style surface driving Enzyme, and the show's other devices, from Enzyme MIDI.app. Its faders and lights follow what Enzyme reports. For Enzyme itself, see Enzyme Essentials and the full Enzyme User Guide in the same docs folder.

1

What it is

Enzyme has no MIDI of its own. Enzyme MIDI is a separate program that turns a surface's notes and controllers into Enzyme's OSC commands, and turns what Enzyme reports back into the surface's lights and motor faders. It can also send to the show's other devices: a fader to a lighting desk's master, a key to QLab's GO, a button to switch a matrix.

It runs on the show machine or on any machine that can reach Enzyme over the network. The same program, with the same window, runs on the Mac and on Windows.

The Enzyme MIDI window
Enzyme MIDI. The engine and Enzyme's control port at the top, the surface under Devices, the mappings (two to a desk, one to a matrix, one to Enzyme), and the monitor showing the surface's moves.
2

Before you start

  1. In Enzyme, check that OSC in is on and note its port: Machine › Bind and ports, OSC in (port 9000 unless changed).
  2. If Enzyme MIDI runs on the same machine, set OSC in's card to every interface. A program on the same machine reaches it at 127.0.0.1 only then; on one card, use that card's address instead.
  3. Plug in the surface. It needs no driver on the Mac for most surfaces.
3

The window

Open Enzyme MIDI.app in the build folder. It opens the mapping file you used last, or a new one using the first MIDI input it finds.

PartWhat it is
New, Open…, Save, Save as…The mapping file. A dot after its name means unsaved changes.
EngineEnzyme's address and OSC port, as 127.0.0.1:9000. For a backup pair, both, with a comma. The dot is green while Enzyme's status arrives.
Status in, portWhere Enzyme's status comes back to. 0 picks a free port.
Enzyme control and keyEnzyme's control port (its address with port 9200), for the show's other devices (chapter 7). Type the control key and press Enter if Enzyme asks for one.
DevicesEach surface: a name, its input, and its output for lights and faders, picked from the ports there now. open in green when both are open.
MappingsOne row for each control: what it is, where it goes, what it sends, its range, how it sends and its feedback.
The monitorAt the bottom: MIDI in, OSC out, Status in and the Log. Pause holds it still to read.

The mapping file runs as you edit it, with nothing to apply. A row that is wrong turns red and says why, and the rest run without it; the top of the window says so too.

4

Your first mapping

  1. Under Devices, pick the surface as Input, and as Output if it has lights or motor faders.
  2. Press + Mapping. The new row is already learning: move a fader. Its Control shows what it is, such as cc 7 ch 1. To learn again, click the Control.
  3. Under Sends, type the message: /layer/1/opacity $v. $v is the control's value. As you type, a list offers the addresses Enzyme takes for your show (each layer, timeline, region and the rest): click one, or move with ↓ and ↑ and press Tab or Return, to fill it in, with $v after it for a fader. Esc closes the list.
  4. Set the Range the value runs over: 0 to 1 for opacity, a position in pixels, a level.
  5. In Enzyme, set layer 1's owner to Manual. Move the fader: layer 1 fades with it.
  6. Save. The file opens again the next time.
A layer value changes only what a layer shows while the layer is Manual. Until then the row says the fader moves nothing, using the owner Enzyme reports. A key mapped to /layer/1/owner manual takes it.
5

Faders, keys and encoders

How says how a control sends:

HowFor
fader or knobA control that sends where it is. A knob without a motor waits until it passes Enzyme's own value before it takes over, so moving it never makes a layer jump. Picking it, an encoder, toggle or press and release puts $v at the end of a message that has none.
on press, on releaseA key: the top of the range, or a message with no $v such as /transport/go. A note is always a key.
press and releaseThe top of the range while held, the bottom when let go.
toggleEach press switches between the bottom and the top.
encoderAn endless knob, in the coding its surface uses: two's complement, sign, or offset 64. Try each until turning it right adds.

Click a row's number for more: the control set by hand (note, controller, 14-bit controller, NRPN, pitch bend, program change, and its channel), Invert, a square curve for more travel at the bottom of a fade, and Whole steps for folders, files and cue numbers.

6

Lights and motor faders

With the surface's output open, Enzyme MIDI lights it and moves its motor faders. Feedback on each row says from what:

FeedbackMeans
engineEnzyme reports it: a layer's opacity, the transport, the current cue, blackout, a layer's owner. The light or fader shows what is on screen, whoever changed it: a timeline, a desk, the shell, another surface.
echoEnzyme does not report it, so the surface shows the last value it sent itself. It is wrong if something else moves the same thing.
noneNothing to show: a one-off command such as Go.

A fader being moved is never driven, and is left alone for a moment after. If Enzyme stops answering, the lights flash on surfaces that can, so a stale picture is not trusted.

7

The show's other devices

A row's To picks where its message goes: Enzyme, one of the show's OSC destinations (set under Control, OSC, in Enzyme), or one of its outboard devices (Control, Devices). Enzyme MIDI reads them from Enzyme through Enzyme control; its dot is green, with how many it found.

The machine running Enzyme MIDI must reach the device itself. On the show machine that is the case. A laptop on another network may not reach a desk on the lighting network.

Feedback for these is echo or none, since Enzyme reports only its own state. Renaming a destination or a device in the show leaves rows that name the old name unsent, with a line in the Log.

8

Mapping files

A mapping file is the engines, the devices and the mappings, saved as JSON. Keep one for each surface and show, and open them with Open…. The window edits the common settings. A few rarer ones live in the file only: a feedback address of your own, a fader's touch note, the values that light a pad, an encoder's step. The window keeps them when it saves. docs/midi.md in the build folder lists every key.

Closing the window with unsaved changes says so at the top; close again to lose them, or Save.

9

Messages worth knowing

Every address is in the OSC appendix of the full User Guide. These cover most surfaces:

SendsFor
/transport/goGo, as the Go button. /transport/stop, /transport/pause likewise.
/cue/go $vFire a cue by number. With a program change set to any, a program fires the cue of its number.
/layer/1/opacity $vA layer's fader, 0 to 1, while the layer is Manual.
/layer/1/owner manualTake layer 1 by hand.
/layer/1/media 4 $vPick a clip in bank 4 by its tile number.
/show/master $vThe master level, 0 to 1.
/show/blackout 1Blackout on; 0 off.
/recall/3/12Fire manual recall 12 in bank 3. An OSC script recall runs its messages, to Enzyme or to other devices.
/setlist/nextThe next row of the set list.
10

Without a window

On a machine that only bridges, Enzyme MIDI runs from a saved file with no window, until stopped:

"Enzyme MIDI.app/Contents/MacOS/enzyme-midi" --headless my-surface.json

--control HOST:PORT names Enzyme's control port when it is not the engine's own host on 9200, and the key goes in the environment variable ENZYME_KEY. --list prints the MIDI ports, --monitor prints what a control sends, and --check FILE says what each mapping does.

11

When something is wrong

You seeLook at
The Engine dot is redEnzyme running, OSC in on, the address and port. On the same machine, OSC in's card set to every interface (chapter 2).
A fader moves nothingThe row's note: the layer is not Manual. Then OSC out in the monitor, to see what was sent.
A device says not foundThe surface plugged in, and its name under Input. It is found again within two seconds of being plugged back in.
Lights do not followThe device's Output picked, and the row's Feedback. Echo shows only the surface's own moves.
A desk receives nothingEnzyme control's dot, the destination's address in the To list, and whether this machine can reach that network.
A device command is refusedEnzyme running and connected under Enzyme control. The Log says why.