less concepts 2.1.1

:confused: OH! I missed something. thank you!! brb

edit: @yobink, should be fixed now. please update and confirm?

1 Like

It works!! Thankyou so much!

1 Like

Still not working here. If it helps, when I select Save, matron is saying:

    lua: /home/we/dust/code/less-concepts/less_concepts.lua:880: standard output file is closed

    stack traceback:

    [C]: in function 'io.write'

    /home/we/dust/code/less-concepts/less_concepts.lua:880: in field 'action'

    /home/we/norns/lua/core/params/trigger.lua:35: in function 'core/params/trigger.bang'

    /home/we/norns/lua/core/params/trigger.lua:23: in function 'core/params/trigger.set'

    (...tail calls...)

    /home/we/norns/lua/core/menu.lua:496: in field 'key'

/home/we/norns/lua/core/menu.lua:164: in function </home/we/norns/lua/core/menu.lua:141>

super helpful, thank you! sorry for the speedbumps!

mmm, that first line looks like your folder is named less-concepts but the set saving + loading functions require less_concepts. I think this is directly related to my poor naming scheme in the GitHub, which I’ve now corrected!: https://github.com/dndrks/less_concepts

confirm? sounds like @mlogger hasn’t experienced the same issues, so i’m hopeful that it’s just a naming thing

edit: also, maaaajor thanks to @nattog for the external sync fix <3


Maybe I am missing it, but it appears that @mlogger and others were able to get this to route to external synths? Is there a parameter somewhere that allows that, or did y’all manually change the script itself?

And @dan_derks, thanks for the amazing script!

1 Like

I just had a few moments with Less concepts and really like it. There are still a few things I don’t understand though:

  • saving and loading presets works fine, but is there also a way to alter, delete or re-save single presets in a set? I thought this was a new feature but can’t find it.
  • What are the off1 and off1 parameters in refrain doing? And is it a glitch or intentional that between 0.1 and 0 sometimes there is a value 2.7755575615629e-17 ?
  • Is there a way to stop it / choose no gate as it is at start up?

Got the MIDI working. It seems that the MIDI OUT is only functioning if it is set as the 1st slot in SYSTEM/DEVICES/MIDI

1 Like

