log #000251
nanoKONTROL for Ableton

found the little fader box in a drawer. eight faders, eight knobs, a strip of buttons, one wheel. i’ve had it for years and never really used it — figured i’d wire it up to run the set. faders on the channel volumes, knobs on the sends, the button rows launching clips.

the stock mapping should cover most of that already.

it does, and it’s flat. faders to volume and nothing else. what i actually want is the button on the corner — the one marked Scene. the box can hold a few different layouts internally and that button cycles between them. i want one layout for the mixer and one for the grid, and i want that button to be the thing that switches me between them.

and the stock script ignores it?

completely. every other control sends a normal message when you touch it. i can see the faders, the knobs, all the buttons. press Scene and nothing comes through at all. as far as the software’s concerned it isn’t a control.

then it’s sending something the script isn’t listening for. put a monitor on the raw port and press it.

i dumped the raw traffic to a file and watched the Scene presses land. A pulled the bytes apart while i read them out.

it’s not a control-change message at all. it’s system exclusive — a whole packet with a manufacturer header. that’s why the normal listeners never see it. the first few bytes are the vendor id. sixty-six, sixty-four… that’s Korg. everything after that is theirs, and they never wrote it down anywhere public.

so it’s a private conversation the box only has with its own editor.

looks like it. but there are only two shapes in the capture. one arrives every time you press Scene — that’s the event, the box telling you it moved. the other one you never see, because nothing’s ever sent it to the box. same code, one byte off. i’d bet that’s the command — the box asking you which scene to be on.

read and write. if i can catch the event when he presses it, and send the command back, then the button isn’t just changing something on the device — the two sides stay in agreement. the little indicator on the box shows the same scene the software thinks it’s in.

which means one physical button can flip the entire surface. the faders don’t move, but everything they mean changes underneath them.

that’s the whole idea. one press and the mixer becomes the grid.


it mostly came together after that. scene one is the mixer — faders on volume, knobs on the sends, eight tracks, and the four button rows become mute, solo, arm, select. scene two is an eight-by-four view of clips. same buttons, completely different job. the Set button toggles a second mode inside each scene, so the grid can either launch clips or stop them without me running out of buttons.

one thing bothered me. the buttons only have a plain on-off light. no dim, no colour. so a clip that’s playing and a clip that’s been told to play but hasn’t started yet look identical, which is exactly the moment you want to know the difference.

the light can’t hold two brightnesses, but it can hold two brightnesses over time. blink it.

that’s what i did. wrote a little task that fades a button on a clock — a slow pulse for triggered, a hard blink for triggered-to-stop. the hardware still only knows on and off. i’m just choosing when, fast enough that it reads as a state. the transport buttons got the same treatment — rewind and fast-forward pulse while they’re held.

you’re animating a light that has one bit of depth.

turns out one bit is enough if you’re patient with it.


not everything’s clean. there’s a Cycle button that’s scuffed at the hardware level — the moment you engage it the box stops sending half its other messages, so i couldn’t trust it for anything real. i gave it the least important job i had, an alternate way to step through scenes, and left it there. and i’d sketched in a third scene for the device controls that i never finished — the hook’s in the code, doing nothing, waiting for a day i feel like it.

a drawer controller that argues with the software in a language the manufacturer never published, and now it runs the whole set from one button.

once you know what the button was saying. that’s usually the hard part.


it’s on the repo. drop it in the scripts folder and pick it as a control surface.