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 and control changes 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. |
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's MIDI state.
-
STATE:
0for off,1for on.
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-6 | 0x7C |
Reserved for future public flags. Send as 0 unless documented otherwise. |
| 7 | 0x80 |
Internal EEPROM initialization flag. 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.
Reports the selected bank. This is sent by hardware bank changes and during SYNC.
Reports the selected snapshot when the hardware UI changes snapshots.
Reports the firmware version in response to SYNC.
-
MAJOR: Firmware major version. Current value:
1. -
MINOR: Firmware minor version. Current value:
9.
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.
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 MIDI state for the currently selected bank, but only when
BANK_MISCbit 0 is enabled. - Reserved range: These notes are consumed by the firmware even when MIDI knob states are disabled.
| 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.
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. - 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.
- The firmware does not parse incoming 14-bit CC pairs or incoming NRPN sequences as high-resolution values. Incoming value sync is based on single 7-bit CC messages.
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, or morph-time note 108.
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 MIDI state config | Off, using the default CC1 values as the state CC/note numbers |
| 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. 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.
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
Request Full Configuration
Questions about the API? Contact support