Could we add a bit of this sort of thing to make midi device a param?


  midi_device = midi.connect(1)
  midi_device.event = midi_event

  params:add{type = "number", id = "midi_device", name = "MIDI Device", min = 1, max = 4, default = 1, action = function(value)
    midi_device.event = nil
    midi_device = midi.connect(value)
    midi_device.event = midi_event

I nicked this bit of code from @markeats :grin:


(gonna take these excellent q’s one at a time. thank you all!)

snapshots: non-persistent (unless saved as a set) captures of the current less concepts performance page configurations for seed, rule, low, high, octaves, and bits.

to create a snapshot: on the less concepts performance page, tap key 2 from any parameter. this will save all the aforementioned elements as a recallable snapshot.
in the UI, these are located in the lower right:

to recall a snapshot: once you have some snapshots, use encoder 1 to navigate down to the snapshots. use encoder 2 to select a snapshot and press key 2 to launch the currently selected snapshot.
(secret fun thing: if you press key 3 while in the snapshot section, you can randomize all the parameters on the performance page. this makes for quick and easy derivations from a currently selected snapshot, which can be undone simply by hitting key 2 and re-launching the current snapshot.)

to delete a snapshot: navigate to the snapshot you’d like to delete, press and hold key 2 and, while holding, press key 3. this will delete the currently selected snapshot and shift all the snapshots to the right of it one to the left.

what if I delete a snapshot I currently have loaded?
though it will disappear from the snapshot pool in the bottom right of the screen, the overall state of less concepts will not change to the snapshot that was shifted to the left – for the sake of continuity, you will have to launch the snapshot if you want the current state to change.

I have selected the snapshot I wish to delete…

I press key 2 to delete it, but the state of less concepts does not change (except for the number of snapshots)…

I press key 2 to launch the snapshot that now occupies the second slot, forcing a state change:

(nb. just in case it helps anyone else…)

set: a persistent saved collection of all the current snapshots.

how to save all your current snapshots as a set: once you have a batch of snapshots you like, press key 1 and navigate to the right-most system params menu.

at the top of this menu, you should see this screen…

assuming we want to save the current snapshots to set 1 (nb. if not, then just change the set number) navigate down to save and tap key 3. you’ll see an indicator that the save has completed:

to test it, go back to the performance page and delete all your snapshots (trust!):

then, go back to system params and this time, select load (nb. make sure set is the same number you just saved under):

head back to the performance page and you should see your snapshots returned (!!!):


~ r e f r a i n is comprised of two 8 second buffers. it uses the same bit gating mechanism as less concepts, but instead of using those gates to determine if a note is triggered, ~ r e f r a i n will use those gates to reset each playhead back to its starting point.

by default, the starting point for each playhead is 0 – this is indicated in off1 and off2.

depending on the tempo/bit/gate prob settings, you may never venture more than a second into the 8 second buffers (because ~ r e f r a i n is being reset back to it’s starting point with the bit gates). so, I thought it’d be helpful if the artist could manually push that starting point, to read+write along the whole 8 second buffer.

I’ve found that it’s especially effective if you set a decent fb level (~0.6+) and use key 3 to randomize the off param while rec is engaged in the bottom right. do that for 30-45 seconds and then flip to play – if your melody line from less concepts (or external input) was varied enough, you’ll find a great variety of material to scrub through.

the intended effect of ~ r e f r a i n is to quite literally build refrains. as I’ve explored repetition and variance, the idea that humans naturally infuse meaning into cycles + recurring events resonates louder and louder (for me). ~ r e f r a i n is a way to help create emotional touchpoints by capturing micro-moments of less concepts – a sort of counterpoint through manipulating the recent past against the still-iterating present.

glitch. I’ll take a look – seems like something’s gone weird with util.clamp(track[n-1].offset+d/10,0,8)


totally! you can use enc 2 and enc 3 when you have the bit section selected to move the -'s all the way to the right. this makes the selected bit = 0.



nb. the bit positions are parsed right to left: 87654321(0)


Ah, there it is - thank you! I admittedly mixed up the nomenclature of snapshots, sets and presets.

Great - thank you for pointing me there! I tried it by setting rule to 0. Works too but rule is set to 0 then. Would it be possible to get that bit zero on the grid UI too? I try not to use the Norns UI too much because I constantly mix up the encoders and buttons and accidentally change settings I don’t want to change in all apps. E.g. in refrain mode I like changing the settings and switching play/record on and off. But I tend to forget to turn the encoder back to highlight play/record after changing parameters above and just randomize everything. I don’t use key 3 randomization very often and wondered if it would be a good idea or at least possible to have a setting where randomization is switched off and keys 2 and 3 are always toggling play/record independently from the encoders and the current highlighted parameter? Or having the play/record toggles for refrain on the Grid UI? The analogy between the setting in the lower left corner of the screen and keys 2 and 3 is just too inviting but also as intuitive as it is misleading me. :blush:

I had a lot of fun with Less concepts this evening!

1 Like

float rounding glitch on display. try this thing when printing:


gives 3 decimal precision to x

bonus: always prints 0’s so 1.000 etc


Holy cow, this is just amazing, I hadn’t even cottoned on to it. So coo, thanks @dan_derks!


Theres a couple of things that don’t seem to be saving as a set - Midi Ch vox settings, scale setting and bpm. I just saved a bunch of patterns yesterday and reloaded today. All the patterns load fine but are set at the default 110 bpm and ionian scale.

ah, by design! set saving was specific to snapshot data, but I’ve adjusted things and pushed an update to the script

“set” save/load in v2.0.2 includes:

  • snapshots
  • bpm
  • clock out setting
  • midi out channels
  • scale setting
  • global transposition

you should now be able to load your previous sets, make changes to the desired parameters, and re-save in the same slot. confirm success?


@dan_derks I can’t say enough thanks for this script! It’s the friggin’ best! So inspiring and just getting deeper and deeper. Even without refrain it was fantastic. So many nice surprises keep unravelling. Thanks Dan!

1 Like

thank you for the kindness, Jonas! hope all’s well and please share any experiments! hearing what people do with it and how they interact with it helps drive a lot of the development :slight_smile:

1 Like

This is superb!

quick jam with it


by golly - it works! Thankyou Dan, you are a legend :slight_smile:

1 Like