Your great aunt Pam's old toolkit

(Pamela’s old) toolkit

(early beta version)

While helping your great aunt Pam clean out her basement, you happen upon a large steel box of LFOs, rhythm generators, mults, and sequencers. She says she got a lot of milage out of it, but you can have it now. She’s running a whole maker-space now.

Okay what is it really

It’s a norns mod. When you activate it, every script will have four rhythm generators (capable of doing all kinds of rhythmic division and euclidean stuff), four LFOs, four sequencers, and four mults accessible in the params menu. These can modulate parameters of any script, and you can mix modulations into the params. Use the menu of the matrix mod to adjust the mod matrix.

Inspiration and influence

The usual co-conspirators of @zbs and @nonverbalpoetry were talking about the general idea with me a few months ago, and I hope this is true enough to what we were discussing. I kind of wrote all the code on a coding-bender in the interstices of my day over the last week.

Influenced by ALM Pamela’s New Workout, of course. Also to some extent by NE Mimetic Digitalis, for the “shred” and “zero” parameters of the sequencers. And Mylar Melodies’ patching style.

Requirements

Norns

Warnings

  • This mod redefines some of the core params code. I think I did this relatively innocuously and in a way that won’t affect anything if you aren’t explicitly modulating it, but in case it explodes something you can deactivate the mod, restart norns, and you should be back to normal.
  • Early beta. Use it, but it’s possible some parameter names will change and such.
  • If you add a parameter to the script you’re using it with, your psets might load with the wrong target (since they’re saved by number)
  • Some parameters might work poorly with this style of modulation. Anything that has a get-modify-set in a handler somewhere will be unpredictable. Script authors can change their code to account for this, but that’s work. Using delta on the parameters should be fine.

Documentation

!!! IMPORTANT. The toolkit mod now depends on ;install https://github.com/sixolet/matrix. Install and activate the matrix mod before installing or updating toolkit.

  • Install the mod from maiden ;install https://github.com/sixolet/toolkit
  • Restart
  • Activate the mod in the mod menu

Now you should see, at the bottom of your script, sixteen new param groups — four each of lfos, sequencers, rhythms, and macros. You can edit the properties of the modulation sources in the params menu, and then apply them to your various parameters by going to SYSTEM > MODS > matrix, selecting the param you want to modulate with K3, and mixing in sources of modulation by scrolling to the various modulation sources and adjusting the amount of modulation with E3. Linear parameters will be modulated linearly, and exponential parameters will be modulated exponentially.

LFOs

Four shapes: sine, tri/saw, pulse, random. In the tri/saw shape the “width” parameter controls where in the wave shape the peak is.

Rhythm Generators

You pick the division in terms of type of note — 1/4 is quarter notes, for example. Then you pick a length, an offset, and a fill for the euclidean parameters. The fill and offset are defined as a proportion of the length filled, since I didn’t want to worry about undefined values while length changed.

The targets for rhythm generators are binary parameters and triggers. The binary parameters will be set to 1 for every step the euclidean generator contains a beat, and off when it doesn’t. The triggers will be triggered on every step the euclidean generator contains a beat.

You can also pick a swing. Right now there’s some kind of weirdness in lattice that makes swung eighth notes not line up with quarter notes, maybe wait for that to be fixed before using those in combination.

Sequencers

Each sequencer has up to 16 steps, and has a trigger to advance and one to reset. You can patch rhythms to these advance or reset triggers if you like. They also have zero and shred parameters. These control, respectively, the probability that the sequencer will zero a step upon leaving it, or that the sequencer will randomize a step upon leaving it. These allow making sequences that mostly repeat but slowly vary.

Macros

Macros are parameter values that supply their values as modulation sources. I suggest MIDI mapping them or something.

The test script

Toolkit comes with an example script that has a couple direct triggers for notes from PolyPerc. It’s what I’ve been using to test it out. With the toolkit, it’s kind of a tiny modular system in your norns.

Download

Future/Checklist/Roadmap

  • Increase self-patchability
  • I am sure there remain bugs. Want to tell me about them?
  • Another mod that has crow output parameters to modulate with this
  • Another mod that somehow digs into Supercollider to outfit any script with some independently triggerable instances of plaits? I dunno sounds amusing in combination with this.
103 Likes

Truly amazing! Thank you for this :heart:

2 Likes

I love this idea! :clap: :clap: :clap:

Damn this is something I’ve been really wanting from time to time with different scripts. Gotta check it out as soon as possible.

1 Like

This is sick. And sounds hella useful. It also sounds like it runs along the razor’s edge of what Norns are capable of before processing and stability to to heck.

This is hella cool and exactly what I was hoping mods would become

3 Likes

