> ## 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

> Lets a MIDI controller run Gridshift: a button runs a command, a knob moves a parameter. Highlight a command in the Command Palette and press ⌘L, or touch a parameter and press ⌥⌘L, then move the control.

## Bind a button to a command

Press `⌘K` and highlight the command, for example **Play / Stop**. Press `⌘L`, then the button on your controller. The row now carries a MIDI badge such as `CC 20 ch1`.

## Bind a knob to a parameter

Click or drag the parameter in Gridshift, such as a fader in the Inspector's Mix section or a plugin control. Run **Learn Last Touched Parameter** (`⌥⌘L`) and move the knob, fader or pitch wheel.

## Remove a binding

Highlight the command and press `⌘L` again; the footer reads **Remove MIDI**. For everything else, run **Show All Bindings** from the Command Palette, where `↩` removes the highlighted one.

## Good to know

* **A command binding runs a palette command from a button**: a Note On, or a CC with a value above 0. Use it for anything you would press a key for: Play / Stop, record, loop, undo, track navigation.
* **A parameter binding moves a mixer or plugin parameter** from a knob, fader or pitch wheel: a CC or Pitch Bend. Use it for what you reach for while the song plays: a track's volume, a synth's filter cutoff, a send. Turned during recording, it writes [automation](/mix/automation.md) like dragging the control does.
* **Command bindings are global; parameter bindings belong to the project.** Command bindings live in your library, apply in every project and follow you to your other Macs through [iCloud](/sync/icloud.md). Parameter bindings are saved in the project file.
* **Endless rotary encoders must be in absolute mode** before learning. An encoder left in relative mode makes the parameter jump between its minimum and maximum as it wraps, the same limitation as Ableton's user MIDI Learn.
* **To map a whole controller in one pass** as a reusable per-device profile, use [Controller Profiles](/controllers/controller-profiles.md). That page also covers which wins when both bind the same control, and what neither supports.

> **Details**
>
> * You teach each control once, from the Command Palette. No vendor scripts.
> * The footer shows `⌘L` MIDI Learn for the highlighted command. During learn the palette shows **Learn MIDI for Play / Stop** and asks you to press a button. The badge sits next to the command's keyboard shortcut.
> * A bound button's press is absorbed: it runs the command and does not also play the focused instrument.
> * A button bound to a command that opens a list, such as **Add Effect…**, opens that list in the palette. The rows inside a list cannot be bound themselves.
> * Learn waits 10 seconds, then gives up. `Esc` or **Cancel** stops it sooner. This holds for parameter learn too.
> * A released button never binds: a Note Off or a CC of 0 is ignored.
> * A parameter can be a fader or knob in the Inspector's Mix section, a send, or a control in a plugin's own window.
> * From the palette, parameter learn shows what it waits for, for example **Learn MIDI for Volume**. `⌥⌘L` arms the same learn without the palette; nothing appears on screen, so move the knob right away.
> * The first CC or Pitch Bend that arrives is bound; notes are ignored while it waits. With no parameter touched since launch, **Learn Last Touched Parameter** does nothing.
> * The knob tracks the parameter absolutely (Ableton's "None" takeover mode): the first value snaps the parameter to the knob's position, then it follows 1:1.
> * Incoming values are scaled to the parameter's range and smoothed over 20 ms, so the 7-bit steps of a CC are not audible on cutoff, volume or dry/wet.
> * A parameter binding is removed when the track, send or ducking it drives is deleted.
> * Hold a Shift button to learn a second assignment. If your controller profile has one, the binding is filed under **Shift +** that control, and the control keeps its plain binding as well.

> **Binding commands**
>
> Type `binding` in the Command Palette to find these.
>
> | Command | What it does |
> | - | - |
> | **Show All Bindings** | Lists every command and parameter binding with its control. `↩` on a row removes it |
> | **Clear Binding for Last Parameter** | Removes the binding of the parameter you touched last |
> | **Clear All Command Bindings** | Removes every command binding |
> | **Clear All Parameter Bindings** | Removes every parameter binding in this project |
> | **Cancel Learn** | Stops a learn that is waiting |

> **Absolute mode on common controllers**
>
> | Controller | How |
> | - | - |
> | **Akai MPK mini IV** | Use the "Plugin" preset, or a user preset with `KnobM=Abs` |
> | **Arturia / Novation** | Set encoders to absolute / CC mode in the MIDI Control Center (or equivalent) |

> **Keys**
>
> | Action | Shortcut |
> | - | - |
> | Open Command Palette | `⌘K` |
> | Learn MIDI for the highlighted command, or remove its binding (in the palette) | `⌘L` |
> | Learn Last Touched Parameter | `⌥⌘L` |
> | Cancel a waiting learn (in the palette) | `Esc` |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.