The full reference: every workspace, setting and behaviour, the edge cases, and every OSC address. It assumes you have run a media server or a playback system before. Enzyme Essentials, in the same docs folder, is the short version: read it first, and come here for the detail.
You receive a folder with Enzyme.app, Enzyme Shell.app, a demo-media folder and a demo-generators folder. Keep them together; the app looks beside itself for the folders. Enzyme.app is the engine and, on a normal day, everything you need. Enzyme Shell.app is the shell alone, for a laptop that controls an engine on another machine.
The shell and the engine talk over the network, so the shell can run on a laptop while the engine drives the screens. On the engine machine, under Machine › This machine, set Shells from to Network, and turn off Shell at launch if that machine should show nothing but its outputs; both take effect when the engine is next started. On the laptop, open Enzyme Shell.app: it connects to the engine it last used, and shows an address box when it cannot, where you type the engine's address and port once. The first row of Machine › This machine says which machine this shell is on and which engine it reaches. Engine name there is what the shells call this engine on the band and in lists (empty, the machine's own name), saved at once; the band's on … chip opens the Recent engines this shell has used, to turn to another in one click.
Engines found on the network. An engine with Shells from on Network announces itself on the show network (DNS-SD over multicast DNS, the way Bonjour printers do), and a shell lists the engines it hears: the band's on … chip lists them under On the network, above the engines used lately and the address box, and the address box on the connect screen has the same list under it. Each shows its name and address, whether it leads or follows in a pair, and whether it asks for a control key; hold the pointer over one for its build and its show. One of another build that this shell could not talk to is greyed, and says why. An engine set to This machine is never announced, and one that is shut down leaves the lists at once (one that crashed, within about two minutes). The Found… buttons beside Backup at and Leader at under Machine pick from the same list. Finding is a convenience, not the way in: multicast does not cross a router or another VLAN, some show networks block it, and a switch that snoops IGMP with no querier on the network stops passing it after a few minutes (the Network health list under Machine warns of that one). When an engine is not listed, type its address: that always works.
The control key. With Shells from on Network, anything on the show network that reaches the engine's address can control it: open and save shows, take layers, shut it down. A Control key, under Machine › This machine, closes that: type a key and press Enter, and from then on a shell or a tool on another machine must give it before it is let in; one without it is told so and closed, and hears nothing of the show. The key is proved, not sent: the engine asks a new question on each connection and the answer shows it was known. A shell on the engine's own machine is never asked (anything there could read the key from the machine's settings), and that is where a key is set the first time, or cleared when it is forgotten; a shell on another machine that got in with the key can change or clear it too. A shell remembers the key for each engine: when an engine asks, the connect screen has a Control key field, and the band's engine chip has one for the engine in use. Scripts take the key in the environment variable ENZYME_KEY. A backup engine offers its leader its own key, so give the pair the same one. Connections already open when the key is set stay open. The key is not encryption: what passes after it is plain, and it does not cover OSC, Art-Net or sACN, which anything on the network can still send. Keep the show network apart from any other.
Builds. A shell, a backup or a tool must be the same build of Enzyme as the engine, near enough: one that speaks another version of the protocol is refused, and the connect screen says it is a different build. A backup refused by its leader this way, or for its key, stays following and never goes live beside it; Machine says why.
A shell on another machine is sent fewer pictures a second than one beside the engine, so a slow link is never a problem for the show; Preview rate under Machine › This machine changes it. Add folder, Open, Save as… and the other file buttons open a browser of the engine's own disk, with Home, each volume and Root to jump to, since a path on the laptop would mean nothing to the engine. Saving there takes a name a Mac and a Windows PC would both accept, and asks before it replaces a show already there.
Under Machine › This machine, Skin chooses Studio, the shell's own dark grey; Console, black with hairlines and an amber timecode for a dark room; or Contrast, black with white text and brighter edges for a bright room or a tired eye; a box beside it draws Live mode in Console whatever the skin. All three show the same things in the same places. Help text is Reduced unless you choose Full: Reduced leaves out the lines that explain how a panel works, for an operator who knows Enzyme, while what is there, what is wrong and what an empty panel needs first are still shown, and every hover still says what a control does. Full puts the explanations back on the panels. The screenshots in this guide show Reduced. Saved for this shell. Values as chooses how a layer's opacity, colour, mask, key and blur read and are typed on the strips and in the clip inspector: Natural is what each means (brightness −100 to +100%, contrast and the colour gains 0 to 200%, the rest as a percent), Percent is the desk fader's place, and DMX 8-bit and DMX 16-bit are the number a desk sends on the layer's channel, so a value read off a strip can be typed straight into a cue. The value itself is the same whichever you pick, and each shell keeps its own choice. Language is beside it: English is built in, and a translation is a file named by its language tag (ar.ftl, de.ftl) in an i18n folder in this machine's Enzyme support folder, made by copying and translating the i18n/en.ftl that ships with the build. Anything not translated stays English, and numbers and timecode stay in Western digits in every language.
Above everything is a menu bar: File, Edit, Show, Window and Help, drawn inside Enzyme's own window rather than at the top of the Mac's screen, with each item's key written beside it. Everything in it is also a key or a button somewhere in the shell, so the menu is the place to look when you have forgotten one. Help › About Enzyme shows the version, your licence and the third-party notices.
The strip under it never changes. From the left: whether you are in Edit or Live mode, the show's name (a dot after it means unsaved changes), the timecode, what the transport is doing, the current and next cue, whether a lighting desk is connected, and warnings. A number in red up here is worth a look; section 12 says what each one means. When the engine refuses an edit, its reason appears in this strip in amber for a few seconds and then goes; nothing pops up over your work.
Anything with nothing in it yet says what to do first, in one dim line, with the button beside it: a timeline with no cues offers + Cue at playhead, a bank with no tiles offers Rescan, a show with no banks points at Show. Read that line before looking for a menu.
Under it are nine tabs, the workspaces, in the order they are used most, on Cmd-1 to Cmd-9 (Ctrl on Windows, where Option, in the keys below, is Alt). A digit on its own is only a digit, so typing a number never changes the tab:
| Key | Workspace | What you do there |
|---|---|---|
| Cmd-1 | Timeline | Build the cue list: place clips, add cues, decide what happens at each one. |
| Cmd-2 | Layers | Play clips by hand and see what every layer is doing right now. |
| Cmd-3 | Media | See your clips as numbered tiles, bank by bank. |
| Cmd-4 | Mappings | Each raster's size and place on the canvas, and where layers land on it. The rasters are listed down the left. |
| Cmd-5 | Video | Where each raster's regions are sent (a display, NDI, Syphon, or any combination) and where inputs come from (cameras, capture boxes, NDI sources, Syphon servers, web pages). |
| Cmd-6 | Pixels | LED fixtures driven over DMX from a region of a raster: where each sits, its colour profile and the universes it goes out on. |
| Cmd-7 | Control | Lighting desk patch, timecode in and out, OSC, and the outboard devices a cue can switch. |
| Cmd-8 | Show | Save and open shows, name and rate, what happens at start, content and generator folders and their families, the self-test and the change log. |
| Cmd-9 | Machine | This shell and this engine: where it listens, who may connect, bind and ports, skin, keys, language, licence, log and diagnostics. |
Most days you will live in Layers and Timeline. Mappings, Video and Show are for the get-in; Control is for whoever brings the lighting desk, and Machine is the box itself.
Right-click a tab for that tab's shortcuts without going to it: add a cue at the playhead or clear the timeline while you are patching, open the DMX monitor or add a layer while you are on the timeline, re-lay the patch from anywhere. The list is short for now and grows as the tabs do. Edits are greyed out in Live mode.
The picture is made of layers stacked on top of each other, like sheets of acetate. The one idea to hold on to: every layer has exactly one owner at a time.
Whoever owns a layer sets everything about it: which clip, how bright, where it sits. Nobody else can nudge it. That is deliberate. It means a fader on the desk can never fight a cue, and you can always tell why the picture looks the way it does by reading the owner badge at the top of each strip in Layers.
Owners change in three ways: you click an owner button at the foot of a strip, a cue in the timeline hands a layer over, or the lighting desk asks for it on its own channel. The strip always shows the other owners' values greyed out, so you can see what would happen if you handed to the timeline or the desk.
Taking a layer by hand changes nothing on screen. However the layer gets to Manual (its button, a cue, the desk, OSC), it keeps exactly what it was showing: the same clip at the same frame, the same opacity, place, size, colour and mapping, with a clip's keyframes and fade held where they stood. Its manual controls start from there, so you carry on from the show's picture rather than from wherever the manual controls were left. A clip that was playing plays on (looping if it looped); one whose timeline was stopped or holding waits, paused, on its frame. Because nothing changes, Live mode does not ask first.
The layers are a stack. Layer 1 is at the back and each one after it draws in front, so the higher the number the nearer the front. The Timeline shows the stack as an editor does: the top row is the layer in front and the bottom row is the back. The strips in Layers run in number order from the left, so the last strip is the one in front.
/layer/2) count places in the stack, so they move with it; a layer named in an address (/layer/imag) stays with the layer of that name. The lighting desk patch does not: a desk fixture goes on driving the layer it drove. When you want the desk's fixtures in the new order, press Re-lay patch under Control, which is a separate step on purpose.The Timeline and Layers each have a menu in their header, Rows and Strips, with a tick for every layer, and the Live screen has the same menu, Filter, beside its Layers tab. Untick one and it is not drawn there. The three keep separate choices, so the Timeline can show only the layers the cue list drives while Layers shows only the ones the desk or you drive. Only timeline layers, Only DMX and manual layers, Only DMX layers and Only manual layers set that up in one click, by who owns each layer at that moment.
Enzyme plays these kinds of file, in .mov, .mp4 or .m4v:
DXV and NotchLC are not played. To convert to HAP for free: Shutter Encoder (Mac and Windows), AVF Batch Exporter (Mac), or Adobe's HAP exporter in Media Encoder; Jokyo HAP Encoder and AfterCodecs are the paid ones. ffmpeg does it with -c:v hap -format hap_q. Resolume Alley converts to DXV, not to HAP.
Still pictures are tiles too: PNG, JPEG, TIFF, TGA, BMP, GIF, WebP, EXR, HDR and SVG, on the Mac and on Windows alike. A still has no length of its own: it shows for as long as its clip, and a new clip of it takes the default length. Transparency in a PNG, TIFF, TGA, WebP or SVG shows the layers beneath. A 16-bit TIFF or PNG keeps its depth, and EXR and HDR keep what is brighter than white. An SVG is drawn sharp: one smaller than 1920 pixels on its longer side is drawn up to that, a larger one at its own size, its text in the machine's fonts. A GIF or WebP that moves shows its first frame. A picture larger than 16384 pixels a side is refused, and HEIC (iPhone photos), AVIF and Photoshop files are not read: export them as JPEG, PNG or TIFF.
Clips live in folders on your drive, and Enzyme reads them where they are. It does not copy or move anything.
Swapping a file everywhere it is used. Select a tile in Media and the inspector's Where it is used counts the clips that show it on this timeline and on all of them, and the manual recalls that put it on a layer. Under Replace with…, Timelines chooses This one, named on the button (the timeline the Timeline tab shows), or All; Only on limits it to one layer (in the recalls too), In section to clips that start in one section of this timeline, and the two timecode fields to clips starting from one time and before another. Manual recalls takes the recalls as well, all of them or those in a range of banks and tiles (a blank end is open); the count says what is within the limits. Pick a Bank and then a Tile in it (the bank starts as the tile's own), then Replace: those clips show it instead, keeping their place, fades, settings, keyframes, generator and effect, and in those recalls only the stored tile changes, all as one undo step. Only what is stored changes: a layer playing the tile now keeps it, and a desk cue or OSC that dials it by number dials the same number. Clips that follow a master are left alone: they show whatever their master shows.
Several tiles at once. In Media and Generators, Cmd-click adds a tile to what is picked or takes it out, Shift-click picks every filled tile from the selected one to the one you click, and Cmd-A picks every tile of the bank in view; Esc drops the group and keeps the selected tile. Picked tiles are edged in blue, the selected one more strongly, and the inspector's Tile section acts on all of them: Pin N (or Unpin N when all are pinned), Clear N tiles…, and Move N…, by a typed address or by clicking the tile where the first of them goes. A group moves whole, keeping its gaps: 1/1, 1/2 and 1/5 sent to 3/10 land on 3/10, 3/11 and 3/14, and a run can shift along onto its own slots. If any tile would land on a tile outside the group, in a bank that is not there or past tile 999, nothing moves and the band says why. As with one tile, timeline clips follow their tiles, and the confirmation warns when the desk has used one of the addresses.
A tile's own controls. The inspector's Name renames a tile, media or generator; the file on disk keeps its name. Show in Finder opens the file's folder with it picked out, when the shell is on the engine's own machine. Send to layer, in the inspector or on a right-click of the tile, puts it on a layer's manual controls: a layer the timeline or the desk is driving is taken by hand first, keeping its opacity, place and every other value, and the tile then replaces what it was showing (Live mode asks first, since the picture changes). Move to takes a bank and tile typed as 4/12 (a bank that is not there yet is offered: name it and press Make bank … and move…, which asks first as every move does and makes it with its folder on disk, as + Bank does); or leave it blank, press Move… and click the empty tile it goes to, in any bank or on any page (Esc cancels). The clips and manual recalls that use a tile move with it, so they play the same file after a move, and one Undo takes the move back; a desk or OSC cue dials by number and does not. Rescan sits above the list of banks, and past a hundred banks the list shows a page at a time, as the tiles do. A generator tile has the same Move to and Clear tile… as a media tile, its clips, recalls and transitions moving with it, and shows its values in each slot's units; a tile made from an ISF file starts on the DEFAULT values its file gives.
Anything your Mac sees as a camera can be a layer: a USB capture box with an SDI or HDMI input, a webcam, or a virtual camera from another program. Under Video (Cmd-5), on the Inputs side, press + Camera and pick the device, or + SDI input and pick a Blackmagic device's input (a DeckLink card or an UltraStudio box; the format follows the signal), or + NDI source and pick one of the sources Video can see on the network, or + Syphon source and pick another application's Syphon server on this Mac (Resolume, TouchDesigner, MadMapper; the frames come straight from the GPU), or + Web page and type an address: the system's web view renders the page at the size and rate you set, so a scoreboard, a dashboard or an HTML lower third becomes a layer. Reload beside it loads the page again while a layer shows it. It appears as a tile in an Inputs bank in Media, and you play it like any clip: pick the tile in a strip or put it on the timeline. The device switches on while a layer shows it, and Video and the tile say what it is sending. The first time, macOS asks whether Enzyme may use the camera; say yes, or every input reads "access denied". SDI needs Blackmagic's Desktop Video driver on the engine's machine (on a Mac, allow its system extension, then start the engine again); Video's Inputs side says which version it found, or that it is missing. An unplugged device or a lost signal is said on the tile and tried again. An interlaced signal, such as 1080i, is deinterlaced: the first field of each frame is kept and the lines between are made from it, so nothing that moves is combed, for half the vertical detail. Two identical boxes keep their inputs when they are plugged in again the other way round.
This is the fastest way to see something on screen, and how you check content on the day.
The top of every strip shows the layer's picture. Src, on its corner, shows its source as it plays, before its colour, geometry and effect, so a layer at opacity zero can be checked before it goes up. Out shows its Output instead: the layer's own finished picture, with its colour, geometry, key, mask and effect, on its content canvas when it has one, as bank 0's Layer Output tile has it. That is the layer before a mapping puts it into regions, not what a screen shows (the Monitor's Outputs view shows that). Each strip keeps its own choice, remembered by this shell for the show; Strip previews: all Source and all Output, in the Strips menu, set every strip at once. The pictures are made only for the strips on screen while Layers is open. Under the source's name are its own time as timecode and, for a file, the frame it is on and its frame rate.
Retrigger is for fader work. Choose Play or Loop on the "Retrigger at 0" row and the clip goes back to its start whenever opacity is at zero, then plays from the start the moment you bring it up. Fade down, fade up, and the clip starts fresh every time.
A clip that has played to its end stays on its last frame. Push speed negative and it runs back from there; push it positive from the start and it runs forwards. Speed is live at both ends, so a "reveal then undo" is one fader move.
TC on the same row locks the clip to the show's incoming timecode: type a start address, and the clip's in point lands on that timecode and runs with it, holding its first frame before the start and its last after the end. Speed is ignored. With no timecode coming in the picture holds and the strip says so.
In and Out, under the play rows, are the part of the clip the layer plays: Play runs from In and stops at Out, Loop goes round between them, and Stop goes back to In. Type each as a timecode; leave Out blank to play to the end of the clip, and clear In to start at the top. They are the same in and out points a desk sets on the layer's In point and Out point channels, a recall keeps them with everything else on the strip, and Capture manual state makes them the clip's in point and length. Position, under them, is a slider along the file that follows the picture: drag it to put the clip there, playing on from there if it plays and holding there if it is stopped or paused.
Several layers can play the same clip at once, each at its own point and speed.
Every strip has Copy and Paste menus under its mapping. Copy takes everything, or just one group: source, play, opacity and blend, geometry, colour, mask and key, generator values, or mapping. Paste puts the copied groups onto the strip's manual settings, and only those groups, so you can copy the colour from one layer onto three others without touching anything else. Paste goes only onto a layer you drive by hand: on a strip the timeline or the desk is driving it is greyed, and Cmd-V there says to take the layer by hand first (which keeps what it shows), since settings waiting on that layer would be replaced when it was taken. Cmd-C and Cmd-V do the same for the selected strip; on the Timeline, Cmd-V pastes copied clips, and Shift-Cmd-V pastes settings onto the selected clip. Copying from a layer the timeline or the desk is driving takes the look it is showing right now. The copy is plain text on the clipboard, so it works between two shells, between two machines, and into a note. If a paste was a mistake, Revert paste appears in the strip for a minute. The same menus are in the timeline's clip inspector, so a look can go from a strip onto a clip and back.
A recall keeps the manual layers' settings, every layer's owner, or both, at a bank and a tile, as media is numbered, and brings them back from the desk, OSC or the shell. Recalls are part of the show file; firing one changes nothing in it.
OSC script recalls. A recall can hold OSC messages instead of a stored look. On an empty tile, New recall… (in the inspector, or on a right-click of the tile) makes a blank recall; set its Type to OSC script and Edit script opens its rows. Each row is one message as Companion would send it, /layer/2/opacity 0 3 or by the layer's name, /layer/imag/opacity 0 3, with an optional note. Rows are checked as you type: a tick when the engine takes the message, the reason in red when it would not. Typing an address suggests the ones the show has. The arrows move a row, Copy puts a copy below it and × removes it; a row is kept when you leave it, and Undo takes a change back. Copy as text copies the script one message to a line, a note after #, and Paste text… adds lines copied from QLab, Companion or another script.
Firing a script runs its rows in order, at once, exactly as the same messages arriving over OSC would: a value fades by its layer's transition unless the row ends with snap or a number of seconds, and a row for a layer that is not Manual changes its manual settings but shows nothing (the band names those layers). A row can set an owner, move a transport, change a region's look or fire another recall; a recall fired by a script fires no other, and none fires itself. Rows name layers, timelines, rasters, regions and groups by their places as you type them, but each row follows its layer if the layers are reordered. A row whose layer has been removed is shown in red and skipped when the script fires. The OSC monitor lists a fired script's rows under recall and its bank and tile. Store, Merge and Replace never write over a script, and changing a recall's Type back keeps what the other type held. The desk, OSC, cues and the shell fire a script as they fire any recall.
Braces make one row run a message for several things: /layer/{1,4,5}/opacity 1 snap sets layers 1, 4 and 5, /layer/{1>6}/opacity 0 layers 1 to 6, and a list and ranges mix, {1>3,7}; a range can run down, {6>1}. The messages run in the order written, all at once when the script fires. Braces work for layers, timelines, rasters, regions and groups, and in any other number in an address, /layer/1/generator_{1>4} or /audio/bus/{1,2}/mute; where there are braces in two places, the first changes slowest. Braced layers, timelines, rasters, regions and groups follow a reorder as single ones do: the row then shows their new places, as a range where three or more are in a row and as a list otherwise. Regions in braces need one raster, and groups in braces one region. The editor checks every message a row makes and names the first the engine would not take. If one of the things in braces has been removed, the row is red; when the script fires the others still run and the band names the one that did not (line 3, item 2). Copy as text and Paste text keep the braces. Braces are for scripts only: OSC arriving over the network does not open them out.
Rows for other machines. A row can go somewhere other than this engine. Its To column, at the left of the row, picks This engine, one of the show's OSC destinations or one of its devices (both set up under Control). A row for a destination is sent there exactly as typed, the way a cue's OSC send is: /cue/{1>3}/go for a lighting desk or /cue/intro/start for QLab. It is that machine's message, not Enzyme's, so only its address is checked (it starts with /, and its braces are right) and nothing is suggested; braces open out as they do for the engine's rows, and numbers in it are the other machine's, so they never follow a reorder here. A row for a device picks one of the device's commands. A row whose destination or device has been removed from the show, or whose command has gone from its device, is red, and is skipped when the script fires. Firing runs every row in order in the same moment: the engine's rows as before, and the others sent as they come. The OSC monitor's Sent tab lists a destination's rows under recall and its bank and tile, and a message that could not go (the destination's name never found) is said on the band. A device's reply goes to the change log as a cue's does. In edit mode each such row has Send, to try it without firing the recall. Add from library…, under the rows, opens the same starter commands as a cue's Sends tab (Commands for other show equipment): a click adds a row to that family's destination, with the command's address and arguments to edit and its name as the row's note, and a family the show has no destination for offers one at 127.0.0.1 on its port. As text, a row for a destination or device starts with its name in brackets: [Desk] /cue/{1>3}/go, [Projector] Shutter close; Copy as text writes them so, and Paste text… takes them back, a name the show does not have leaving the row red until it is put right. With two engines, only the one that is live sends these rows, as with cues: a backup following its leader sends nothing.
From the desk, patch the show's Recall fixture (Control, + Recall fixture): five channels, the bank and the tile at 16 bits and a trigger at 8. The trigger fires the recall at the bank and tile when it reaches full having been at nought, so the bank and tile can be scrolled with the trigger held at full and nothing fires. Over OSC, /recall 3 12 fires bank 3 tile 12.
Mapping in Enzyme is built from regions and rects (rectangles).
Regions are the outputs. Any region can be sent to a display, NDI or Syphon, or used as a source for a layer (bank 0). A region does not have to be sent anywhere: it can simply mark out an area, for rects to land in, for the regions stacked above it to take, or for LED fixtures to be mapped from. Regions belong to rasters, and rasters sit on canvases. A raster is a picture at a size and frame rate you choose, at a place on a canvas; a new one has one region, the whole of it, sent to a window.
A mapping draws a layer onto one of these: a canvas, a raster, each raster, or a content canvas of its own. That is the mapping's source, and every rect in it shares it. Layers, clips, desks and OSC pick mappings by number, never a canvas or a raster directly.
A rect takes part of that source, its Source Rect, and puts it in a region, all of it or part of it, its Destination Rect. One mapping can have many rects, into many regions.
Layers mix in the region. Everything landing in a region is drawn in layer order, layer 1 at the back. Say layer 1's mapping has rects into regions A and B, and layer 2, an overlay, has a mapping with a rect into region B only: region A shows layer 1 alone, and region B shows the overlay over layer 1. A region with nothing landing in it is black.
Regions stack. The regions of a raster are stacked, 1 at the bottom. Where they overlap, a region shows its own content over what the regions beneath it show. With region 3 sent to a display and region 4 to NDI, region 3 sends what is in regions 1 to 3, and region 4 sends that and its own content too. A region whose Background is Black shows only its own.
To get a layer to a region:
The steps below go through the Mappings tab in full.
Under Video, in Rasters, tick Send as NDI on a region and it appears to any NDI receiver on the network as "Enzyme" and the raster's and region's name, at full or half size and every frame or every other; the row shows how many receivers have it. NDI needs its runtime on the engine's machine, and Video's first line says which version it found or where to get it. To keep NDI on the show network's wired card and off WiFi, choose the card under Machine › NDI network card: sending, receiving and finding sources all use that card alone, any discovery servers and groups set in NDI Access Manager still apply, and the choice takes effect from the engine's next start. To hand a region to another application on the same machine with no network and no copy, tick Share as Syphon, instead or as well: it appears under the same name, and the row says whether anything is taking it.
DMX personality.md). Patching changes nothing on screen: a value takes over from the saved look only when the desk moves that channel, and the Look's title turns orange while a desk or OSC holds it; Release gives the saved look back. OSC drives the same values, see the appendix.Under Show › Frame rate is the rate the engine renders at and every raster is sent at: 50 or 60 for most shows, 25 or 30 where the content is. Each frame is rendered once, and a display shows it at its own refresh, so a 120 Hz monitor on the desk costs nothing extra. It is the first thing to look at when a show is heavy: a lower rate gives the machine more time for each frame, and it carries more layers. Layers that cannot be seen (at nought, or wholly behind an opaque clip) cost almost nothing; they go on playing, and are there at once when uncovered. Timecode rate, under it on the Show page, is what the desk's H M S F, a timeline's timecode start, and timecode in and out count in, with a Drop frame tick at 29.97 and 59.94. It is separate from the frame rate: a show can render at 60 and count timecode at 25. Changing it keeps every clip's in point at the same place in its media, and a running LTC in or out picks up the new rate at once; a timeline whose timecode start the new rate cannot say (frame 28 at 25) refuses the change.
Locking to house sync (genlock). Where the screens must be in step with a house reference, so no frame is shown twice or skipped against a camera or another source, the display is locked to the reference first, outside Enzyme: on a Mac, set the display to Genlock in System Settings, Displays, Refresh Rate; on Windows it takes a professional graphics card with a sync card (NVIDIA RTX A4000 and above with Quadro Sync II, set in NVIDIA Control Panel, Synchronize displays; AMD's Radeon Pro cards with theirs), the house sync into the sync card and the display's refresh at the house rate. An ordinary GeForce or Radeon cannot lock. Then under Machine › This machine, set Render clock to that display: the engine makes each frame on the display's vertical blank in place of its own timer. A raster window must be full screen there; Machine says locked and the rate in green, or why not in orange (no raster full screen there, or it stopped presenting), and the timer takes over until it is back. Set the frame rate to the house rate, or a whole fraction of it: 25 on a 50 Hz reference makes a frame every other blank.
Under Video, each raster's All sinks of this raster has a quarter-turn rotation, brightness and gamma, and a Delay in show frames, up to 30, for an LED processor or a projector slower than the rest: that screen, and anything sent or shared from it, runs that many frames behind. Depth is 10-bit or 8-bit: ten bits stops a slow fade or a sky banding on a big wall, where the display, cable and graphics path all take it; where they do not, eight are sent and the panel says so. Dither, on unless you switch it off, adds grain too fine to see, which hides any banding that is left; a level already exactly on a step, a test pattern say, passes untouched.
A setting changed in All sinks of this raster is made on every destination of the raster at once, each keeping the rest of its own stage. Each destination also has a stage of its own, under its row in Video: a projector hung upside down is flipped there without turning the NDI feed, and an LED processor's delay is that processor's alone. There too is Colour temperature, in Kelvin, with a Tint from green to magenta: 6500 K is the picture's own white and changes nothing; lower warms it (tungsten light is about 3200 K), higher cools it. Match a projector's lamp to the LED wall beside it, or warm the feed to a broadcast truck without touching the wall. Neutral white puts it back.
Lookup tables. Put .cube files (as Resolve and other grading and calibration tools export them, 3D or 1D) in one of the show's content folders and they join the show by themselves, numbered in the order they were found. Under a destination's Stage › Lookup table picks one for that destination: a projector's or an LED wall's calibration, or a look for one feed. It is applied last, to the colour after everything else in the stage. The row says how many points a side the table has, or why the file could not be read; a file saved again is read again, and a table that loaded once stays in use if a later save is broken.
A clip's sound plays with its picture. Under Show › Audio out chooses the Device it plays on (the machine's default output, or any interface the machine lists, Dante Virtual Soundcard included); the device is saved with the show, so a show taken to a machine with the same interface plays without setting up, and one the machine lacks shows red and is silent. Media marks a file with sound with a speaker on its tile, dim when its sound is of a kind Enzyme does not play. A file that carries timecode shows the timecode of its first frame at the foot of its tile (TC 10:00:00:00), read when the file joins Media: from its timecode track, as cameras and editing programs write one, or failing that from LTC heard on any of its sound channels in its first 10 seconds. The panel's Timecode row says which, and the channel LTC was on.
Enzyme plays uncompressed sound in a movie (what most HAP exporters write: 16 or 24 bit, or float), and AAC, ALAC and MP3 through the system's own decoders, as it does H.264. A file's first eight channels are kept. Sound files are clips too: WAV, AIFF, M4A and MP3 in a content folder join Media like movies, with a speaker and no picture, and a layer playing one draws nothing and plays its sound, so a song, a voice-over or a stinger sits on a layer of its own and is cued, owned and faded like any clip. On the timeline every clip with sound shows its waveform, as the clip plays it (from its in point, at its speed, looping if it loops), so a cue can go on a beat by eye.
Each layer's sound goes to one of eight buses, chosen on its strip (Bus), by the desk's Audio routing (slot 60) or over OSC. Under Audio out, each bus has a name, a device (the show's, or another the machine has), the device channel it starts on and how many channels it is: 1, 2, 6 or 8. Bus 1 might be the PA on channels 1 and 2 of a Dante interface, bus 2 the foldback on 3 and 4. A mono clip plays on its bus's first two channels, a wider clip channel to channel as far as the bus goes (5.1 on a six-channel bus, one to one; stereo on it, its first two), and a one-channel bus hears every channel together. Several buses can share a device, and several devices can play at once, each kept in time with the picture by itself. A bus's level and mute, beside its meter, are live like the master's. Out of the box every bus is on the show's device, channels 1 and 2. LTC out can go on a bus's first channel, picked in Control's LTC out device list, so the timecode leaves on the same interface as the sound. An interface that is unplugged mid-show, or that the system loses, is let go and opened again within a few seconds of its return, for sound, LTC in and LTC out alike; until then Show (sound) and Control (LTC) say which device stopped and why.
A layer's Audio level, on its strip, on the desk (slot 59) or over OSC, sets how loud it is, and the clip's fades and a transition's crossfade apply to the sound as to the picture. Opacity does not: a black picture can carry sound, and a desk fading a layer's intensity leaves the PA alone. The desk's Audio routing (slot 60) at Off silences a layer. Sound plays while a clip runs forwards; stopped, paused, holding, scrubbed or running backwards it is silent, and every start, stop and jump fades over a few milliseconds, so nothing clicks. At a speed other than 1 the sound keeps its pitch: it is time-stretched, natural from about 0.75 to 1.5, audibly working out to 0.5 and 2, and past that it plays but promises nothing. The strip's Pitch sets With speed instead, for the tape effect, and a clip carries the choice with its other settings; on the desk, Audio routing 1 to 8 keep the pitch and 9 to 16 are the same buses with it (personality version 6; export the GDTF file again), and over OSC it is /layer/N/audio_pitch keep or speed. Master and Mute audio (AUDIO MUTED while on), beside the meter, act on all of it at once, live (also on the Live screen, and as /audio/master and /audio/mute); they are not saved with the show. Under Audio out, a count of dropouts since the engine started means the sound ran dry: a slow disk or a busy machine. Occasional is fine; constant means the content drive is too slow. A sound file that stops answering (a drive gone, a file damaged) silences its own clip only, and Messages names it.
The sound keeps time with the picture by itself, on any interface, and through a locate, a Go or a loop. What it cannot know is how late the picture is on the screen: a display's processing, a projector's, an LED wall's. A/V offset, in milliseconds, holds the sound back by that much (or brings it forward). Set it by eye in the room with the Sync generator (generator bank 9): a white flash and a beep together on every beat of the layer's time; put it on a layer, play it, film the screen and a speaker together on a phone, and move the offset until they land on the same frame. A bus can be held back further with its own delay, for a PA further down the room than the screen (about 3ms a metre). A backup engine stays silent while it follows and sounds the moment it goes live.
Battens, tubes and pixel tape can play the picture too. Under Pixels (Cmd-6), pick a region and Add a pixel map to this region: its fixtures read that region's picture where they sit and are sent their levels as DMX, over Art-Net or sACN. For a rig that is only pixels, make a raster of a small size shown on no display, map layers onto it as onto any other, and put the pixel map on it.
Add fixtures adds so many of a Kind of fixture: one the show already has, or new, from a channel order (RGB, GRBW and so on; W is white, H warm white, C cool white, A amber, L lime, N cyan; type any order of your own), 8 or 16 bits, and a Line of so many pixels or a Grid. Every fixture made here or imported from GDTF leaves its kind in the list, so the next ten battens are two clicks; Save as a kind on a fixture puts it there as it is now, and Kinds of fixture is the list, to take one off. The copies are set out in a row, in a column or as an array of so many across, addressed one after the other; drag each into place on the picture, and drag a line's ends or a grid's corner to size it. Pick several with Cmd-click or Shift-click in the list or on the picture, or drag a box on the picture: rightwards picks what lies wholly inside it, leftwards what it touches. The picked move together, are removed together, and a group, profile or level set on one is set on them all; a size handle dragged with several picked scales the whole set about the far corner of its bounds, the spaces between the fixtures scaling with them. The side column drags wider at its edge. Above the picture, Snap sets the grid a dragged fixture lands on, 2, 4, 8 or 16 pixels or a number of your own (the dragged fixture snaps and the others picked keep their distances from it), and ↗ Own window puts the picture in a window of its own, as large as you like, while the column stays in the tab; Bring it back in either place returns it. The side column's Colour section (Match by eye, the meter and its white ladder, the profiles and the cameras) has ↗ Colour window to the same end, so the column keeps to placing and patching fixtures while a type's colour is worked on beside it. Both windows' places are remembered between runs. The ringed pixel is the first. The fixture list is a table: each fixture's Universe and Address are fields in its row (drag, or type and press Return), with its kind or GDTF mode and where its channels end beside them. Renumber all addresses the whole list again, in list order, from a universe and channel. A profile's Built of table says what each emitter is made of: a row an emitter, a column a channel, its own channel at 1 and the rest at 0 unless you say so, for a red that wants a little white with it or a white made of warm and cool; it applies raw and calibrated. Number boxes throughout the shell carry a small tag after them where the number alone does not say what it is: 8b or 16b for a DMX byte or word, 0–1 for a fraction, ±1 for a signed one. A pixel is never split across two universes, and a fixture that shares channels with another turns red. The white ladder, under the meter's section, makes Enzyme's whites read true on a meter: type the whites your gaffer asks for (2700 3200 4000 5000 5600 6500 by default), and the picked fixture's type shows each in turn through its profile; read each with the meter, and Enzyme moves the type's target at that white by what the reading was off, so the next time it sends 3200 K the meter reads 3200 K; climb again to check, and each rung should pass (six mireds, 0.15 of tint). The fixes live in the type's profile, apply to whites and near-whites only, calibrated colour only, and Forget takes them off. How each white is built, under the profile, lists the level the solver gives every emitter for each of those whites, with the ladder's fix. A white emitter's level there can be dragged: it is pinned at that white and the solver fills the other emitters to hold the colour, so more white LED means less red and blue; pins run straight between pinned whites and fade out at the next white with none; a white the pins put out of reach says unreachable, one that has to dim to fit says by how much, and Light shows the mix's brightness against the solver's own. Fixtures only: a screen has no spare channel. A device (an LED wall's processor, a projector) has the same ladder under its stage in the Video section: Climb the ladder (ended, like every test, by going Live) shows flat white at each Kelvin on the raster, read on the screen with the meter where the camera looks, and the device's white balance is moved at that white by what the reading was off; How each white is built there shows the red, green and blue gains the device gets for each white.
To is the node's address, which is the kindest way to send; left blank, Art-Net is broadcast and sACN goes to each universe's multicast group. Sync sends a sync packet after each frame so many universes change as one. Give the pixels universes that the desk patch does not use; the tab warns when they share one, and in orange when two pixel maps do. A new map starts on the universe after every map's.
Each pixel is drawn in the colour it is being sent. Test sends something else in place of the picture, to prove a patch on site: a Chase through every fixture in address order, everything at Full, one emitter alone (a wrong channel order shows as the wrong colour), or Identify, which flashes the fixture picked. A test is never saved with the show: it ends when the shell that started it goes, and when the engine goes into Live mode.
Colour is Raw or Calibrated. Raw is plain: red to red, green to green, blue to blue, taken to light with Gamma. White decides what a white emitter is given: replace takes the part the three colours share out of them (cleaner, cooler running), add leaves them alone (brighter), off keeps it dark. Warm/cool shares it between a warm and a cool white, and amber is given part of what red and green share. The region's look, and its desk fixture, dim and colour the whole map; a Group dims and warms the fixtures put in it (intensity, colour temperature and tint; the colour is always the picture's; its max is a ceiling on the intensity whatever a desk or OSC asks, for a rig that must not run flat out), and a desk can drive it: in Control, + Group fixture patches five channels for a group (intensity and colour temperature at 16 bits, tint at 8; six channels in Full, three in Basic). As with a region, a value takes over only when the desk moves that channel, the group shows in orange what a desk or OSC holds, and Release gives the saved look back; a fixture's own level trims one that sits bright. A backup engine sends sACN ten lower in priority and stays silent on Art-Net until it takes over. The pixels run about a frame behind the display.
Calibrated sends each fixture the mix of its emitters that makes the picture's colour. White comes out the white you choose (White is, a colour temperature and a tint; 6500 K is the picture's own) in place of the fixture's native blue-white, a white emitter is given all it can take, a warm and a cool white share a neutral between them, amber takes the yellows and oranges, and saturated colours stop overshooting on LEDs more saturated than the picture. Bright white runs white as bright as the fixture makes it and dims a saturated colour it cannot make that bright, keeping its hue; true colours keeps every colour in its proportion to white, which holds white down. Mix matters on a fixture of five emitters or more, where many mixes make the same colour: fewest emitters makes each from three (the most saturated light, the least power), all emitters from every emitter that can take part (a fuller spectrum, kinder to skin and to a camera), brightest from the three that make it on the least drive, so white runs as bright as it can. Like daylight and like tungsten mix from every emitter that can take part but lean on the mixes whose light at the white comes nearest the spectrum of daylight, or of a tungsten lamp, at the White is setting, by the spectral similarity index: what a film light's quality setting does. They go by the emitters' measured spectra, which a GDTF file gives where the maker measured them; without them a fixture is mixed as all emitters. Calibrated colour costs some brightness, so both modes stay. A fixture with fewer than three kinds of emitter (a tunable white) is left to the raw rules.
What calibrated colour goes by is the fixture's profile, under Fixture profiles: each emitter's colour as CIE x, y and its brightness beside the others, the fixture's own dimmer curve, its power limit (below 1 when the fixture holds back with everything on), and a level for the type. Profiles are kept with the show, and a fixture picks one by name. Each says where its numbers came from: typical, maker's, matched by eye, measured, or measured and verified. Without a profile a fixture goes by typical values for its kind of LED, which get it roughly right and will not make two types agree: match it by eye, or measure it with a colour meter, where it matters. A profile saves as a file of its own (Save as a file…) for a colleague to load (Load a profile file…).
Match by eye is for live events, and needs no instrument. Pick a fixture and press Match this type: every fixture of its type is shown a colour, and so is the reference you choose under Against: the screen (a region of a raster, which shows the colour over the show while the match runs), a fixture type already matched, or a light of your own. Trim until the two agree, a step at a time: White (warmer or cooler, greener or pinker, and the level), Brightness (one level on a mid grey, so two types look as bright), and if you like Red, Green and Blue, where letting in a little of the other two pulls an LED's primary, nearly always more saturated than the picture's, back to the reference's without moving white. That trims how the picture's primary is sent, not what the LED is: the LED's own colour is in the profile's table, set by the maker's file, the meter or by hand, and the primary step says so, with a button that opens the profile. Shown at dims the white and the primaries where full is too bright to judge. The match is a correction kept in the profile, raw or calibrated alike, and Done marks the type matched by eye (a measured type stays measured). Match this unit does the same for the picked fixture alone against a neighbour: its own unit white and level, for the one that sits off the rest. About two minutes a type.
A camera sees narrow-band LEDs differently from an eye or a meter, so a rig that looks right can look wrong on the monitor. Add a camera under Cameras, then match by eye with the camera's monitor as the reference and For set to that camera: the trims are kept with the show, one a fixture type, on top of the profiles, which stay true. One camera is in use at a time; switch with the camera, or choose No camera.
Measure with a meter is for film. Pick a fixture and press Measure this type. Before you start: the fixture warm (Warm up runs the type at half white for fifteen minutes, with a countdown), the room dark, and the meter on the fixture's axis at a distance you keep. Choose how many lower levels each emitter is read at for its curve (2, 4 or 8; the count of readings and the time are shown) and press Start reading. The type shows each step in turn: each emitter alone at full (type the meter's x, y and lux) and at each lower level (lux), then everything on. Next takes a reading; one that cannot be right stops with the reason (no light, a colour no light can be, a level that did not fall, the same as another emitter, far dimmer than the rest, which is the room), and you read it again or Keep it anyway. At the end Enzyme shows each emitter's colour, brightness and curve, the type's curve and its power limit, and says when the curves differ or everything on disagrees with the emitters alone. Save to the profile puts them in it, marked measured, with the readings, the meter and who.
Then Check the profile, with the map Calibrated: the type shows white, two greys and the primaries through the profile. Read the white and the grey and press Check: each is given in Kelvin and tint, and how far from the White is setting in mireds and tint, with the grey's light against what was asked. Within 6 mireds, 0.15 of tint and a tenth of the light both pass; Record the check marks the profile measured and verified, with the date, the meter and who. A verified profile from a GDTF file can be saved back out as GDTF with the measured colours in it.
Import GDTF…, under Add fixtures, reads a fixture type from its GDTF file. Choose the DMX mode and how many, and the fixtures arrive with their pixels in the mode's own order and arrangement (a batten as a line, a panel as a grid), the mode's other channels held while the map sends (a shutter and the rest at the maker's defaults, and the master dimmer at full unless Master dimmer under Send is from Enzyme: then the group's intensity and the fixture's level go to the master, at 16 bits where the mode has them, and the pixels carry the colour at full, for finer fades near black and the fixture's own dimmer curve), and a profile of the maker's emitter colours where the file has them, marked maker's (worked out from the emitters' measured spectra where the maker gives those). Some modes do not drive the LEDs at all: the fixture mixes its own colours and its red, green and blue channels are colours in a colour space the file names. Such a mode gets a profile of that colour space, named for it, so Calibrated sends the fixture the picture's colours in the space it expects. A mode that cannot be pixel mapped says why: more than one start address, more than one universe, cells that differ. UV and the other colour emitters Enzyme has no kind for (it has red, green, blue, white, warm and cool white, amber, lime and cyan) are left dark. The file is copied into a fixtures folder beside the show. A placed fixture can be put into another of its file's modes from the GDTF mode picker in its settings: it keeps its place and its address and takes the mode's channels, pixels and profile; with several fixtures of that type picked, they all change, and a fixture named for its old mode is renamed. Held channels, below the picker, lists the mode's other channels by their own names (a shutter, a strobe, a colour crossfade) with the value each is held at while the map sends, so a fixture whose mode wants a crossfade pushed to its colour end, or a shutter opened, can be told so; a value set there goes to every picked fixture in the same mode, and the master's row is greyed while the master is from Enzyme. Each channel is Held at its value or, unticked, let go: Enzyme sends 0 on it and keeps the value, so where a node merges Enzyme's Art-Net with a desk's highest takes precedence, the desk has the channel (a shutter, a strobe, the master when it is not from Enzyme) and Enzyme the pixels.
Save as GDTF…, on a profile that came from a GDTF file, writes the fixture type back out with the profile in it: the emitters' measured colours and brightnesses, as a new fixture type that names the maker's as the one it came from, with a revision saying what was done. Everything else in the file is kept. Only a profile marked measured has its emitter data written: a match by eye is a correction, not what the emitters are, so the file keeps the maker's data and says so.
Dither moves 8-bit levels between the two nearest steps from frame to frame, so a slow fade near black is not seen to step. Some fixtures shimmer with it; 16-bit fixtures need none.
The Timeline (Cmd-1) is a clock with clips laid along it and cues marking the moments that matter. During the show you press Go and the timeline runs to the next cue, then does whatever that cue says: keep going, hold and wait for you, jump somewhere, or loop until you press Go again.
The timeline runs to the end of its last section, and the ruler always shows thirty seconds of empty space beyond whatever is on it, so you can drag the playhead past the end and place something there. To set the length outright, click the section bar under the ruler and set the section's Start and Length, both typed as timecode so they land on a frame; the end is shown beneath. Every timecode field takes a short entry, filled out with zeros (10:23:23 is 10:23:23:00, 10 is 10:00:00:00), or a length in units (10h, 10m, 10s, 12f, 1h30m); click into one and the mouse wheel steps it a frame at a time. A cue's time and a clip's start also take a time against their neighbours: +3s puts a cue three seconds after the cue before it, and a clip three seconds after the end of the clip before it on its layer (+0 butts it on); -2s puts a cue two seconds before the cue after it, and ends a clip two seconds before the next clip starts. The units are the same, and a bare +3 is seconds. With several cues picked, +3s spaces them three seconds apart in turn. The same editor sets what happens when the section runs out: hold stops the playhead and freezes the clips under it (one ending exactly there keeps its last frame); continue runs into the next section; restart section goes back to its start and plays it again until you press Go; loop clips until Go stops the playhead but keeps the files under it playing until you press Go, each as if it played on its own by its own play mode: a clip set to loop loops between its in and out points, one set to Hold plays to its out point (or the file's end) and keeps its last frame up there, and one set to Release goes off there. How they look stays as it was at the end: a clip you faded out by the end stays out, and fades, keyframes and transitions set after the end wait for Go. The clips play on at that point however the playhead comes to stand there: skipped to a cue or a section start there, or held by a Hold cue fired there, as well as by the section running out. + Section adds a minute after the last one; + Section at playhead starts one at the playhead, splitting the section there if there is one, its first part running straight on into the new one so the show plays as before. On the section bar itself, drag a section's middle to move it and either end to resize it; it snaps as a clip does (Option for none) and stops against its neighbours, since sections never overlap. Right-click the bare section bar or the ruler for + Section here, which fills up to a minute or to the next section. The same menu, and a right-click on bare track, offers Insert time… and Remove time…, at the playhead (exactly, on its frame) or at the time clicked: type a length in seconds or as a timecode. Inserting moves everything that starts at that point or later on by that much and stretches a section running across it; a clip running across it stays where it is, unstretched. Removing pulls everything after the gap back and shrinks a section reaching into it, and is refused, naming the culprit, if a clip or cue starts inside the gap; a clip that only reaches into it is trimmed. Keyframes belong to their clip and move with it. Either is one undo step. With more than one section, a row above the cue list filters it to the cues inside one section, with the count on each button.
A timeline that is mostly cues, with little or nothing to play in time, can run cue by cue: right-click its tab, Runs, Cue by cue (or Setup, beside At start). Then Go no longer plays through the time between cues. From a hold, Go fires the next cue at once, wherever it sits, and a Hold cue holds there, so one Go is one cue. After a Continue cue, time does run as on any timeline, and the gap to the next cue is the wait before it fires: put the next cue three seconds on and it follows three seconds later. A run of Continue cues plays as a timed sequence until it reaches a Hold. The cue editor shows a Continue cue's wait as Continue after, in seconds; type a new wait and the next cue and everything after it move by the difference, so their own waits stay. The cue lists say "continue 3.0 s". Go during a wait fires the next cue at once. New cues on a cue-by-cue timeline go a second after the cue at or before the playhead and hold, and any cue less than a second after them moves on to keep the list readable. Clips on such a timeline play while time runs and loop at its holds. It keeps no time for timecode: its sections run free, and the TC lock and the lock cues are greyed. On the Live screen the timecode panel becomes Cue list, showing which cue it is on of how many, and Next shows a time to go only during a wait. Skip, Stop and Reset work as on any timeline: the cue you skip to stands by, and Go fires it. Because one Go is one cue and the picture may not change at once, each Go lights the Go button pale green for a moment, on the Timeline and on the Live screen, and the current cue's row flashes green in the cue list; it does on a timeline that runs on time too. A Go from the desk, OSC or another shell flashes the same, and a skip or a locate does not.
Right-click a timeline's tab and tick Cue list view to draw it as a list rather than along time: a row for every cue, every section start and every clip start, all the same height, with a column for each layer holding the clips that start on each row. A row with no cue reads no cue. Each clip is a box with its name and in fade · length · out fade; × and a time mark a transition, a diamond marks keyframes, and a box is edged red while it is on screen. The next cue to fire by itself counts down (in …) and the current one shows how long it has run. In Edit mode, drag a clip to another row to start it at that row's time, or to another column to move it to that layer; double-click a cue's name or time (a timecode, or +3s and −2s as anywhere) or a clip's name to type it; right-click a cue, a clip or an empty cell for the same menus the lanes have. Trims and keyframes are still edited on the lanes. The choice is per timeline and this shell's own, not saved with the show, and the Live screen's Timelines tab draws such a timeline the same way, to read only.
The lanes show the whole timeline until you zoom. Cmd-scroll or pinch over the lanes zooms about the pointer; the −, + and Fit buttons in the transport bar do the same from the middle. Scroll sideways to pan, or drag the bar under the tracks; a click beside its thumb jumps there. The ruler relabels itself as you go in, down to one second. A click or drag on the ruler snaps the playhead to a nearby clip, section or cue edge; hold Option to scrub freely, or untick Snap the playhead to edges in the ruler's right-click menu. [ and ] step the playhead to the previous or next edge of anything on the timeline: a clip's start or end, a section's edge, a cue. They are locates, so they work in Live mode too, as Home does. Follow keeps a moving playhead in view by paging the window along when it runs off the edge; a still playhead never pulls the view back, so a paused show can be scrolled anywhere. Find playhead brings it back into view once, wherever you have scrolled to. To go to a time, click the big timecode in the transport bar, type the time as HH:MM:SS:FF and press Enter; it is the timeline's own timecode, as its ruler shows it, counting from its TC start. ◀ Skip and Skip ▶ either side of the play buttons move to the previous or next cue and hold there without firing it, as the arrow keys do. The cue you land on stands by: it shows as the next cue, and the next Go fires it (its sends, its commands to other timelines, its Then) and plays on, as a lighting desk's or QLab's Go fires the cue standing by. A Hold cue skipped to does not hold that Go again. When there are more layers than fit, the tracks scroll up and down under the ruler, section bar and cue row, which stay put.
Take a clip by its middle and drag it along the track; take either end and drag to trim it. The cursor shows a hand over the middle and a double arrow over the ends. The clip is drawn where it would land, with the moving edge's timecode above it, and the edit happens when you let go, as one undo step. The moving edge snaps to cues, section edges, the ends of other clips and the playhead; hold Option to drag freely. Everything lands on a frame, and a trim always leaves at least one frame. Trimming the start keeps the picture at every moment the same, so the clip's in point moves with it. Start, length and in point can still be typed in the inspector when a drag is not precise enough. Fades are drawn on the block: the part still fading in or out is shaded above a ramp, with its length written on it when there is room, and in Edit mode the hovered or picked block has a handle at each top corner that drags its fade's length, snapping to cues and edges (Option for none); every picked clip takes the same length. Where butted clips meet, the span over which the later one comes in is shaded and crossed, as an overlap is, and its hover says by what transition and over how long; a small pill at the start of a clip's name line gives how long it comes in over, and one at the end its fade out.
To work on several clips at once, Cmd-click them one by one, Shift-click to pick every clip starting between the selected one and the one you click (along one track, or across the rows between the two), or drag a box on bare track or the cue row: everything it touches is picked, clips and cues alike, and Cmd adds the box to what is picked already. Drag any picked clip and the group moves together by the same amount, snapping as one, in one undo step; typing a new start for one of them in the inspector (or a new time for one of several picked cues) moves the rest with it too. Cmd-← and Cmd-→ (Ctrl on Windows) nudge what is picked a frame, ten with Shift: the selected section, else the picked clips, else the picked cues; with nothing picked the arrows skip cues as usual. Delete asks to remove what you picked last. A right-click on a clip offers a one-second Fade in or Fade out (or takes one away), Cut, Copy, Paste, Remove… and Keyframes…, all acting on the picked clips. It also offers, for the clip clicked: Split at playhead, which cuts the clip in two at the playhead with nothing on screen changing (the second part carries on in the file where the first had got to, the fades stay at the outer ends, and every keyframe curve runs on through the cut, an eased one exactly); Change media tile from here (Change generator tile from here on a generator clip), which splits it there and gives the part after another tile from its start (the tile picked in Media, or one typed as bank/tile, of the clip's kind, a movie for a movie and a generator for a generator; its keyframes for a generator or effect of another family go, since a slot there is another setting); and Join with next, which makes the clip and the one end to end after it on its layer one clip, their keyframes one curve, so a split joined again is as it was. Join says why when it cannot: other tiles, a file that does not carry on, a fade where they meet, different settings. Cmd-C copies the picked clips and Cmd-X cuts them; Cmd-V pastes them as new clips at the playhead, the first on the selected row and the rest keeping their spacing and rows below it, or right-click bare track for Paste here. Copied clips stay in this shell; Shift-Cmd-V pastes copied settings onto the selected clip instead.
Editing several clips at once. With several clips picked, the inspector says how many, and what you change there is set on all of them in one undo step, each keeping the rest of its own. On the left that is the fades, the length, the mapping preset, Free running and Fixed to the timeline; a field the picked clips disagree on is marked mixed beside the selected clip's value. A typed length goes to every clip from its own start, and To section end or To media length gives each clip its own section's end or its own file's length; a clip the new length would run into the next clip on its row keeps its length, and the band says how many did. On the right, a value moved on the strip (opacity, geometry, colour, At end and the rest) is set on every picked clip, or on its master for a follower, leaving its other values as they are; the note above the strip names the settings the clips differ in, shown as the selected clip has them. The source stays each clip's own, generator and effect values go only to clips of the same family, and the in point, keyframes and following stay one clip at a time.
To another layer. Drag a clip up or down and it moves to that row, keeping its time, settings, keys and followers; drag one of several picked clips and they all move by the same number of rows. Clips land only on rows on screen, and only where nothing else is: if one would go past the top or bottom row or over a clip already there, the cursor says no and they stay on their own rows. Option-↑ and Option-↓ move the picked clips a row from the keyboard.
The outputs show whatever the playhead is on, so to see the clip you are editing press Playhead to clip in its inspector, which locates to its start. To watch the result without turning to the screens, press V for the Monitor, a window of its own a frame or two behind the screens with three views: Content maps, each mapping's content canvas with every layer on it composited as the engine makes it (the rasters as they sit on the show's canvas when no mapping has one); Rasters, the rasters one by one; and Outputs. Outputs shows what one region sends, as its window, NDI or Syphon gets it: pick the region (one sent somewhere is marked ↗; one sent nowhere can be picked too) and you see the regions up to it in the stack, its keystone, soft edges, mask and look, the line-up pattern when it is on, then its sink's colour, turn, lookup table and dither, after the sink's delay, on its side if the sink turns it. Where a region's sinks send it differently, a second list picks which; a line under the picture says which delay it is after, or that its sinks are off. The picked region and view are remembered by this shell. The picture comes only while the Outputs view shows it, never from a backup engine. It follows you to any workspace, and making it bigger makes the pictures sharper.
Detach, on a timeline's toolbar (or its tab's right-click menu), takes that timeline off the stage for you to work on. Only a timeline is ever detached, one at a time: everything else stays the live show, including the layers in whichever window, who owns each, the manual faders, media, mappings, rasters and the other timelines. Edits to the detached timeline (its clips, cues, sections, keyframes and rows, its name and starts) stay in your shell; any other edit goes to the engine at once, as usual. The band says DETACHED and the timeline's toolbar counts what you have done to it. Rejoin puts the timeline back on the stage as you left it, as one change and one undo step; Discard throws your version away and asks first, because those edits were never sent and are not in the undo history. While it is detached, Cmd-Z and Shift-Cmd-Z undo and redo your edits to it, not the stage's last change, and Duplicate is greyed for it: Rejoin first. A media tile moved meanwhile, from any shell, takes your version's clips with it too, so Rejoin keeps them on the tile. If someone else changes that timeline while you have it, the toolbar says so, since Rejoin would replace their change; if the engine refuses what you send (a layer one of your rows is on has been removed, say) you keep your detached copy, so nothing is lost. Clips, cues and sections keep their numbers through all of this, so a follower keeps its master.
The detached timeline has a playhead of your own, starting where the engine's was and stopped there. Go, Pause, Stop, the skips, dragging on the ruler, typing a time and firing a cue move your playhead and never the stage's, and it does not chase timecode. The cues it reaches keep to themselves: no OSC, no device commands, no commands to other timelines, unless you tick Cue sends go out on the toolbar to try the timeline against the real kit and the rest of the show; a cue handing a layer over does so only in your picture.
This is how you build the next section during a show, or try something without anyone seeing it. What you cannot do detached is see it on the screens, so the peek follows your playhead: the engine draws what the screens would show there with your version of the timeline, and it moves as you play or drag. Stop peeking on the band gives the rasters' pictures back to what the screens are showing; Option-click on the ruler peeks at one time on a timeline that is not detached; Option-click on a track or a clip peeks at that layer's output at that time: the picture its Layer Output tap gives, with its colour, effect and blur and before any mapping, as its timeline has it whoever holds it now (Option-drag still moves a clip without snapping). Rejoin or Discard puts you back on the engine's playhead.
Right-click a track, on any empty part of its row, for what it holds as a whole: Move clips to, Copy clips to and Swap clips with list the other layers, each with how many clips it has, and Clear clips empties the track after a confirmation. Moving onto a layer that already has clips asks whether to Swap the two tracks or Move on top, where the later clip transitions over the earlier wherever they overlap; copying onto one asks whether to Replace what is there or Merge the copy in with it. Clips keep their identity through a move or a swap, so a master keeps its followers wherever they are; a copy is new clips, and a follower copied beside its master follows the copy. Each is one undo step.
Override. A track can hold settings over every clip on it: a mapping, a position or size, a colour, a blend, an effect, any value on the strip except the file and how it plays. Right-click the track and choose Override…: a copy of the layer's strip opens in a window of its own, and whatever you change there is held, listed at the top with a × to let it go. Nothing reaches the screens until Override on is ticked, in the window or on the track's right-click menu; from then on what is held replaces each clip's own value, its keys and sweeps included, while everything else still comes from the clip. Each timeline has its own override for each layer, and it holds only while that timeline owns the layer, so a desk or a hand taking the layer is not overridden. A track with its override on shows an orange OVR tag by its name, and the clip settings say what is held. It is saved with the show, is undoable, and cannot be changed in Live mode.
A clip can follow another clip. First tick Master on the clip to be followed; then select the other clip and pick that master in its Follows row. If the two lengths differ, Enzyme asks whether the clip should take the master's length or keep its own. From then on it plays the master's source and settings at its own place on the timeline, with its own length and fades, and it is drawn with "follows" and a dashed foot. Change the master and every clip that follows it changes with it; editing a follower's settings edits the master, and the inspector says so. Make independent turns a follower back into an ordinary clip with a copy of the settings. Unticking Master, or removing a master, does the same for all its followers, after a warning.
Every clip on the timeline shows the frame that belongs to the playhead's position, so a locate, a replay or a Go always gives the same picture. A background loop laid across several sections is the one case where that bites: at each Go the playhead moves on and the loop snaps to where it would have been. Tick Free-running in the clip's inspector (Split at playhead and Change media tile from here are then greyed, as the second part would start again and the picture jump) and the clip's time becomes its own clock from the moment it comes on, exactly as a manual layer in Loop behaves: parks, restarts and Go never move it, and the timeline still decides when it is on, its fades and its layer. What it gives up is replay frame for frame: a locate into the clip shows it wherever its clock stands. Ticked while the clip is on screen, it carries on from the frame it was showing.
A clip can carry keyframes on any of its continuous settings: opacity, position, scale, the colour gains, the mask, a generator slot. They are the clip's own: their times count from the clip's start, they move with the clip when it is dragged, and they end when the clip ends, so a fade written into one clip can never reach the clip after it. Inside the clip a keyed setting holds the first key's value before the first key and the last key's after the last, so "fade out over ten seconds" stays out for the rest of the clip, and a return is a key written on purpose. Keys on a setting replace that setting's sweep. The timeline draws each keyed setting as a line across the clip's block with a diamond at every key. Keyframes… in the clip's inspector, or a double-click on the clip, opens the keyframe editor in its own window: the keyed settings as chips (and + parameter for any other; a generator's or an effect's slots are named as its family names them, "Plasma: Speed", and only the slots it has are offered), a graph of the chosen one across the clip with its value from the clip's settings dashed for reference and the playhead marked. The ruler along its top reads the clip's own time from its start, or with Timeline time the timeline's timecode; click or drag on it to move the playhead there. Cmd-scroll or pinch over the graph, or its − and +, zooms in on part of a long clip, a sideways scroll or the bar underneath moves along it, and Fit shows the whole clip again; drag a key to move it (it lands on a frame and snaps to the playhead and the other keys; Option drags it free, Shift keeps it to one direction), double-click to add one where the pointer is, click one to set its time (as timecode, typed or stepped with the wheel), value and whether it reaches the next key in a straight ramp, eased, or holds and jumps; Key at playhead adds one at the value the clip shows there. A drag is one undo step. Fixed to timeline, beside the clip's Keyframes… and in the editor, is the exception, to use with care: the clip's keys then stay at their times on the timeline, so moving or trimming the clip changes what it does at each moment, and keys can end up over one another or outside the clip (where they still shape the curve inside it). It shows orange while on; turned off, the keys are the clip's again where they now stand. Insert and Remove time and a paste carry fixed keys with the clip.
The lighting-desk habit: get the look right on a Manual layer, then write it into the cue list.
A timeline shows its own timecode: the ruler, the playhead, cue and clip times and the Go to box all count from the timeline's TC start, so with a TC start of 10:00:00:00 the timeline's zero reads 10:00:00:00. A time typed anywhere on the timeline is in that timecode too.
A timeline runs on its own clock, and incoming timecode does not move it, until one of two locks takes it.
A section's lock. A section set to chase timecode locks the timeline inside that section only. Running free onto its start, the playhead stops there and waits, and the cues at its start (and their sends) wait with it, firing when the timecode takes hold or on the rescue Go: the band says WAIT TC in amber, with the timecode it is waiting for on hover, and the Live screen says WAITING FOR TC with the timecode. When the incoming timecode is inside the section it locks, and follows it frame for frame; if the timecode is already partway through the section, it joins it there. Every way of starting inside a timecode section waits the same way: Go from a hold, a pause or after Stop, a fired cue or Go next, a locate while playing, and a jump cue. While locked, timecode wins: cues are markers only, holds and jumps are ignored. The lock never leaves its section: timecode jumped back before it waits at the section's start, and timecode jumped past it holds at the section's end, until the timecode comes back inside. Timecode running on past the end lets go: the timeline carries on into the next part on its own clock, or, when the next section is also on timecode, straight into its lock.
The timeline's lock. A cue set to Then: lock the whole timeline to timecode, or the timeline's TC lock toggle in its transport bar, locks the whole timeline. The playhead stops and waits until the timecode points anywhere on the timeline, then follows it anywhere: across sections, into free-run sections, backwards and forwards. Section ends and section settings do not let it go. The toggle works in Live mode, and OSC can do the same with /transport/tc_lock and /transport/tc_release.
Letting go. Each lock has its own release cue. Release the section's timecode lock lets the rest of the section run on the clock, and the next timecode section waits for its timecode as usual; it does nothing to the timeline's lock. Release the timeline's timecode lock lets go of the timeline's lock, and does nothing to a section's. Turning the TC lock toggle off lets go of either, and the timeline runs on from where it is; let go while waiting at a section's start, the next Go runs the section on its own clock rather than waiting again. Lock cues are green on the lanes, release cues orange.
Chase mode. The desk's transport fixture (its Timecode chase channel) and OSC (/chase/…) can override all this while the show runs; the setting is not saved with the show. Per section, the usual setting, does as the sections, cues and toggle say. Force chase locks the whole timeline, as a Lock timeline cue does: the playhead stops and waits for the timecode, then follows it anywhere, free-run sections included, and every start (Go, a fired cue, running onto a timecode section) waits for it again. Release cues are passed over while it is on. Back to Per section, a lock that Force chase put on gives way to what is programmed there: inside a timecode section that section's lock, still following; elsewhere the timeline runs on from where it is on its own clock. A lock a Lock timeline cue or the toggle put on stays on, unless a release cue was passed over meanwhile. Force free run lets go of every lock and ignores timecode until it is set back.
While waiting, Go runs the timeline on its own clock instead: the rescue when the timecode does not come. It waits again at the next lock. If the timecode stops while a lock is following it, the timeline keeps going on its own for about two seconds, then does what When timecode stops, under Timecode in Control, says: Hold (the default) stops it there to wait for the timecode or Go; Run on for a number of seconds, or Run to section end, keeps it playing on its own clock, firing the cues it passes, and stops it there to wait (never past the end of its section). Timecode coming back on the way takes hold again. In Live mode a timeline always runs on to the end of its section, whatever the setting, and the band says TC LOST while it does. While a lock follows the timecode the band says TC LOCK in green (which lock, on hover), and the Live screen TC LOCK · SECTION or TC LOCK · TIMELINE.
A show can have several timelines, and they all run at once, each with its own play, pause and position. A layer is driven by one of them at a time: the one that owns it. A main show on some layers and a walk-in loop or a set of stings on others is the usual reason.
/timeline/2 in front for the second timeline, counting from the left of the tab row. The OSC appendix lists them all.Right-click a timeline's tab and choose Open in its own window. It becomes a separate window you can put on another display, with the same view and the same controls, all acting on that timeline, while the main window goes on showing whatever you have it on. Close the window, or click its dimmed tab, to bring it back. A question a window asks is answered in that window; while it waits, the other windows say where it is open, with Show it, and a key pressed in any of them brings that window to the front rather than acting. Keys pressed in the window act on its timeline, in Live mode too.
To have those windows come back by themselves, tick Open them again at launch beside Windows of their own under Machine. Each timeline that had a window gets it again when the show is next opened on this machine, in the same place and at the same size. If the display it was on is no longer connected, the window still opens, at its size, wherever the system puts it. It is off unless you turn it on, so a window never reopens on a display that has since become the stage.
Any of the nine workspaces can have a window of its own too: right-click its tab in the main window's row and choose Open in its own window. The Layers strips can sit on one display and the Mappings canvas on another while the main window shows the timeline. The tab stays in the row with an arrow beside its name; clicking it, its Cmd digit or its line in the Window menu brings that window to the front. Close the window, or choose Bring back to the main window on the tab's menu, and the workspace is back in the main window, on screen. Keys pressed in the window act on what it shows, as they would on its tab, and a question it asks is answered there.
The main window shows whichever workspace is still in it; with all nine out it says so. In Live mode the windows stay open with an orange line across the top: the engine refuses their edits, as it does everywhere. Open them again at launch under Machine brings these windows back too, at the next launch whatever show is open, each where it was.
The Monitor (V), the DMX monitor (D), the OSC monitor (O), Messages (M), the set list (S), the keyframe editor and the large Colour wheel each open in a window of their own, so they can go past the edge of the main window or onto another display. They open and close as before, from their keys and the Window menu, come back where they were left, and stay open in Live mode. The keyframe editor edits the clip the timeline's inspector shows, and the Colour wheel serves the colour row whose Larger opened it, so each closes when what it serves is no longer drawn. The small questions that belong to what is picked in the main window (Hold, Duplicate region, the Live screen's closer look) stay in the main window.
Pin, at the top right of every window of its own (a timeline's, a workspace's, the Pixels windows and the tools), keeps that window above every other, the Live screen included. On the Mac a pinned window sits under the engine's full-screen outputs, so it never covers the show. The pin is remembered with the window. An unpinned window goes behind the main window when the main window is clicked; its key or the Window menu brings it back.
Bring all windows here (Window menu, or Shift-Cmd-W) brings every window of its own onto the screen the main window is on, out of the Dock, in a cascade from the top left, each shrunk to fit if it is larger than that screen; with the main window itself on no screen, everything goes to the main screen. It works in Live mode, as it moves windows only. Use it when a window was left on a projector that is switched off, or on a screen behind a KVM. A window whose screen is unplugged while the shell runs is brought back on its own, within a second. The engine's output windows are not moved: they are the show's.
Edit, Clear timeline… empties the timeline. A dialog asks first, with a tick each for the clips, the sections and the cues, so you can clear the clips and keep the cue list, say. The layers and who owns them stay, and one Undo brings everything back. To clear a single layer, right-click its row and choose Clear clips….
A set list is the show's timelines in the order of one night, with note rows between them. It is a file of its own (.setlist.json), not part of the show, so it can be changed in Live mode too, and it has its own undo. The cues run the show; the set list is for the order, and for a hand when something fails.
/setlist/row/N/go, /setlist/row/N/skip, /setlist/next and /setlist/previous (see the OSC appendix).A second machine can stand behind the first. Under Machine › Backup, set the show machine to Leads with the backup's address, and the backup to Follows with the leader's (typed, or picked with Found… from the engines found on the network); both are machine settings, saved at once. Alone, Leads and Follows are set in Edit mode (greyed in Live), and on an engine that is part of a pair a change asks first. A following engine refuses Rescan: its media is the leader's. The backup then follows the leader over the network: the same show, edits as they happen, the same playhead within a frame, the same owners, blackout and faders, so its outputs carry the same picture as the leader's and the screens can be switched to it whole. While it follows it obeys only the leader: its own OSC and shell commands are refused, LTC is read but not chased, and cue sends go out from the leader alone; DMX it reads as ever. The band on a following engine says following and its address; Machine says whether it is in step and by how many frames, what the leader's licence is (a follower runs on it, since a licence is per show), and which files the leader's show needs that this machine has not got.
If the leader is lost, the backup goes live on its own: at once when the leader's connection closes, within two seconds when it stops answering. The band turns to BACKUP LIVE, its playhead runs on from where it was, its own inputs take effect. A shell that was on the leader turns to the backup by itself and shows a red banner saying when. If the backup is still following, because the leader only went quiet for a moment (a laptop's sleep, a cable's flap), the shell waits on it for the backup to go live or the leader to answer, and goes back to the leader if it does; the banner shows once the backup is live. The picture path is switched outside Enzyme, on the processor's backup input or a matrix, or by a device command; NDI outputs switch by themselves, since the leader names the backup's copy of each source as its failover and NDI receivers move to it when the leader disappears. A leader that comes back does not take over: whoever is live leads, and at a quiet moment you press Follow the leader again on the backup's Machine tab, which takes the leader's state as it comes. Take over now…, on the backup's Machine tab while it follows, makes it live without waiting, for a leader that is up but wrong. It asks first. Whenever the backup goes live, the leader is told and stands down: it holds its cues' OSC, device commands, timecode out and pixel maps, so the desk gets each cue once, and its band says BACKUP LIVE, STOOD DOWN; its pictures stay on its outputs. It sends again when the backup follows again, or goes, or is not heard for three seconds, or when you press Take the show back… on its Machine tab, which asks first because both engines then send and the desk gets every cue twice; its band then says BACKUP LIVE TOO. When the leader saves the show, the backup saves its copy over its own file of the same name, so a cold start on the backup opens the right show; where its file has another name it writes nothing and says so on the band.
A lighting desk talks to Enzyme over the network using Art-Net or sACN, the same way it talks to a moving light. Each layer looks to the desk like a fixture with channels for clip, play mode, speed, opacity, position, size, colour and so on. Whoever programs the desk needs the patch, which is on the Control workspace (Cmd-7): the universe and start address of every layer.
The DMX monitor (D, or from the band) is a window of its own, and read-only. Its OSC counterpart, the OSC monitor (O), is described with the OSC addresses at the end of this guide. Received shows what the desk sends to the selected layer: each channel of its fixture by name, the raw value and what it means, with the universe, protocol, sender and packet count above. Sent shows what a pixel map puts on the wire: pick the map when there are several and a universe, and its 512 channels are laid out sixteen a row as the engine last sent them, a few times a second. Hover a value for its channel, fixture and byte ("Pixel 3 R", "Shutter1"); held channels are green, the master dimmer orange, and channels let go, gaps in a GDTF block and channels with no fixture dim. The line above says whether the map is on the air, by which protocol, to where, how many universes and how many frames a second; a map that cannot send says why.
For a layer to follow the desk, its owner has to be DMX. Set that at the foot of the strip in Layers, or let a cue do it. If the desk stops sending, Enzyme holds the last values it had rather than going dark.
Clips are dialled on the desk by bank and tile number, which is why the numbers are shown everywhere in Media. Play modes are numbered too: 0 Stop, 1 Play, 2 Loop, 3 Pause, 4 Skip to end, 5 Scrub, 6 Play retrigger, 7 Loop retrigger, 8 Timecode. Export GDTF in the patch block writes the layer personality as a GDTF file: the full channel list, in the form a desk imports. In Full a layer is 144 channels, so three layers fit a universe; with every layer in Full the conventional patch puts layer 1 at 65, layer 2 at 209 and layer 3 at 353, and Re-lay patch in Control lays the fixtures out again one after another, each in the mode it has, so a layer in Standard or Basic brings the ones after it forward. Every channel of every mode is listed in DMX personality.md in the build's docs folder, and Export GDTF carries all five modes (Full, Standard, Basic, Full Extended and Standard Extended). A show saved before version 2 has its patch laid again when it opens, and the shell says so: repatch the desk to match. Version 3 (October 2026) turns Rotation (channel slot 24) into any angle, −180 to 180 degrees with upright at the middle of the fader, and gives the last spare slot to Scale, the whole size, which Aspect X and Aspect Y then multiply: Full and Mixed keep their sizes, and Basic grows to 39 channels, so a patch of Basic layers packed one after another is laid again. Version 4 (6 October 2026) gives Scale, Aspect X and Aspect Y a range of −1000% to +1000%, with 100% at the middle of the fader in 8 and 16 bits; below the middle shrinks the picture, through nothing, to a mirror image. Version 7 (7 October 2026) puts the six bank and tile channels (media, generator and effect) at 16 bits in Mixed, so a Mixed desk reaches banks and tiles to 999: a Mixed layer grows from 96 to 102 channels, so a patch of Mixed layers packed one after another is laid again when the show opens, each fixture keeping its mode, and Enzyme says so. Export the GDTF file again and re-patch the desk. Full and Basic keep their sizes.
Timecode from a sound department comes in as LTC on an audio input. Under Timecode in Control, tick Read timecode, leave the Source on LTC, and pick the Input (the engine machine's own audio inputs, with their channel counts) and the Channel; it starts at once, without a restart, and the choice is kept on the engine's machine. A level meter under the timecode shows the input whether or not it decodes, coloured by the lock: green locked, orange locking or freewheeling, grey with no lock. A level with no lock is the wrong channel, or not timecode; LTC is usually sent around the mark at -20 dBFS. --ltc on the command line still chooses an input for one run, and Control says so until a choice there replaces it. When timecode is present the top strip shows it, and a timeline locks to it as its sections and cues say (Running free, and locking to timecode). Enzyme can send timecode too: under Timecode out in Control, tick Send LTC, pick the audio output and set the level, and the show's position goes out as LTC for a sound or lighting desk to chase. It runs with the timeline and jumps with a locate or a Go. While the timeline is stopped, paused or holding it sends silence, so a desk chasing it stops rather than sitting on a frame. The meter under the level shows what is going out, and the level can be moved while it runs without a break in the code. The choice is kept on the engine's machine. If the input's interface is unplugged or lost mid-show, the engine says so under Timecode and reads from it again within a few seconds of its return; LTC out on a device of its own does the same.
Timecode can travel on the show network instead, as Art-Net timecode, which grandMA, Hog and most timecode generators send. Set the Source to Art-Net: the engine listens on the interface and Art-Net port under Network, whether or not DMX in is on, and a timeline locks to it exactly as to LTC, with the same meter, lock colours and loss settings. It follows one sender at a time, the first it hears, until that one has been quiet for a second, and one Stream of it: Art-Net 4 lets a sender send several timecode streams, each numbered 0 to 255, and 0, the master stream, is the one a sender without streams sends. Set Stream to follow another. To send it, tick Send Art-Net timecode under Timecode out: the same position as LTC out goes out once a frame, broadcast on that interface to the Art-Net port (with no interface chosen, on every card's broadcast), and nothing while the timeline is stopped; its Stream is the number it goes out as, 0 unless a receiver is set to another. Either can go out without the other. Art-Net timecode counts at 24, 25, 29.97 drop frame or 30, so a show counting at 50, 59.94 or 60 sends at half its rate. LTC from a Dante or AVB network needs no setting of its own: it arrives as an audio input, and is read as LTC.
Anything that speaks OSC can run the show and ask for its status: every address, and what a surface gets when it subscribes, is in the OSC appendix. Under Control, OSC, Loopback test sends a message round to the engine's own port and shows how long the reply took, which proves the port is open and finds a firewall; Send /enzyme/test sends a test message to every cue send destination, so a receiver can be checked before the show.
A cue can also tell a matrix, a switcher or a processor to switch, so the picture path follows the show without a hand on a front panel. Under Control, Devices, add the device: a name, its address and port, UDP or TCP, and its protocol, which is only the framing Enzyme puts around what you type: Lightware LW3, RossTalk, Blackmagic Videohub, Extron SIS, Kramer Protocol 3000, tvONE CORIOmaster, tvONE CORIO2, or Raw for anything else that takes a line of text. Add common commands fills in a family's starter set from its manufacturer's command reference, for Lightware LW3 (the /MEDIA/XP/VIDEO tree of MX and MX2 matrices, or the /MEDIA/VIDEO/XP tree of newer devices), tvONE CORIOmaster, tvONE CORIO2 (the C2 series) and Blackmagic Videohub: the inputs, outputs, presets and windows in them are examples to change, commands the device has by name already stay as they are, and it sets the protocol and the family's port (6107 for LW3, 10001 for a CORIOmaster or a C2, 9990 for a Videohub). A CORIO2 command is a function and a value as tvONE's tables give them, 225 = 3 to choose preset 3 or 082? to ask a window's source, with window B or output 1 in front when one is meant; Enzyme makes the checksummed packet, and several go in one command with ; between them (225 = 3; 226 = 1 loads preset 3), each answered before the next goes; a C2 takes one connection at a time, so Enzyme lets go of it after each command, and a timeout means another controller (CORIOtools, another engine) has it. A Videohub counts inputs and outputs from 0, so VIDEO OUTPUT ROUTING:\n0 1 sends input 2 to output 1. On connect, for a TCP device, is sent each time the connection opens, before anything else: a CORIOmaster's login, login(admin,adminpw) from the factory, which the set fills in. Under it, add the commands as the manufacturer's manual gives them, each with a name you will recognise in a cue list ("main", "backup"); write \r, \n or \xHH for a control character the field cannot hold. Send beside a command sends it now, and the device's reply, or the reason it could not be reached, goes in the change log and is shown under the device. In a cue, + Device on the Send row picks a device and one of its commands, and the cue sends it when it fires. Sending never waits for the device: a switcher that is off or unplugged costs a line in the log, not a late frame.
A cue can run the lighting desk, the playback machine and the button surface too, by OSC. On a cue's Sends tab, Add from library… opens starter commands for grandMA3, Hog 4 and Hog 5, the ETC Eos family, QLab 5, Bitfocus Companion and Resolume Arena 7, every one taken from its maker's own documentation. Pick the family, and under it what to turn on at the console and where the commands go: the show's OSC destination for that family, found by its name (a destination called "MA3 FOH" or "Hog4" is taken for its family) or, failing that, the only one on the family's port. With none, Add … at 127.0.0.1 adds one on this machine at the family's port, to repoint at the console under Control, OSC. A click on a command adds it to the cue as an OSC send with its address and arguments, to edit like any other: the sequences, cues, faders and buttons in it are examples. Send tries it at once.
| Family | Port | Turn on at the other end | Source |
|---|---|---|---|
| grandMA3 | 8000 UDP | Menu, In & Out, OSC: Enable Input, and on the line with this port set Receive and Receive Command to Yes. A Prefix there goes in front of every address (/gma3/cmd). Commands go as one string to /cmd; faders are 0 to 100. | grandMA3 User Manual 2.5: OSC, OSC Advanced Examples, SendOSC and the keyword pages; the port is from its QLab page. |
| Hog 4 and Hog 5 | 7001 UDP | Setup, Network, right-click the console, Settings: in the Open Sound Control pane tick OSC In with its port. A goto is list.cue as one number (15.2); a key is 1 down and 0 up, so send both; faders are 0 to 255. Master faders by number are in the 5.3 manual only. Hog 5 changed no playback address. | Hog OS User Manual 5.3.0, chapter 22 (the same playback addresses in Hog 4 4.2.1); the port is ETC's recommendation in its iHog OSC articles. |
| ETC Eos family | 8000 UDP | Setup, System, Show Control, OSC: OSC RX on and OSC UDP RX Port 8000. On a console, also ECU, Settings, Network, Interface Protocols: UDP Strings & OSC. Levels are 0 to 1; a command line ends with #. | Eos Family v3.3.10 User Manual: OSC Dictionary, OSC Conventions, OSC Setup, Show Control settings. |
| QLab 5 | 53000 UDP | Workspace Settings, Network, OSC Access: keep OSC access on and tick Control in the No Passcode row, off in a new workspace. Or keep a passcode and send Connect with it before the other commands; QLab forgets a sender after 61 seconds of silence. A cue number goes as text. | QLab 5 OSC Dictionary and Workspace Settings. |
| Bitfocus Companion | 12321 UDP | Settings, Protocols, OSC: tick OSC Listener. A button is its page, row and column. | Companion user guide 5.1, OSC Control. |
| Resolume Arena 7 | 7000 UDP | Preferences, OSC: turn on OSC input. Shortcuts, Edit OSC, then a click on any control, shows its address and type. Values are 0 to 1 of a control's range. | Resolume manual 7.18, OSC. |
What the makers' pages do not show is left out rather than guessed: a grand master level for grandMA3 or Eos, a list's Back by number on a Hog (its master's Back key is there instead), and triggering a Resolume clip or column, whose argument the manual does not give (Edit OSC in Arena shows it). Try each command on the real console before the show.
A MIDI fader box, pad controller or Mackie-style surface can drive Enzyme through Enzyme MIDI.app, in the build folder. It turns the surface's controls into Enzyme's OSC and lights the surface from what the engine reports, motor faders included. The engine's OSC input must be on. The Enzyme MIDI Guide, in docs beside this one, covers it in full; the steps below are the short way.
Feedback says whether a light shows the engine's own state (engine) or only the last value the surface sent (echo). A fader on a layer moves nothing until that layer is Manual; the row says so.
Other devices. A row's To can be one of the show's OSC destinations (Control, OSC out) instead of Enzyme: a fader on a desk's master, a key for QLab's GO. Enzyme MIDI reads them from Enzyme through Enzyme control (Enzyme's address with port 9200, and its control key if it has one) and sends straight to the device, so the surface still reaches the desk with Enzyme closed. A row can also send one of an outboard device's commands, which Enzyme sends for it. The machine running Enzyme MIDI must reach the device itself.
A generator is a picture Enzyme draws itself rather than plays from a file: colour bars, a solid colour, a gradient, and a set of shader effects such as noise, cells and smoke. They are chosen exactly like clips, under Generator on a strip, folder then file, and they appear in Media under the Generators tab. A generator's time runs with the layer, so put the layer in Play or Loop to see it move.
Each generator has up to sixteen adjustable values in the folded GENERATOR section, under the strip's file pickers, the first eight always in view and 9 to 16 under More values. Each starts at the tile's own setting and reads in the generator's units (pixels, degrees, per cent); move it and the layer has its own, and ↺ beside it gives it back to the tile. A desk does the same with its channel: zero is the tile's own, anything above zero overrides it. Tick sweep beside a value and it runs between a from and a to value over a period, looping, bouncing or once, at the layer's clock: Pause freezes it, speed and direction scale it, and Timecode locks it. When you capture the layer into the timeline the sweeps go with it.
A strip's mask and key controls take part of a layer's picture away. Luma takes out the dark: Threshold is how bright a pixel must be to stay. Chroma takes out one colour, for a green or blue screen: Hue is the colour, in degrees round the colour wheel (120° green, 240° blue), with a swatch beside it showing what is being taken out and Green screen and Blue screen to set it at a click; Threshold is how far from that hue a colour may be and still go, and Softness how gradually the edge falls off. Greys and near-greys are never keyed out, whatever their hue. A desk sets the same with the layer's Key mode and Key hue channels. Over OSC it is /layer/N/key_mode off, luma or chroma (or 0 to 2, as the desk counts them) and /layer/N/key_hue in degrees; the blend is /layer/N/blend normal, add, screen or multiply (or 0 to 3). Like every OSC layer setting, they act on a layer whose owner is Manual.
The generator on a strip runs first, with the layer's clip as its input, before any of the layer's controls. An effect is a second generator that runs on the layer's finished picture instead: after colour, key and mask, before the picture is placed on the screen. Pick one under Effect, folder then file, below the Generator pickers on a strip or in a clip's settings. The vidvox-isf bank shipped with the build (bank 11, so a desk can dial it) holds sixteen filters made for it, on tiles 1 to 16, and five transitions on 101 to 105. The filters: bump distortion, chromatic aberration, colour control, duotone, kaleidoscope, pixellate, posterize, sepia tone, twirl, vignette, fast blur, bloom, glow, sharpen, and two that trail, echo trace and long exposure. A trail builds while the layer plays and starts clean whenever the layer jumps: a locate, a scrub, or a cue away from the next. An EFFECT section then appears on the strip after mask, key and blur with the effect's own values and sweeps, and Copy and Paste carry it as its own group. A generator or an effect has up to sixteen values: the first eight as they always were, and a family with more shows 9 to 16 under More values. An ISF file's first sixteen inputs become values; a show saved before there were sixteen opens with the new ones at the family's defaults, so its picture is unchanged. Only layers with an effect pay for one. A lighting desk selects it by folder and file and drives its values on the layer's channels 121 to 140.
How a layer goes from one picture to the next is the TRANSITION section on the strip, after the effect (the sound's level, bus and pitch come last), in a clip's settings, and on the desk (slots 18 and 19): a cut, a dissolve, a dip to black, or a generator transition, over the Time. Type the time in any mix of hours, minutes, seconds and frames, largest first: 12f, 2s, 2s 12f, 1m 30s, 1h; seconds may have a decimal point (1.5s), frames may run past a second (50f), a number alone is seconds, or type a timecode (00:00:02:12). It is shown back in the same units. From a desk the Time is a channel value, as before. For the last, pick a transition tile from the generator bank: the shipped vidvox-isf bank has Circle Open, Cube, Directional Wipe, Dreamy Zoom and Ripple Transition, and bank 14 has sixty more from gl-transitions on tiles 1 to 60 (17 is Screen Melt), with 061 Key Movie Transition, and any ISF transition file (one with startImage, endImage and progress) dropped into a generator folder becomes one; a tile that is not a transition dissolves instead, and the section says so. Under the tile are the transition's own values for this layer or clip, as an effect's are: a value left at the tile's own shows it, ↺ hands a changed one back, and progress is the transition's and not shown. A transition that takes a picture of its own, such as 14/061 Key Movie Transition's key movie, picks it there from the media bank: a clip plays at the incoming clip's time, looping. The incoming picture's setting is the one used, and a cut, or a time of nought, is a cut.
Throughout, the outgoing picture keeps its own place, size, colour and mapping, so a full-screen clip dissolves into a corner logo as the two of them are, rather than the old one jumping into the corner first. (A layer with an effect or a content canvas draws both pictures with the incoming one's settings.)
Five built-in families draw in block letters: Text shows the words typed into its tile (select the tile in Media and type in its Text field; Duplicate tile makes another to hold different words); Timecode readout shows the show's position; Clock the time of day; Countdown counts down from the seconds in its first value over the clip's time, so it starts when the clip does; and Pixel ID draws a grid with every cell labelled by its pixel coordinates, with a border and a centre cross, for lining up a wall or a projector. Each has values for size, place, colour and a box behind the letters, adjustable on the strip like any generator.
The examples shipped with the build live in the demo-generators folder. Someone who writes shaders can add their own by dropping ISF files into a folder called generators beside the app, into the generators folder of a project (found beside its media on its own), or into any folder added under Show, Generator folders. The folders are saved with the show, as its content folders are; a show opened on a machine where a folder is not at that path lists its families as not loaded until the folder is added again. Single-pass, multi-pass and feedback ISF play, with a custom vertex shader (a .vs beside the .fs) when the shader has one; what cannot play (audio, bundled images) is counted in red under the folders, on a line that unfolds to name each with its reason (hover a reason for the compiler's whole message), and the families that loaded are counted on another that unfolds to list them. A file saved into a generator folder is picked up on its own within a second or two, and Reload generators on the Show tab does it at once. A file renamed with its numbers kept (017 Doom Screen Transition.fs to 017 Screen Melt.fs) takes over its old tile when the old file has gone, so whatever used that tile plays the renamed file; the old tile is kept, counted as "without a tile" beside Rescan in Media. A tile whose shader still loads is never taken over: a new file wanting its number is reported as a clash instead. In Live mode a change on disk (a file saved, or synced in by Dropbox) waits: a notice says so, and it loads when the show leaves Live mode, so no generator is compiled again mid-show.
Some generators and effects take a picture beside the layer's own: a mask, a logo, a second clip to mix or distort with. On the strip (and in a clip's settings) such an input shows as a tile picker among the generator's or the effect's values, not a slider. Pick any tile of Media: a clip, a live input, or a tile of bank 0, which is another layer's picture or a region's (below). That last is how one layer masks or keys another: put the shader on the layer to be masked and choose the masking layer's tile for its mask.
A layer can take its picture from another layer, or from a region, and treat it as its own clip: recolour it, rescale it, put an effect on it, map it somewhere else. That is how a relay screen shows the main screen's content in its own colour, or a ceiling follows the wall. These sources live in bank 0 of Media, Layers and regions, and are chosen like any tile: on a strip or a clip pick bank 0 and a tile, or dial bank 0 and the tile from a desk.
| Tile | Takes | When |
|---|---|---|
| 1 to 50 | A layer's Source: tile 7 is layer 7. Its clip or live input, or its generator's picture when it has one, with none of that layer's effect, colour, position or scale. | The same frame, exactly in step: it is the same decoded frame, shared. |
| 51 to 100 | A layer's Output: tile 57 is layer 7. The layer at the end of its chain, with its effect, colour, key, mask, position and scale. | One frame late. |
| 110 to 255 | A region: 100 + raster × 10 + region. Tile 120 is the whole of raster 2 (its regions laid flat at their places), tile 123 its region numbered 3. Each region's number is shown at the start of its row under Regions and on its canvas label ("Panel · 0/123"). Everything that lands on the region, as composed. | One frame late. |
Messages (M, or Window, Messages) keeps everything Enzyme has told you this run, so nothing shown for a moment is lost: the engine's notices (saved, not saved, licence, backup), every command refused with its reason (from any shell, OSC or a desk), and faults that once went only to the log files, such as an OSC receiver or LTC input that would not start, an OSC send that failed, a device that did not answer, a file that would not decode, a raster with no presenter, a network-health check turning bad, the backup going live. Each line has the time, Error, Warning or Info, and where it came from; tick the levels and pick a source to narrow it, search, Pause to read while new ones wait, and Copy the lines shown to send with a report. A message said again stays one line, moved up to the newest place, with an orange count (×12) beside it. A line that names a page (Control, IO, Media and so on) opens it when clicked. The engine keeps the last 2000 of its run and gives them all to a shell that connects, so a shell opened later still sees what happened. Two more tabs show the Engine log and This shell's log as they are written, the last 3000 lines of each.
Errors you have not yet seen are counted in the top strip as a red errors unread button; warnings are kept in Messages but not counted. Click it, or press M, and the count clears. A refusal or a notice in the top strip now stays up for 30 seconds, and clicking it opens Messages too.
| You see | It means | Do this |
|---|---|---|
| ENZYME EVALUATION on the picture, moving every few seconds | No licence installed on this machine. | Machine shows the machine id. Send it to get a licence file, then Install licence file… in Machine. |
| "Sends stop in 5 min", then SENDS HELD, in the top strip | Without a licence, Enzyme sends to other machines (cue and recall OSC, device commands, timecode out, Enzyme MIDI's sends) for 30 minutes each time the engine starts, counted from the first send. Sends to this machine, such as a desk simulator or Companion on the same computer, always go. The OSC monitor's Sent tab lists each held message as "held". | Restart the engine for another 30 minutes, or install a licence. |
| A red warning count in the top strip | Something is missing or refused. | Open Show: under the self-test list every missing item is named with the reason, for example a clip whose file moved or a generator bank left from an older build. |
| The picture on the screen is darker and richer than it was in a build before 1 October 2026 | Earlier builds sent every display window too bright: mid tones were lifted, so the screen looked washed out next to the same picture in the shell, on NDI or in the source file. That is fixed, and the screen now matches them. | If you had turned a raster's brightness or gamma down to compensate, set them back (0 and 1.0) and judge again. |
| "late" with a number in the top strip | The drive or machine could not decode frames in time; the last frame stayed up. | Occasional is fine. Constant means the drive is too slow or too many big clips are playing; move content to a faster drive. |
| A red "errors unread" button in the top strip | Something failed since you last looked at Messages. | Click it, or press M. Each error is listed with what said it; clicking a line that names a page opens it. |
| An amber "refused" line in the top strip | You are in Live mode, or the action would break something. | Read the reason. It stays for 30 seconds, and Messages (M) keeps it with every other. Leave Live mode if you meant to edit. |
| A clip tile with no picture, or a strip saying "missing" | The file is not where the show expects. | Show › Content folders: Change location… beside the folder, or the Media Inbox's suggestion. Nothing renumbers. |
| A red ENGINE LOST band over a greyed screen | The engine the shell was on has stopped answering. The screen below is as it last was, and nothing on it can be used. | The shell tries again every second (Retry now at once); the band names the engine and how long ago it went, and Found engines turns to another. On a pair, a shell turns to the backup by itself when it goes live. |
| The shell shows its connect page | It has never reached an engine this run, or it is turning to a backup. | Launch the app; or type the engine's address if it runs elsewhere. |
| Something else | Machine → Diagnostics bundle… makes one zip with the logs, the show and the machine details. Send that with a description of what you did. |
The Machine tab has a Network health list: the engine's own reading of the network it is on, worst first. A red dot is a fault, an amber one a warning, a hollow one something not yet judged, and the checks that are good are named together at the foot. Each line says what was seen, and under a fault or a warning, what to do. Lines with a measure (loss, stalls, load, a machine's reply time) keep the last hour and state its worst, because a network that is fine now and was not ten minutes ago is the one to worry about. Every change of state is written to the log with its time, and the diagnostics bundle carries the whole list.
The list ends by saying what it cannot see: the switches' own settings, flooding to other ports, duplicate addresses, NDI's dropped frames. A clean list is not a clean network.
On Windows, Cmd is Ctrl and Option is Alt. Help, Keyboard shortcuts… in the shell shows the same list, with Go, Tab and Space as that shell's Transport keys have them.
Enzyme listens for OSC over UDP. The Control workspace shows the address and port it is listening on (9000 unless the engine was started on another) and lists the last messages that arrived, which is the quickest way to see whether yours are getting there. A number can be sent as an integer or a float. An address Enzyme does not know is ignored and shows in that list.
A card each. Art-Net, sACN and OSC in each have their own card under Machine, Bind and ports: the desk's Art-Net on the lighting network and OSC on the production one, or all three on one card. A card not on the machine now shows as not on this machine now. Its receiver is tried again each second and starts by itself when the card comes up, so a switch powered after the media server needs no restart. A program on the same machine (Enzyme MIDI, Companion, QLab) reaches OSC in at 127.0.0.1 while OSC listens on every interface; on one card, send to that card's own address.
Two networks. Enzyme can listen on a second network card as well, for a desk on the lighting network and a tablet or Companion on the production one: Machine, Bind and ports, tick Second OSC in, choose the card and a port, and press Apply and restart receivers (not in Live mode). What either receiver hears is acted on alike, and replies and status go back out by whichever card reaches the sender. On the same port as OSC in, each receiver needs a card of its own: while either listens on every interface the second will not start, and an orange line says so before Apply. Give the second a port of its own and there is nothing to think about. Control's OSC panel says where the second is listening, or why it is not; the Loopback test tries the first only. Each receiver has its own Values, Fade or Snap: whether a layer value it hears fades over the layer's Transition or is set at once when its message gives no time (see the OSC appendix). Fade is the default; Snap suits a fader surface on that network.
The OSC monitor. Press O (or Window, OSC monitor, or the button beside Last received in Control) for a window of its own that lists every message, newest first. Received: the time by the engine's clock, the sender, which receiver heard it (1 or 2, when the second is on), the address and arguments, and what became of it: unknown in orange for an address Enzyme does not have, refused in red with the reason on hover, ignored while the engine follows a leader. Sent: where each message went (a destination by its name), why (a cue, a reply such as /pong, the Send test) and what it said. Status is left out unless Status feedback is ticked, as at Full it is hundreds a second. A filter matches the address, the sender or destination, or a value; Pause holds the list still while messages keep coming, Clear empties it. The engine keeps the last few hundred of each while no window is open, so after something odd you can open the monitor and still see what came in. Esc closes it.
By name or by number. Wherever an address below takes a number for a layer, a timeline, a raster, a region or a pixel group, it can take that thing's name instead: /layer/led_screens/opacity 0.5 is the layer called LED screens, wherever it sits in the stack, and /timeline/encore/transport/go, /raster/main_wall/region/centre/intensity 1 and /layer/3/owner timeline encore work the same way. Case does not matter, and anything between the words, a space, - or _, counts as one _, so LED-Screens and led_screens are the same name. Names and numbers mix in one address. A number always means the place, so a layer you have named 2 is reached by its number only. A name that two things share is refused, and the OSC monitor says which name it was: rename one, or use its number. A default name such as Layer 4 follows its place (when that layer moves to second, its name becomes Layer 2), so name a layer yourself when an address should stay with it. Renaming a layer breaks the addresses that used its old name, as moving it breaks the ones that use its number. Status messages back from Enzyme (/status/...) always give numbers.
Running the show. These act on the master timeline. Put /timeline/2 in front for the second timeline, counted from the left of the tab row, and so on: /timeline/2/transport/play.
| Address | Arguments | What it does |
|---|---|---|
/transport/play | The same as Go, kept for surfaces that send it. | |
/transport/pause | Pause. | |
/transport/stop | Stop. | |
/transport/reset | Reset: stop and go back to the start of the timeline, holding there. | |
/transport/go | Go, as the Go button: start from a hold or a pause, release a loop, or run free while waiting for timecode. Ignored while running. | |
/transport/hold | Hold at the playhead until Go. | |
/transport/skip_forward or /transport/next | Jump to the next cue and hold there. | |
/transport/skip_back or /transport/previous | Jump to the previous cue and hold there. | |
/transport/go_next | Jump to the next cue and fire it. | |
/transport/go_previous | Jump to the previous cue and fire it. | |
/transport/section_next | Jump to the next section's start and hold there. | |
/transport/section_previous | Jump to this section's start, or from there to the section before, and hold there. | |
/transport/tc_lock | Lock the whole timeline to timecode, as its TC lock toggle does. | |
/transport/tc_release | Let go of any timecode lock; the timeline runs on its own clock from where it is. | |
/cue/go | cue number, such as 3 or 1.5 | Fire that cue. |
/locate | a timecode, as the text 01:00:10:00 or as four numbers | Put the playhead there. The timecode is the timeline's own, as its ruler shows it: with a TC start of 10:00:00:00, 10:00:10:00 is ten seconds in. Before the start is refused. |
/chase/per_section | Timecode as the timeline's sections, lock cues and TC lock toggle say. The usual setting. | |
/chase/force_chase | Lock the whole timeline to timecode while it is set, free-run sections too, as a Lock timeline cue does. Back to per_section, the timeline does as it is programmed again. | |
/chase/force_free_run | Ignore timecode altogether: no lock takes the timeline, and it runs on its own clock. |
The whole show.
| Address | Arguments | What it does |
|---|---|---|
/show/blackout | 1 or 0; none means 1 | Blackout on or off. |
/show/master | 0 to 1 | The master level. |
/audio/master | 0 to 1 | The sound's master level. |
/audio/mute | 1 or 0; none means 1 | Mutes the sound, or brings it back at its master level. |
/audio/bus/N/level | 0 to 1 | Bus N's level, N from 1 to 8. |
/audio/bus/N/mute | 1 or 0; none means 1 | Mutes bus N, or brings it back. |
/show/mode | show or edit | Live mode, or Edit mode. |
/show/override | off, timeline, dmx or manual | Hands every layer to one owner, or gives each back its own. |
A region's look. O is the raster's place in Mappings' list and R the region's in its stack, both from 1; region 1 is the lowest. A value holds the region live over its saved look (Mappings, Regions, Look) until it is released.
| Address | Arguments | What it does |
|---|---|---|
/raster/O/region/R/intensity | 0 to 1 | How bright the region is. |
/raster/O/region/R/opacity | 0 to 1 | How much of what is beneath it shows through; 1 is none. |
/raster/O/region/R/red, green, blue | 0 to 1 | Its colour gains, to match a panel or a projector to its neighbour. |
/raster/O/region/R/colour/rgb, /colour/hsi, /colour/xy | as a layer's colour (below), the gains held to 0 to 1 | The same gains given as RGB, HSI or a CIE xy point, whole or one part; color too. |
/raster/O/region/R/brightness | -1 to 1 | Lifted or lowered; 0 is none. |
/raster/O/region/R/contrast | 0 to 2 | 1 is none. |
/raster/O/region/R/gamma | 0.2 to 5 | 1 is none. |
/raster/O/region/R/kelvin | 2000 to 12000 | Its colour temperature; 6500 is none. |
/raster/O/region/R/tint | -1 to 1 | Green to magenta; 0 is none. |
/raster/O/region/R/release | none, or one of the names above | The saved look back: all of it, or the one value named. |
A pixel group's look. G is the group's place in its pixel map's list, from 1, under the region the map is on.
| Address | Arguments | What it does |
|---|---|---|
/raster/O/region/R/group/G/intensity | 0 to 1 | How bright the group's fixtures are. |
/raster/O/region/R/group/G/kelvin | 2000 to 12000 | Their colour temperature; 6500 is none. |
/raster/O/region/R/group/G/tint | -1 to 1 | Green to magenta; 0 is none. |
/raster/O/region/R/group/G/release | none, or one of the names above | The saved look back: all of it, or the one value named. |
A layer. N is the layer's place in the stack, from 1 at the back. The first address changes who owns the layer. The rest set its by-hand values, the ones its strip shows under Manual, so they are seen when the layer is owned by Manual.
Values fade over the layer's Transition. A value that moves smoothly (opacity, position, scale, rotation, crop, colour, mask, key hue, threshold and softness, blur, the generator's and effect's values and audio level) moves to what OSC sends over the time of the layer's own TRANSITION on its strip, as a recall glides. A new layer's Transition is a Cut, which sets values at once, so nothing fades until the layer is given a Transition with a time (/layer/N/transition_type dissolve and /layer/N/transition_time 2, or on the strip). A message can say for itself: snap or 0 after the value sets it at once (/layer/3/opacity 0.5 snap), and a number of seconds fades over those, whatever the Transition (/layer/3/opacity 0 4). For a whole colour the time comes after the three values (/layer/3/colour/rgb 1 0.5 0 2), so colour/xy takes one only after its intensity. Each value moves on its own clock: an opacity fade runs on while a position fade starts, and a value sent again mid-fade starts from where it shows. Play mode, speed, blend, key mode, the mapping, positions and the clip, generator and effect tiles change at once, as before. A value set by a strip or the desk is set at once and ends that value's fade. For a fader surface that sends every step, set its receiver's Values to Snap (Machine, Bind and ports): what it sends is then set at once unless a message gives a time.
| Address | Arguments | What it does |
|---|---|---|
/layer/N/owner | timeline, dmx or manual; after timeline a number or a name picks which timeline | Who drives the layer. timeline alone is the master. DMX is refused for a layer that is not in the desk patch. |
/layer/N/media | folder and tile numbers | The clip, by the numbers shown in Media. |
/layer/N/generator | folder and tile numbers | The generator. |
/layer/N/effect | folder and tile numbers | The effect. |
/layer/N/mapping | mapping number; 0 for the layer's own | The mapping. |
/layer/N/play_mode or /layer/N/play | stop, play, loop, pause, hold, scrub, play_retrigger, loop_retrigger or timecode | The play mode. |
/layer/N/audio_bus | 0 (off) to 8 | The bus the layer's sound goes to. |
/layer/N/audio_pitch | keep (or 0) or speed (or 1) | Off speed, the sound keeps its pitch, or moves with the speed like tape. |
/layer/N/key_mode | off, luma or chroma (or 0 to 2) | The key, as the strip's Key and the desk's Key mode. |
/layer/N/blend or /layer/N/blend_mode | normal, add, screen or multiply (or 0 to 3) | How the layer lays over the ones beneath it. |
/layer/N/transition_time | seconds as a number, or text as the strip's Time takes it (2s 12f, 1.5s, 00:00:02:12) | The time of the layer's Transition, kept in frames at the show's rate; at most a day. Values sent by OSC fade over it. |
/layer/N/transition_type | cut, dissolve, dip (or dip_to_black) or generator (or 0 to 3, the first three as the desk counts them); after generator, a bank and tile may follow | The kind of the layer's Transition. A Cut sets values at once. |
/layer/N/position | a timecode, as text or four numbers | Where in the clip to locate to. |
/layer/N/in_point | a timecode, as text or four numbers | Where in the clip it starts. |
/layer/N/out_point | a timecode, as text or four numbers | Where it stops or loops back; 00:00:00:00 is the end of the clip. |
/layer/N/<parameter> or /layer/N/param/<parameter> | a number, then snap, 0 or seconds if wanted | One of the parameters in the next table, such as /layer/3/opacity 0.5. It fades over the layer's Transition unless the message says otherwise (above). |
/layer/N/generator_K/sweep | from, to, seconds, then loop, bounce or once (loop if left out); or off | Sweeps generator value K (1 to 16) between two levels. off stops it. |
/layer/N/effect_K/sweep | the same | The same for effect value K. |
Layer parameters. The ranges are the ones the desk's channels cover; neutral is the value that changes nothing. All of them fade over the layer's Transition but speed and mask_feather_gamma, which are set at once, as is a generator or effect value that picks an image input's tile.
| Parameter | Range | Neutral | What it is |
|---|---|---|---|
opacity | 0 to 1 | 1 | |
speed | −4 to 4 | 1 | Times normal speed; below 0 runs backwards. |
position_x, position_y | −32768 to 32767 | 0 | Pixels. |
scale | −10 to 10 | 1 | The whole size, keeping the picture's shape; 1 is full size, below 0 a mirror image. |
aspect_x, aspect_y | −10 to 10 | 1 | Each times scale, to stretch or mirror one way. Called scale_x and scale_y before 18 October 2026; those addresses no longer work, and a show saved then keeps its values. |
rotation | −180 to 180 | 0 | Degrees clockwise about the picture's centre. |
crop_left, crop_right, crop_top, crop_bottom | 0 to 1 | 0 | The share of the picture cut from that edge. |
brightness | −1 to 1 | 0 | |
contrast | 0 to 2 | 1 | |
gamma | 0.2 to 5 | 1 | |
red_gain, green_gain, blue_gain | 0 to 2 | 1 | |
colour/rgb | r g b, each 0 to 2 | 1 1 1 | The three gains at once. |
colour/hsi | hue 0 to 360, saturation 0 to 1, intensity 0 to 2 | 0 0 1 | Turned into the gains: that hue at that saturation, its largest gain the intensity. |
colour/xy | x, y, and an intensity 0 to 2 (1 when left out) | 0.3127 0.3290 1 | A CIE 1931 point, through Rec. 709 into the gains; one outside the Rec. 709 triangle is brought in to its edge. |
colour/hsi/hue, /saturation, /intensity; colour/xy/x, /y, /intensity; colour/rgb/red and so on | one value | One part; the rest kept from the colour as it is (h, s, i, r, g, b too). color works as well as colour. | |
mask_left, mask_right, mask_top, mask_bottom | 0 to 1 | 0 | The share masked from that edge. |
mask_feather | 0 to 1 | 0 | |
mask_feather_gamma | 0.2 to 5 | 1 | The feather's curve: 1 fades straight across it, above 1 stays darker for longer, below 1 brightens sooner. Not on the desk. |
key_hue | 0 to 360 | 120 | Degrees. |
key_threshold | 0 to 1 | 0.5 | |
key_softness | 0 to 1 | 0.1 | |
blur | 0 to 1 | 0 | |
generator_1 to generator_16 | 0 to 1 | 0 | The generator's values; 9 to 16 where the family has them. |
effect_1 to effect_16 | 0 to 1 | 0 | The effect's values; 9 to 16 where the family has them. |
audio_level | 0 to 1 | 1 |
Manual recalls. By bank and tile, as the Manual Recalls tab in Media numbers them.
| Address | Arguments | What it does |
|---|---|---|
/recall | bank and tile numbers | Fires the recall there. An empty tile fires nothing and says so on the band. |
/recall/B/T | none or 1; 0 does nothing | The same, for a button on a TouchOSC or Companion page: it fires on the press and not the release. An OSC script recall runs its messages. |
The set list. A row by its number as the set list window shows it (note rows have none).
| Address | Arguments | What it does |
|---|---|---|
/setlist/row/N/go | none; or 1 or 0 to bring its timeline to view or not | The row's Go to cue and play; the row becomes current. With no argument the row's View tick decides. |
/setlist/row/N/skip | 1 or none to skip, 0 not to | The row's Skip. |
/setlist/next | Go to cue and play on the next row from the current one, for a hand when a cue did not fire. | |
/setlist/previous | The same, on the row before. | |
/status/setlist/current | sent: the current row's number (0 for none) and its timeline's name | To subscribers, with the other status. |
Keeping in touch.
| Address | Arguments | What it does |
|---|---|---|
/ping | Enzyme answers /pong to the address and port the ping came from. | |
/subscribe | light or full; none means full | Sends status, below, back to the address and port the message came from. A subscriber that sends nothing for five minutes is dropped; any /ping or /subscribe keeps it. Up to 32 addresses may subscribe at once; a message carries at most 64 arguments. |
/unsubscribe | Stops it. |
Status that Enzyme sends. To subscribers, at the level each asked for, and to each of the show's destinations at the level chosen on its row under Cue send destinations in Control: Status off, Status light or Status full. A new destination starts off, since Full is hundreds of messages a second. A show saved before 13 October 2026 had one level for all its destinations, and each opens with that level. Destinations added for one run with --osc-out share one level of their own, set on their rows. The moving ones (timecode, position, frame, a layer's time) go at the rate set under the destinations, ten a second unless changed. The rest go when they change, and all of them once a second so a surface that missed a packet is right again within a second.
| Address | Arguments | Level |
|---|---|---|
/status/heartbeat | seconds the engine has been up | Light |
/status/timecode | the master's position as text in its own timecode, as its ruler shows it, 10:00:05:06 with a TC start of 10:00:00:00 | Light |
/status/position | the same in seconds | Light |
/status/frame | the same as a frame number | Light |
/status/transport | play, hold, chase or stop | Light |
/status/cue | the current cue's number as text, empty before the first | Light |
/status/next_cue | the next cue's number as text, empty after the last | Light |
/status/section | the section's number (0 for none) and its name | Light |
/status/timeline/N/timecode, transport, cue, next_cue | as above, for timeline N; only when the show has more than one | Light |
/status/timeline/N/name | the timeline's name | Light |
/status/timeline/N/master | 1 for the master, else 0 | Light |
/status/recall | the bank, tile and name of the recall fired last, once one has been | Light |
/status/mode | edit or show | Full |
/status/blackout | 1 or 0 | Full |
/status/master | 0 to 1 | Full |
/status/override | off, timeline, dmx or manual | Full |
/status/layer/N/owner | timeline, dmx or manual | Full |
/status/layer/N/source | what it shows as text, media 1/2 or generator 1/1; empty for nothing | Full |
/status/layer/N/showing | 1 while it has a picture, else 0 | Full |
/status/layer/N/play_mode | the play mode's name; Skip to end reads hold_last | Full |
/status/layer/N/opacity | 0 to 1, as shown: while it fades or glides, where it has got | Full |
/status/layer/N/colour/rgb, /hsi, /xy | the colour in each form, three values each, whatever set it; while it fades, where it has got | Full |
/status/layer/N/time | seconds into the clip, while it shows | Full |
What a cue sends. A cue can send any OSC address with any arguments; you write them in the cue's editor, and choose where the message goes: one of the show's destinations, or All destinations. The destinations are listed under Cue send destinations in Control, each with a name (QLab, Lighting desk) and a host:port; they are saved with the show, and adding, renaming or removing one can be undone (greyed in Live mode). A host given by name that cannot be looked up is tried again every ten seconds. A cue sending to a destination that has since been removed shows it missing in red, and sends nothing. Send /enzyme/test sends a test message to each so you can check the other end is listening. Shows saved before 13 October 2026 open with each destination named after its address, and their cues still sending to all. Each destination's row also chooses the status it is sent unasked (above).