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

Manufacturer ID
00 04 58
Product ID
65 14
Firmware Version
1.10
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.
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.

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.

F0 00 04 58 65 14 0A [BANK] [POT] [STATE] F7
  • STATE: 0 for off, 1 for on.
Shared states: Knob on/off states are shared between snapshot mode and MIDI knob-state mode, and persist across power cycles. A knob toggled off is excluded from snapshot recall and morphs.
0x0B - READ_KNOB_COLORS

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.

F0 00 04 58 65 14 0B [BANK] [SNAPSHOT] F7
  • BANK: 0-7.
  • SNAPSHOT: 0-7 for one snapshot (16 replies), or 8 for all snapshots (128 replies).
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-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.
Public mask: The firmware accepts and returns only bits 0-5 through this command. Bits 6-7 are 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.

0x00 - KNOB_COLOR (report)

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.

F0 00 04 58 65 14 00 [BANK] [SNAPSHOT] [POT] [COLOR_INDEX] F7
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, 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.

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: 10.

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.

Auto Morph Notes

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

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 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

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.
Morph settings layout: While the on-device morph settings layout is open, bank notes, snapshot notes, knob state notes, and pitch bend morph input are ignored. Auto morph notes close the layout and run normally.

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.

E0-E7 [VALUE_LSB] [VALUE_MSB]
  • 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.
Rate handling: Incoming bend values are coalesced and applied at most once every 10 ms, latest value wins, so dense automation ramps track without lag or backlog. Knobs turned off via knob states do not participate.

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.
  • For 14-bit knobs, CC1 updates the high 7 bits and CC2 updates 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_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 or CCs that collide with navigation notes 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, 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 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

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.

Read All Knob Colors for Bank 0

F0 00 04 58 65 14 0B 00 08 F7

The device replies with 128 KNOB_COLOR messages: 16 knobs across 8 snapshots.

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

Auto Morph to Snapshot 4 at Half Speed

90 34 40

Note 52 with velocity 64 morphs to snapshot 4 over roughly half the configured morph time.

Manual Morph Toward Snapshot 0 with Pitch Bend

E0 00 00 ... E0 00 40 ... E0 7F 7F

A pitch bend ramp on channel 0 from 0 through 8192 (halfway blend) to 16383, which commits snapshot 0.

Request Full Configuration

F0 00 04 58 65 14 7F F7

Questions about the API? Contact support