Norns: update 181008

apologies for the fast followup. minor bug crept in the last update that caused somewhat major issues for sound file loading.

but! new features! also bumped version to reflect proper semver (sorry @zebra!)

get it here:

norns 1.1.0

  • BREAKING parameter ids. args to params:add_number() (etc) changed (introduced last version, but reiterating here).
  • NEW OSC mapped parameters @artfwo
  • ADD updated docs @ppqq
  • FIX fileselect unit (affects mlr,etc)


  • ADD mlr update (recall feature)

previous version:

mlr — new feature — RECALLS

TOP ROW, four keys to the right of PATTERNS. four “macro” keys, which have events assigned to them.


  • clip start/stop/cut
  • set loop
  • change speed/reverse


  • push RECALL key to start “recording”
  • do “events” you want recorded (ie, stop playback on ch 1,2,3)
  • push RECALL again to stop recording.
  • now when you push this RECALL key, all of the events you recorded into it will be executed immediately.
  • hold ALT and then push RECALL key to clear its events and prep for re-record


  • stop groups of clips at once
  • specific cut positions for multiple tracks
  • reconfigure speeds in set arrangements


  • expand to save various parameter data (volumes, etc)
  • “hold” mode where RECALL is only active while held (and values are returned on key-up)

OSC param mapping!

you can now send OSC to norns parameters without extra scripting.

for example, in awake

/param/cutoff 800

will set the cutoff param. all params are mapped under the params namespace.

you can also set the global mix levels (SYSTEM > AUDIO) via:

/param/mix/output 0

(this will turn the output to 0db)

you can of course still make your own OSC functions that respond to various patterns. it’s just that these params now work automatically. thanks @artfwo!!


Some clarifications about the OSC parameter mapping: it is also possible to change option and file parameters via OSC - make sure that you send full path to a file (e.g. /home/we/dust/audio/something.wav).

When a parameter is created in a script as follows:

params:add{type="control", id="cutoff", name="Cutoff", controlspec=cs_CUT, action=function(x) engine.cutoff(x) end}

It will be accessible via OSC by the id argument, e.g. /param/cutoff for the above example.


to clarify even more :slight_smile:

if the script uses the “old” syntax:

params:add_number("decay","Decay Time",0,100,0)

decay is the id, whereas Decay Time is the name (which is displayed in the menu)

so you can access this with OSC via

/param/decay 40

(this sets it to 40)