Yeah if people start running low on cpu due to this, I can add a parameter that lets you reduce lfo resolution. Right now it bangs at like 96 ppqn.

YES! Thanks for this. Looks super useful!

1 Like

Daaaaang Sun! This will be HELLA useful. I have a 3D printed euro pod that I power via USB and then have a crow in. Being able to use this mod as a clocked (or I clocked) modulation source while running almost any app would be huge.

I won’t have a chance for a bit to test it alongside cpu heavy scripts like CC2, but I’ll find some time soon.

EDIT: just saw crow output isn’t currently supported. Or is it? My kid is being a wang thing morning so I can barely see straight.

Probably a different much simpler mod, which would provide some params that all they would do is make crow output stuff. Hold tight.

10 Likes

As I think about it (and by extension, ask for even more nonsense), if there is a version of this mod to provide these modulations through crow, having an option to send it to a midi channel and CC would be of massive value too.

Very classy of me to “suggest” additions which, frankly, are just requests… but I guess this is where I’ve found myself. :grimacing:

Thanks again for all this really really cool stuff!!! Just this tool for Params is an amazing gift to the community!

4 Likes

Yo check this out

;install https://github.com/sixolet/crowkit

This one is even less tested than toolkit (I haven’t even tested the pitched modulation option at all, just the pulse and LFO out) but I have to go to bed like 20 minutes ago and I think it might meet spec. See what you think. It is a separate mod, and it relies on toolkit. You will have to update toolkit.

14 Likes

absolutely brilliant! thank you for thinking up, making and sharing this.

crowkit could be called ‘do you even lift, crow?
… i’ll see myself out.

3 Likes

this is an absolute game changer! amazing work.

possible little bug:

when I have the mod loaded, my mixer/level page on the norns have bigger jumps between values when I adjust the levels. I have tried with the mod loaded/unloaded with restarts, and the bug persists if aunt Pam is loaded.

I am using a Fates. latest update.

hahaha I accidentally overrode a method I should not have overriden on params and the mixer was trying to display the decibels instead of the place in the range.

Anyway, pushed a fix. Also with the following features:

  • It’ll now remember modulation targets even if the number of parameters changes. It remembers the name and the index, and uses the index if the name doesn’t exist. So your psets should load fine unless you change the names and numbers of the parameters.
  • I’d forgotten to make mult values modulatable. They are now.
  • A little sublte dance with lattice to make changing a rhythm’s division and then changing it back stay on beat. You’ll have to run norns from head if you want to pick up swing quite right, see also Place downbeats correctly. by sixolet · Pull Request #1587 · monome/norns · GitHub
  • A priority system for parameters. As a script author, you can set the priority on a parameter object somewhere 1 to 4. If you do, the param will bang in that order when multiple things get triggered at once. This is useful for a sequencer, for example, to prioritize advance, then reset, then trigger a voice.
8 Likes

This is so rad. Pairs really nicely with Flora - it’s just mesmerizing to look at the plants sway on the screen, for starters.

I’d been thinking about something similar as the basis for an implementation of the ol’ Kurzweil K2000 FUN operators for Norns. This code is so cleanly written, it looks like it should be very easy to build off of PoTk. I’d be honored to submit it as a PR, if you’d be interested.

I did manage to get to a state where the LFOs seemed to halt and stopped modulating the params (that was with the version pre-hotfix). I couldn’t reproduce it though. I was trying to add a second LFO targeting plant 2 algo.

Generally I wonder how selecting targets might be made easier; I was a bit nervous I was going to accidentally modulate something critical as I was scrolling through. Maybe selecting param group first, or adding a filter by param group? (I’m not sure exactly how that would best be done using the paramset API, though).

Like @noiserock said, this is a total game changer. Thank you so much!

5 Likes

I just read through the functions you want to implement. They seem cool! What if I add all the library stuff you need to implement more modulators to the package you’d get by require(“toolkit/lib//mod”) and this can be a test case for what it feels like as a library?

If you can repro that freeze, I’m interested.

I also want to make selecting targets easier, and I’m not sure how. They can be string-entry, but that’s not exactly easier.

1 Like

Being able to use these as a library would be really cool! I’m working on building a proof of concept within the main mod file now, but would definitely give the library approach a shot.

I’ll also tool around with target selection UX options…

2 Likes

wow this is tremendous

2 Likes

awesome!! thanks a lot your mod brig a lot of new possibilities in the scripts, lovely!!

Just one thing, I noticed when choosing an LFO target, even if the amount is set to 0 I can hear changes in the sound as I scroll thru destinations as if those parfameters changed, and the worst part: they remain changed. maybe a parameter for LFO on/off could fix that?? Thanks again!

1 Like

That’s a bug. I’ll take a look.

1 Like