SysEx & MIDI API
Time Machine SysEx & MIDI API
This page documents the API implemented by the current firmware. SysEx configuration is handled over USB MIDI. Standard MIDI notes, control changes, and pitch bend are handled over USB MIDI and the hardware serial MIDI port.
Device Information
SysEx Message Format
All SysEx commands use the same header:
- F0: SysEx start byte.
- 00 04 58: Extended manufacturer ID.
- 65 14: Product ID.
- MESSAGE_TYPE: One 7-bit command byte.
- DATA: Command-specific 7-bit data bytes unless otherwise described.
- F7: SysEx end byte.
0 is channel 1 on most MIDI interfaces.
Command Quick Reference
| Hex | Decimal | Name | Direction | Purpose |
|---|---|---|---|---|
00 |
0 | KNOB_COLOR |
In, sync out | Knob LED color per snapshot. |
01 |
1 | KNOB_TYPE |
In, sync out | Normal, bipolar, or pointer display. |
02 |
2 | KNOB_CC_TYPE |
In, sync out | 7-bit CC, 14-bit CC, or NRPN output. |
03 |
3 | KNOB_MIDI_CHANNEL |
In, sync out | Per-knob MIDI channel. |
04 |
4 | KNOB_MIDI_CC1 |
In, sync out | Primary CC or NRPN MSB. |
05 |
5 | KNOB_MIDI_CC2 |
In, sync out | Secondary CC or NRPN LSB. |
06 |
6 | KNOB_MIDI_MIN |
In, sync out | Minimum MIDI output value. |
07 |
7 | KNOB_MIDI_MAX |
In, sync out | Maximum MIDI output value. |
08 |
8 | KNOB_SNAPSHOT_VALUE |
In, sync/save out | 14-bit saved value for one knob snapshot. |
09 |
9 | KNOB_MIDI_STATE_CONFIG |
In, sync out | Note or CC number used by knob state messages. |
0A |
10 | KNOB_MIDI_STATE |
In, sync out | Stored on/off state for a knob. |
0B |
11 | READ_KNOB_COLORS |
In | Request knob color report for a snapshot or bank. |
32 |
50 | BANK_COLOR |
In, sync out | Bank button color. |
33 |
51 | BANK_SNAPSHOT_COLOR |
In, sync out | Snapshot button color per bank. |
34 |
52 | BANK_ID |
In, sync out | 64-bit external bank identifier. |
35 |
53 | BANK_MISC |
In, sync out | Bank behavior flags. |
63 |
99 | IDLE_TIMEOUT |
In, sync out | LED idle timeout in minutes. |
64 |
100 | BRIGHTNESS |
In, sync out | Global LED brightness. |
65 |
101 | BANK_CHANGE |
Out | Selected bank report. |
66 |
102 | SNAPSHOT_CHANGE |
Out | Selected snapshot report. |
7D |
125 | RESET_TO_BOOTLOADER |
In | Reset to bootloader mode. |
7E |
126 | FIRMWARE_VERSION |
Out | Firmware version report. |
7F |
127 | SYNC |
In | Request full configuration dump. |
Incoming SysEx Commands
Unless a command says otherwise, BANK is 0-7, POT is 0-15, SNAPSHOT is 0-7, COLOR_INDEX is 0-63, and MIDI values are 0-127.
Sets the LED color for one knob in one snapshot, or for all snapshots of that knob.
- BANK: 0-7.
-
SNAPSHOT: 0-7, or
8for all snapshots. - POT: 0-15.
- COLOR_INDEX: 0-63.
Sets the visual display mode for a knob.
- TYPE 0: Normal fill.
- TYPE 1: Bipolar fill from center.
- TYPE 2: Pointer, single LED indicator.
Sets the MIDI output type for a knob.
-
CC_TYPE 0: Standard 7-bit CC. Sends
CC1with a scaled 0-127 value. -
CC_TYPE 1: 14-bit CC. Sends
CC1as MSB andCC2as LSB. - CC_TYPE 2: NRPN. Sends CC 99, CC 98, CC 6, and CC 38.
Sets the output channel for a knob.
- CHANNEL: 0-15.
Sets the primary MIDI controller value for a knob.
- CC_NUMBER: 0-127.
Sets the secondary MIDI controller value for a knob.
- CC_NUMBER: 0-127.
Sets the minimum MIDI output value for a knob.
- MIN_VALUE: 0-127.
Sets the maximum MIDI output value for a knob.
- MAX_VALUE: 0-127.
MAX_VALUE is greater than MIN_VALUE, knob output is scaled into that range. When max is less than or equal to min, the firmware uses the full MIDI range.
Sets the stored 14-bit value for a knob in a specific snapshot.
- VALUE_MSB: High 7 bits of the value.
- VALUE_LSB: Low 7 bits of the value.
-
Value formula:
(VALUE_MSB << 7) | VALUE_LSB, range 0-16383.
Sets the MIDI note or CC number used when the knob's MIDI state is transmitted.
- MIDI_VALUE: 0-127. Used as a CC number in CC mode or as a note number in note mode.
BANK_MISC bit 0. Select note output instead of CC output with BANK_MISC bit 1.
Sets the stored on/off state for a knob.
-
STATE:
0for off,1for on.
Requests the stored knob colors for one snapshot, or for all snapshots of a bank. The device replies with one KNOB_COLOR message per knob.
- BANK: 0-7.
-
SNAPSHOT: 0-7 for one snapshot (16 replies), or
8for all snapshots (128 replies).
Sets the LED color of a bank button.
Sets the LED color of a snapshot button for a bank.
-
SNAPSHOT: 0-7, or
8for all snapshot buttons in the bank. - COLOR_INDEX: 0-63.
Sets an external 64-bit identifier for a bank. The firmware stores and returns this value but does not generate it.
- ID bytes: The 64-bit ID is split into 8 little-endian bytes before MIDI-safe encoding.
-
ID_MSB_FLAGS: Bit
icontains bit 7 of original ID bytei. - ID_BYTE_0 through ID_BYTE_7: Lower 7 bits of each original ID byte.
Sets public per-bank behavior flags.
| Bit | Mask | Meaning |
|---|---|---|
| 0 | 0x01 |
Enable MIDI knob states for this bank. |
| 1 | 0x02 |
Send knob state changes as notes. When clear, send them as CC messages. |
| 2-5 | 0x3C |
Reserved for future public flags. Send as 0 unless documented otherwise. |
| 6-7 | 0xC0 |
Internal EEPROM initialization flags. Not part of the public API. |
Sets the idle LED timeout in whole minutes.
-
MINUTES: 0-127.
0disables automatic LED timeout.
Sets global LED brightness.
- BRIGHTNESS: 0-100.
BRIGHTNESS / 3, so sync replies are rounded down to multiples of 3.
Immediately resets the device into bootloader mode for firmware updates.
Requests a full configuration dump from the device.
Outgoing SysEx Messages
The device sends SysEx over USB MIDI. Most configuration messages use the same format as incoming commands so an editor can update its local state directly from the response.
Sent in response to READ_KNOB_COLORS and during SYNC, using the same format as the incoming command: one message per knob with its stored color index.
Reports the selected bank. This is sent by hardware bank changes and during SYNC.
Reports the selected snapshot when the hardware UI changes snapshots, when a timed morph completes, or when a manual morph via pitch bend commits a snapshot. Snapshot selection via MIDI notes 12-19 does not send this report.
Reports the firmware version in response to SYNC.
-
MAJOR: Firmware major version. Current value:
1. -
MINOR: Firmware minor version. Current value:
10.
SYNC Response Contents
A SYNC request sends the following data, in this order:
BRIGHTNESSFIRMWARE_VERSIONIDLE_TIMEOUT-
BANK_CHANGEfor the selected bank - All knob config:
KNOB_COLOR,KNOB_TYPE,KNOB_CC_TYPE,KNOB_MIDI_CHANNEL,KNOB_MIDI_CC1,KNOB_MIDI_CC2,KNOB_MIDI_MIN,KNOB_MIDI_MAX,KNOB_MIDI_STATE_CONFIG, andKNOB_MIDI_STATE - All bank config:
BANK_COLOR,BANK_MISC, andBANK_SNAPSHOT_COLOR - All
BANK_IDvalues - All saved
KNOB_SNAPSHOT_VALUEvalues
SYNC reports the selected bank but does not send a standalone selected-snapshot message.
MIDI Note API
These note commands are accepted over USB MIDI and serial MIDI. Channel is ignored for navigation notes.
Bank Selection
- Notes: 0-7 select banks 0-7.
- Velocity: Must be greater than 0. Note Off and Note On with velocity 0 are ignored.
- Behavior: The current snapshot is remembered per bank, then the target bank and its remembered snapshot are loaded.
Snapshot Selection
- Notes: 12-19 select snapshots 0-7 in the current bank.
- Velocity: Must be greater than 0.
- Behavior: Active knobs load their saved snapshot values and transmit their MIDI CC or NRPN output.
Auto Morph Notes
- Notes: 48-55 morph to snapshots 0-7 in the current bank.
-
Velocity: Sets the morph duration as a fraction of the configured morph time:
duration = morph_time * velocity / 127, minimum 1 ms. Velocity 127 morphs over the full configured morph time. - Behavior: Active knobs sweep from their current values to the target snapshot's saved values, transmitting their configured MIDI output along the way. When the morph completes, the target snapshot becomes the selected snapshot.
- Retargeting: A morph note received while a morph is running retargets the running morph from its current values, using the new note's velocity-scaled duration.
- Modes: Works in any mode; morph mode does not need to be enabled on the device. Per-snapshot morph rates configured on the hardware do not apply to note-triggered morphs.
Knob State Toggle Notes
- Notes: 24-39 map to displayed knobs 1-16.
- Behavior: Note On with velocity greater than 0 toggles the stored knob on/off state for the currently selected bank. States are shared with snapshot mode: a knob toggled off is excluded from snapshot recall and morphs.
- Reserved range: These notes are always consumed by the firmware.
| Note | Displayed Knob | SysEx POT Index |
|---|---|---|
| 24 | 1 | 3 |
| 25 | 2 | 2 |
| 26 | 3 | 1 |
| 27 | 4 | 0 |
| 28 | 5 | 4 |
| 29 | 6 | 5 |
| 30 | 7 | 6 |
| 31 | 8 | 7 |
| 32 | 9 | 11 |
| 33 | 10 | 10 |
| 34 | 11 | 9 |
| 35 | 12 | 8 |
| 36 | 13 | 12 |
| 37 | 14 | 13 |
| 38 | 15 | 14 |
| 39 | 16 | 15 |
Morph Time Note
-
Note: 108 decimal,
0x6C. - Behavior: Note On starts timing. Note Off, or Note On with velocity 0, stores the elapsed duration as morph time.
- Range: Clamped to 1-65534 ms. Default is 1000 ms.
Manual Morph via Pitch Bend
Pitch bend messages on channels 0-7 drive a manual morph toward snapshots 0-7 of the current bank. The 14-bit bend value acts as a morph position fader between the current values and the target snapshot.
- Channel: 0-7 selects target snapshot 0-7. Pitch bend on channels 8-15 is ignored.
-
Value:
(VALUE_MSB << 7) | VALUE_LSB, 0-16383. - Gesture start: The first message of a gesture captures the current knob values as the morph origin.
- Blending: Each value blends all active knobs proportionally between the origin (0) and the target snapshot's saved values (16383), transmitting their configured MIDI output.
-
Commit: Reaching the full value 16383 selects the target snapshot and sends
SNAPSHOT_CHANGE. The gesture stays live, so the value can still swing back toward the origin. - Release: Returning to 0 ends the gesture at the origin without changing the selected snapshot.
- Cancellation: Bank changes, snapshot changes, and device-initiated morphs cancel the gesture. The next pitch bend message starts a new gesture from the values at that moment.
MIDI CC and NRPN Behavior
Knob Output
| CC Type | Messages Sent |
|---|---|
| Standard 7-bit CC | B0-BF [CC1] [VALUE] |
| 14-bit CC |
B0-BF [CC1] [MSB] followed by B0-BF [CC2] [LSB]
|
| NRPN |
CC 99 = CC1, CC 98 = CC2, CC 6 = MSB, CC 38 = LSB
|
Standard 7-bit output uses the configured MIDI min and max values. 14-bit CC and NRPN output scale the 14-bit knob value into the configured min/max range converted to 14-bit.
Incoming CC Sync
- Incoming CC matching a knob's channel and
CC1updates that knob's value. - For 14-bit knobs,
CC1updates the high 7 bits andCC2updates the low 7 bits, merged into the knob's current 14-bit value using the knob's min/max scaling. No message-order assumption is made between the MSB and LSB. - Value sync applies across all banks. Non-selected banks update silently using their own knob configuration and scaling.
- CC 123, All Notes Off, is ignored.
- For the active bank, incoming CC is ignored while the matching knob has been touched within the touch-release window.
- Incoming NRPN sequences are not parsed as high-resolution values.
Knob MIDI State Messages
When BANK_MISC bit 0 is enabled, touching a knob in the hardware option mode toggles and transmits that knob's MIDI state.
-
CC mode: Sends the configured
KNOB_MIDI_STATE_CONFIGCC number with value127for on or0for off. - Note mode: Sends the configured note number. On sends Note On velocity 127. Off sends Note Off velocity 0.
- Incoming CC state sync: In CC mode, incoming matching CC values 0-63 set state off and 64-127 set state on. This sync checks all banks.
0-7, 12-19, 24-39, auto morph notes 48-55, or morph-time note 108. Pitch bend on channels 0-7 is likewise consumed by the manual morph input. Echoing the device's own knob CC output back to it can also fight running morphs.
Color Palette
The firmware exposes 64 color indices. Internally, cRGB values are stored in green, red, blue order, but the table below describes human RGB output.
- Each RGB component uses one of four levels:
0,97,158, or255. -
red_level = index / 16. -
blue_level = index % 4. -
green_group = (index % 16) / 4. -
green_level = green_groupfor even red levels, or3 - green_groupfor odd red levels.
| Index | Human RGB | Common Name |
|---|---|---|
| 0 | (0, 0, 0) |
Black |
| 3 | (0, 0, 255) |
Blue |
| 12 | (0, 255, 0) |
Green |
| 15 | (0, 255, 255) |
Cyan |
| 48 | (255, 255, 0) |
Yellow |
| 51 | (255, 255, 255) |
White |
| 60 | (255, 0, 0) |
Red |
| 63 | (255, 0, 255) |
Magenta |
Default Color Indices
| Item | Default Indices |
|---|---|
| Snapshot/knob colors 0-7 | 15, 55, 13, 48, 60, 7, 52, 63 |
| Bank button color | 51 |
Factory Defaults
| Setting | Default |
|---|---|
| Selected bank | 0 |
| Knob MIDI channel | Same as bank number, 0-7 |
Knob CC1
|
23, 22, 21, 20, 24, 25, 26, 27, 31, 30, 29, 28, 70, 71, 72, 73 |
Knob CC2
|
CC1 + 32 |
| MIDI min/max | 0 / 127 |
| Knob type | Normal |
| CC type | Standard 7-bit CC |
| Knob on/off states | All on, using the default CC1 values as the state CC/note numbers. MIDI transmission of states stays off until BANK_MISC bit 0 is enabled. |
| LED brightness | Internal value 16, reported through the API as 48 |
| Idle timeout | 10 minutes |
| Morph time | 1000 ms |
Implementation Notes
- Maximum USB SysEx buffer size is 64 bytes.
- Receiving USB SysEx disables morph mode before processing the command.
- Configuration changes are saved to EEPROM immediately.
- USB SysEx burst responses use a bounded wait for the USB MIDI TX endpoint so sync data is not dropped when a host is connected.
- Serial MIDI input supports channel voice messages used by this API, including pitch bend. It does not parse serial SysEx messages.
- Serial MIDI output is rate-limited with a 2 ms base delay. 14-bit CC uses twice that delay and NRPN uses four times that delay.
Examples
Set Bank 0, Snapshot 0, Pot 1 to Color Index 15
Set Pot 1 to 14-bit CC Mode
Set a Saved Snapshot Value to Full Scale
Sets bank 0, snapshot 3, pot 1 to value 16383.
Read All Knob Colors for Bank 0
The device replies with 128 KNOB_COLOR messages: 16 knobs across 8 snapshots.
Enable MIDI Knob States for Bank 0 in CC Mode
Set Idle Timeout to 15 Minutes
Select Bank 2 with MIDI Note
Select Snapshot 3 with MIDI Note
Auto Morph to Snapshot 4 at Half Speed
Note 52 with velocity 64 morphs to snapshot 4 over roughly half the configured morph time.
Manual Morph Toward Snapshot 0 with Pitch Bend
A pitch bend ramp on channel 0 from 0 through 8192 (halfway blend) to 16383, which commits snapshot 0.
Request Full Configuration
Questions about the API? Contact support