Using a Grid as Linnstrument

An implementation of the LinnStrument keyboard layout for the Monome 128 .

This tiny console script will create a new virtual instrument called Linn Monome to use with your DAW. This script does not require MaxForLive, and has a very small footprint. If there is an interest for a Norns version, I will gladly port it to lua.

By default, the linn monome will send to Channel 0, you can change channel by holding down the last key(bottom right), and pressing one of the 16 keys of the top row.

You can download it here,
you must have serialosc installed.

In Ableton




  • Open the terminal
  • type cd Documents
  • type git clone
  • type cd linn
  • type npm install
  • type node index

Whenever you want to use it

  • type cd Documents/linn
  • type node index

Enjoy :slight_smile:


Norns port would be excellent!!! Awesome idea


Not only is this wonderful, but the implementation is also very new to the monome ecosystem isn’t it? Do we have any recollection of a similar grid layout making the monome a seamless countroller without max on the computer?

Edit : actually beyond my obvious interest in a norns port, could this become a snippet of code that you could be add to scripts to make it a basic grid layout for synths (molly the polly, fm7 etc.)?


Very interested in a Norns port :slight_smile:


@LLK could this become a snippet of code that you could be add to scripts to make it a basic grid layout for synths?

Absolutely, if you change the array of notes at the top, you can change the assignment :slight_smile:

@mlogger Very interested in a Norns port

Almost done.

➜  linn git:(master) npm install
audited 16 packages in 0.785s
found 0 vulnerabilities
➜  linn git:(master) node start
    throw err;

Error: Cannot find module '/Users/vsh/src/linn/start'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:625:15)
    at Function.Module._load (internal/modules/cjs/loader.js:527:27)
    at Function.Module.runMain (internal/modules/cjs/loader.js:839:10)
    at internal/main/run_main_module.js:17:11 {
  requireStack: []

➜  linn git:(master) node -v
➜  linn git:(master) npm -v

Any thoughts?

My bad, it should be written:

npm install
node index
1 Like

In the readme layout section - is the bottom row meant to be excluding D#1?

1 Like

It has been corrected, just pull again. That was a mistake.

What node version you’re using? node-midi fails against node 12.5.0

make: *** [Release/] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:200:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
gyp ERR! System Darwin 18.6.0
gyp ERR! command "/usr/local/Cellar/node/12.5.0/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/vsh/src/linn/node_modules/midi
gyp ERR! node -v v12.5.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok
npm ERR! errno 1
npm ERR! midi@0.9.5 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the midi@0.9.5 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/vsh/.npm/_logs/2019-07-01T12_58_02_829Z-debug.log

I’m running on v10.15.0, let me try to update and see what’s breaking in 12.
Mhmm, I’m not sure I understand what breaks in 12, why are you not using LTS?

That was the one homebrew installed after upgrading it. Let me try to switch to the same you have. Thanks!

1 Like

You may find some additional inspiration here:

The actual software includes a couple of presets not shown in the screenshots.

I like the flexibility the above implementation offers over the linnstrument’s single layout. When asked why Roger doesn’t make similar flexibility available on the linnstrument itself, Roger talked about (paraphrasing here) the fact that you don’t re-fret a guitar when you re-tune it, and doing so would make it harder to learn how to play in every key.

Probably a pretty valid point if you have aspiration to play Giant Steps accurately. For simpler music I sometimes find it handy to mess with the lighting layout.

1 Like

This capable on non variable brightness grids?

(I’m not sure if it offers anything given your implementation works, but there’s a node package for the grid that abstracts some of serialosc’s genericness into something perhaps more expressive and specific. this is very nice, though.)

scratch that; I kinda think the raw interface of the serialosc library alone works better than the little grid library sat on top of it. Which makes me wonder if there’s a way to iterate on that grid library.

@jasonw22 I saw monome notes, when I was looking for a way to play linn-like on the monome, but it was a bit overdesign for my needs. It looks cool tho, I don’t have MAX nor max4live on my current machine, so I didn’t test it.

@kasselvania I can make add support for it but I won’t be able to test it well. Do you think you could help me with that?

@infovore never got that thing to work at all.


  • Added way to close other than ctrl-c, press any key to close.
  • Added Norns support.

1 Like

I would love a chance to help out with the none variable brightness testing. I also am currently finishing a build of a custom norns running on an RPi with the same build specs. Not sure if you were thinking about doing a norns build, but if so, I can do some none vari-bright tests there too. Shoot me dm whenever you might be ready for me to give it a test!

I’ll start the non varilight version, you can check the norns version in the meantime.

1 Like