[cheat codes]: v1.3.1 (May 4, 2020)

cheat codes 1.3.1

a sample playground for norns

the global clock + new Pattern control + “holy hell thank you @Galapagoose for all the help and guidance and work on refactoring (2,021 deletions!!)” update



  • norns (200424 or later)
  • grid strongly encouraged, not required
  • arc strongly encouraged, not required
  • TouchOSC for tablets or phones (iOS or Android) strongly encouraged, not required


1.3.1: released May 4, 2020

Watch a thorough walkthrough of these features: https://youtu.be/dNlWIG53YBQ

live buffer improvements

  • NEW: PARAMS > ‘1-shot sync’ allows 1-shot buffer recording to sync to the global clock, to capture clean quantized recordings. Options include ‘next beat’, ‘next bar’, and ‘free’ (no clock sync).
    • If set to ‘next beat’ or ‘next bar’, a running 1-shot recording will ignore additional triggers until it has reached the buffer window’s end-point.
  • NEW: PARAMS > ‘rec loop encoder resolution’ will auto-align the live buffer window to the specified resolution and will clamp encoders to add, subtract, or shift at multiples of that resolution. Options include ‘0.1’ and ‘0.01’ (standard), as well as tempo-aware ‘1/16’, ‘1/8’, ‘1/4’, ‘1/2’ and ‘1 bar’. To get odd divisions or lengths greater than 1 bar, use encoders on the [loops] page (while the live buffer is highlighted) to add/subtract/move the loop window incrementally.
  • NEW: PARAMS > ‘random rec probability’ can be set to randomly toggle recording into the selected section of the live buffer.
  • CHANGE: PARAMS > ‘live buffer max’ adjustments will automatically enforce a ‘global pitch offset’ to match.


  • NEW: ‘auto-slice bank’ feature will slice the current live buffer window across all of a bank’s pads. To perform the action, press grid-ALT + the first key in the row underneath the bank you wish to auto-slice the live buffer into.
  • NEW: ‘auto-adjust buffer’ feature will adjust the live buffer’s window to match the window of the currently selected pad in a bank. To perform the action, press grid-ALT + the third key in the row underneath the bank whose pad you wish the live buffer to mirror.

new default state

  • CHANGE: when loading a fresh cheat codes session, live buffer will not be automatically engaged/recording.
  • CHANGE: when loading a fresh cheat codes session, pads will be set to 1-shot (previously, set to loop).


  • FIXED: if a collections-saved grid Pattern included a pad that was raised by a fifth, the Pattern would stop playing when it hit that pad.

1.3: released April 26, 2020

global clock

  • NEW: clocking is handled by the norns global clock, enabling Ableton Link as a clock source
  • CHANGE: all four rec modes are available, regardless of clock source
  • CHANGE: [timing] screen no longer features clk — use PARAMETERS > CLOCK to adjust clocking
  • IMPROVED: tighter clock-synced gestures


  • NEW: two pages per Pattern! use K2 to access new controls.
  • NEW: rand pat with control over how rates/pitch are distributed (p. 13)
  • NEW: pat start and pat end to adjust Pattern loop points (p. 13)
  • NEW: gridless control over random Patterns • K3 + rand pat selected: random Pattern generated
    • K1 on a P[x] screen: pause playing Pattern [x]
    • K1 + K3 on a P[x] screen: clear current Pattern [x]
  • CHANGE: [timing] screen no longer features clk — use PARAMETERS > CLOCK to adjust clocking
  • IMPROVED: visual indicator next to each P[x] to show whether Pattern [x] is playing, paused, or clear
  • IMPROVED: if Pattern [x] is playing, step number will appear next to each P[x]:


  • CHANGE: if there’s headway in the buffer, record buffer window movements (E1) now jump the length of the current window. previously, the window would slide incrementally — this makes sense for playback buffers, but clean windows for recording are more helpful.


cheat codes manual - 1.3.1 (200504).pdf (9.9 MB)


cheat codes 1.3 touchosc templates.zip (9.5 KB) (thanks so so so much to @CarlosUnch for building the phone version and for contributing to the template for tablets)

cheat codes is available in the maiden project manager as cheat_codes (commit 08b7aff).
nb. do not rename the cheat_codes folder! it must have an underscore.
Don’t see it? Please refresh using the refresh button next to the community header.


