granular synth for norns inspired by mlr/rove, grainfields and loomer cumulus.

video by @samule.edmoon

this thread is for discussing glut engine and script. the latter doesn’t currently have any UI functionality, it’s best used with the params menu and/or an external controller.

i’ve been constantly laying aside work on some engine/script improvements, such as triggering voices from the UI, playing back sample slices, etc., but hope to get back to working on them soon.


grid, MIDI (optional)


push the buttons on the grid to trigger sample playback, use the top row to mute tracks and record patterns. use the rightmost key in the top row to clear recorded patterns.


latest -

github -


Thanks for the share! Just arranging scripts for 2.0 atm. Super excited to dig in :heart:

1 Like

seeing a couple errors on my setup - but it seems to work OK otherwise:

# script run
loading engine: EasyGlut
/home/we/norns/lua/core/paramset.lua:154: attempt to index a nil value (local 'param')
stack traceback:
	/home/we/norns/lua/core/paramset.lua:154: in function 'core/paramset.get'
	/home/we/dust/code/easygrain/easygrain.lua:68: in global 'arc_redraw'
	/home/we/dust/code/easygrain/easygrain.lua:101: in field 'event'
	/home/we/norns/lua/core/metro.lua:165: in function </home/we/norns/lua/core/metro.lua:162>
/home/we/norns/lua/core/paramset.lua:154: attempt to index a nil value (local 'param')
stack traceback:
	/home/we/norns/lua/core/paramset.lua:154: in function 'core/paramset.get'
	/home/we/dust/code/easygrain/easygrain.lua:68: in global 'arc_redraw'
	/home/we/dust/code/easygrain/easygrain.lua:101: in field 'event'
	/home/we/norns/lua/core/metro.lua:165: in function </home/we/norns/lua/core/metro.lua:162>
Engine.register_commands; count: 14

But that’s the engine for easygrain, how did you get those errors?

oh crap - maybe I’m dumb and meant to post this under easygrain.

re-testing now… Apologies… wrong place for that error.

However with Glut I get libmonome errors with my DIY grid at 40 fps refresh, but not at 30 fps

I may have missed this elsewhere but I’m working in glut and if I load up an included sample like hermit-leaves.wav i get playback. However, if I load sample from tape that I’ve recorded from my moog, I don’t hear anything. I can play back those .wav files in the TAPE page but glut does not seem to like them. Any ideas?

Can you share one of these files somewhere so we can have a look?

Love glut as always… But my encoders move my percentage params (speed, spread) waaayyyy slower than the number params… Is that intended?

No, that’s an issue with fine adjustment mode. Suggested workaround: press and release button 3 while in the params menu. Then try adjusting params again.


I don’t have one right now, but can upload later today. However, I was only recording one channel and thought maybe it wanted a stereo file. So I pulled the .wav off with SFTP, split the stereo track, grabbed the channel that had audio and copied it into a stereo track and sent it back to norns and glut liked it.

hmm, glut always loads one (left) channel and works well with mono samples. please upload the file, the problem could happen because the tape format is unsupported by SC3 or something totally different.

@bookmil if you were “only recording one channel” then i guess you mean you used TAPE to make a stereo recording with one silent channel and one non-silent. Glut uses mono buffers and reads one channel of the stereo file. so i’d guess that (on the first trial) it got the silent one, if my understanding is correct. which it may not be.

1 Like

I took a look at the TAPE recording that wasn’t working, audio was only recorded into the right channel, which would explain this.

seems to be, and now i know better, thanks @artfwo and @zebra

btw, if you set monitor mode to “mono” in SYSEM -> AUDIO, each input will be routed to both outputs. (for TAPE as well.)

1 Like

one quirk i noticed with long samples (~1min aiff): when playback is first triggered, there is a burst of sound which soon subsides and then playback continues normally. adjusting att / dec param doesn’t seem to make a difference, still get the soundburst.

Does that happen with any kind of long AIFF samples? I mostly use Ogg Vorbis for saving space on the device and never noticed the bursts.

i’m hearing it with aiff, flac, and ogg vorbis files as well

source file where i first noticed this was 2m30s stereo at 48khz/16bit

i’ve also tested a 42s mono 44.1khz/16bit with the same results

the initial soundburst is more noticeable when a sample has silence or a fade-in at the start

This one for example:

glut-example.flac (4.1 MB)

1 Like

I am trying to implement OSC controls to Glut. Should this question go to the scripting forum?

I successfully added OSC control to the mix, room, and damp functions, although I am having difficulty adding OSC to speed, size, density, etc. Any advice…or where to go for additional info? I reviewed the studies…thanks!

local sep = ": "
  params:add_taper("reverb_mix", "*"..sep.."mix", 0, 100, 50, 0, "%")
  params:set_action("reverb_mix", function(value) engine.reverb_mix(value / 100) end)
  params:set_action("reverb_mix", function(x) engine.reverb_mix(x) end)

local osc_in = function(path, args, from)
  if path == "/revmix" then

speed, size, density, etc. are voice-specific, so i would start with converting the osc paths to glut param ids, e.g. /1/speed -> 1speed.