Skip to content

Teenage Engineering OP-XY: MIDI CC, NRPN and OSC map

The Teenage Engineering OP-XY as named OSC addresses — 343 CC — ready to use from Claude (MCP), SuperCollider, Sonic Pi, TouchDesigner or any OSC app via osc-bridge.

Device Teenage Engineering OP-XY
Vendor Teenage Engineering
OSC prefix /op_xy
Source 🎛️ Derived from an Electra One community preset
Revision per pencilresearch canonical CSV
Upstream electra-preset
Driver file devices/teenage-engineering/op_xy.json

Not tested on the device yet

This driver comes from documentation or community data and has not been checked on real hardware. If you own one, a quick test and a pull request promoting it helps everyone — see CONTRIBUTING.

How do you control it?

Find the MIDI ports, then start the bridge with this driver:

osc-bridge detect        # prints the ready-to-run line for what is plugged in
osc-bridge run --device devices/teenage-engineering/op_xy.json --out-port <N> --in-port <M>

Then send OSC to 127.0.0.1:7777, for example:

osc-bridge osc-send /op_xy/track/volume 63

From Claude or any MCP client, the osc-bridge mcp server exposes this driver as op_xy: ask “what can the Teenage Engineering OP-XY do?” and it reads this map with list_routes. See the MCP guide.

MIDI CC and NRPN parameters (343)

