← All products
MidiMirror icon

MidiMirror

A mirror for your MIDI controller: see what every knob is set to, and choose what each one does.

Ever forgotten what each knob on your MIDI controller does? Or wondered what knob 8 is mapped to in device mode? Even on a controller with a display (like the Launch Control XL MK3 or Push), you often only find out what a knob does once you move it.

MidiMirror was made to fix that. It has layout templates that copy the look of your MIDI controller, with every knob, fader and button in the same place. Put MidiMirror on a screen above your controller and you always know what each knob does, anywhere in your Live set.

Already have it? Manage on Gumroad ↗

The MidiMirror window in Device mode: an Akai MIDI Mix drawn on screen with Wavetable in focus, every knob labelled with the Wavetable parameter it controls
A close-up of two knob rows in MidiMirror with Wavetable in focus, each knob labelled with the parameter it holds and its current value: Flt 1 Freq 20.5 kHz, Flt 1 Res 0.0 %, Osc 1 On, Osc 1 Transp 0 st, Osc 1 Detune 0 ct, Osc 1 Pos, Osc 1 Effect 1 and 2, and a second row for Osc 1 Pan, Osc 1 Gain and Oscillator 2
Every knob shows the name of the parameter it controls and its current value, read back from Live. The device in focus is named and colour coded across the top. No more guessing what knob 3 does.

See it in use

MidiMirror in use with Ableton Live.
Setting up MidiMirror with your controller and Live.

Two ways to run it: Passive or Active

Every controller runs in one of two modes. You choose in the setup card, and can change it later on Configure ▸ Mapping.

Passive: your controller's own script

The controller keeps the Live script it came with and behaves exactly as it does without MidiMirror. MidiMirror runs beside it and shows what every control is doing, with names and values read from Live.

  • Nothing to map or learn.
  • Follows the controller's mode button (Device, Volume, Pan, Sends) and its Session and Drum pad modes. A custom or user mode on the hardware greys out, because MidiMirror cannot read it.
  • The Drop works: one click on its button, or ⌃⌥D from anywhere, even with Live in front.
  • You cannot change what a control does. The factory script decides that.

Controllers: Novation Launchkey MK3 (37, 49, 61, 88), Launchkey Mini MK3, Launchkey MK4 (49, 61), Launchkey Mini MK4, Launch Control XL MK1 and MK2, Launch Control 3, Launch Control; Akai MIDI Mix, APC mini, APC mini mk2, APC40, APC40 mkII, LPD8; Korg nanoKONTROL2, nanoKONTROL Studio; Behringer X-Touch Compact; Arturia BeatStep. On the APC40 and APC40 mkII you can also click the mirror to stop clips and tap tempo.

Active: MidiMirror drives it

MidiMirror's own Remote Script drives the controller. You pick a mapping, or build your own, and the panel shows what every control does.

  • Choose what every knob, fader and key does, in as many modes as you want.
  • A saved knob order for each device.
  • The Drop, from the footer or a key on the controller.
  • Device Lock, Instrument mode, and JamWare mode for Chordinator and MutationStation.

Controllers: Novation Launch Control XL MK3, Launchkey MK3 37 and Akai MIDI Mix, all three tested on the hardware. Also Launch Control XL MK1 and MK2, APC mini, APC mini mk2, Korg nanoKONTROL2, nanoKONTROL Studio, Behringer X-Touch Compact and Arturia BeatStep: their layouts are drawn, but I don't own them so I was not able to confirm their knob CC values.

Moving a Passive controller to Active takes three steps, which the app lists for you: pick its MidiMirror row in Live's settings, restart Live, then restart MidiMirror.

The mappings it comes with (Active)

In Active mode you pick a mapping on Configure ▸ Mapping. Two come with the app. Both are read-only. If you change anything, MidiMirror makes you an editable copy first and keeps the original.

JamWare: every Active controller

Listed as "MidiMix (JamWare)", "nanoKONTROL2 (JamWare)" and so on. It is one mapping that fits itself to each controller, so a controller with no faders gets a smaller mixer. Four modes:

  • Device. The knobs follow the device Live's blue hand points at, in the same order on every instrument: knob 1 filter cutoff, 2 resonance, 3 filter envelope amount, then the device's own parameters. The faders hold the amp and filter envelopes.
  • Mixer/Sends. Send A and Send B on two knob rows, each track's Utility output on the third, the faders on volume. The bank keys move the eight-track window.
  • Free. Nothing is assigned, and every control goes to Live's own MIDI map, so you can MIDI-learn anything.
  • JamWare. The panel becomes the front panel of Chordinator or MutationStation (below).

