Giro is a performance oriented (a)sync looper.


I built a looper as a first Norns script for my own purposes. All buttons / commands are midi mappable so this thing can be operated with midi foot controller with both hands on instrument. It’s useful to me so maybe it’s useful for someone else too.


  • norns
  • audio input



  • There are 6 loops. Loops are mono. Input is read from left input of norns.
  • Master loops are cut to length when pressing play or stop after recording.
  • Secondary loops are multiples (1-8) of master loops.
  • Loops are synced to master loops when playing is started.
  • There can be multiple master loops within a loop group which are then asynchronous.
  • Rate can be adjusted for loops and they will get async but will be synced again when stopped and started.
  • There is a one step undo so it’s possible to revert to previous loop state and cancel current recording.


  • white dot - selected loop
  • number - loop number, suffixed by c when there is content in the loop
  • status - status of loop (rec/ovr/play/stop)
  • arc - loop progress bar
  • vertical bar - loop level
  • horizontal bar - loop pan
  • m(number) - number of master loop e.g. m1
  • x(number) - number of loop multiples
  • g(number) - number of loop group
  • G - group play enabled when visible


  • E1 select loop - Selects active loop.
  • K2 rec/ovr/play - 1st press will start rec for empty master loops and overdub for secondary loops. 2nd press will play loop. Next press will again overdub.
  • E3 stop - Stops selected loop.
  • K1+K2 enable group play - Group play will toggle group play on/off when on there is a “G” in upper right hand corner visible. In group play mode all loops within group start when one loop is started and all loops within group stop when one loop is stopped.
  • K1+K3 clear loop - Clears loop contents.
  • E2 loop level - Adjusts loop level.
  • K1+E2 loop pan - Adjusts loop pan.
  • E3 loop group rate - Adjusts rate for the whole loop group at once.
  • K1+E3 loop rate - Adjusts rate for selected loop.


  • master loop - it’s possible to assign secondary loop to follow another loop by selecting corresponding loop number for master
  • loop group - loops can be grouped to loop/choke groups so that starting a loop from another group will stop currently playing group
  • loop multiple - loop can be a multiple of 1-8 to it’s master loop. Note: if master loop length * multiples > maximum loop length - multiples will be reduced accordingly
  • level - loop level
  • pan - loop pan
  • rate - loop rate (-2x,-1x,-0.5x,0.5x,1x,2x)

There are toggles for all the buttons so that they can be mapped to e.g. midi foot controller.

  • record/ovr/play
  • play
  • stop
  • stop all
  • clear
  • undo
  • next loop
  • previous loop
  • group play


  • If loops have contents when saving a pset loops will be saved to /audio/giro/. Having content in loops 1,2 & 5 will result in 3 wav files
  • Loop wav files are named pset_name_loop e.g. "preset1_loop3.wav.
  • As the naming is based on the pset name the loop files will be overwritten if the name for 2 psets are the same.
  • This way it’s possible to save e.g. 2 different sets of parameters with same loop content if pset names are the same. If you wish to only save parameters without loops, clear loops before this.

Stuff to do next

  • Test & fix bugs
  • Maybe grid UI for more hands on performance and less menu tweaking


  • Norns studies and all who have participated in building those
  • Softcut and all who have participated in building it
  • @infinitedigits for oooooo and rc505 scripts I have been reading thru and trying to learn something
  • @kbra for a couple of useful suggestions for a looper
  • @dan_derks for helping me replace board with fishy encoders
  • @bereenondo for advising me on terminology (getting rid of master/slave, sorry about that)




I hope I’ll get another Norns soon so that I’ll have a chance of trying this out. Looks very close to what I wanted to do as well!

(And sorry for forgetting to reply to the latest DM, feeling kind of hare-brained now!)


Congrats for your release! looking forward to using it.

(FYI, the norns screenshot is barly visible on a white background)

Looks great!

Just to clarify, can it in fact be asynchronous? …or are the loops always a division/multiple of the original length?


If I understand it correctly, “there can be multiple master loops within a loop group which are then asynchronous” explains that: you can have both synced loops that follow a certain master loop as a multiple of its length - and several master loops that are independent (asynchronous) from each other.

1 Like

Ah, Thanks. The wording was a little confusing to me.


Yes, exactly as kbra interpreted from my scribbles. So if you set e.g. loop 3 master to 3 it will be a master loop of its own and can be fully independent of other loops and thus async.

Thanks for the note! I’ll update with slightly more informative screenshot & instructions. Kind of learning as I go :slightly_smiling_face:


This is great! Direct/easy to use, but with interesting features. Love the ability to have combinations of synced and asynchronous loops!

Question— I see the command to save the loops (works) but when I tried to save a preset and come back to it my previous loops didn’t load with it. Bug? Feature request?

Awesome work. :star_struck:

1 Like

Heyp & thanks! The save loops functionality was created with the idea of being able to take Norns out to a cabin, record stuff and then dump the interesting bits to DAW back at home. I hadn’t thought of the use case of loading recorded loops back. So sounds like a feature request in that sense :slightly_smiling_face: I could look into this when I have time. How would you use this? Load some prerecorded loops & then creating new stuff on top of that?

there are some very handy pset callback functions.

The docs are great and straight forward. However, free to DM me if you have questions how to implement this.

1 Like

I was thinking of when you’ve got a set of loops recorded and you have to end the session for whatever reason. Would be great to be able to save as a preset and be able to come back, reload, and have your loops repopulate so you can keep working/playing.

1 Like

Cool! I think I’ll do this next. I might add a switch whether loop wav files are saved with preset. I think that I might save presets for live settings to preset parameters but would not want to save the loop files every time. Have to think about it a bit.


wow, @JulesV , this feels like such a lovely example of functional programming – seeing how all of the LOOPING LOGIC FUNCTIONS feed into the clock_tick is really really inspiring. i think this also captures a lot of musical gestures that folks have been seeking. what a wonderful contribution, thank you for sharing giro with us all! :sparkles:


Thanks! Norns is becoming an integral thing in my playing and the whole community effort in addition to the masterminds behind it is unbelievable. So, nice if something I create is of use to someone.

I think I copied with pride the idea from rc505 by @infinitedigits, so hats off to that direction. In that script it is used to sync to Norns clock but I used it because it felt logical and helps extend to clock syncing in the future if so happens. I think it helped with keeping loops in sync when starting multiple loops at once. I’m not a developer by trade so I’m just stumbling about and trying to learn and build on what others have created.


Minor update. The loop files are now saved with pset and will be loaded back to Giro as pset is loaded. Ping @spacelordmother. Thanks @sonoCircuit for pointing to right direction & docs.


Awesome - can wait to try it. Thank you thank you!

This looks great. Seems very, very simple which is exactly what I need :slight_smile:

Will try it today.

Same here! Simple tools for simple minds :smiley:

1 Like

Fixed a bug related to this. Empty loops were not properly sized when loading a preset but is fixed now.


wow, I’ve been away from norns for a bit and it’s really amazing to come back and find this looper!
Also I’s really great that RC-505 was some inspiration!

Let me say a big thank you for finally making a synced looper, which is pretty straightforward and playable and can be anychronous if one wants and needs it.
We have a lot of experimental, asynchronous loopers on norns, some are really amazing ones too, but very little ones that work well in sync.
Do you have plans regarding external sync intergration?