> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gridshift.studio/llms.txt
> Use this file to discover all available pages before exploring further.

# MIDI Bindings

> Bind any MIDI controller to Gridshift commands and plugin parameters — transport buttons run commands, encoders drive the last-touched parameter.

Gridshift's **MIDI Bindings** system lets any MIDI controller drive the app without per-vendor scripts. There are two layers:

* **Command bindings** — buttons (Note On / CC>0) trigger any command in the palette.
* **Parameter bindings** — knobs and pitch wheels (CC / Pitch Bend) drive plugin or mixer parameters.

Both are learned ad-hoc, one control at a time, directly from the Command Palette — no vendor scripts. To map a whole controller in one guided pass instead, and save it as a reusable per-device profile, use the [Controller Profiles](/features/controller-profiles) wizard.

## Command bindings

Command bindings are global and stored in user defaults — they apply across every project.

<Steps>
  <Step title="Open the Command Palette (⌘K)" />

  <Step title="Highlight the command you want to bind" />

  <Step title="Press ⌘L to arm Learn" />

  <Step title="Send the MIDI event from your controller (Note On or a CC snap)" />

  <Step title="The binding is saved">
    A MIDI badge appears next to the shortcut badge for that command.
  </Step>
</Steps>

The next time your controller sends that event, the command runs and the event is absorbed — it does not additionally reach the focused instrument.

<Note>
  Use command bindings for transport, recording, loop toggles, track navigation, or any other command you'd otherwise trigger with a keyboard shortcut.
</Note>

## Parameter bindings

Parameter bindings are project-scoped — they travel with the project file and auto-prune when the referenced track or plugin slot is removed.

<Steps>
  <Step title="Touch the knob or slider you want to bind (click or drag it in Gridshift)" />

  <Step title="Open the Command Palette (⌘K) or use the shortcut ⌥⌘L directly" />

  <Step title="Run MIDI Learn: Last Touched Parameter" />

  <Step title="Move the encoder or pitch wheel on your controller" />

  <Step title="The next continuous MIDI event is bound to that parameter" />
</Steps>

Incoming values are normalized to the parameter's range and 20 ms linear smoothing is applied so the 7-bit CC stepping isn't audible on smooth targets (filter cutoff, volume faders, dry/wet).

Parameter bindings use **absolute tracking** (Ableton's "None" takeover mode): the first CC after learn snaps the parameter to the knob's position, and every subsequent event tracks 1:1.

### Endless encoders

Endless rotary encoders must be switched to **absolute mode** on the controller itself before learning — relative / 2's-complement encoding isn't supported in V1 and cannot be reliably detected from CC traffic alone.

* **Akai MPK mini IV**: use the "Plugin" preset, or a user preset with `KnobM=Abs`
* **Arturia / Novation**: use the MIDI Control Center (or equivalent) to set encoders to absolute / CC mode

If an encoder is left in relative mode, the parameter will jump between its minimum and maximum as the encoder wraps — same limitation as Ableton's user MIDI Learn.

## Automation recording

When record mode is active, MIDI-bound knob movements flow through the normal automation-recording path. Arm a track, hit record, and turn the knob — the parameter is automated for free.

## Current limits

* No LED/motor feedback in V1. Controllers with LED rings or color pads won't reflect the current parameter value.
* 7-bit CC resolution only. High-resolution 14-bit CCs are not yet supported.
* MCU / HUI control surfaces are not supported — the learn model targets the MPK Mini class of controller.

## Shortcuts

The keys used when learning bindings are below. See the [Global Shortcuts](/shortcuts/global) reference for the rest of the app.

| Action                                 | Shortcut |
| -------------------------------------- | -------- |
| Open Command Palette                   | `⌘K`     |
| Arm command-binding Learn (in palette) | `⌘L`     |
| MIDI Learn: Last Touched Parameter     | `⌥⌘L`    |