Two layer keys put one knob row on the selected track's sends, or on the Utility, Pitch, EQ and Auto Filter every track carries, without leaving the mode. The master fader stays on the selected track's volume in every mode.

Every device keeps its own layout (Active)

Save a knob layout for each device. Found the right setup for a device, like Live's Analog or a plugin like Diva, Serum or a TB-303? Maybe you want the filter cutoff always on knob 1 and the ADSR on the faders. Save it, and MidiMirror remembers that order for the device, so each parameter lands in the same place every time.

The layout belongs to the device, so the order you chose for Diva comes back on every Diva, in every project. Use Swap order to drag knobs onto each other until the row is how you want it, then press the button to save it. A Forget button on a saved device goes back to Live's own order.

The MidiMirror swap-order bar above a knob row: it reads Drag one control onto another to trade what they do in Device Mode, the hardware key each one answers to does not move, with a Remember this order for Wavetable button on the right, over eight knobs labelled Flt 1 Freq, Flt 1 Res, Osc 1 On, Osc 1 Transp, Osc 1 Detune, Osc 1 Pos, Osc 1 Effect 1 and Osc 1 Effect 2
Swap the row into the order you want, then press Remember this order for Wavetable. The button names the device in focus, and from then on its parameters land in those places every time.
The right end of the MidiMirror bottom row: DARK DECK, Remember order, undo and redo, and Swap order lit orange because it is on
Swap order is on the bottom row. It lights up while it is on; click it again to stop.
The MidiMirror mapping popup for a knob with Wavetable in focus: a search box and 92 Wavetable parameters by name, then The filter section with filter cutoff, resonance and envelope amount, each found by name and falling back to its position

A guided setup that fills in Live's settings for you

Configure opens on a three-step card. Choose your controller, choose Passive or Active, and the third step shows what Live's Control Surface settings (Settings ▸ Link, Tempo & MIDI) should say. The Your Live Setup box counts the rows you need, checks how many are already right, and spells out each one: name, input and output. Set these up for me writes them for you.

The MidiMirror Set up your controller card: a tab strip with Setup lit, step 1 Choose your controller, step 2 Passive vs Active cards, and step 3 Generate and Restart with a Your Live Setup box reading One Control Surface row, 0 of 1 already in Live, the row spelled out as MidiMirror_Generic, Input None, Output None, and a Set these up for me button above Generate Remote Script
This box shows what your Live settings should say, and how much of it is already done.

The Controller tab shows the controller in use, and from there you can open a second controller in its own window, edit the deck, or make an editable copy of a factory controller so the original stays as it is. Every controller you have opened is listed underneath, to reopen or forget.

The MidiMirror Configure popup on its Controller tab: Now: Akai MIDIMIX, factory, read-only; rows for Open in a second window with an Akai APC mini picker, Edit this controller, New controller, Save as a copy, Change name greyed out, Panel layout, Make an editable copy of this controller, and an Open/Forget list showing M-Audio Oxygen Pro 61
Configure ▸ Controller: the controller in use. From there you can open a second window, make a copy you can edit, or start a new controller from scratch.

Make your own mapping (Active)

Double-click any control and choose its job: a mixer function on this strip or a named track, a parameter of the selected device by position or by name, an envelope stage found by name on the instrument in focus, or one specific parameter on a specific track.

The MidiMirror mapping popup for a knob in Device Mode: a scope switch for this mode only or all modes, Controller and Mapping tabs, Selected Device, Live and Panel sub-tabs, a Panel label field with tokens, Pick a parameter in Live, and the device parameter search
The picker for one knob. Pick a parameter in Live takes whatever parameter you click in Live. The switch at the top sets whether the mapping applies in this mode only or in every mode.

Your own modes. Add, rename, hide and delete modes. A new mode starts empty, and what a control does belongs to its mode, so a knob can do one thing while you mix and another while you design sounds.

Holds and combos. A key can do one thing when tapped and another when held. Two keys pressed together can do a third. You can also give a control a key on your computer keyboard.

