Home
Notes / New pattern banks for Mutable Grids

Call for testers · 27 August 2026

New pattern banks for Mutable Grids

Sorrow's derived drum maps are the same data structure Grids uses, so they drop straight into the real module. Three new banks, but no hardware to test them on.

Call for testersMutable GridsDrums

Can you help?

I do not own a Grids, and I have not run any of this on real hardware. If you have one — or a clone that accepts Grids firmware updates — I would love to know whether it works and what it sounds like. Even better, if you are in the UK and would lend me one for a fortnight, I will upload the firmware, film the result and send it back refreshed with the original firmware.

In making the Sorrow video, I had an idea

Sorrow is a Grids port for the Daisy patch.Init(), with its own drum voices and drum patterns. In developing the port I learnt that Grids’ patterns are a lookup table — machine-learned from a big pile of drum loops, then arranged by hand. Twenty-five hand-selected patterns, 96 bytes each, and X/Y interpolates between the four nearest. All the musicality lives in about 2.4 KB of data. But if you change the data you can have a different instrument running the same engine.

So I built a pipeline that derives a bank from any folder of MIDI: quantises to 16ths, cuts one-bar windows, picks 25 of them and arranges them on a 5×5 grid, then matches each lane’s loudness distribution back onto Grids’ own so that density and accent behave exactly as they did before.

The first version of this was wrong, and it is worth saying how. It used a self-organising map — an algorithm that sorts patterns into 25 piles and arranges the piles so neighbours are alike. That sounds exactly right for Grids, because X and Y slide between adjacent cells. It is exactly wrong, for two reasons I did not see until I listened to it properly:

So the banks are now real patterns, which is what Émilie did by hand. Twenty-five are chosen by farthest-point sampling — each pick the one least like everything picked so far, measured on which steps fire rather than on raw velocity — and then arranged on the 5×5 by swapping cells until neighbours are as related as they can be. Choosing and arranging are separate steps, and only the second one wants similarity.

Then, somewhere near the end of video planning, I realised the obvious thing: the real Grids uses exactly the same structure. Same 25 nodes, same 96 bytes, same drum_map[5][5]. Which means these banks are portable to real hardware — they are a byte-for-byte data substitution. Same size, no code change, nothing to fit into the flash budget. I just don’t own the real hardware to test it out.

The three banks

The number that matters is how much the pattern actually changes when you move X or Y by one cell. Measured as steps that flip between silent and sounding, at mid density:

bank corpus one-bar patterns steps changed per cell move map ratio
Latin Groove MIDI, filtered to latin, jazz and afro styles 9,458 17.9 84%
Traditional (Rock, Blues etc) Groove MIDI, all styles 21,945 17.5 83%
Club Groove MIDI, by rhythmic signature 3,663 16.8 81%
Grids’ own factory map, for scale hand-made — 15.5 91%

None of the three has a dead edge — a neighbour pair so alike that the knob move is inaudible. The self-organising map versions these replace scored 9.4 to 10.9, which is where “not much seems to be happening” comes from.

The second column is the one I got wrong for a while. It compares how much neighbours differ against how much distant cells differ, and it wants to be well under 100%. At 100% neighbouring cells differ as much as opposite corners — which is a shuffle, not a map: every knob move jumps to something unrelated, and since X/Y blends the four cells around you, blending four unrelated patterns averages to much the same mush wherever you stand. The banks were at 86–89% because the arranging step ran before the values were fitted to Grids’ distribution, so the map had been laid out for numbers the nodes no longer held.

Every node now plays all three drums. Fitting our patterns onto Grids’ value distribution used to be done a lane at a time across the whole map, and 62% of Grids’ values are zero — so a node quieter than its 24 neighbours collected the bottom of that distribution and lost a drum outright. Three, five and four of 25 nodes were missing a voice. Émilie loses none in 75 node-lanes; she does not leave a drum out. Fitting each node against one of hers instead fixes it by construction.

I used to publish a coherence figure here instead. It was a ratio — neighbour distance against any-pair distance — and I had been reading it as “how smoothly X/Y morphs”, which it is not. Worse, a map of 25 identical patterns scores near 100% on it. It measured the thing I should have been trying to avoid.

Getting it onto a module

Grids’ bootloader accepts firmware as FSK-encoded audio through the CLOCK input — no programmer, no opening the case.

  1. Hold RESET while you power the module on. The LEDs flash to confirm the bootloader is listening.
  2. Patch an audio output — phone, laptop, interface — into CLOCK IN.
  3. Play the .wav at full volume, no EQ, no effects, no Bluetooth. It runs about thirty seconds.
  4. The LEDs march along as pages are written, then flash, and the module boots into the new bank.

It is Mutable’s own official update path, which means it is reversible. Mutable still publish the stock firmware as an audio file — grids_1.0.wav — and playing that in by exactly the same steps puts the module back as it was. Worth downloading it before you start, so getting back is not conditional on a website still being up. There is a .hex of each build alongside the audio here if you would rather use a programmer.

What I could check without a module

I don’t own a Grids, so this is everything that can be established without one — which turned out to be more than I expected:

None of which proves it flashes and plays on a real module. That is the ask.

What is not done

What is missing is somebody to try it on a module that actually exists. I would also like to know whether these are as good to play as they now measure. A number is not a groove, and the last time I trusted one over my ears it took a rebuild to find out.

Grids is GPL-3.0, so anything I distribute ships with complete corresponding source. The tooling, the tables and the derivation scripts are all in the repo linked below — point groove_nodes at your own MIDI folder and it will derive a bank of your own genres.

Downloads

grids_latin.wavLatin, jazz, afro-cuban, afrobeat, New Orleans. The furthest of the three from anything Grids does out of the box.

grids_groove.wavHuman drummers, rock through jazz, from the Groove MIDI Dataset.

grids_club.wavFour-to-the-floor, breakbeat and half-time, picked out of the Groove MIDI Dataset by rhythmic signature rather than by genre label.

Source and tooling on GitHub →