A Monome Grid 128 controller for map.audio PAM: step editing, lanes, modulation, macros and variations from the grid, with PAM's screen following along.
Learning the grid: open docs/tutorial.html, the field guide (one printable section per part of the grid, with its controls). docs/grid-map.html is the interactive map, DESIGN.md the design, CONTEXT.md the terms.
- macOS, Node 22 or newer
- A varibright Monome Grid 128 and serialosc running
- PAM (plugin or standalone) with Settings → Experimental → Beta Features → Enable MCP Bridge on
- An IAC MIDI bus named
PAM-grid-in(Audio MIDI Setup → MIDI Studio → IAC Driver → add a port)
git clone <this repo> pam_grid && cd pam_grid
npm installIn plugin mode PAM can't pick MIDI inputs itself, so Bitwig routes the grid's MIDI:
- On PAM's track, set the input to IAC Driver PAM-grid-in, all channels.
- Turn track monitoring on, so the grid reaches PAM without arming the track.
- Let CCs through as well as notes: MACRO sends CC 1–8 on channel 1 to PAM's macro controls.
npm start # the daemon: grid ⇄ PAM. Ctrl-C clears the grid and exits.
npm test # unit tests (no PAM or grid needed)Open PAM's window so its screen can follow the grid (FOLLOW).
| Setting | Default | |
|---|---|---|
PAM_GRID_LOG=0 |
on | turn off the command log (each key and what it sent) |
PAM_GRID_INSTANCE |
first found | pin a PAM instance id |
PAM_GRID_OSC_PORT |
13013 | serialosc port for the daemon |
PAM_GRID_MIDI_OUT |
PAM-grid-in |
the IAC port to send to |
Saving a variation (hold VAR, hold a cell key 1 s) writes your preset through PAM's own save.
With no preset loaded, the first save creates User/pam_grid <date time>.preset. Every overwrite
is backed up first to ~/Library/Application Support/pam_grid/backups/ (the last 50 are kept).
After updating PAM or pam-mcp, run npm run sync-contract so saves keep matching PAM's format,
and npm run sync-macros so MACRO can show the values of macros your CCs are mapped to.
The field guide is generated: after changing the grid, update scripts/build-tutorial.py and run
python3 scripts/build-tutorial.py.