Eight notes, sixteen timbres. A simple, well-commented Norns script for turning Grid into a quantized keyboard.

  • k2: up one octave
  • k3: down one octave
  • e2: change root note
  • e3: change scale

Grid (required)

  • press a key to make beautiful sounds
  • left/right position controls pitch
  • up/down position controls filter cutoff

Crow (optional)

  • out1: v/oct
  • out2: gate
  • out3: -5V to 5V on up/down axis
  • out4: 0 to 10V on up/down axis


Find it in the Maiden project manager


If you get an ‘error: init’ on load, then make sure you have a Grid plugged in. The script doesn’t function without one. If you have a Grid plugged in and you’re still seeing this error then post below with details of what Grid you’re using and how it’s connected to your Norns.


Version history


add “magic mode” where random notes are played over time. To engage and disengage, press the four corners of the grid at the same time. The pace of forgetting past notes has also been slowed.


gridofpoints now checks if a grid is connected and displays an error message if not


button-press memories now fade with time, rather than with action (pressing keys)


gridofpoints remembers which keys you pressed, though memories fade


Fixing inverted Crow outputs 3/4
Added support for grids that aren’t 16x8


Reversed x/y mappings on grid, and output one and two on Crow
Also added a faint echo on grid of the last note you pressed, so it’s easier to remember where you were


Initial release


Just pushed an update to v1.1, with thanks to @theskyis256k for feedback on Discord!


Wonderful! Not tried yet but i was so hoping for this script to exist, thank you!

1 Like

nice job! works well! only other note id add is that it seems that the value of the timbre increases with the value of Y, but i think it would make more sense to have it be inversely proportional, just so that when you’re playing, playing a “higher” row = a higher timber voltage value, considering that Y starts 0 at the top and increases on the way down it’s a bit counter intuitive. again these are only my 2 cents

1 Like

That’s how it was supposed to be but I got the maths wrong on the Crow outputs :sweat_smile:

I’ve incremented the version number to 1.2, fixing that bug and also (I think - please test!) adding support for non-16x8 grids.

1 Like

awesome! will test it out today!

1 Like

New version uploaded. v1.3 remembers which keys you pressed, though memories fade.



Confirmed working with a 64 monobright grid too :blue_heart:

1 Like

This is lovely and simple, thankyou.

1 Like

As suggested by @zebra, version 1.5 of gridofpoints now checks to see if a grid is connected and displays an error message if not (rather than crashing).

As a side effect, it should also now support hot-swapping of different-sized grids without needing to restart the script, in case that’s a thing you ever want to do.

Update to this new version through Maiden at http://norns.local. If you installed the script through the project manager (recommended) then find gridofpoints in the list and hit the “update” button. Easy. If you installed it manually (with the ;install command), then delete your gridofpoints folder and reinstall through the project manager.

1 Like

Unfortunately gridofpoints doesn’t seem to work with midigrid.

I added the following line as documented on the midigrid page, to no avail:

if the script uses g = grid.connect then add a line above that with :

local grid = util.file_exists(_path.code.."midigrid") and include "midigrid/lib/mg_128" or grid

Standing by for further updates.

@branch I can look into this. I’m assuming you get no error in Maiden, the Norns screen just tells you there’s no Grid connected?

I haven’t checked maiden but yes, seeing the “no grid” error on-screen. I’ll report back after testing maiden.

1 Like

I ran into the same issue and fixed it with the following changes (around line 218):

                rows = g.device.rows
                cols = g.device.cols


                rows = g.rows
                cols = g.cols

Not sure if that way it still works with a normal grid, but with the midigrid it does. g.device with midigrid returns a boolean with the value of true.

Very nice script!


Just tested on my normal grid and it works fine! Thanks so much for sorting this @Demure - I hadn’t got round to looking it properly.

@branch Give the script an update and another try, hopefully it works now :slight_smile:


@radioedit, confirming the fix worked like a charm. Stoked!


I’ve pushed version 1.6 of gridofpoints. This version adds a “magic mode” where random notes and timbres from within your scale are played at an irregular tempo which scales to your Norns bpm. To activate it, press all four corners of the grid at the same time, and then do the same again to deactivate.

It also slightly slows the pace that button presses fade with time, because it’s nice to remember the past for longer.

Update through the Maiden package manager.

Future plans include adding MIDI support (relatively easy), and replacing polyperc with something a bit less default.


I’m trying to spend more time actually using the scripts I make, so here’s gridofpoints’ new magic mode sequencing a polyphonic oscillator processed through a filter and some fx. The timbral axis is mapped to cross FM on the oscillator.