Or let an AI build it. Say in a sentence what you want, like "transport on the bottom row, sends on the top knobs". Press Build with AI on Configure ▸ Mapping and MidiMirror copies a full description of your controller and everything it can control. Paste that into the AI assistant you already use (ChatGPT, Claude, Gemini), then paste its answer back. MidiMirror checks it, refuses anything that does not exist, and saves it as a new mapping you can edit like any other. MidiMirror doesn't send anything itself, and there's no account or key to set up.

Teach it any controller. Press Learn on a control and move the real knob, and its address is recorded. Edit Layout moves, hides and adds controls, so the panel matches your hardware.

Generate a Remote Script for a controller you built or changed. Give it a name and MidiMirror writes a real Remote Script into Live's User Library, so it appears in Live's Control Surface list as its own entry, with everything you built in it. The controllers above already have theirs and skip this step.

The Modes list in Configure, Mapping: Device Mode, Mixer/Sends Mode, Free and JamWare, each with hide and delete, and a field to add a new mode
Modes are a list you add to, on Configure ▸ Mapping. Hide takes one off the hardware cycle without losing what is in it.

The Drop

Press one key and the panel remembers where every knob and fader is. Build the track up, sweep the filters and ride the sends, then press the same key again and everything snaps back at once. It works in Passive and Active.

While a drop is stored, each control shows an orange mark where it will return to.

Two rows of MidiMirror knobs over Wavetable with a drop stored: Flt 1 Freq is up at 2.49 kHz, Flt 1 Res at 48 % and Osc 1 Pan at 50R, and a small orange pip on each ring marks the value it will snap back to
A drop is held. The orange pip on each ring is where that control snaps back to, and it stays put while you move things.

Hold the drop key to re-aim it. Keep it held, move things to where you want them to snap back to, and let go.

Two controllers, two windows

Run two controllers at once, each in its own Control Surface slot in Live with its own generated script, and you get two windows, one per controller, side by side. Each draws its own hardware, keeps its own saved setups, layout and modes, and listens only to its own MIDI.

Move either window and its place is remembered, per controller and per screen. A window opens when its controller shows up in Live and closes when it goes, without a restart.

JamWare mode: your controller plays the other apps

JamWare mode is the fourth mode of the JamWare mapping, so it needs Active. Switch to it and every knob, fader and key controls Chordinator or MutationStation instead, labelled with live values.

It follows whichever app you clicked into last. The app's groups take whole columns of the panel, and a key linked to a switch lights up when it's on, whichever side you flip it from.

Features

  • Names and values from Live. Every control on the panel shows the parameter it holds and its current value, in both modes.
  • Device Lock. Lock the blue hand to one device and keep selecting other tracks without your knobs following. Active.
  • Instrument mode. Device mode follows the selected track's instrument instead of the blue hand, so the knobs land on the synth every time you change track. Active.
  • A knob order for each device, saved once and used in every set. Active.
  • Build a mapping with AI. Describe the layout you want, paste MidiMirror's brief into any AI assistant and paste the reply back. It becomes a saved mapping, and anything the reply invents is refused.
  • Mappings move between controllers. Any saved mapping loads onto any controller, and lands only the controls that controller has.
  • Two controllers, two windows, each drawing its own hardware.
  • Undo, saved setups, and a "This setup" page that lists every control in every mode, what it does and the note or CC it sends, read from the script itself.

Why standalone

MidiMirror runs as its own app, not a plugin, and reaches Live only through the Remote Script it generates, the same way a hardware controller's own script does. If Live crashes, MidiMirror and your panel layout are safe. If MidiMirror hits a problem, Live keeps playing the set.

Requirements

Ableton Live is required. This is the one app in the range that does not work with other DAWs. Parameter names, the modes, the device in focus and the lock all come from a Remote Script, and only Live loads Remote Scripts.

macOS 12 or later on Apple Silicon. A supported controller, or any MIDI controller you are willing to teach with Learn. The lists are under Passive and Active above.

Intel Macs: untested, should work.

Signed and notarised for macOS.

Version 1.6.0

Donation-based: licence and updates

Setting it up

Open MidiMirror and click Set up my controller. Pick your controller, pick Passive or Active, and let Your Live Setup work out the Control Surface rows Live needs and offer to write them. Restart Live, and open the mirror on your second screen.

Move a knob and its name appears, and the labels follow when you select another device.