Norns: studies



i’ve just shipped the last order. like just now.

the study is up next. (actually, a series of studies). thanks for your patience. tomorrow’s only task is getting the next study done.


just got it hooked up! loving the studies, super easy to follow.

i did have one note, and sorry if this is the wrong place to mention this or if i’m just wrong for some reason:

in study 1, the section “the robots are mad” which is designed to throw an error doesn’t throw the error for me. reading the addendum, i think this is because position is defined (correctly and globally) in the copy of the study 1 script that comes preloaded on norns. so in my own untitled lua script for the study it doesn’t actually matter if i define it first or not. this does still illustrate the danger of global/local variables, though…

thanks to all for their work on this thing! so exited to figure it out


@ypxkap thanks for the tip, i’ll investigate!


in case anyone would like to proof this while i shoot a quick demo vid:

will have it on the main site in a couple hours.


MIDI is still around and it's still fun. plug in and get to the command line:

Should “plug in” be replaced with “plug a USB MIDI controller into norns”? The study starts off with a grid example, so this part is ambiguous.

push a key and you'll see something like:

“push a key” should be “push a key on the MIDI controller” since norns has keys.


it is live:

thanks to @ppqq and @trickyflemming for last-second edits


(@tehn, old vid embedded in post above!)


Just in time for my latest project!


Yay, I have been eagerly awaiting the midi study! Thanks, @tehn!


thanks @Dan_Derks!! fixed.


Not sure if this should be asked here or in Norns Scripting:

The norns study part 4 “physical” says that this is the method to access grid keys:
g = grid.connect()
g.event = function(x,y,z)

Whereas the original AWAKE script (the only one that I’ve been modifying over and over so far) just uses:
function gridkey(x, y, z)

What’s the recommded way of accessing grid keys?


the new syntax is necessary. the original awake used an old method of accessing the grid, which was completely redesigned (hence the month lapse in studies).


Thanks much – that’s the final trigger for me to update (still on 180707 IIRC), as I love to do the studies.


I can’t manage to use (or receive?) incoming MIDI clock with beatclock. I tried the following:

beatclock = require ‘beatclock’
clk =
clk_midi = midi.connect(1)
clk_midi.event = clk.process_midi

function init()

clk.on_step = function() print(“step”) end
clk.on_select_internal = function() clk:start() end
clk.on_select_external = function() print(“external”) end

My ROLAND UM-One MKII is receiving MIDI clock from analog RYTM and is associated to the port1 in “devices”.

When using internal MIDI, “step” is printed in Matron, switching to external makes appear external but that is all, the ‘print step’ function is not activated anymore.

BTW i’ve got a big gig on Saturday and i would really like to use my norns but i need to figure that thing out first so… help anyone? :kissing_heart:


Can you confirm your roland device is showing up to norns as a MIDI device (in SYSTEM>DEVICES>MIDI ). Or that you can re-select it?

My Roland drum machines don’t show up at the moment due to the USB system getting pushed back to USB1.1 in the recent update (due to various errors on the USB system)


@okyeron Yes it is present in devices 1, I also tried to reselect it.


i don’t have a roland um-one but i’ll check with another device to ensure sync is working.


The grid/midi tutorial is great. So simple and elegant.

If I want to update the studies on the device, is it safe to go a git fetch && git rebase origin/maser?


Hello all! I started documenting my own studies learning norns/supercollider/lua on medium that I’d like to share (is this the right place?)

Hopefully this is helpful to some newcomers, especially when it comes to hacking on the lower level Supercollider engines.


This is exactly what I am after - even starting with a Gendy engine - thanks for sharing :slight_smile: