Universal Controller MIDI

Advanced

SysEx

Send raw System Exclusive messages from any gamepad input. F0 ... F7 framing, manufacturer IDs, and the bytes that flip switches inside hardware synths.

Updated

SysEx — System Exclusive — is the escape hatch in MIDI, the place anything not covered by the standard goes: patch dumps, firmware uploads, secret parameters, vendor-specific everything. Universal Controller MIDI lets you fire arbitrary SysEx blobs from any button, trigger, or stick.

If your synth has a feature the front panel can't reach, there's almost certainly a SysEx command for it.

The framing

Every SysEx message is bracketed by F0 (status start) and F7 (status end). Between them: a manufacturer ID (1 or 3 bytes), a device ID, and the payload. Every payload byte must be 7-bit — 0x00 to 0x7F. Anything 0x80 or higher is reserved for status bytes and will corrupt the stream.

# Korg Volca Sample — set part 1 sample number to 12
F0 42 30 00 01 2D 0C 00 F7
#   ^^ ^^ ^^ ^^^^ ^^ ^^ ^^
#   |  |  |  model |  |  end
#   |  |  device   |  param value
#   Korg ID        Korg fn
SysEx frame F0 start 42 00 01 manufacturer payload (7-bit) 0x00 – 0x7F F7 end
SysEx hex framing — F0 + manufacturer ID + 7-bit payload + F7 terminator, byte by byte.

Authoring SysEx in the mapping editor

In the mapping editor, set the output type to SysEx and paste a hex string. Spaces are optional. The F0/F7 framing is added for you if missing — but never wrong to include it. For dynamic payloads, use {value} to inject the current input value as a 7-bit byte; e.g. F0 41 10 42 12 40 00 04 {value} F7 for a Roland JV-style filter cutoff.

{
  "input": "RT",
  "output": {
    "type": "sysex",
    "bytes": "F0 41 10 42 12 40 00 04 {value} F7",
    "value_range": [0, 127],
    "value_curve": "linear"
  }
}

Common manufacturer IDs

The 1-byte IDs are the originals; 3-byte IDs (prefixed with 00) were added when the namespace ran out. Reference table for the ones you'll hit most often:

ManufacturerID (hex)Notable devices
Sequential / Dave Smith01Prophet 5/6/10, Pro 3, OB-6
Roland41JV/JD series, Juno-X, MC-707, Fantom
Korg42Minilogue, Wavestate, Volca, Opsix
Yamaha43DX7, Reface, Montage, Genos
Akai47MPC range, Force, APC controllers
Native Instruments00 21 09Maschine, Komplete Kontrol, Traktor
Elektron00 20 3CDigitakt, Octatrack, Analog Rytm
Arturia00 20 6BMicroFreak, MatrixBrute, PolyBrute
Universal Non-Realtime7EIdentity request, sample dump
Universal Realtime7FMMC transport, MIDI Tuning Standard

Real-time vs bulk

Realtime SysEx (parameter change) is short, fast, fine on a per-input basis — fire it from a button or stick all day. Bulk SysEx (patch dumps, firmware) is long, can be 10 KB+, and shouldn't be tied to a held input. Trigger bulk transfers from a single button press, not a continuous source.

Real-world scenarios

SysEx earns its place when you need to do something the synth pretends isn't possible:

  1. Prophet 6 voice-mode toggle. Map Triangle to send F0 01 2D 06 12 ... F7 — instant flip between poly / mono / unison without diving into the menu mid-track.
  2. Roland MC-707 scene recall. D-pad sends scene-change SysEx (Roland scene-change CC isn't enough for full state). Four scenes on one cross-pad.
  3. Elektron Digitakt pattern jump. Face buttons fire the pattern-change SysEx with sample-accurate quantisation that the standard Program Change can't guarantee.
  4. NI Maschine Jam-style page flip. Touchpad swipe sends Maschine's group/page SysEx so you control hardware Maschine from a DualSense as if it were a Jam.
  5. DX7 patch initialise. Hold Share + L3 to push a fresh init patch — perfect when you've FM-ed yourself into a corner during sound design.

SysEx is a Pro feature. Free maps notes and CCs only.

Edit this page on GitHub Updated
ESC

Type to search.