Skip to content

Plinky 12: MIDI CC, NRPN and OSC map

The Plinky 12 as named OSC addresses — 70 CC, 16 NRPN — ready to use from Claude (MCP), SuperCollider, Sonic Pi, TouchDesigner or any OSC app via osc-bridge.

Device Plinky 12
Vendor Plinky
OSC prefix /plinky_12
Source 📦 Derived from MIDI Guide (community CC/NRPN data)
Firmware unknown
Revision per pencilresearch canonical CSV
Upstream pencilresearch
Data licence CC-BY-SA-4.0 — MIDI Guide (https://midi.guide) by Pencil Research and contributors
Driver file devices/plinky/plinky_12.pencilresearch.fw-unknown.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/plinky/plinky_12.pencilresearch.fw-unknown.json --out-port <N> --in-port <M>

Then send OSC to 127.0.0.1:7777, for example:

osc-bridge osc-send /plinky_12/xy_pad/x_position 63

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

MIDI CC and NRPN parameters (86)

OSC address CC NRPN (MSB/LSB) Range Nature Section
/plinky_12/xy_pad/x_position 1 0–127 continuous XY pad
/plinky_12/xy_pad/y_position 2 0–127 continuous XY pad
/plinky_12/filter/high_pass_cutoff 16 0–127 continuous Filter
/plinky_12/filter/low_pass_cutoff 17 0–127 continuous Filter
/plinky_12/filter/resonance 18 0–127 continuous Filter
/plinky_12/envelope/attack 19 0–127 continuous Envelope
/plinky_12/envelope/decay 20 0–127 continuous Envelope
/plinky_12/envelope/sustain 21 0–127 continuous Envelope
/plinky_12/envelope/release 22 0–127 continuous Envelope
/plinky_12/pitch/glide 23 0–127 continuous Pitch
/plinky_12/pitch/pitch 24 0–127 continuous Pitch
/plinky_12/pitch/octave 25 0–127 continuous Pitch
/plinky_12/sound/sub_oscillator_noise 26 0–127 continuous Sound
/plinky_12/sound/wavefold_saturation 27 0–127 continuous Sound
/plinky_12/voice_mix/stereo_spread 28 0–127 continuous Voice mix
/plinky_12/voice_mix/delay_send 29 0–127 continuous Voice mix
/plinky_12/voice_mix/reverb_send 30 0–127 continuous Voice mix
/plinky_12/voice_mix/toad_factor 31 0–127 continuous Voice mix
/plinky_12/voice_mix/volume 32 0–127 continuous Voice mix
/plinky_12/sound/timestretch 33 0–127 continuous Sound
/plinky_12/sound/sample_start 34 0–127 continuous Sound
/plinky_12/sound/sample_length 35 0–127 continuous Sound
/plinky_12/sound/chorus_wobble 36 0–127 continuous Sound
/plinky_12/voice_mix/sidechain_amount 37 0–127 continuous Voice mix
/plinky_12/random_range/high_pass_cutoff_range 44 0–127 continuous Random range
/plinky_12/random_range/low_pass_cutoff_range 45 0–127 continuous Random range
/plinky_12/random_range/resonance_range 46 0–127 continuous Random range
/plinky_12/random_range/attack_range 47 0–127 continuous Random range
/plinky_12/random_range/decay_range 48 0–127 continuous Random range
/plinky_12/random_range/sustain_range 49 0–127 continuous Random range
/plinky_12/random_range/release_range 50 0–127 continuous Random range
/plinky_12/random_range/glide_range 51 0–127 continuous Random range
/plinky_12/random_range/pitch_range 52 0–127 continuous Random range
/plinky_12/random_range/octave_range 53 0–127 continuous Random range
/plinky_12/random_range/sub_oscillator_noise_range 54 0–127 continuous Random range
/plinky_12/random_range/wavefold_saturation_range 55 0–127 continuous Random range
/plinky_12/random_range/stereo_spread_range 56 0–127 continuous Random range
/plinky_12/random_range/delay_send_range 57 0–127 continuous Random range
/plinky_12/random_range/reverb_send_range 58 0–127 continuous Random range
/plinky_12/random_range/toad_factor_range 59 0–127 continuous Random range
/plinky_12/random_range/volume_range 60 0–127 continuous Random range
/plinky_12/random_range/timestretch_range 61 0–127 continuous Random range
/plinky_12/random_range/sample_start_range 62 0–127 continuous Random range
/plinky_12/random_range/sample_length_range 63 0–127 continuous Random range
/plinky_12/random_range/chorus_wobble_range 64 0–127 continuous Random range
/plinky_12/random_range/sidechain_amount_range 65 0–127 continuous Random range
/plinky_12/mix/bass_eq_compressor 16 0–127 continuous Mix
/plinky_12/mix/mid_eq_compressor 17 0–127 continuous Mix
/plinky_12/mix/treble_eq_compressor 18 0–127 continuous Mix
/plinky_12/mix/tape_dry 19 0–127 continuous Mix
/plinky_12/mix/audio_in_dry 20 0–127 continuous Mix
/plinky_12/mix/tape_delay_send 21 0–127 continuous Mix
/plinky_12/mix/tape_reverb_send 22 0–127 continuous Mix
/plinky_12/mix/audio_in_delay_send 23 0–127 continuous Mix
/plinky_12/mix/audio_in_reverb_send 24 0–127 continuous Mix
/plinky_12/mix/reverb_shimmer 25 0–127 continuous Mix
/plinky_12/mix/reverb_feedback 26 0–127 continuous Mix
/plinky_12/mix/delay_time 27 0–127 continuous Mix
/plinky_12/mix/delay_feedback 28 0–127 continuous Mix
/plinky_12/mix/reverb_return 29 0–127 continuous Mix
/plinky_12/mix/delay_return 30 0–127 continuous Mix
/plinky_12/mix/output_level 31 0–127 continuous Mix
/plinky_12/mix/audio_in_sidechain 32 0–127 continuous Mix
/plinky_12/mix/reverb_sidechain 33 0–127 continuous Mix
/plinky_12/mix/delay_sidechain 34 0–127 continuous Mix
/plinky_12/mix_random_range/bass_eq_compressor_range 44 0–127 continuous Mix random range
/plinky_12/mix_random_range/mid_eq_compressor_range 45 0–127 continuous Mix random range
/plinky_12/mix_random_range/treble_eq_compressor_range 46 0–127 continuous Mix random range
/plinky_12/mix_random_range/tape_dry_range 47 0–127 continuous Mix random range
/plinky_12/mix_random_range/audio_in_dry_range 48 0–127 continuous Mix random range
/plinky_12/global/tempo 11 / 120 0–16383 continuous Global
/plinky_12/global/raw_xy_position_x 32 / 4 0–127 continuous Global
/plinky_12/global/raw_xy_position_y 32 / 5 0–127 continuous Global
/plinky_12/global/state_dump_request 32 / 104 0–127 continuous Global
/plinky_12/global/panel_page_select 34 / 48 0–127 continuous Global
/plinky_12/musical_state/key_root 33 / 76 0–127 continuous Musical state
/plinky_12/musical_state/scale_mask 33 / 77 0–4095 continuous Musical state
/plinky_12/musical_state/chord_root 33 / 78 0–127 continuous Musical state
/plinky_12/musical_state/chord_note_mask 33 / 79 0–4095 continuous Musical state
/plinky_12/musical_state/chord_scale_mask 33 / 80 0–4095 continuous Musical state
/plinky_12/musical_state/voicing_note_1 33 / 81 0–127 continuous Musical state
/plinky_12/musical_state/voicing_note_2 33 / 82 0–127 continuous Musical state
/plinky_12/musical_state/voicing_note_3 33 / 83 0–127 continuous Musical state
/plinky_12/musical_state/voicing_note_4 33 / 84 0–127 continuous Musical state
/plinky_12/musical_state/voicing_note_5 33 / 85 0–127 continuous Musical state
/plinky_12/musical_state/voicing_note_6 33 / 86 0–127 continuous Musical state

Performance MIDI

Notes, pitch bend and any CC are also available: /plinky_12/note/on <note> <velocity>, /plinky_12/cc/<number> <value>, /plinky_12/pitchbend <0-16383>, /plinky_12/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.