Blog Reaper 10 min read

REAPER MIDI Controller Mapping: Banks, Layers and Scoping

Design a REAPER MIDI controller mapping that scales: CC banking, shift layers, track-selected scoping, safe CC ranges, and bindings that stay stable.

By Aidxn Design

A REAPER MIDI controller mapping stops being a list of bindings and starts being a design problem at about the twentieth control. Which bindings should follow you between projects? Which should follow the selected track? How do you get thirty functions out of sixteen buttons without a mapping mode? REAPER gives you the primitives — scoped learns, global action bindings, device-aware matching — but it does not give you a bank manager. This guide is the architecture that fills the gap, built around a gamepad because sixteen inputs forces every decision immediately.

TL;DR
  • What you do: split bindings into global actions and project parameters, scope mixing controls to the selected track, and create layers by sending different CC numbers rather than switching modes in REAPER.
  • What you need: REAPER 6 or 7, any controller whose output CC numbers you can change — a gamepad plus Universal Controller MIDI qualifies.
  • Time: 30 minutes to design, 15 to bind.
  • Cost: free in REAPER. Bridge free to try, $89 Pro for the full mapping editor and conditional layers.

How do I map a MIDI controller in REAPER?

Right-click whatever you want to control, choose MIDI/OSC Learn, move the physical control, pick the CC mode, and click OK — but do the design before you do any of that.

The mechanical step takes four seconds. What takes the time is unwinding a map you built by improvisation, where the stick you want for EQ is already on a send, your transport binding only works in one project, and nobody including you remembers what triangle does. Fifteen minutes with a two-column list first is the whole trick. If you have never run the Learn dialog at all, the MIDI Learn walkthrough covers the mechanics, and the from-scratch setup guide gets a controller into REAPER in the first place.

Rule 1 — Separate the global layer from the project layer

REAPER stores bindings in two completely different places, and that split should drive your design rather than surprise you.

Binding typeMade fromStored inScope
Action bindingActions list → Add under Shortcutsreaper-kb.iniEvery project, forever
Track control learnRight-click fader / pan / sendThe .rpp projectThis project only
FX parameter learnRight-click parameter → LearnThe .rpp project, per FX instanceThis project only
FX chain learnSave selected FX as chainThe .RfxChain fileAnywhere you load that chain

So: anything that is about REAPER — transport, markers, zoom, track navigation, toggling the mixer, opening the MIDI editor — is an action binding. Anything that is about this song — a cutoff, a send level, a specific plugin macro — is a project binding. Mixing the two is how people end up re-mapping every session.

Rule 2 — Scope mixing controls instead of multiplying them

Enable only when track is selected turns one physical control into one control per track, which is the closest thing REAPER has to fader banking without a control surface.

The pattern:

  1. On track 1, right-click the volume fader → MIDI/OSC Learn.
  2. Move your chosen control. Set CC mode to Absolute, tick Soft takeover, tick Enable only when track is selected.
  3. Repeat on every track you want it to cover — or make the binding on a track, then duplicate the track, and the binding comes with it.

Bind track selection itself to two buttons (Track: Go to next track and Track: Go to previous track in the Actions list) and you now have a complete mixing surface from three physical controls: next, previous, and a fader that always applies to the one in focus. Soft takeover is not optional here — without it, every track change snaps the fader to your control's physical position.

The equivalent for plugins is Enable only when effect configuration is focused. One trigger becomes "macro 1 of whatever plugin window I am looking at", across every plugin in the session.

Rule 3 — Build layers in the controller, not in REAPER

REAPER has no mapping banks. The way around that is to make the controller send a different CC number when a modifier is held, so REAPER sees two different controls and binds them independently.

This is where a software bridge beats most hardware: you can define a conditional layer where holding L1 shifts every output CC by +16. In the bridge's mapping editor a layered stick axis looks like this:

{
  "input": "LSX",
  "layers": [
    { "when": "none",   "type": "midi", "channel": 1, "cc": 20 },
    { "when": "hold L1","type": "midi", "channel": 1, "cc": 36 },
    { "when": "hold R1","type": "midi", "channel": 1, "cc": 52 }
  ]
}

REAPER never knows a layer exists. It just sees CC 20, CC 36 and CC 52 arriving from the same device, and you Learn each one onto a different destination. Three layers across a gamepad's sixteen inputs is forty-eight bindable functions from hardware that fits in a jacket pocket. Conditional layers of this kind are a Pro feature in the bridge; the free tier handles a single flat layer and three saved presets.

What CC numbers should I use?

Use CC 20–31 and CC 102–119 for custom mappings, because the MIDI 1.0 spec leaves them undefined.

Several CC numbers have defined meanings that plugins, synths and REAPER itself may act on whether you want them to or not:

CCDefined meaningSafe for custom use?
0 and 32Bank Select MSB / LSBNo — can change patches
1Modulation wheelFine, but many synths already route it
7 / 10 / 11Volume / Pan / ExpressionFine, and often what you want
20–31UndefinedYes — ideal
64Sustain pedalNo, unless you mean sustain
98–101NRPN / RPN parameter numbersNo
102–119UndefinedYes — ideal
120–127Channel mode (All Notes Off etc.)Never

