Norns: update 181002

breaking up the update mega-thread into individual updates.

download here:


see update instructions

norns 1.0.4

  • BREAKING parameter ids. args to params:add_number() (etc) changed
  • NEW params:add{} table-based param initializer
  • NEW script-level globals reset on load @ppqq
  • NEW cols/rows query added to grid @markeats @okyeron
  • NEW midi key pressure, channel pressure @markeats
  • NEW param type: trigger
  • NEW audio reset, in the system menu. temporary fix for wifi-router-based timesync crashes
  • FIX taper param now midi mappable @artfwo
  • FIX input control on LEVELS screen now works
  • FIX screen attributes now saved/restored when switching between menu/play mode
  • FIX encoder sensitivity in LEVELS menu screen
  • FIX battery current reading (now reads all digits)
  • FIX various grid/midi bugs @markeats


  • UPDATE kernel which fixes earlier USB issues (speed restored to USB2)


please post here if you have trouble with the update.


this update introduces a breaking change in the parameter syntax. why did we do this?

  • previously parameter names could have spaces and non-alphanumeric characters
  • @artfwo is working on automatically creating OSC endpoints for all parameters, hence a param filter would be OSC-controllable via the /param/filter OSC pattern
  • hence we had to make parameter “id” fields safe for OSC strings
  • this also generally makes code look nicer as well, allowing for verbose names but having sensible functions ie params:set('cutoff',4000) but the param displays as Filter Cutoff (hence we don’t need to type params:set('Filter Cutoff',4000)

how to fix scripts that use the old syntax:

  • params:add_x() have an additional argument. previously it was:
params:add_x(name, ...)

now it is

params:add_x(id, name, ...)

where x is number, control, option, etc.

so if you previously had params:add_number("Favorite Number", 0, 100, 0) you need to change that line to: params:add_number("favorite_number", "Favorite Number", 0, 100, 0). and then anywhere you have a params function change the name to the index, ie: params:set("Favorite Number", 3) becomes params:set("favorite_number", 3). easy enough!

furthermore, we’ve made a helper function to make parameter initialization much easier.

params:add_number("scale_mode", "scale mode", 1, 7, 3)
params:set_action("scale_mode", function(n) build_scale() end)


params:add{type="number",id="scale_mode",name="scale mode",
    action=function(n) build_scale() end}

this initializer uses table initialization (notice the curly brackets).

  • you can leave out the name field, and name will be assigned the id
  • attributes can be specified, making everything much more readable so you don’t need to memorize parameter order
  • action function can be specified in the same command
  • you can still use the old way of course

this has the unfortunate side-effect of smashing existing presets. if you want to convert old presets to the new system you simply need to run a find-replace on the whole file for each parameter type. for example, in playfair i converted some old presets by running fine-replace on "1: filter cutoff", replacing it with "1_filter_cutoff". highly suggest some fancy macro-ing for this task.

i apologize for any trouble this causes. we’ve been careful to design for future-forward-ness, but occasionally we’re going to discover moments like this where the architecture needs to be tuned.

huge thanks to @artfwo and @markeats and @jah for parameter design insights. we have a bunch of new features coming that are very exciting.


Perhaps I’m doing something wrong but I’ve tried a couple things:

  • Just 181002.tgz on the drive, nothing else.
  • Both 181002.tgz and the dust folder from recent sync.
  • Added the 181002.md5.

I’m getting the “no update found” error when I select UPDATE from the menu. Reformatted drive just too be sure (FAT 32). Still no luck.


I had to restart a couple times as well. I couldn’t find the update on the first attempt, tho a sleep fixed it.

your browser is auto-uncompressing the file. the filename should be norns181002.tgz which contains 181002.tgz and 181002.md5 (but you shouldn’t need to be concerned with the contents)

1 Like

Thanks. I just removed uncompressed files and added the file I downloaded norns181002.tgz. Still getting the same error.

I tried it with just norns181002.tgz, then did a sync and tried again with dust and norns181002.tgz. Still get “no updates found”. I’m sorry if I’m doing something silly.

unfortunately the update process has some points of failure which are difficult to discover. here’s a more thorough instruction:

  1. format a usb disk FAT32
  2. download norns181002.tgz to the disk, ensuring it didn’t get auto-uncompressed (you should see norns181002.tgz on the disk without renaming/modifying anything)
  3. insert the disk prior to turning on norns (this is not really necessary, but typically ensures it works immediately)
  4. run UPDATE (it may take a long time to copy depending on the USB disk). it will ask to sleep. make it sleep. update runs. auto-sleeps. start again and you should be ok.

let me know and i’ll try to debug further if it doesn’t work

very small nitpick. docs under levels says

Battery percentage level is indicated in the upper right. Hold KEY1 to see current consumption.

I think this is in the lower right now. Reason I realized this is I was trying to figure out why my norns was randomly turning off–I think it may have possibly been due to power consumption being > than ma it could get from my iPhone USB -> outlet charger (says .15A on it)? I plugged it into one I had that was .35A (I am pretty sure the one that came with norns) and no random shutoffs sense.

1 Like

An alternative to using a USB drive is to copy the archive via SSH with

scp norns181002.tgz we@norns.local:~/update

and do the rest of the update process from the device menu.

The disable audio + wifi feature works. Thanks for making a menu item for that. From a UI perspective it’s a bit confusing when I enable wifi, the screen informs me it is “disabling audio”, after which the menu screen says “Error: Audio Engine”. Choosing RESET AUDIO from the menu enables audio as expected.


possibly because I’ve updated repositories manually but getting this error from MLR

“lua: /home/we/norns/lua/fileselect.lua:30: attempt to call a nil value (field ‘init’)
stack traceback:
/home/we/norns/lua/fileselect.lua:30: in function ‘fileselect.enter’
/home/we/dust/scripts/tehn/mlr.lua:730: in global ‘_key’
/home/we/dust/scripts/tehn/mlr.lua:281: in function ‘fileselect.key_restore’
/home/we/norns/lua/menu.lua:281: in function </home/we/norns/lua/menu.lua:258>”

anyone else seen that?

trying to load a clip from a file

this is fixed in master, new update today later


Hi Brian, I am a total noob here - just got my norns and grid. I am trying to update the software to 181008 and followed the instructions (FAT32 and downloaded to USB and it shows norns181008.tgz on the usb) and added usb to norns and turned on power and hit update and nothing happens. it flashes no updates found. Am I missing a step? BTW I haven’t got wifi set up (get failure when I try to set up) but I got the hotspot working. Thanks for any tips.

Sounds like you have all the steps right - maybe try putting the USB stick in a different slot and see if it finds it then? I assume you have the .tgz file in the root and not a subfolder. I’d just retrace my steps on this - usually it’s pretty easy as updaters go.

Thanks, that worked. I had Grids in the 1st USB slot and unplugged it and it updated. Much appreciated. Now to learn the basics (uploading scripts as well as audio files to MLR and I will be on my way) - thanks again and next goal is to get WIFI to pick up my network - still getting password fail.

1 Like

Getting the network to work was what I was getting stuck on when I started - can’t remember how I suddenly got it to work tho!

One thing to be sure of when you try to connect. Spin the right knob to select your network before clicking the button and setting your WiFi pw. If you mess up and try to connect to the network with an empty string network name you’ll mess up the system and should sleep and restart.

Thanks, I missed this earlier and then figured it out yesterday. I tried it a few times today and got my network and password correct but still getting password fail. Been going through the threads and trying to figure out what I am doing wrong

i haven’t been able to get it working either. my password is quite long and has spaces and a # sign in it so i am thinking there might be an issue there. but my router is also really really bad and is getting replaced so i have been holding off on troubleshooting for too long. let us know if you get it working! if you get impatient though the hotspot mode should work well

Thanks, I am using the hotspot and cyberduck from Mudlogger’s advice and that works for now! It may be a router issue as well on my end - perhaps.

1 Like

yeah i bought a ‘nice’ router a couple of days ago (not specifically for this reason, it was a long time coming) and it’s now working as expected. was definitely a router issue for me.