OXI E16 MIDI controller scene configuration. Use when creating, editing, or analyzing .oxie16 scene files for the OXI E16 controller. Handles MIDI CC, NRPN, and 14-bit mappings for synthesizers and other MIDI gear.
Install
npx skillscat add brentvatne/oxi-e16-config Install via the SkillsCat registry.
OXI E16 Scene Configuration
Create and edit .oxie16 scene files for the OXI E16 MIDI controller.
E16 Overview
The OXI E16 is a compact MIDI parameter controller with:
- 16 push/turn endless encoders with RGB LED rings
- 16 scenes (7 directly accessible from home screen)
- 12 pages per scene, each with 16 control parameters
- 16 presets per scene for storing/recalling knob values
- 192 parameters per scene (12 pages × 16 controls)
- Connectivity: USB-C, TRS MIDI (Type A, 2 out / 1 in), Bluetooth LE
Each encoder can control:
- 2 destination parameters (turn)
- 1 push action
Encoder Behavior
Acceleration Modes (Acc0-Acc4): Turning the encoder faster increases the step size. Higher acceleration levels make fast turns produce larger jumps. Acc0 (mode 3) is the default—smooth and predictable.
Division Modes (Div2, Div4, Div8): Reduce resolution by dividing steps. Useful for coarse control over parameters where fine precision isn't needed.
Large Step Modes (LSp2, LSp4, LSp6): Jump by 2x, 4x, or 6x per click. Use for banded parameters with large "dead zones" where many CC values map to the same output.
Special Turn Action Types
| Type | Description |
|---|---|
| Bipolar | Set bipolar: true on encoder. Displays as -63 to +64 instead of 0-127. Use for pan, tune, and other center-zero parameters. |
| Snapshot | Type 10. Encoder morphs between lower and upper values. Useful for A/B sweeps (e.g., filter closed↔open). |
File Format
Scene files are JSON with this structure.
Title Length Limit
Scene titles truncate to ~7 characters on the E16 display. Use common abbreviations:
| Device | Abbreviation |
|---|---|
| Digitone II | DN2 |
| Digitakt II | DT2 |
| Syntakt | SYN |
| Analog Four | A4 |
| Analog Rytm | AR |
| Octatrack | OT |
| Model:Cycles | MC |
| Model:Samples | MS |
Elektron MIDI Channels
Elektron devices have special MIDI channels (configurable in device settings):
| Channel | Default | Purpose |
|---|---|---|
| Auto Channel | 10 | Controls the currently selected/active track |
| FX Control | 9 | Controls global FX parameters (Delay, Reverb, Chorus) |
| Tracks 1-8 | 1-8 | Individual track control |
Auto Channel is useful for E16 scenes - instead of hardcoding track 1, use the auto channel so the controller follows your track selection on the device.
FX Control Channel controls the master FX block (delay/reverb parameters, not per-track sends). Per-track sends use the track's channel.
Icon Format
Icons are 16×16 1-bit bitmaps stored as exactly 32 bytes (2 bytes per row):
- Byte 0 = pixels 0-7, Byte 1 = pixels 8-15
- Bit 7 = leftmost pixel in each byte (MSB = left)
- Row 0 at bytes 0-1, Row 1 at bytes 2-3, etc.
CRITICAL: Icon must be exactly 32 bytes or the scene will fail to load silently.
Designing Icons
Study the reference icons in references/icons/ (Nikoichu 1-bit Pixel Icons, CC0 licensed).
Key principles for 16×16 1-bit icons:
- Thin strokes (1-2px) — Use 1-2 pixel stroke widths consistently. Avoid chunky 4px blocks.
- Outline over fill — Prefer outlines with internal details over solid fills. ~90% of good icons are outline-dominant.
- Diagonal stepping — 45° diagonals step 1:1 (one right, one down). Shallower angles use 2:1. This creates optical smoothness.
- Single-pixel endpoints — Arrows, points, lightning, and tapered shapes terminate in single pixels.
- Fill the space — Use 12-14 of the 16 rows; leave 1-2 rows margin on each side.
- Center if not filling — If the icon doesn't fill the full 16×16, center it both vertically and horizontally.
- Negative space is design — Empty areas define shapes as much as filled pixels. Don't over-fill.
- Minimal detail — Include only features that aid recognition. Suggest complexity through pattern, not detail.
- Clear silhouette — The icon should be recognizable even if filled solid.
- Symbolic over text — Abstract symbols read better than tiny text at this size.
Design process:
- Study similar icons in
references/icons/Sprites/for technique - Sketch on 16×16 grid, starting with essential silhouette
- Use 1-2px outlines, not solid fills
- Apply diagonal stepping for angled lines
- Taper points to single pixels
- Remove any detail that doesn't improve recognition
Previewing icons in terminal:
Use double-width characters for better terminal rendering:
██ = on pixel (two full blocks)
░░ = off pixel (two light shade blocks)Example (vinyl disc icon):
░░░░░░░░░░░░░░██████░░░░░░░░░░░░
░░░░░░░░░░██████████████░░░░░░░░
░░░░░░░░████████████████░░░░░░░░
░░░░░░██████████████████████░░░░
░░░░████████░░░░░░░░████████░░░░
░░░░██████░░░░░░░░░░░░██████░░░░
░░░░████████░░░░████░░████████░░
░░░░██████░░████████░░░░██████░░
░░░░██████░░████████░░░░██████░░
░░░░████████░░░░████░░████████░░
░░░░██████░░░░░░░░░░░░░░██████░░
░░░░████████░░░░░░░░████████░░░░
░░░░░░██████████████████████░░░░
░░░░░░░░████████████████░░░░░░░░
░░░░░░░░░░██████████████░░░░░░░░
░░░░░░░░░░░░░░██████░░░░░░░░░░░░Each row is 32 characters wide (16 pixels × 2 chars each).
To convert ASCII art to bytes:
Row: ##....## ........
││ ││ ││││││││
Byte 0 Byte 1
##....## = 11000011 = 195 (0xC3)
........ = 00000000 = 0 (0x00)
→ [195, 0]Icon Ideas (Symbolic)
| Device Type | Icon Concept |
|---|---|
| Sampler/Drum machine | Waveform with playhead, sample slice, drum pad grid |
| Synth (mono/poly) | Oscillator waveform, filter sweep, VCO symbol |
| Sequencer | Step grid, play arrow, clock/metronome |
| Effects unit | Delay taps, reverb waves, modulation wave |
| Groovebox | Combined waveform + grid, pattern indicator |
| Sample mangler | Broken/glitched waveform, disc/vinyl, spiral |
Avoid text — Device abbreviations like "DT2" don't read well at 16×16. Use symbolic representations instead.
Waveform & Synth Icon Techniques
See reference icons in references/icons/Sprites/:
Media_Audio_Visualizer_VU_Meters.png— Fader/level meter techniqueSoftware_Options_Settings_Sliders_Knobs_Audio.png— Knob/slider techniqueSoftware_Power_Electricity_Battery_Thunder_Lightning_Bolt_Zap.png— Thin 1-2px lightning
Waveforms: Use 1px strokes. Saw = diagonal ramp + vertical drop. Square = horizontal/vertical steps. Triangle = symmetric diagonals.
Knobs: Circle outline (1px) with position indicator inside.
Faders: Vertical 1px tracks with small handle rectangles at varying heights.
Lightning: Sharp 45° diagonals, sudden angle changes, 1-2px strokes, single-pixel tip.
Example: Sine Wave
[0,0,8,0,20,0,34,0,0,0,65,0,0,0,128,128,0,0,0,65,0,0,0,34,0,20,0,8,0,0,0,0]Example: Device Face (Digitone II style)
[255,255,192,3,222,171,222,3,222,171,192,3,255,255,192,3,219,219,219,219,192,3,219,219,219,219,192,3,255,255,0,0]{
"title": "Scene Name",
"icon": [32 bytes],
"selectedPreset": 0,
"code": {"code": ""},
"pages": [12 pages]
}Page Structure
{
"title": "Page Name",
"output": 0,
"channel": 1,
"encoders": [16 encoders]
}channel: Default MIDI channel for the page (1-16)output: MIDI output (0 = default)
Encoder Structure
{
"name": "Display Name (8 char max)",
"abbr": "Abbr (4 char)",
"color": 0,
"push_action": {...},
"turn_actions": [{primary}, {secondary}],
"bipolar": false
}CRITICAL: Field order matters! The bipolar field must come AFTER turn_actions, not before.
Color Values
10x10 palette (0-99), indexed left-to-right, top-to-bottom:
- Row 0 (0-9): Purple → Deep Blue → Blue → Periwinkle
- Row 1 (10-19): Dark Blue → Blue → Purple-Blue → Lavender
- Row 2 (20-29): Blue-Gray → Slate → Purple-Gray → Light Lavender
- Row 3 (30-39): Olive/Brown → Rust → Orange-Brown → Khaki
- Row 4 (40-49): Olive → Brown → Orange → Salmon → Yellow
- Row 5 (50-59): Red → Crimson → Magenta-Red → Pink → Orange-Red
- Row 6 (60-69): Dark Red → Crimson → Magenta → Purple-Pink → Red
- Row 7 (70-79): Dark Purple → Magenta → Pink-Magenta → Blue-Purple → Cyan
- Row 8 (80-89): Dark Teal → Teal → Cyan → Green-Cyan → Blue-Cyan
- Row 9 (90-99): Dark Green → Green → Lime → Light Green
Color Schemes
IMPORTANT: Ask the user about their color preferences before assigning colors. Different users have different organizational preferences.
Common color coding strategies:
| Strategy | Description | Best For |
|---|---|---|
| By parameter type | Oscillators=blue, Filters=cyan, Envelopes=orange, Effects=purple, Levels=green | Learning a new synth |
| By function | All volumes same color, all pans same, all sends same | Quick visual scanning |
| By page theme | Each page has a distinct color palette | Multi-synth setups |
| By behavior | Bipolar=one color, levels=another, discrete=another | Understanding parameter ranges |
| By importance | Frequently-tweaked params bright, others muted | Live performance |
| Uniform | All same color (0), rely on display text | Minimal distraction |
Suggested palette for "by parameter type":
| Category | Color | Value |
|---|---|---|
| Oscillators | Blue | 4-6 |
| Filters | Cyan/Teal | 83-85 |
| Filter Envelopes | Orange | 45-47 |
| Amp Envelopes | Salmon/Pink | 48-57 |
| LFOs/Modulation | Magenta | 73-75 |
| Effects (Delay/Reverb) | Purple | 0, 70-72 |
| Chorus | Light Purple | 17-19 |
| Levels/Volume | Green | 92-94 |
| Pan/Stereo | Lavender | 7-9 |
| Sends | Brown/Rust | 32-35 |
| Bit Crush/SRR | Red | 50-52 |
| Overdrive | Dark Red | 60-62 |
When creating a scene, ask the user:
- "Do you want color-coded encoders? If so, which strategy?"
- "Any specific colors for certain parameter types?"
- "Should each page have a distinct color theme?"
Turn Action (MIDI Mapping)
CRITICAL: All action objects (push_action, turn_actions[0], turn_actions[1]) must include ALL fields. Do NOT use shorthand like {"type": 0} — the app will fail to load the scene silently.
{
"instrument": 127,
"parameter": 0,
"type": 9,
"display": 10,
"mode": 3,
"channel": 0,
"lower": 0,
"upper": 127,
"defaultValue": 0,
"nr1": 73,
"nr2": 1,
"output": 12
}Disabled action template (use this instead of {"type": 0}):
{
"instrument": 127,
"parameter": 0,
"type": 0,
"display": 0,
"mode": 0,
"channel": 0,
"lower": 0,
"upper": 127,
"defaultValue": 0,
"nr1": 0,
"nr2": 0,
"output": 12
}Type Values
| Type | Mode |
|---|---|
| 0 | OFF (disabled) |
| 1 | CC Rel 1 (relative) |
| 2 | CC Rel 2 (relative) |
| 3 | CC Abs (absolute) |
| 4 | CC14 (14-bit high res) |
| 5 | PC (Program Change) |
| 6 | PB (Pitch Bend) |
| 7 | AT (Aftertouch) |
| 8 | NOTE |
| 9 | NRPN |
| 10 | SNAPSHOT |
CC14 (14-bit CC)
Type 4 sends 14-bit high-resolution CC using paired CC numbers:
- MSB (coarse): CC 0-31
- LSB (fine): CC 32-63 (automatically MSB + 32)
Set nr1 to the MSB CC number. The E16 automatically sends both MSB and LSB for 16,384 steps of resolution.
Use CC14 for:
- Filter frequency sweeps
- Fine pitch control
- Any parameter where 128 steps feels "steppy"
Note: The receiving device must support 14-bit CC. Check the device's MIDI implementation.
CC Relative Modes (Rel1/Rel2)
Types 1 and 2 send relative CC messages for endless encoder behavior:
| Type | Mode | Increment | Decrement |
|---|---|---|---|
| 1 | Rel 1 | 65-127 | 1-63 |
| 2 | Rel 2 | 1-63 | 65-127 |
Use relative CC when:
- The receiving software tracks its own parameter state
- You want "pickup-free" control (no jumps when touching a knob)
- The device expects relative input (some DAWs, software synths)
Note: Most hardware synths expect absolute CC. Use CC Abs (type 3) for Elektron devices.
NRPN Fields
nr1: LSB (CC#98 value)nr2: MSB (CC#99 value)
Example: NRPN MSB 1, LSB 73 → nr1: 73, nr2: 1
CC Fields
nr1: CC number (0-127)nr2: 0 (unused)
Other Fields
| Field | Value | Meaning |
|---|---|---|
channel |
0 | Use page channel |
channel |
1-16 | Override to specific channel |
lower |
0 | Minimum value |
upper |
127 | Maximum value (7-bit) |
upper |
16383 | Maximum value (14-bit) |
display |
10 | Standard display |
mode |
0-10 | See Mode Values below |
output |
12 | Page (inherit from page) |
Mode Values
| Mode | Name | Description |
|---|---|---|
| 0 | Div8 | Divide resolution by 8 (coarse steps) |
| 1 | Div4 | Divide resolution by 4 |
| 2 | Div2 | Divide resolution by 2 |
| 3 | Acc0 | Acceleration level 0 (default, smooth) |
| 4 | Acc1 | Acceleration level 1 |
| 5 | Acc2 | Acceleration level 2 |
| 6 | Acc3 | Acceleration level 3 |
| 7 | Acc4 | Acceleration level 4 (fastest) |
| 8 | LSp2 | Large step mode (2x) |
| 9 | LSp4 | Large step mode (4x) |
| 10 | LSp6 | Large step mode (6x) |
Mode 3 (Acc0) is the default for most parameters. Use LSp modes for parameters with large "dead zones" (see Banded Parameters below).
| instrument | 127 | Generic/custom |
Output Values
| Output | Value |
|---|---|
| ALL | 0 |
| TRS1 | 1 |
| TRS2 | 2 (likely) |
| USB1 | 3 (likely) |
| USB2 | 4 (likely) |
| USB3 | 5 |
| BLE | 6 |
| Page | 12 |
| ALL -BLE | 13 |
| ALL -USB | 14 |
Display Values
| Display | Value | Description |
|---|---|---|
| OFF | 0 | No value displayed |
| 127 | 1 | Show 0-127 range |
| 100 | 2 | Show 0-100 range (percentage) |
| 1000 | 3 | Show 0-1000 range |
| B63 | 4 | Bipolar -63 to +64 |
| B50 | 5 | Bipolar -50 to +50 |
| B500 | 6 | Bipolar -500 to +500 |
| On/Off | 7 | Toggle display |
| 9999 | 8 | Show 0-9999 range |
| Standard | 10 | Default display |
| High Res | 11 | 14-bit display (0-16383) |
B63 is ideal for bipolar CC parameters (like pan, tune) where 64 = center.
B500 is useful for 14-bit bipolar parameters.
Push Action (Encoder Press)
Same structure as turn_action but different type values. Note: push_action does NOT have defaultValue field.
Disabled push_action template:
{
"instrument": 127,
"parameter": 0,
"type": 0,
"display": 0,
"mode": 0,
"channel": 0,
"lower": 0,
"upper": 127,
"nr1": 0,
"nr2": 0,
"output": 12
}| Type | Push Action |
|---|---|
| 0 | Off |
| 1 | Note |
| 2 | CC |
| 3 | PC (Program Change) |
| 4 | Set to Default |
| 5 | AT (Aftertouch) |
| 6 | Page |
| 7 | Record |
| 8 | Play/Pause Rec |
Creating a Scene
- Start with the base structure (12 pages, 16 encoders each)
- Set page titles and channels
- Configure each encoder's turn_actions[0] for primary mapping
- For unused actions, use the full disabled action template (type: 0 with all fields)
- Ensure field order in encoders: name, abbr, color, push_action, turn_actions, bipolar
- Save as minified single-line JSON with
.oxie16extension
Common mistakes that cause silent load failures:
- Using shorthand
{"type": 0}instead of full action objects - Wrong field order in encoder objects
- Missing required fields in any action object
Scene Generator
Use generate-scene.js to create valid .oxie16 files from compact input:
node generate-scene.js input.json output.oxie16Input Format
Encoders use object format:
{"abbr": "FREQ", "name": "Flt Freq", "cc": 16}
{"abbr": "PAN", "name": "Pan", "cc": 89, "default": 64, "bipolar": true}
{"abbr": "TUNE", "name": "Tune", "cc": 40, "default": 64, "bipolar": true}
{"abbr": "DELT", "name": "Del Time", "cc": 21, "channel": 9}
{"abbr": "MUL1", "name": "LF1 Mult", "cc": 103, "upper": 23}
{"abbr": "ALGO", "name": "Algorith", "cc": 40, "upper": 7}
{"abbr": "VOL", "name": "Volume", "cc": 89, "default": 100}Encoder fields:
abbr- 4-char abbreviation (required)name- Display name, max 8 chars (required)cc- CC number for CC modemsb,lsb- NRPN address for NRPN modechannel- Override page channel (optional)default- Reset value when pressed (optional, default 0)lower,upper- Value range (optional, default 0-127)mode- Encoder mode 0-10 (optional, default 3/Acc0). Use 10 (LSp6) for banded parametersbipolar- Settruefor center-zero display (-63 to +64). Use for Pan, Tune, etc.
Default Values
The default field sets the value sent when the encoder is pressed (via "Set to Default" push action). Use this for:
Bipolar parameters (center = neutral): "default": 64
- Tune/Pitch (64 = 0 semitones)
- Pan (64 = center)
- Filter Envelope depth (64 = 0)
- Oscillator Mix (64 = equal blend)
- Detune, Drift, Linear offset, Harmonics
Level/Mix parameters: Check device - not always 100 or 127!
- Volume, Track Level: often 100
- Mix parameters: may be 127 (full wet/blend)
- Some levels default to specific values (e.g., 80)
Device-specific defaults: Many parameters have non-obvious defaults
- Example: DN2 Swarmer Animation = 15, Noise Mod = 20
- Example: DN2 Waves = 80 (on 0-120 range)
- Always verify with the actual device when uncertain
FX-specific defaults (Elektron reverb example):
- Pre-delay:
"default": 16 - Decay:
"default": 32 - HPF:
"default": 32 - Shelf Freq:
"default": 64 - Shelf Gain:
"default": 50
Discrete parameters: Usually no default needed (or "default": 0)
Finding default values: Check the instrument's .oxiindef file and companion .mdx file if available. The .mdx file contains additional default values, discrete ranges, and notes not captured in the .oxiindef. Otherwise, look at the device itself - most synths show parameter values on screen when you initialize a patch or reset a parameter.
IMPORTANT: Verify bipolar parameters before setting defaults. Not all parameters with "center" behavior are bipolar. Before assuming a parameter should default to 64:
- Check the .mdx file - contains documented defaults and discrete ranges
- Check the .oxiindef file - look for
default_valuefield - Search the web for the device's MIDI implementation or manual
- Ask the user if you're uncertain - they can check their device directly
Common mistakes to avoid:
- Assuming all "offset" or "detune" parameters are bipolar (some start at 0)
- Assuming envelope depths are always bipolar (varies by device)
- Setting default=64 on parameters that are actually unipolar
When in doubt, ask the user to check their device - they can initialize a patch and see what value the parameter shows.
Discrete Value Ranges
For parameters with discrete values (not continuous 0-127), set the upper field to limit the range:
{"abbr": "OMOD", "name": "Osc Mod", "cc": 50, "upper": 3}
{"abbr": "ALGO", "name": "Algorith", "cc": 40, "upper": 7}
{"abbr": "WAV1", "name": "LF1 Wav", "cc": 106, "upper": 6}Common discrete parameters (Elektron):
| Parameter | Values | Upper |
|---|---|---|
| Osc Mod | 4 (off, ring mod, ring mod fixed, hard sync) | 3 |
| Wave table select | 2 (prim, harm) | 1 |
| FM Algorithm | 8 | 7 |
| FM Drum Algorithm | 7 | 6 |
| Filter Type | 3 | 2 |
| LFO Waveform | 7 | 6 |
| LFO Multiplier | 24 | 23 |
| LFO Trig Mode | 5 | 4 |
| Play Mode | 4 | 3 |
| Amp Mode | 2 (on/off) | 1 |
| Env Reset | 2 (on/off) | 1 |
| Routing toggles | 2 (on/off) | 1 |
| PingPong | 2 (on/off) | 1 |
Finding discrete ranges: First check the instrument's .mdx file for documented discrete values. Then check the .oxiindef file's maximum field for each parameter. If not available, refer to the device's MIDI implementation chart or count the options in the device's menu.
Why this matters: Without proper upper limits, turning the encoder past the last valid value has no effect - the parameter stays at its maximum. Setting upper correctly makes the encoder feel responsive across its full range
Banded Parameter Limitation
Some synth parameters interpret CC values in non-linear bands rather than continuously. The E16 can only send linear CC values, so these parameters feel unresponsive through most of the encoder's range.
Example: Digitone II Main Octave (CC 44)
| CC Range | Octave Value |
|---|---|
| 127 | 0 |
| 65-126 | -1 |
| 0-64 | -2 |
The encoder turns through 62 values (127→65) with no visible change, then suddenly jumps to -1 octave. This is a synth limitation, not an E16 issue—the E16 has no way to map specific CC values to encoder positions.
Workaround: Use LSp6 mode (mode 10) to step through banded ranges faster. This doesn't fix the fundamental limitation but makes navigation less tedious.
{"abbr": "MOCT", "name": "Main Oct", "cc": 44, "default": 127, "mode": 10}Affected parameters (Digitone II):
- Main Octave (CC 44) — 3 bands for -2, -1, 0 octaves
Scene fields:
instrument- Path to.oxiindeffile for parameter reference (used for verifying CCs, finding discrete value ranges, and default value lookup). Also check the companion.mdxfile with the same name for additional documentation on defaults and discrete values
Page fields:
type-"cc"or"nrpn"(default: cc)channel- MIDI channel 1-16
Features:
- Push action: All encoders use "Set to Default" (type 4) - press to reset
- Instrument lookup: If
instrumentspecified, defaults are loaded from.oxiindef - Empty encoders auto-padded to 16 per page, 12 pages total
References
generate-scene.js— Scene generator (compact JSON → .oxie16)references/scene-schema.json— Full JSON Schema for validationreferences/scene-template.json— Minimal starting template
Finding MIDI Parameters
Use midi.guide to find CC and NRPN values for any device:
For each parameter, midi.guide lists:
- CC MSB — Use with
type: 3(CC Abs) in the scene, setnr1to this value - NRPN MSB/LSB — Use with
type: 9(NRPN), setnr2= MSB,nr1= LSB
GitHub CSV source: https://github.com/pencilresearch/midi — Raw parameter data for many devices.
Choosing CC vs NRPN
| Type | Resolution | When to Use |
|---|---|---|
| CC (type 3) | 7-bit (0-127) | Recommended. Simple, reliable, widely compatible |
| NRPN (type 9) | 14-bit (0-16383) | High resolution, but may have issues (see below) |
Recommendation: Start with CC mode. Most Elektron parameters support both CC and NRPN. While NRPN provides finer control (16,384 steps vs 128), CC is more reliable.
Known NRPN Issues
NRPN requires a 4-message sequence (CC99 → CC98 → CC6 → CC38). This can cause problems:
| Symptom | Likely Cause |
|---|---|
| Parameter jumps erratically | CC38 (Data Entry LSB) bug in Elektron firmware |
| Value snaps to minimum/maximum | Message timing or ordering issues |
| Wrong parameter changes | NRPN address corruption |
| Intermittent response | NRPN null sequence (127,127) mishandled |
Elektron firmware bug: There's a confirmed bug where CC38 (Data Entry LSB) doesn't function correctly on some Elektron devices, causing erratic behavior when using NRPN.
When CC Precision is Sufficient
7-bit CC (128 steps) is adequate for most parameters:
- ✓ Oscillator waveforms, algorithms
- ✓ Envelope times (attack, decay, release)
- ✓ Effect sends, levels, pan
- ✓ LFO speed, depth, waveform
Where you might notice stepping with CC:
- Filter frequency (long sweeps)
- Fine pitch/detune adjustments
- Very slow parameter automation
If NRPN issues occur: Switch to CC mode by adding "type": "cc" to your page definition.
Elektron Abbreviation Conventions
Elektron devices use UPPERCASE 4-character abbreviations. Follow these conventions for consistency:
Standard Parameters
| Parameter | Abbreviation |
|---|---|
| Tune | TUNE |
| Wave | WAV (or WAV1/WAV2) |
| Level | LEV (or LEV1/LEV2) |
| Frequency | FREQ |
| Resonance | RESO |
| Type | TYPE |
| Pan | PAN |
| Volume | VOL |
| Mix | MIX |
Envelopes (ADSR/AHDR)
| Parameter | Filter | Amp |
|---|---|---|
| Attack | FATK | AATK |
| Decay | FDEC | ADEC |
| Sustain | FSUS | — |
| Hold | — | AHLD |
| Release | FREL | AREL |
| Env Depth | FENV | — |
Effects
| Effect | Send | Time | Feedback | Mix | Other |
|---|---|---|---|---|---|
| Delay | DEL | DELT | DELF | DELM | — |
| Reverb | REV | — | — | REVM | REVP (PreDly), REVD (Decay) |
| Chorus | CHR | — | — | CHRM | CHRD (Depth), CHRS (Speed) |
| Overdrive | OVER | — | — | — | — |
| Bit Reduce | BR | — | — | — | — |
| Sample Rate | SRR | — | — | — | — |
Numbered Parameters
Put numbers at the end, not the start:
TUN1,TUN2(not1TUN)WAV1,WAV2LEV1,LEV2LIN1,LIN2OFS1,OFS2(offset)TBL1,TBL2(wavetable)
LFO Parameters
| LFO 1 | LFO 2 | Parameter |
|---|---|---|
| SPD1 | SPD2 | Speed |
| MUL1 | MUL2 | Multiplier |
| FAD1 | FAD2 | Fade |
| DST1 | DST2 | Destination |
| WAV1 | WAV2 | Waveform |
| PHS1 | PHS2 | Phase |
| TRG1 | TRG2 | Trigger |
| DPT1 | DPT2 | Depth |
Other Common
| Parameter | Abbreviation |
|---|---|
| Algorithm | ALGO |
| Harmonic | HARM |
| Detune | DETN |
| Feedback | FDBK |
| Drift | DRIF |
| Mode | MODE |
| Reset | RSET |
| Track Level | TLEV |
| Pattern Volume | PVOL |
Example: Elektron Digitone II
Look up values at midi.guide/d/elektron/digitone-ii or the GitHub CSV.
CC mode (recommended):
- Use
"type": "cc"on the page - Array format:
[abbr, name, cc, channel?] - Example:
["TUN1", "Osc1 Tune", 40] - Reliable, no known issues
NRPN mode (use with caution):
- Use
"type": "nrpn"on the page (or omit, it's the default) - Array format:
[abbr, name, msb, lsb, channel?] - Example:
["TUN1", "Osc1 Tune", 1, 73] - May cause erratic behavior due to firmware bugs (see above)
- Not all parameters support NRPN — check midi.guide for availability
- Example: Osc1 Tune →
nr1: 40, nr2: 0
Channel setup:
- Set page
channelto auto channel (default 10) or specific track (1-8) - Use
channel: 9override for master FX parameters (delay/reverb/chorus)
Sample page layout for Wavetone engine:
TUN1 WAV1 PD1 LEV1
TUN2 WAV2 PD2 LEV2
LIN1 LIN2 OMOD DRIF
NATK NDEC NLEV NCHR