read about this script this morning and i’ve been thinking about it all day. such an incredible concept + execution, thank you for sharing!


hats off to you - you’ve done it again! - iLL vibes instantly

:beers: :mechanical_arm:

1 Like

as always this is so neat looking!
I’m going to get it loaded up today and give it a play during reading time for our after school group :slight_smile:

the interface makes me want to start programming for norns it is so fantastic.


@infinitedigits Stunning work as always Zack… this is an incredibly beautiful script, its totally accessible and things get going really quickly but the scope is enormous.

The internal engines sound wonderful too but sadly I’m struggling to get any external MIDI output from anything other than channel 1. This seems to be the case on all the instruments and regardless of what the channel is set to, its always outputting on ch1.
It could be a user thing but the MIDI settings do seem to be self explanatory.
I wondered if anyone else has had this experience too.

Also when working with MIDI I was wondering if there was/will be a way to mute or disable the internal audio tracks. Interestingly I used the volume param and when it gets to -38.8dB here the MIDI (still only on channel 1 mind ;o) also stops getting sent.

o-o-o is lovely as it is but I’m salivating at the prospect of it controlling the synths in the room too!


That is my experience with the MIDI as well…only appears to send on ch1.

1 Like

v0.1.0 - now we’re cooking

  • new feature: new engine MxSamples. (PARAMS > engine to change engine, then PARAMS > lead/pad/bass/etc > sample to change sample)
  • new feature: crow support (PARAMS > lead/pad/bass/etc > crow out)
  • ux: midigrid support
  • ux: grid button to toggle playing/pausing
  • ux: k1+e3 will add random connections and also remove last connection
  • bug fix: add midi channel

bunch of planned changes implemented and ux improvements and a bug fix!

you can now switch to mx.samples (ping @DoS @danbond) if you have that engine installed and some samples downloaded. doing so will remove a bunch of parameters in the PARAMS menu and give you a new paramter called “sample” where you can set the sample of each. one note: the “pad” instrument attack envelope has a long attack and you’ll likely want to turn that attack down for your sample (i.e. if selecting the music box or kalimba - both highly recommended) otherwise you won’t hear it. you also might need to boost the volume of the sample because the leveling is also defaulted to the odashodasho engine. each instrument can have its own sample. my favorite combo so far is def music box + drums_violin.

crow support is also added (ping @hghrlearning @Wind-up_Bird ). it uses up two outputs - one for pitch and one for envelope. so you can set any instrument to crow 1+2 or crow 3+4.

midigrid is now supported! whoops I forgot about that. I haven’t test that so lmk if it doesn’t work.

randomization is added! (ping @Ukasz) use k1+e3 to randomly add connections with a clockwise rotation. connections are removed (last removed first) if you do a counter-clockwise rotation.

and yeah I forgot to implement the midi channels. should be fixed now @CALC, lmk if it persists.

thanks everyone for the kind words and encouragement. I’ve really enjoyed seeing all the cool creations, i.e. @headphonic, @mrisney, @mattallison, @SPIKE, and many others! you are all taking this script to places I never thought of! so cool to see.

there’s not a way to do this yet…setting the volume in the track also sets the midi volume. I can add a toggle for muting the engine in the next update! (as a fast hack you can change this line to: conn:note_on(a.note,60,math.floor(params:get(a.type.."midi_ch"))) so it won’t be affected by the volume)


20 characters of oh wow!


Dude you killin it :grin:

1 Like

Gets my vote for innovative UX implementation of the year.




MIDI Channels

You never cease to amaze me Sir and I mean that literally.
Indeed now we’re cooking.
In fact, feels like we’re cooking what will soon become my favourite meal!

Thank you Maestro


thanks @Senorakubra for the kind words! I made a typo though!!! it should be k1+e3. I corrected the above post, sorry for the confusion.

1 Like

That should be “(last added first)” right?


Works from the get-go for me! And the individual channel mutes are great; thanks for adding them too, and of course mx.samples expands the options quite radically. Cheers!

1 Like

like other people i am FLOORED by this design
genuinely can’t find apps like this anywhere else and feels like a great intersection of ideas

thanks @infinitedigits !!


wow just downloaded this gem and it is so much fun!
background music for reading time is now o-o-o and no longer lofi-girl haha

the mx samples integration is wonderful

this interface would be perfect for the CL styled filter workstation (stuber) I’ve wanted to make for norns

fantastic work @infinitedigits


for anyone familiar with the shnth if you want to get into some deep cough syrup zones just load up a buttload of random connections on an instrument.

it will start to slow down considerably

this is a great pool to play in

now when you are ready to get out of the pool hold onto your hat

because everything speeds up considerably when you then scroll all those random connection back out.

like using a delay line with feedback turned up reacting over time to your movements but with data!


Oh my god, this is genius.


Oh wow, I just spent a few minutes with dasho that could have easily become hours. Looking to update later to try using a midi channel per track. What a crazy nice new script.

Do you think its possible to use the second half of the grid to have a second snapshot per track to switch to when performing? Or have one like a baseline and a second one to play around with and always be abke to come back to your initial composition?

Great work, i dont know how you do it, but i would love to see what you could make hardware wise just looking at the history of your scripts… Genius!


I’ve reckoned @lazzarello’s FM7 (Norns) engine could use some UI love especially for gridless setups, and I kind of made a couple of private sketches, but now this cable thing of o-o-o is giving me some ideas and nudges.


I love it! Also just spent about an hour listening to one patch, with barely changing anything :).

One thing though, even though mx.samples is installed, I can’t seem to change the engine in the parameters. It just does not let me.

1 Like

Its a lovely script. However am running into trouble when selecting MXSamples, it will load one or two instruments but then stalls and I get this:

/home/we/dust/code/o-o-o/lib/grid_.lua:119: table index is nil
stack traceback:
/home/we/dust/code/o-o-o/lib/grid_.lua:119: in method ‘get_visual’
/home/we/dust/code/o-o-o/lib/grid_.lua:149: in method ‘grid_redraw’
/home/we/dust/code/o-o-o/lib/grid_.lua:39: in field ‘event’
/home/we/norns/lua/core/metro.lua:164: in function </home/we/norns/lua/core/metro.lua:160>

the above will scroll on infinitum…

In another instance if I pause play it will not respond to a restart, or it will appear to double up the grid with instead of there being 8x8 it will attempt to become 16x16 with the back/forth selection buttons buried.

On load there is an error in Maiden as follows:



I can see the mx.samples directory and those files in the sidebar.

On a Norns Shield with the latest Grid, and have restarted both soft and full sleep a couple of times, maybe have too many instruments download into MXSamples?

1 Like