Cyrene: a drum sequencer based on Mutable Instruments Grids

I’ve probably screwed this up as I’m a complete novice. But after installing I’m getting a load fail and can’t figure out what I’ve done wrong…

Perhaps I should be posting for help somewhere else? Sorry this is all so new to me.
Here’s what I’m getting in matron -


norns version: 0.0.0

git hash: d611b870

running startup


grid added: 1 monome 128 m1000659 m1000659

arc added: 2 monome arc 2 m0000920 m0000920


pset >> read: /home/we/dust/data/system.pset

# script clear


available engines (15):
















# script load: /home/we/dust/code/cyrene/cyrene.lua

# cleanup

# script clear

including /home/we/dust/code/cyrene/lib/sequencer.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/grids_patterns.lua

including /home/we/dust/code/cyrene/lib/euclidean.lua

including /home/we/dust/code/cyrene/lib/ui/euclidean.lua

including /home/we/dust/code/cyrene/lib/ui/util/label.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/euclidean.lua

including /home/we/dust/code/cyrene/lib/ui/details.lua

including /home/we/dust/code/cyrene/lib/ui/util/label.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/ui/pattern_and_density.lua

including /home/we/dust/code/cyrene/lib/ui/util/label.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/ui/more_density.lua

including /home/we/dust/code/cyrene/lib/ui/util/label.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/ui/euclidean.lua

including /home/we/dust/code/cyrene/lib/ui/util/label.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/euclidean.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

including /home/we/dust/code/cyrene/lib/ui/grid.lua

including /home/we/dust/code/cyrene/lib/ui/util/devices.lua

### SCRIPT ERROR: load fail

/home/we/dust/code/cyrene/cyrene.lua:232: attempt to index a nil value (field 'transport')

stack traceback:

/home/we/norns/lua/core/norns.lua:126: in metamethod '__newindex'

/home/we/dust/code/cyrene/cyrene.lua:232: in main chunk

[C]: in function 'dofile'

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

[C]: in function 'xpcall'

/home/we/norns/lua/core/norns.lua:127: in field 'try'

/home/we/norns/lua/core/script.lua:154: in function 'core/script.load'

/home/we/norns/lua/core/menu/preview.lua:21: in function 'core/menu/preview.key'

/home/we/norns/lua/core/menu.lua:139: in function </home/we/norns/lua/core/menu.lua:116>

# script clear

It looks like your norns isn’t up to date! Cyrene uses the latest version of norns so we can use the global clock system. Go to your main norns menu, scroll to System, scroll to Update, then update to 200424.

That’d be it! Sorry- still trying to figure norns out- a little overwhelming!
Appreciate the help :slight_smile:

1 Like

thank you so much for making this. Love the grids clone for vcv. I find it kind of difficult/time consuming to make polyrhythms on my elektron devices with per track scales so this is exactly what i was looking for

1 Like

im sorry, i misunderstood what this was. i thought it was a midi sequencer. just now noticed that is in the “roadmap” section. how’s that looking? anytime soon?

Haven’t started that yet, but it shouldn’t take too long! I’ll see if I can take a stab at it today and if it’s as easy as it looks it should be ready before the end of the week. If you wouldn’t mind me DM’ing you a test release for you to try out, that’d be very helpful as well :+1:


Absolutely, thanks sir

If you’re looking at expanding grids, here’s a few things I did in my past time (in various incarnations) and found worthwhile

  • Map velocity to probabiliy: this gives the possibility to change the sound depending on whether that hit was probable or not.
  • Add 3 channels of ‘slave’ channels that basically takes the hi-hat point and add three more points at (hhx + 0.5, hhy) , (hhx, hhy + 0.5), (hhx + 0.5, hhy + 0.5). In my implementation there was a single probability knob for those 3 slaves. It did add a nice counterpoint to the main hihat.

If you’re interested in the details, I’m happy to dig them out

Here’s the slave example:


Is there a demo of Cyrene yet? Video/Audio?

No demo videos yet, no. I could record a quick audio demo tho!

1 Like

Yes please :nerd_face: and some more characters to get to the char count

Here we go!

