PWM Mantis: MIDI CC, NRPN and OSC map¶
The PWM Mantis as named OSC addresses — 30 CC, 61 NRPN — ready to use from Claude (MCP), SuperCollider, Sonic Pi, TouchDesigner or any OSC app via osc-bridge.
| Device | PWM Mantis |
|---|---|
| Vendor | PWM |
| OSC prefix | /mantis |
| 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/pwm/mantis.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/pwm/mantis.pencilresearch.fw-unknown.json --out-port <N> --in-port <M>
Then send OSC to 127.0.0.1:7777, for example:
From Claude or any MCP client, the osc-bridge mcp server exposes this driver as mantis: ask “what can the PWM Mantis do?” and it reads this map with list_routes. See the MCP guide.
MIDI CC and NRPN parameters (91)¶
| OSC address | CC | NRPN (MSB/LSB) | Range | Nature | Section |
|---|---|---|---|---|---|
/mantis/standard_controls/bank_select |
0 | 0–127 | continuous | Standard controls | |
/mantis/standard_controls/modulation_wheel |
1 | 0–127 | continuous | Standard controls | |
/mantis/standard_controls/expression |
11 | 0–127 | continuous | Standard controls | |
/mantis/standard_controls/sustain_pedal |
64 | 0–127 | continuous | Standard controls | |
/mantis/standard_controls/all_sound_off |
120 | 0–127 | continuous | Standard controls | |
/mantis/standard_controls/local_control |
122 | 0–127 | continuous | Standard controls | |
/mantis/standard_controls/all_notes_off |
123 | 0–127 | continuous | Standard controls | |
/mantis/voicing/mode |
0 / 66 | 0–2 | discrete | Voicing | |
/mantis/voicing/voice_spread |
0 / 51 | 0–127 | continuous | Voicing | |
/mantis/keyboard/octave |
0 / 5 | 60–67 | discrete | Keyboard | |
/mantis/glide/time |
5 | 0–127 | continuous | Glide | |
/mantis/glide/auto |
35 | 0–1 | switch | Glide | |
/mantis/oscillator_1/wave |
0 / 14 | 0–5 | discrete | Oscillator 1 | |
/mantis/oscillator_1/shape |
12 / 44 | 0–16383 | continuous | Oscillator 1 | |
/mantis/oscillator_1/shape_modulation_amount |
0 / 21 | 0–127 | continuous | Oscillator 1 | |
/mantis/oscillator_1/pitch_modulation_amount |
0 / 22 | 0–127 | continuous | Oscillator 1 | |
/mantis/oscillator_1/octave |
0 / 24 | 0–5 | discrete | Oscillator 1 | |
/mantis/oscillator_2/wave |
0 / 23 | 0–5 | discrete | Oscillator 2 | |
/mantis/oscillator_2/shape |
19 / 51 | 0–16383 | continuous | Oscillator 2 | |
/mantis/oscillator_2/shape_modulation_amount |
0 / 30 | 0–127 | continuous | Oscillator 2 | |
/mantis/oscillator_2/pitch_modulation_amount |
0 / 31 | 0–127 | continuous | Oscillator 2 | |
/mantis/oscillator_2/octave |
0 / 32 | 0–5 | discrete | Oscillator 2 | |
/mantis/oscillator_2/semitone |
0 / 28 | 52–76 | discrete | Oscillator 2 | |
/mantis/oscillator_2/cents |
0 / 29 | 0–127 | continuous | Oscillator 2 | |
/mantis/oscillator_2/density |
0 / 26 | 0–127 | continuous | Oscillator 2 | |
/mantis/oscillator_2/density_rate |
0 / 27 | 0–127 | continuous | Oscillator 2 | |
/mantis/oscillators/sub_oscillator |
24 | 0–127 | continuous | Oscillators | |
/mantis/oscillators/oscillator_drift |
0 / 10 | 0–127 | continuous | Oscillators | |
/mantis/mix/oscillator_balance |
23 | 0–127 | continuous | Mix | |
/mantis/mix/noise_balance |
27 | 0–127 | continuous | Mix | |
/mantis/mix/ring_modulation_balance |
26 | 0–127 | continuous | Mix | |
/mantis/mix/oscillator_level_trim |
7 | 0–127 | continuous | Mix | |
/mantis/mix/noise_density |
0 / 123 | 0–127 | continuous | Mix | |
/mantis/filter/cutoff |
74 / 61 | 0–16383 | continuous | Filter | |
/mantis/filter/resonance |
71 | 0–127 | continuous | Filter | |
/mantis/filter/width |
75 | 0–127 | continuous | Filter | |
/mantis/filter/drive |
80 | 0–127 | continuous | Filter | |
/mantis/filter/type |
0 / 46 | 0–7 | discrete | Filter | |
/mantis/filter/keytrack |
0 / 48 | 0–127 | continuous | Filter | |
/mantis/filter/cutoff_modulation_amount |
0 / 49 | 0–127 | continuous | Filter | |
/mantis/filter/width_modulation_amount |
0 / 50 | 0–127 | continuous | Filter | |
/mantis/envelope_1/attack |
82 | 0–127 | continuous | Envelope 1 | |
/mantis/envelope_1/decay |
83 | 0–127 | continuous | Envelope 1 | |
/mantis/envelope_1/sustain |
84 | 0–127 | continuous | Envelope 1 | |
/mantis/envelope_1/release |
85 | 0–127 | continuous | Envelope 1 | |
/mantis/envelope_1/sustain_fall |
0 / 57 | 0–127 | continuous | Envelope 1 | |
/mantis/envelope_1/velocity |
0 / 55 | 0–127 | continuous | Envelope 1 | |
/mantis/envelope_1/repeat |
0 / 25 | 0–1 | switch | Envelope 1 | |
/mantis/envelope_1/legato |
0 / 56 | 0–1 | switch | Envelope 1 | |
/mantis/envelope_2/attack |
86 | 0–127 | continuous | Envelope 2 | |
/mantis/envelope_2/decay |
87 | 0–127 | continuous | Envelope 2 | |
/mantis/envelope_2/sustain |
88 | 0–127 | continuous | Envelope 2 | |
/mantis/envelope_2/release |
89 | 0–127 | continuous | Envelope 2 | |
/mantis/envelope_2/sustain_fall |
0 / 62 | 0–127 | continuous | Envelope 2 | |
/mantis/envelope_2/velocity |
0 / 60 | 0–127 | continuous | Envelope 2 | |
/mantis/envelope_2/repeat |
0 / 33 | 0–1 | switch | Envelope 2 | |
/mantis/envelope_2/legato |
0 / 61 | 0–1 | switch | Envelope 2 | |
/mantis/lfo_1/wave |
0 / 69 | 0–5 | discrete | LFO 1 | |
/mantis/lfo_1/sync_mode |
0 / 68 | 0–2 | discrete | LFO 1 | |
/mantis/lfo_1/rate_sync_off |
0 / 70 | 0–127 | continuous | LFO 1 | |
/mantis/lfo_1/rate_sync_on |
0 / 71 | 0–127 | continuous | LFO 1 | |
/mantis/lfo_1/fade |
0 / 67 | 0–127 | continuous | LFO 1 | |
/mantis/lfo_1/retrigger |
0 / 74 | 0–1 | switch | LFO 1 | |
/mantis/lfo_2/wave |
0 / 78 | 0–5 | discrete | LFO 2 | |
/mantis/lfo_2/sync_mode |
0 / 77 | 0–2 | discrete | LFO 2 | |
/mantis/lfo_2/rate_sync_off |
0 / 79 | 0–127 | continuous | LFO 2 | |
/mantis/lfo_2/rate_sync_on |
0 / 80 | 0–127 | continuous | LFO 2 | |
/mantis/lfo_2/fade |
0 / 76 | 0–127 | continuous | LFO 2 | |
/mantis/lfo_2/retrigger |
0 / 83 | 0–1 | switch | LFO 2 | |
/mantis/modulation_routing/oscillator_1_shape_modulation_source |
1 / 0 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_1_shape_modulation_scale |
1 / 1 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_2_shape_modulation_source |
2 / 0 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_2_shape_modulation_scale |
2 / 1 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_1_pitch_modulation_source |
3 / 0 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_1_pitch_modulation_scale |
3 / 1 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_2_pitch_modulation_source |
4 / 0 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/oscillator_2_pitch_modulation_scale |
4 / 1 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/filter_cutoff_modulation_source |
5 / 0 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/filter_cutoff_modulation_scale |
5 / 1 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/filter_width_modulation_source |
6 / 0 | 0–5 | discrete | Modulation routing | |
/mantis/modulation_routing/filter_width_modulation_scale |
6 / 1 | 0–5 | discrete | Modulation routing | |
/mantis/arpeggiator/enable |
0 / 121 | 0–1 | switch | Arpeggiator | |
/mantis/arpeggiator/mode |
0 / 117 | 0–5 | discrete | Arpeggiator | |
/mantis/arpeggiator/octave |
0 / 119 | 0–5 | discrete | Arpeggiator | |
/mantis/arpeggiator/swing |
0 / 120 | 0–127 | continuous | Arpeggiator | |
/mantis/arpeggiator/sync |
0 / 116 | 3–15 | discrete | Arpeggiator | |
/mantis/effects/reverb_level |
91 | 0–127 | continuous | Effects | |
/mantis/effects/reverb_type |
0 / 102 | 0–7 | discrete | Effects | |
/mantis/effects/reverb_time |
0 / 103 | 0–127 | continuous | Effects | |
/mantis/effects/chorus_level |
93 | 0–127 | continuous | Effects | |
/mantis/effects/chorus_type |
0 / 111 | 0–3 | discrete | Effects |
Performance MIDI¶
Notes, pitch bend and any CC are also available: /mantis/note/on <note> <velocity>, /mantis/cc/<number> <value>, /mantis/pitchbend <0-16383>, /mantis/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.