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

Manufacturer ID
00 04 58
Product ID
65 14
Firmware Version
1.9
Banks
8 (0-7)
Knobs Per Bank
16 (0-15)
Snapshots Per Bank
8 (0-7)
Color Indices
64 (0-63)
Pot Value Range
0-16383

SysEx Message Format

All SysEx commands use the same header:

F0 00 04 58 65 14 [MESSAGE_TYPE] [DATA...] F7
  • 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.
Indexing: Banks, snapshots, knobs, MIDI channels, and command values in this document are zero-based. MIDI channel 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.

0x00 - KNOB_COLOR

Sets the LED color for one knob in one snapshot, or for all snapshots of that knob.

F0 00 04 58 65 14 00 [BANK] [SNAPSHOT] [POT] [COLOR_INDEX] F7
  • BANK: 0-7.
  • SNAPSHOT: 0-7, or 8 for all snapshots.
  • POT: 0-15.
  • COLOR_INDEX: 0-63.
0x01 - KNOB_TYPE

Sets the visual display mode for a knob.

F0 00 04 58 65 14 01 [BANK] [POT] [TYPE] F7
  • TYPE 0: Normal fill.
  • TYPE 1: Bipolar fill from center.
  • TYPE 2: Pointer, single LED indicator.
0x02 - KNOB_CC_TYPE

Sets the MIDI output type for a knob.

F0 00 04 58 65 14 02 [BANK] [POT] [CC_TYPE] F7
  • CC_TYPE 0: Standard 7-bit CC. Sends CC1 with a scaled 0-127 value.
  • CC_TYPE 1: 14-bit CC. Sends CC1 as MSB and CC2 as LSB.
  • CC_TYPE 2: NRPN. Sends CC 99, CC 98, CC 6, and CC 38.
0x03 - KNOB_MIDI_CHANNEL

Sets the output channel for a knob.

F0 00 04 58 65 14 03 [BANK] [POT] [CHANNEL] F7
  • CHANNEL: 0-15.
0x04 - KNOB_MIDI_CC1

Sets the primary MIDI controller value for a knob.

F0 00 04 58 65 14 04 [BANK] [POT] [CC_NUMBER] F7
  • CC_NUMBER: 0-127.
Usage: Standard CC uses this as the CC number. 14-bit CC uses this as the MSB CC number. NRPN uses this as the NRPN parameter MSB value sent on CC 99.
0x05 - KNOB_MIDI_CC2

Sets the secondary MIDI controller value for a knob.

F0 00 04 58 65 14 05 [BANK] [POT] [CC_NUMBER] F7
  • CC_NUMBER: 0-127.
Usage: 14-bit CC uses this as the LSB CC number. NRPN uses this as the NRPN parameter LSB value sent on CC 98.
0x06 - KNOB_MIDI_MIN

Sets the minimum MIDI output value for a knob.

F0 00 04 58 65 14 06 [BANK] [POT] [MIN_VALUE] F7
  • MIN_VALUE: 0-127.
0x07 - KNOB_MIDI_MAX

Sets the maximum MIDI output value for a knob.

F0 00 04 58 65 14 07 [BANK] [POT] [MAX_VALUE] F7
  • MAX_VALUE: 0-127.
Scaling: When 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.
0x08 - KNOB_SNAPSHOT_VALUE

Sets the stored 14-bit value for a knob in a specific snapshot.

F0 00 04 58 65 14 08 [BANK] [SNAPSHOT] [POT] [VALUE_MSB] [VALUE_LSB] F7
  • 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.
0x09 - KNOB_MIDI_STATE_CONFIG

Sets the MIDI note or CC number used when the knob's MIDI state is transmitted.

F0 00 04 58 65 14 09 [BANK] [POT] [MIDI_VALUE] F7
  • MIDI_VALUE: 0-127. Used as a CC number in CC mode or as a note number in note mode.
Related setting: Enable MIDI knob states with BANK_MISC bit 0. Select note output instead of CC output with BANK_MISC bit 1.
0x0A - KNOB_MIDI_STATE

Sets the stored on/off state for a knob's MIDI state.

F0 00 04 58 65 14 0A [BANK] [POT] [STATE] F7
  • STATE: 0 for off, 1 for on.
0x32 - BANK_COLOR

Sets the LED color of a bank button.

F0 00 04 58 65 14 32 [BANK] [COLOR_INDEX] F7
0x33 - BANK_SNAPSHOT_COLOR

Sets the LED color of a snapshot button for a bank.