Nothing too fancy going on, kinda just basic usage of the app. All the samples are norns’ built-in 808 samples (these are auto-loaded for you on first launch, and you can of course change any and all of them). I’ve turned swing to 22%, set kick to 40%, snare to 25%, hi-hat to 70%, and chaos at 60%. Tracks 4 thru 7 are in euclidean mode (4: (8,2,2), 5: (8,2,0), 6: (9,3,1), 7: (10,4,0)). The track starts with X/Y in the bottom right, then throughout the first minute or so I’m just dialing the X/Y counterclockwise in a circle. Then in the second half of the track I play with the euclidean settings (first swapping kick and snare back and forth between euclidean / grids modes, then changing the euclidean settings for some of the other tracks)


v1.2.0 (23b2617) is here! Available via the normal install process in Maiden, or here: ZIP File

Two big features:

  • Odd meters are here! And more, really: patterns can now be any length from 1 to 32 beats. Pattern length is set the same as always (via params menu), but now there’s more options than just 8 / 16 / 32
  • MIDI out is here! In the params menu is a new section “MIDI” which lets you turn MIDI out on/off. Each track lets you choose which channel it sends its messages on (all default to channel 1), and which note value is sent (defaults are set for you to match Cyrene’s default 808 samples layout). Transport messages (start/stop/continue and 24ppqn clock pulses) are sent as well

Would love feedback on the MIDI out feature if you don’t mind – it worked in the setups I tried, but I know different people can have pretty different setups.


just a report from the trench…
had a crash.
external MIDI clock.
had 7 (aiff) samples loaded.
i went in to change a sample while it was playing and it locked up.

norns was frozen and GRID playhead stopped moving.

didn’t have maiden open so not sure what happened.
however…i was able to open maiden and send a ;restart and get it up and running again.

also…i can’t seem to get it to lock in with MIDI clock.
it just seems to be out of sync a bit.
i tried loading a very short percussive sound into the KIK track and turned up it’s probability to 100.

i noticed it is also not resetting to beat one when i stop and start my MIDI clock.
(all of my sync is coming from an e-rm Multiclock box.)

one more…
Arc 1 doesn’t move or make any tempo changes when set ti Internal Clock.
i see the little square in the corner light up but the tempo does not change whether it’s stopped or playing.

Arc 2 works as it should.

Seems to work great with midi so far. I have it running 6 of the midi tracks into the 6 Elektron Model:Cycles tracks/fm engines

i haven’t tried using the grid with it yet and i haven’t quite figured out euclidean mode. but those are going to be the main reasons i wanted to use this with midi so i’ll try getting to those shortly. this is just my first two minutes with the script. thanks @21echoes for the midi implementation!

*Oh yeah, this rules.

With Grid:


@21echoes do you mind if I take a stab at the Crow implementation you specced out? I’m interested in adapting Pamela’s New Workout to Crow and adding the support you outlined for Cyrene seems like a good place to get my feet wet!


20 characters of :drooling_face: :partying_face:

That’d be awesome! Lmk if you have any q’s about the code. The crow out stuff should be pretty easily adaptable from the midi out stuff, but the crow in stuff may be all new ground. Someone may have a generic crow in -> param control snippet somewhere :thinking:? My crow is arriving next week some time I think so I’d be happy to test it once you’ve got it ready!


Started poking around this morning. Outputting to crow was super straightforward. I’ll add support for switching which track goes to the outputs along with a simple Crow on or off toggle tomorrow! I’m already having a lot of fun using this with my modular.

Progress here:


Added selectable tracks per output, selectable params for the inputs, and a toggle on/off for the set of inputs or outputs.

I’m having trouble figuring out nesting params in the Crow menu I added (handled here).

There is definitely some discussion needed around how param manipulation should take place from the Crow inputs. My current implementation is pretty basic and when changing the pattern manipulates the X & Y axis with the same value change. I’m not sure if there is a common paradigm used in other scripts.

This is my first time doing anything meaningful with Lua so apologies for any weird code. @21echoes - I’ll dig around more when I get a chance later today to see if I can fix that menu issue and then create a PR.

Edit: Er, just had to set the correct menu depth for the new param group. I’ll leave the original text in case anyone runs into a similar issue with nested menu items.