arc rhythm generator for norns.


a straightforward attempt at porting stretta’s arc rhythm generator to norns.

unlike in the original, all patterns are in sync (quantized) by default, but they can be switched to unquantized w/ K2 + arc (also changes the individual speed).


norns, arc (optional), grid (optional)

norns firmware >= 221214 (update instructions)

timber needs to be installed.


when arc detected:

-- arc        - density
-- K2 + arc   - quantize off
--              & speed control
-- K2 + K3
--    + arc   - quantize on
-- K3 + arc   - offset
-- K1 + arc   - randomize ring
-- K1 + K2    - randomize all
-- E1         - clock speed
-- E2         - transpose sample
-- E3         - filter freq
-- K2 + E3    - filter res

when no arc detected, a cursor appears & allows selecting 2 rings at a time, w/ E2 / E3 acting as arc encoders:

-- E1         - select rings
-- E2/E3      - density
-- K2 + E2/E3 - quantize off
--              & speed control
-- K2 + K3
--    + E2/E3 - quantize on
-- K3 + E2/E3 - offset
-- K1 + E1    - clock speed
-- K1 + K2    - randomize all
-- K1 + E2    - transpose sample
-- K1 + E3    - filter freq

Future Evolutions

this was the fastest i ever wrote a script.

it’s pretty clean as it is, but expect the following evolutions:

  • :heavy_check_mark: unquantized mode
  • :heavy_check_mark: nb voice support (for midi, crow, oilcan…)
  • :heavy_check_mark: arc-less workflow
  • :heavy_check_mark: pattern edit mode? (using grid and/or arc + norns button)
  • :heavy_check_mark: pattern save in psets
  • :heavy_check_mark: more quantize options for pattern offset (via grid)
  • :heavy_check_mark: (midi) start/pause/stop



nice!! would love to have an ARC!


it may work w/ toga (untested).

EDIT: now usable without arc.


What a riot, love this thank you! I can see all the items on your evolution list being useful. Grid integration especially, for instance being able to save states and jump between them on the fly ! Amazing stuff.


no fucking way - i literally spent last weekend porting stretta’s patch to norns for my own use lol

so amazing!! stretta’s videos were some of the first monome videos i saw and really made me want to get into the ecosystem.

one thing i did for my script was crow gate outs for the 4 rhythms - i might make a PR if that’s of interest (it’s a trivial change if anyone wants to just do it locally).


registering interest


This looks fantastic! Looking forward to giving it a go. Does it have crow as an output option or are you thinking about adding it?

1 Like

i’ll certainly just give it midi/crow/nb_voice output support w/ nb.

EDIT: done :heavy_check_mark:

for crow, one would need to have the nb_crow mod on.



this is awesome!

i dug into parameters and discovered all the sample loading and noiz manipulation in there!

one request…
can we get MIDI start/stop?


implemented unquantized mode.

also made it usable without an arc.


you are amazing! thank you sincerely
unquantized mode + nb crow additions make this really appealing to me :smile:


now, someone has to port stretta’s grainstorm …


Hey, just updated and now getting an error load fail message

maiden read out

script load: /home/we/dust/code/argen/argen.lua

MISSING INCLUDE: argen/lib/nb/lib/nb

SCRIPT ERROR: load fail

/home/we/dust/code/argen/argen.lua:52: MISSING INCLUDE: argen/lib/nb/lib/nb

stack traceback:

/home/we/norns/lua/core/norns.lua:146: in function </home/we/norns/lua/core/norns.lua:146>

[C]: in function ‘error’

/home/we/norns/lua/core/startup.lua:49: in function ‘include’

/home/we/dust/code/argen/argen.lua:52: in main chunk

[C]: in function ‘dofile’

/home/we/norns/lua/core/script.lua:199: in function </home/we/norns/lua/core/script.lua:199>

[C]: in function ‘xpcall’

/home/we/norns/lua/core/norns.lua:147: in field ‘try’

/home/we/norns/lua/core/script.lua:199: in function ‘core/script.load’

/home/we/norns/lua/core/menu/preview.lua:23: in function ‘core/menu/preview.key’

/home/we/norns/lua/core/menu.lua:147: in function </home/we/norns/lua/core/menu.lua:124>

script clear

calling: nbout post cleanup

calling: stop cyrene

calling: clear the matrix for the next script


/home/we/norns/lua/core/clock.lua:58: bad argument #1 to ‘resume’ (thread expected)

stack traceback:

[C]: in function ‘coroutine.resume’

/home/we/norns/lua/core/clock.lua:58: in function ‘core/clock.resume’

ah, seems like maiden update doesn’t fetch submodules.

this is the lib for midi/crow/jf/oilcan output that is missing.

could you uninstall & reinstall?

Amazing! Thanks so much for adding that. Cant wait to trigger some teletype scripts with it.

1 Like

Really enjoying the script - here’s a quick demo I posted


just noticed in your instructions…for RES

it’s actually K2 + E3 :stuck_out_tongue:

also…had a bit of a hiccup tonight…
running argen on three norns and all three stopped playing after they went to sleep.
i woke them up and couldn’t get them to move for a bit.
started and stopped my clock and moved the arcs around and they started up again without having to kill the script.
which was good…i had loaded a hoard of other samples and made all sorts of LFO mods to things. :stuck_out_tongue:

another weird thing…under Playback START and END.
on some samples it was jumping to MINS and HOURS… :crazy_face:
i don’t have any samples that long in there at the moment. heh!
i couldn’t fine tune the length very easily so i just kinda rolled with what i could set.

had one sample get stuck playing after i stopped everything.
it’s one of the samples that thinks it has MINS or HOURS of time.

tonight’s noiz session was using argen like crazy!
running argen on three norns and arcs.
other noiz weaponry: Noystoise NTSH & NTV, Mbase11, Buchla 208C and a horde of FX. :stuck_out_tongue:


@mlogger & @SPIKE: great hearing those demos.


thanks for reporting the mistake in the instructions :+1:

i only have a shield, so can’t reproduce the sleep behavior unfortunately.

for the sample params, i’m afraid i just use timber blindly as a lib & if bugs exists in the length reporting it might be inside it.


Hey, am I just thick or are you only able to map all four rings to one outgoing midi channel? I was just trying to sequence my m8 from this script and it wasn’t giving me the option to assign more than one channel of midi.

This is a great script, already tonnes of fun. Thank you so much! And very much appreciate more love for the arc!

thanks for reporting, should be just fixed.


  • feature: (basic) grid support to edit current ring pattern!
  • fix: led not firing on some high speeds
  • fix: density decrease was too fast
  • usability: don’t make screen blink by default (tweakable in params)