F0 00 04 58 65 14 33 [BANK] [SNAPSHOT] [COLOR_INDEX] F7
  • SNAPSHOT: 0-7, or 8 for all snapshot buttons in the bank.
  • COLOR_INDEX: 0-63.
0x34 - BANK_ID

Sets an external 64-bit identifier for a bank. The firmware stores and returns this value but does not generate it.

F0 00 04 58 65 14 34 [BANK] [ID_MSB_FLAGS] [ID_BYTE_0] [ID_BYTE_1] [ID_BYTE_2] [ID_BYTE_3] [ID_BYTE_4] [ID_BYTE_5] [ID_BYTE_6] [ID_BYTE_7] F7
  • ID bytes: The 64-bit ID is split into 8 little-endian bytes before MIDI-safe encoding.
  • ID_MSB_FLAGS: Bit i contains bit 7 of original ID byte i.
  • ID_BYTE_0 through ID_BYTE_7: Lower 7 bits of each original ID byte.
0x35 - BANK_MISC

Sets public per-bank behavior flags.

F0 00 04 58 65 14 35 [BANK] [MISC_FLAGS] F7
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.
Public mask: The firmware accepts and returns only bits 0-6 through this command. Bit 7 is preserved internally.
0x63 - IDLE_TIMEOUT

Sets the idle LED timeout in whole minutes.

F0 00 04 58 65 14 63 [MINUTES] F7
  • MINUTES: 0-127. 0 disables automatic LED timeout.
0x64 - BRIGHTNESS

Sets global LED brightness.

F0 00 04 58 65 14 64 [BRIGHTNESS] F7
  • BRIGHTNESS: 0-100.
Internal scaling: The firmware stores brightness as BRIGHTNESS / 3, so sync replies are rounded down to multiples of 3.
0x7D - RESET_TO_BOOTLOADER

Immediately resets the device into bootloader mode for firmware updates.

F0 00 04 58 65 14 7D F7
0x7F - SYNC

Requests a full configuration dump from the device.

F0 00 04 58 65 14 7F F7

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.

0x65 - BANK_CHANGE

Reports the selected bank. This is sent by hardware bank changes and during SYNC.

F0 00 04 58 65 14 65 [BANK] F7
0x66 - SNAPSHOT_CHANGE

Reports the selected snapshot when the hardware UI changes snapshots.

F0 00 04 58 65 14 66 [SNAPSHOT] F7
0x7E - FIRMWARE_VERSION

Reports the firmware version in response to SYNC.

F0 00 04 58 65 14 7E [MAJOR] [MINOR] F7
  • 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:

  1. BRIGHTNESS
  2. FIRMWARE_VERSION
  3. IDLE_TIMEOUT
  4. BANK_CHANGE for the selected bank
  5. 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, and KNOB_MIDI_STATE
  6. All bank config: BANK_COLOR, BANK_MISC, and BANK_SNAPSHOT_COLOR
  7. All BANK_ID values
  8. All saved KNOB_SNAPSHOT_VALUE values
Snapshot report: 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

90-9F [NOTE] [VELOCITY]
  • 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

90-9F [NOTE] [VELOCITY]
  • 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

90-9F [NOTE 24-39] [VELOCITY]
  • 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_MISC bit 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

90-9F 6C [VELOCITY] ... 80-8F 6C 00
  • 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 CC1 updates 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_CONFIG CC number with value 127 for on or 0 for 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.
Echo caution: If your host echoes MIDI back to the device, avoid assigning knob-state notes that collide with navigation notes 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, or 255.
  • red_level = index / 16.
  • blue_level = index % 4.
  • green_group = (index % 16) / 4.
  • green_level = green_group for even red levels, or 3 - green_group for 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

F0 00 04 58 65 14 00 00 00 01 0F F7

Set Pot 1 to 14-bit CC Mode

F0 00 04 58 65 14 02 00 01 01 F7

Set a Saved Snapshot Value to Full Scale

F0 00 04 58 65 14 08 00 03 01 7F 7F F7

Sets bank 0, snapshot 3, pot 1 to value 16383.

Enable MIDI Knob States for Bank 0 in CC Mode

F0 00 04 58 65 14 35 00 01 F7

Set Idle Timeout to 15 Minutes

F0 00 04 58 65 14 63 0F F7

Select Bank 2 with MIDI Note

90 02 7F

Select Snapshot 3 with MIDI Note

90 0F 7F

Request Full Configuration

F0 00 04 58 65 14 7F F7

Questions about the API? Contact support