OSC address CC NRPN (MSB/LSB) Range Nature Section
/op_xy/track/volume 7 0–127 continuous Track
/op_xy/track/mute 9 0–127 continuous Track
/op_xy/track/pan 10 0–127 continuous Track
/op_xy/track/parameter_1 12 0–127 continuous Track
/op_xy/track/parameter_2 13 0–127 continuous Track
/op_xy/track/parameter_3 14 0–127 continuous Track
/op_xy/track/parameter_4 15 0–127 continuous Track
/op_xy/track/parameters 46 0–127 continuous Track
/op_xy/track/select 102 0–15 continuous Track
/op_xy/envelope/amp_attack 20 0–127 continuous Envelope
/op_xy/envelope/amp_decay 21 0–127 continuous Envelope
/op_xy/envelope/amp_sustain 22 0–127 continuous Envelope
/op_xy/envelope/amp_release 23 0–127 continuous Envelope
/op_xy/envelope/filter_attack 24 0–127 continuous Envelope
/op_xy/envelope/filter_decay 25 0–127 continuous Envelope
/op_xy/envelope/filter_sustain 26 0–127 continuous Envelope
/op_xy/envelope/filter_release 27 0–127 continuous Envelope
/op_xy/envelope/poly_mode 28 0–127 continuous Envelope
/op_xy/envelope/portamento 29 0–127 continuous Envelope
/op_xy/envelope/pitch_bend_range 30 0–127 continuous Envelope
/op_xy/envelope/engine_volume 31 0–127 continuous Envelope
/op_xy/filter/cutoff 32 0–127 continuous Filter
/op_xy/filter/resonance 33 0–127 continuous Filter
/op_xy/filter/envelope_amount 34 0–127 continuous Filter
/op_xy/filter/key_tracking 35 0–127 continuous Filter
/op_xy/filter/send_to_external 36 0–127 continuous Filter
/op_xy/filter/send_to_tape 37 0–127 continuous Filter
/op_xy/filter/send_to_fx_i 38 0–127 continuous Filter
/op_xy/filter/send_to_fx_ii 39 0–127 continuous Filter
/op_xy/lfo/parameter_1 40 0–127 continuous LFO
/op_xy/lfo/parameter_2 41 0–127 continuous LFO
/op_xy/lfo/parameter_3 42 0–127 continuous LFO
/op_xy/lfo/parameter_4 43 0–127 continuous LFO
/op_xy/global/tempo 80 0–127 continuous Global
/op_xy/global/groove 81 0–127 continuous Global
/op_xy/global/scene_delayed_change 82 0–98 continuous Global
/op_xy/global/previous_scene 83 0–127 continuous Global
/op_xy/global/next_scene 84 0–127 continuous Global
/op_xy/global/scene 85 0–98 continuous Global
/op_xy/global/project 86 0–127 continuous Global
/op_xy/global/eq 90 0–127 continuous Global
/op_xy/transport/play 104 0–127 continuous Transport
/op_xy/transport/stop 105 0–127 continuous Transport
/op_xy/transport/view_tempo_page 107 0–127 continuous Transport
/op_xy/aux_cv_out/hp_cutoff 32 0–127 continuous Aux - CV Out
/op_xy/aux_cv_out/lp_cutoff 35 0–127 continuous Aux - CV Out
/op_xy/aux_cv_out/send_to_tape 37 0–127 continuous Aux - CV Out
/op_xy/aux_cv_out/send_to_fx_i 38 0–127 continuous Aux - CV Out
/op_xy/aux_cv_out/send_to_fx_ii 39 0–127 continuous Aux - CV Out
/op_xy/aux_audio_in/hp_cutoff 32 0–127 continuous Aux - Audio In
/op_xy/aux_audio_in/lp_cutoff 35 0–127 continuous Aux - Audio In
/op_xy/aux_audio_in/send_to_fx_i 38 0–127 continuous Aux - Audio In
/op_xy/aux_audio_in/send_to_fx_ii 39 0–127 continuous Aux - Audio In
/op_xy/aux_tape/hp_cutoff 32 0–127 continuous Aux - Tape
/op_xy/aux_tape/lp_cutoff 35 0–127 continuous Aux - Tape
/op_xy/aux_tape/send_to_fx_i 38 0–127 continuous Aux - Tape
/op_xy/aux_tape/send_to_fx_ii 39 0–127 continuous Aux - Tape
/op_xy/aux_fx_1/hp_cutoff 32 0–127 continuous Aux - FX 1
/op_xy/aux_fx_1/lp_cutoff 35 0–127 continuous Aux - FX 1
/op_xy/aux_fx_1/send_to_fx_ii 39 0–127 continuous Aux - FX 1
/op_xy/aux_fx_2/hp_cutoff 32 0–127 continuous Aux - FX 2
/op_xy/aux_fx_2/lp_cutoff 35 0–127 continuous Aux - FX 2
/op_xy/play 104 0–127 continuous
/op_xy/stop 105 0–127 continuous
/op_xy/record 106 0–127 continuous
/op_xy/project 86 0–99 continuous
/op_xy/scene 85 0–16 continuous
/op_xy/active_track 102 0–15 continuous
/op_xy/mutes/kick 10 0–127 continuous mutes
/op_xy/mutes/kick 9 0–127 continuous mutes
/op_xy/snare 9 0–127 continuous
/op_xy/hats 9 0–127 continuous
/op_xy/sample 9 0–127 continuous
/op_xy/bass 10 0–127 continuous
/op_xy/mutes/snare 10 0–127 continuous mutes
/op_xy/bass 9 0–127 continuous
/op_xy/lead 9 0–127 continuous
/op_xy/arp 9 0–127 continuous
/op_xy/chord 9 0–127 continuous
/op_xy/lead 10 0–127 continuous
/op_xy/mutes/hats 10 0–127 continuous mutes
/op_xy/brain 9 0–127 continuous
/op_xy/punch_in 9 0–127 continuous
/op_xy/midi 9 0–127 continuous
/op_xy/cv 9 0–127 continuous
/op_xy/arp 10 0–127 continuous
/op_xy/mutes/sample 10 0–127 continuous mutes
/op_xy/io 9 0–127 continuous
/op_xy/op_z_tape 9 0–127 continuous
/op_xy/op_z_fx1 9 0–127 continuous
/op_xy/opz_fx2 9 0–127 continuous
/op_xy/chord 10 0–127 continuous
/op_xy/kick 7 0–127 continuous
/op_xy/snare 7 0–127 continuous
/op_xy/hats 7 0–127 continuous
/op_xy/sample 7 0–127 continuous
/op_xy/bass 7 0–127 continuous
/op_xy/lead 7 0–127 continuous
/op_xy/arp 7 0–127 continuous
/op_xy/chord 7 0–127 continuous
/op_xy/brain 7 0–127 continuous
/op_xy/punch_in 7 0–127 continuous
/op_xy/io 7 0–127 continuous
/op_xy/tape 7 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/mutes/pan 10 0–127 continuous mutes
/op_xy/groove 81 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/tempo 80 40–220 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/kick 46 0–127 continuous
/op_xy/snare 46 0–127 continuous
/op_xy/hats 46 0–127 continuous
/op_xy/sample 46 0–127 continuous
/op_xy/bass 46 0–127 continuous
/op_xy/lead 46 0–127 continuous
/op_xy/arp 46 0–127 continuous
/op_xy/chord 46 0–127 continuous
/op_xy/brain 46 0–127 continuous
/op_xy/punch_in 46 0–127 continuous
/op_xy/io 46 0–127 continuous
/op_xy/tape 46 0–127 continuous
/op_xy/lo 90 0–127 continuous
/op_xy/mid 90 0–127 continuous
/op_xy/hi 90 0–127 continuous
/op_xy/all 90 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous
/op_xy/param_1_2 12 0–127 continuous
/op_xy/param_1_2 13 0–127 continuous
/op_xy/param_4_5 14 0–127 continuous
/op_xy/param_4_5 15 0–127 continuous
/op_xy/synth 20 0–127 continuous
/op_xy/synth 21 0–127 continuous
/op_xy/synth 22 0–127 continuous
/op_xy/synth 23 0–127 continuous
/op_xy/filter 24 0–127 continuous
/op_xy/filter 25 0–127 continuous
/op_xy/filter 26 0–127 continuous
/op_xy/filter 27 0–127 continuous
/op_xy/voice_type 28 0–127 continuous
/op_xy/pitchbend 30 0–127 continuous
/op_xy/portamento 29 0–127 continuous
/op_xy/lfo_shape 40 0–127 continuous
/op_xy/cutoff 32 0–127 continuous
/op_xy/send_fx1 38 0–127 continuous
/op_xy/send_fx2 39 0–127 continuous
/op_xy/send_tape 37 0–127 continuous
/op_xy/send_io 36 0–127 continuous
/op_xy/lfo_dest 41 0–127 continuous
/op_xy/resonance 33 0–127 continuous
/op_xy/env_amount 34 0–127 continuous
/op_xy/key_tracking 35 0–127 continuous
/op_xy/groove 81 0–127 continuous
/op_xy/engine_volume 31 0–127 continuous

Performance MIDI

Notes, pitch bend and any CC are also available: /op_xy/note/on <note> <velocity>, /op_xy/cc/<number> <value>, /op_xy/pitchbend <0-16383>, /op_xy/program_change <n>.

Limitations

CC/NRPN only. SysEx (preset management, display control, bulk dump/load, vendor-proprietary opcodes) is NOT covered by pencilresearch. To extend this device with SysEx, sniff the vendor editor, add `sysex.header/footer` + `commands` blocks, and use `update_device.md` PR template.