Allocating in blocks of sixteen — 20–35 for layer one, 36–51 for layer two, 102–117 for layer three — means a misfiring binding tells you which layer it came from before you have even opened the dialog.

Rule 4 — Freeze the controller map before you bind in REAPER

A REAPER binding stores device, channel and CC number. Change the controller's output CC later and the binding does not follow — it simply stops matching.

This is the single biggest cause of "my mapping broke for no reason". The fix is procedural, not technical: design the controller map, save it as a named preset, then bind in REAPER against it, and treat the CC numbers as frozen from that point. If you later need a different layout, make a new preset rather than editing the one your bindings depend on. Saved presets are what make this possible — the free tier gives you three, which covers a tracking, mixing and editing layout; past that, Pro removes the cap.

Download Universal Controller MIDI to get the preset system, or buy Pro for $89 one-time for unlimited presets, curves and conditional layers.

A worked sixteen-input mapping

Here is a complete layout for a gamepad that covers tracking, mixing and editing without ever touching the mouse. Layer 1 is base, layer 2 is shift (hold L1).

InputBase layerShift layer (hold L1)Binding type
Cross / ATransport: Play/stopTransport: RecordAction
Circle / BTransport: StopItem: Split at edit cursorAction
Square / XOptions: Toggle metronomeEdit: UndoAction
Triangle / YTrack: Toggle record armTrack: Toggle muteAction
D-pad up / downPrevious / next trackMove edit cursor by barAction
D-pad left / rightPrevious / next markerNudge item left / rightAction
Left stick XCC 20 → selected track volumeCC 36 → send 1 levelTrack learn, scoped
Left stick YCC 21 → selected track panCC 37 → send 2 levelTrack learn, scoped
Right stick XCC 22 → focused FX param 1CC 38 → focused FX param 3FX learn, focused
Right stick YCC 23 → focused FX param 2CC 39 → focused FX param 4FX learn, focused
L2 triggerCC 24 → filter cutoffCC 40 → reverb sendFX learn
R2 triggerCC 25 → drive / saturationCC 41 → delay feedbackFX learn
R1View: Toggle mixerView: Toggle MIDI editorAction
Touchpad X/YCC 26 / 27 → EQ freq + gainCC 42 / 43 → compressor thresh + ratioFX learn
Gamepad schematic with leftStick, rightStick, l2, r2, touchpad highlighted. L2 R2
  • CC 20 / 21 - volume + pan, scoped
  • CC 22 / 23 - focused FX params
  • CC 24 - filter cutoff
  • CC 25 - drive
  • CC 26 / 27 - EQ freq + gain
The eight continuous bindings. Buttons and d-pad carry actions instead, and are bound globally rather than per project.

Six actions, eight scoped parameter bindings, one modifier — and twenty-eight functions. Everything in the Action column is bound once and works in every project you ever open. Everything in the learn columns goes in a project template.

How do you stop a REAPER mapping from rotting?

Store it in the three places REAPER actually reloads from — project notes, reaper-kb.ini and saved FX chains — so the map travels with the work instead of living only in your head.

  • Write it into the project. View → Project Notes. Paste the table. The map now travels inside the .rpp.
  • Back up reaper-kb.ini. Options → Show REAPER resource path, copy the file somewhere safe. That one file is your entire global layer.
  • Save FX chains, not just projects. Right-click an FX in the chain → Save selected FX as chain. The parameter learns travel with it into any project.
  • Shape the stream before REAPER sees it if a binding needs a curve or smoothing that the Learn dialog cannot express — a JSFX MIDI processor is the clean place for that.
  • Start from someone else's map if you would rather not design one. The mapping template library has ready-made layouts to adapt.

FAQ

How do I map a MIDI controller in REAPER?

Right-click the control you want to drive, choose MIDI/OSC Learn, move the physical control, set the CC mode, and click OK. For actions rather than parameters, use the Actions list and Add under Shortcuts.

Can REAPER switch between multiple MIDI mappings?

REAPER has no mapping-bank concept of its own, but you can achieve the same thing by making the controller send different CC numbers per layer. Each layer then binds independently inside REAPER.

How do I make one fader control whichever track is selected?

Tick Enable only when track is selected in the MIDI/OSC Learn dialog. The binding then applies to the focused track rather than a fixed one.

What CC numbers should I use for a custom mapping?

Avoid CC 0, 32, 98-101 and 120-127, which carry defined meanings such as bank select, NRPN and channel mode messages. CC 20-31 and CC 102-119 are undefined in the MIDI 1.0 spec and safe for custom mappings.

Why did my REAPER mapping stop working after I changed a preset?

Bindings store a device, channel and CC number. If the controller preset now sends a different CC for the same physical control, the binding no longer matches. Freeze the controller mapping before binding in REAPER.

Can I export a REAPER MIDI mapping to another machine?

Yes. Action bindings live in reaper-kb.ini and FX chain learns travel inside a saved FX chain file. Copy both, plus the project template, and the layout moves with you.

Wrap-up

REAPER's mapping system is small and sharp: two storage locations, three scoping checkboxes, and a Learn dialog. Layers come from the controller, banking comes from track selection, and stability comes from freezing the CC numbers before you bind. Design it once in that shape and it stops needing maintenance.

Download Universal Controller MIDI and build the mapping on hardware you already own.

Keep reading

More setup walkthroughs