Universal Controller MIDI

Mapping & customization

Save and load presets

Save your full mapping and haptic config as a named preset, then switch between presets in one click. The bridge ships with five built-ins.

Updated

Presets are full snapshots of every binding, haptic rule, and per-controller setting. Save one for Ableton drum performance, another for VCV Rack patching, a third for a generative MaxMSP toy. Swap with a dropdown in the menu bar, or — if you bind a button to preset-next — mid-song without touching the laptop.

Presets aren't just convenient. They're how you keep yourself sane when one session needs filter sweeps on the touchpad and the next needs drum corners on the right stick. Build once, recall forever.

What you need

A working mapping you'd like to keep. If you haven't built one yet, start with map a button to a MIDI note. Already happy with the defaults? See use a built-in template instead.

Save the current setup

Click the preset dropdown in the top-right of the editor, then Save as new preset. Give it a name (no slashes — they break filesystem paths on Windows) and an optional emoji. The bridge writes the file to its preset folder and reloads the dropdown.

To overwrite an existing preset, pick it first, change anything, then hit Save (Cmd/Ctrl+S).

Where presets live

OSPath
macOS~/Library/Application Support/UniversalControllerMIDI/presets/
Windows%APPDATA%\UniversalControllerMIDI\presets\
Linux~/.config/UniversalControllerMIDI/presets/
Active backuppresets/.autosave.json (auto-rotated, last 10)
Built-ins (read-only)presets/builtin/
{
  "name": "Ableton Drum Performance",
  "icon": "drum",
  "version": 1,
  "buttons":  { "cross": { "type": "note", "note": 36, "channel": 10 } },
  "sticks":   { "right": { "edges": { "enabled": true } } },
  "triggers": { "L2": { "type": "cc", "cc": 11 } },
  "haptics":  { "rules": [] }
}

Load a preset

Open the preset dropdown and click any entry. The bridge hot-swaps the mapping live — no port reset, no MIDI hang. Bindings apply on the very next controller event.

Loading is non-destructive to the file you're switching from — your unsaved changes there are tossed unless you save first. The dropdown shows a small dot next to any preset with unsaved edits as a warning.

Bind a button to switch presets

{
  "buttons": {
    "L1": { "type": "preset-prev" },
    "R1": { "type": "preset-next" },
    "share":   { "type": "preset-by-name", "preset": "Ableton Drums" },
    "options": { "type": "preset-by-name", "preset": "VCV Patch Editor" }
  }
}

L1/R1 cycle through every preset in the folder, alphabetically. The preset-by-name variant jumps to a specific one — handy for hot-swapping between two patches in a live set.

Delete or rename

Right-click a preset in the dropdown to rename or delete. Deletion moves the file to the OS trash — recoverable if you panic.

Common scenarios

How real users organise their preset folder:

  • Per-DAW presets: "Ableton Drums", "Logic Piano", "Reaper Mixer". Each preset uses different default channels to match the DAW's preferred MIDI routing.
  • Per-song presets: One preset per track in a live set. Bind R1 to preset-next and walk through your set without touching the laptop between songs.
  • Per-genre presets: "House drums", "Synthwave lead", "Ambient pad". The genre dictates which CCs and which corners matter.
  • Practice vs. live: A "practice" preset with verbose MIDI monitor and lightbar feedback, a "live" preset with feedback minimised so the lightbar doesn't strobe at the audience.
  • Per-controller presets: If you swap between DualSense and Xbox during a session, save controller-specific presets and let auto-load (Settings → Auto-load on device connect) pick the right one.

What's next

Move presets between machines via export and import preset JSON. To start clean, see reset to defaults. To grab community presets, see download from the marketplace.

Edit this page on GitHub Updated
ESC

Type to search.