2000+ deletions is :exploding_head: Congrats on the update!


Great work as always @dan_derks!

Also thank you for the kind mention, I’ll try to keep contributing as much as I can :slight_smile:

1 Like

So appealing :slight_smile: Is there any luck that the Touch osc layout works also on android device?

1 Like

totally should! folks have reported success :slight_smile:

in case you run into trouble, check this from the old thread: [cheat codes]: v1.2.2 (April 10, 2020)

have fun!

1 Like

Rhaaaa :slight_smile: thks for your reply!! Gonna deep dive into it !!

Lovely! Refactoring :heart:
I might try and borrow some of the filter code for a mod of mlr. Is it scalable to 6 voices(haven’t had the time to look at the code yet)?


oh, i’d say hold off on the filters — those haven’t been refactored yet and it’s a weird lil network of forced slewing and opaque handlers.

there are some big softcut changes coming that will bake all of that into the actual module that’ll make all the lua-layer stuff super straightforward!


Mlr has the option to alter the rate (offset) of the sample during recording, it might be a possibility to add this to cc?

totally — currently, you have 1x, 0.5x, and 0.25x secretly available thru the live buffer length parameter under ‘loops and buffers’. you get more time by slowing down the rate :slight_smile:

that can be used now to add pitchy things. i will scope out adding more wobbles in the future, but you can also add this to the code in a local version if u don’t want to wait for my design decisions. it’s just manipulating voice 1.

1 Like

This is great news. Any estimate to when? (not refactoring but softcut update)

1 Like

weeks, probably not days, probably not months.

(work is near done but functional testing is yet to begin in earnest.)


Loving the new random and pattern trimming features. And link is so useful.
Thank you.

1 Like

thanks ben! super stoked to hear what you’re making :slight_smile:
thank you for the push to explore pattern wrangling

thanks to @Prnts for the request! oo yeah, forgot to mention that random will also auto-level pads to make sure wide rate spans don’t create a bunch of volume inconsistency.


2000+ deletions? Guess who’s about to go diff-diving! (it’s me)


Seriously, 2000 deletions is the stuff of dreams.

@dan_derks I finally took some time to read the very helpful manual and play with Cheat Codes yesterday, and it’s amazing. Really, really appreciate all the work you’ve put into making it both playable – “intuitive” in a sense – and mind-bending. I’ve already used it to record part of a collaborative track I’m working on.

that said… there’s something weird going on with the 12 action on the 4th Zilchmo row on all banks (randomize start point). Even though it does appear to move the start point on the loops screen, the change doesn’t take effect immediately like it does with the 34 action (the play head continues looping from wherever the start point was before, until you trigger the current pad again), and the grid LEDs get stuck until you hit another Zilchmo key. Here’s the error I get in Maiden:

lua: /home/we/dust/code/cheat_codes/cheat_codes.lua:1337: attempt to index a nil value (local 'pad')
stack traceback:
        /home/we/dust/code/cheat_codes/cheat_codes.lua:1337: in global 'cheat'
        /home/we/dust/code/cheat_codes/lib/zilchmos.lua:245: in local 'sc_action'
        /home/we/dust/code/cheat_codes/lib/zilchmos.lua:39: in field 'init'
        /home/we/dust/code/cheat_codes/cheat_codes.lua:2090: in global 'zilchmo'
        /home/we/dust/code/cheat_codes/cheat_codes.lua:824: in field 'event'
        /home/we/norns/lua/core/metro.lua:169: in function </home/we/norns/lua/core/metro.lua:166>

Line 1337, though. That’s auspicious, right?


oooo good catch, thank you so much for the positivity and thorough report!


everyone, please pull in the update for b942019 <33333. this affected both random start points and un-pausing an enveloped pad.


Amazing turnaround! I just checked and it looks all better, thank you!

1 Like

Back here after spending few hours playing with this wonderful instrument… it took me a bit to wrap my head around it… but God! This is inspiring… so many thanks for it!
I’m using it with touchosc on android… just barely scratching the surface but it appears that when I switch pads to quickly, I here an annoying glitchy sound… is this something that I can get rid of in the setting? Or is it inherent to the fact that randomized loops on a busy track recorded in the buffer most of the time fall on a “non zero” waveform location?

I didnt see this coming but I think it has just solved a massive headache for me. Thanks!

1 Like