Cheat codes (v1.1.1)

cheat codes

a sample playground for norns


  • norns (191201 or later)
  • grid strongly encouraged, not required
  • arc strongly encouraged, not required


In the maiden package manager as cheat_codes.
Don’t see it? Please refresh using the refresh button next to the community header:

  • Only relevant to installations before 12/26/2019: If you have a copy named cheat codes (without the underscore), please refresh your community catalog and download the one with the underscore. After, you can safely delete cheat codes (no underscore). Please also feel free to delete the cheat folder that was created in data.



cheat codes is a live + pre-recorded sample playground for norns.⁣

⁣It’s called cheat codes because it’s sorta like being transported 20 minutes into a cranes session, where things start to get meaty. Instead of having to play through, you can just start at the boss level.⁣

⁣⁣It’s also called cheat codes because it uses ~25 different grid key finger combos to manipulate three softcut voices.⁣

⁣It can record gestures on grid + arc to navigate changes to a bunch of different parameters (sample windowing, playback position, rate + direction, filter, which sample is playing, one-shot/loop, panning, volume, etc).⁣

learning to cheat

This guide will be updated as folks ask questions, challenge my assumptions, and share their work.

Included in cheat codes is a dynamic help menu, which can be accessed by selecting [?]. In this menu, you can hit any key on an attached grid to learn more about it – this includes both its primary function and how it works in cooperation with other keys:

help-bank-m help-row4-m

The help menu can be accessed at any point and does not interrupt your current session. Every action you take in the help menu executes in real-time, so you can jump in and out of playing and learning.

strategy guide

click each arrow to expand

grid intro: banks + pads, zilchmo's right angle slice

This is the core structure of cheat codes:

  • 6 audio buffers, 8 seconds each | 3 for live input and 3 for pre-recorded samples
  • 3 independent playheads to slice, jump, bounce between and traverse the 6 audio buffers

When you plug a grid into cheat codes, turn it so it’s 16 tall and 8 wide (versus the standard 8 tall and 16 wide) and this is what you’ll see:

in terms of inter-related functions, here’s how to think about things:

x x x x | 1 2 3 -
x x x x | L C - P
x x x x | * - Z Z
x x x x | - Z Z Z
- - - - | Z Z Z Z
x x x x | 1 2 3 -
x x x x | L C - P
x x x x | * - Z Z
x x x x | - Z Z Z
- - - - | Z Z Z Z
x x x x | 1 2 3 -
x x x x | L C - P
x x x x | * - Z Z
x x x x | - Z Z Z
- - - - | Z Z Z Z  
A 1 2 3 | p p p p

banks + pads:

x x x x
x x x x
x x x x
x x x x

There are three banks, a b and c. Each bank has 16 pads (x's). Pads within the same bank cut each other off when triggered (think “choke group”), but they do not affect pads in the other banks – cheat codes has 3 voice polyphony.

Each pad contains its own individual settings for the following parameters:

  • which buffer to use (Live or Clip)
  • playback start + end points
  • playback rate / pitch + direction
  • whether to play as a loop or 1-shot
  • level / gain
  • panning
  • filter

When you load a fresh session, these are the defaults for each bank’s pads:

  • which buffer to use: Live buffer 1
  • playback start + end points: each pad will step through an even distribution of the 8 second buffer
    • pad 1 starts at 0, ends at 0.5
    • pad 2 starts at 0.5, ends at 1
    • pad 7 starts at 3, ends at 3.5
  • playback rate / pitch + direction: each pad plays the recorded audio at 1x rate, forward
  • whether to play as a loop or 1-shot: each pad is set to loop
  • level / gain: each pad has gain 1.0
  • panning: each pad is panned to center
  • filter: each pad has a low-pass filter at 12000hz queued up with a moderate resonance

zilchmo’s right-angle slice:

My friend Zach is starting a pizza company. It’s called Zilchmo’s and its specialty is square-shaped pizzas, cut diagonally into two right-angle slices.

In cheat codes, the big right triangle next to every bank is a Zilchmo, split into four rows of quick-control keys which affect each pad’s parameters:

# Zilchmo's right-angle slice
- - - P: pattern recorder
- - Z Z: level + play/pause
- Z Z Z: panning
Z Z Z Z: start/end points, rate, direction

The keys in each Zilchmo row each have their own function, but you can also combine keys horizontally for additional functions. This is where cheat codes starts to feel like mashing buttons in a video game to unlock hidden features. The paradigm was initiated by @Rodrigo’s Block Party, which was goddamn gold.

a quick note

Though cheat codes can parse multi-finger presses within a right-angle slice, it can only parse presses on a single right-angle slice at a time. This won’t limit playability, as you’ll often use your left hand to play pads in the banks and your right hand to change parameters in the right-angle slice. You can even execute multiple commands on the same right-angle slice at the same time. Just, don’t get worried if you try to execute multiple commands on two separate right-angle slices at the same exact time and one of them doesn’t happen.

Let’s start from the bottom:

Z Z Z Z: start/end points, rate, direction

1 2 3 4 function
x - - - set pad’s start (s) point to 0
- x - - restore default start point (based on pad ID)
- - x - restore default end point (based on pad ID)
- - - x set pad’s end (e) point to 8
x x - - random (s) point
- - x x random (e) point
- x x - random window, (s) + (e) move together
x - x - double the loop length, (e) is constant
- x - x halve the loop length, (s) + (e) move inward
x x x - loop sync across banks: a = b, b = c, c = a
- x x x loop sync across banks: a = c, b = a, c = b
x x - x 2x current rate (4x max)
x - x x 0.5x current rate (0.125x min)
x - - x toggle reverse playback
x x x x 1.5x current rate (raise a fifth)

Z Z Z: panning

- 1 2 3 function
- x - - hard-pan pad L
- - x - hard-pan pad C
- - - x hard-pan pad R
- x x - nudge pad’s panning to L
- - x x nudge pad’s panning to R
- x - x reverse pad’s current panning
- x x x random panning

Z Z: levels + play/pause

- - 1 2 function
- - x - reduce pad’s level by -0.125
- - - x increase pad’s level by +0.125
- - x x toggle pad’s playback (bright is paused)

loop or 1-shot?

The last intro grid key is that little itty bitty asterisk under the Live/Clip toggle:

x x x x | 1 2 3 -
x x x x | L C - P
x x x x | * - Z Z
x x x x | - Z Z Z
- - - - | Z Z Z Z

A fresh session will load, by default, with all pads set to loop. That means that for every pad, audio within the pad’s loop points will play continuously.

By toggling the * key, you can switch playback behavior to 1-shot, where the audio within the pad’s loop points plays once, then stops when it hits the loop end point.

Remember, hold ALT and press * if you want all the pads in the bank to switch modes.

A neat performance trick is to record a pattern and selectively toggle loop/1-shot mode on each pad as the pattern plays back.

recording grid keypress patterns

P: patterns

At the far (top) corner of each Zilchmo right-angle slice is a pattern key, which records pad playing for the Zilchmo’s corresponding bank. Patterns will not record presses from other banks, only the bank to the left of the pattern key. This creates opportunity for asynchronous pattern looping, where pad presses in each bank phase in and out of time.

another quick note

Remember what I said earlier about cheat codes only being able to parse presses on a single right-angle slice at a time? Doesn’t apply to patterns. You can arm, play, stop, and clear patterns across all three right-angle slices at the same time. This really helps make clean loops, but it also helps make wonky ones too if that’s what you like :slight_smile: .

Pattern recording has two modes: classic and rad sauce. Switch between them in the PARAMS menu under pattern rec style.

classic: v1 behavior. Record pad presses in the bank, play them back. Zilchmo modifications change the pads parameters as the patterns play back. Great for morphing looping patterns + injecting quick shifts.

rad sauce: Pad presses and gestures on the fourth row of the Zilchmo right-angle slice are recorded. When the pattern plays back, it will recall a pad’s state both pre and post-Zilchmo.⁣ Really nice for capturing + repeating performances.

There are various LED indicators:

base-light: No pattern recorded. Press the pattern key to start recording!
blinking light (matches BPM): Pattern recording. Play some pads and then press the pattern key to stop recording + start playback.
bright solid light: Recorded pattern playing. Press the pattern key to stop playback.
mid-level solid light: Pattern is recorded, but not playing. Press to the pattern key to start playback OR hold the (not yet mentioned) ALT key and press the pattern key to erase the stored pattern.

audio: recording Live + playing Clips

buffer switching + management

As mentioned earlier, cheat codes has 6 buffers: 3 loopers for live recording + 3 static clips to load pre-recorded samples. To make things simple, these buffers are capped at 8 seconds of audio each.

When you load a fresh session of cheat codes, live buffer 1 is already recording in a loop. To see the record head’s position, navigate to the [loops] menu:


The record head is the small . at the bottom of the screen.

Using K3, you can navigate down to the Live buffer’s loop and adjust its start and end points the same way you adjust the other loops’…

E2: start point
E3: end point
E1: move loop window

By default, the record head has a 25% feedback setting – this means that when it passes over previously recorded audio, the previous audio’s level will reduce by 75%. You can adjust this to taste in the PARAMS.

In PARAMS, you can also load a sample into one of the three static clips or save the audio in the Live buffers as a clip:


nb. norns + cheat codes expect .wav files @ 48khz. You can load files with other sample rates, but their pitch will be wonky.

Buffers can be switched and managed from grid directly, using the 1 2 3 and L C keys in the first and second row located between the bank and the Zilchmo right-angle slice:

x x x x | 1 2 3 -
x x x x | L C - P
x x x x | * - Z Z
x x x x | - Z Z Z
- - - - | Z Z Z Z

L(ive) and C(lip)

Using the L and C keys, you can tell the selected pad to apply its stored parameters to either the Live input or the loaded Clip.

If you load a Clip and play a Live instrument in the same tonality, a nice performance trick is to create a pattern of pad presses and dynamically change whether the pad is playing from the pre-recorded Clip or from the Live audio.

1 2 3

After you set a pad’s audio stream (Live or Clip), use these keys to switch between the three buffers for that stream. For example: load 3 Clips in the PARAMS and for each of three pads in a bank, select Clip and choose a unique buffer for each. This allows you to play audio from three different pre-recorded samples in a single bank.

the 1 2 3 at the bottom of the grid

The bottom row of the grid interface looks like this:

A 1 2 3 | p p p p

Ignore the other stuff, let’s just focus on the 1 2 3 keys. This is how you can change which buffer the Live loop is recording into. By default, cheat codes is set to record into buffer 1. You can change this to record into buffer 2 or 3 with just a key press!

Head to PARAMS, where you can switch the Live buffer to loop or 1-shot behavior:



  • Live buffer will loop between the start + end points
  • When you press any of the 1 2 3 keys, you will switch to a new Live buffer and immediately begin recording; the loop window stays the same
  • If you press any of the 1 2 3 keys twice, you will toggle punch-in / punch-out (the grid LED will be bright for punch-in, dim for punch-out)


  • Live buffer will perform a single recording pass from the start point to the end point
  • When you press any of the 1 2 3 keys, you will switch to a new Live buffer and immediately begin recording; recording will stop when the end point has been reached and the loop window will stay the same
  • If you press any of the 1 2 3 keys twice before the record head has reached the end point, the record head will jump back to the beginning of the Live buffer
  • When the record head is recording, the grid LED will be bright; when the record head reaches the end point, it will stop recording and the grid LED will dim

By adjusting the Live buffer’s loop points and behavior, you can easily structure a fun playground:

  • Set the live rec behavior to 1-shot
  • Set unique playhead loop points for the pads in banks ( a ), ( b ), and ( c ) so they each cover their own slice of the buffer
  • Narrow the Live buffer’s loop points and navigate to one of the sections that has a playhead
  • Play your external sound source and trigger the 1-shot recording
  • Navigate the Live buffer’s loop to another section with a different playhead
  • Play your external sound source and trigger the 1-shot recording
  • Rinse + repeat to build a galaxy of micro-loops inside of the Live buffer

ALT modifier: bank-wide changes, copy/paste, clear Live buffer

A is for ALT

Now’s a great time to talk about the key in the bottom-left corner of the interface: A = ALT

This ALT key is a modifier, like Mario’s caps in Mario 64. It gives most of the grid’s keys unique situational abilities.

To illustrate its functionality, let’s revisit the Live loop buffers from the section we just covered.

When you press the 1 2 or 3 key next to the ALT, they simply toggle which buffer Live input is recorded into. However, when you hold ALT and press one of those keys, you actually clear the audio from the Live buffer’s current loop points!

bank-wide changes

A + [key] actions also allow for bank-wide changes, rather than pad-specific changes.

For example:

  • Press pad 1 in bank a and switch it from Live to Clip
  • Press pad 2 in bank a and notice that it’s still assigned Live
  • If you wanted to change all pads in bank a to Clip, hold ALT and switch pad 2 in bank a to Clip
  • Release ALT
  • Press any other pad in bank a and notice that they’re all set to Clip mode!


ALT also enables cross-bank pad copy/paste. This means you can take all of a pad’s current parameters (buffer reference, loop points, speed, panning, filter, rate, etc) and paste it into any other pad (even ones in other banks!).

To copy/paste:

  • Hold ALT
  • Press the pad you want to copy
  • Press the pad you want to paste over (even in a different bank)
  • Release ALT

It’s particularly satisfying to use copy/paste to make subtle changes to the way a loop behaves or sounds. For example, if you have a low-pass filter on a pad’s loop it might sound nice to make a copy of it and tweak the filter’s cutoff – the loop points and pitch will remain the same, but it’ll have a different sonic quality.



The Rumble Pak of cheat codes.


Using the four keys underneath each bank, you can toggle between arc control over the following parameters:

  • loop window
  • loop start
  • loop end
  • filter cutoff

Each arc encoder linearly corresponds to each bank; 1:a, 2:b, 3:c.

The fourth arc encoder controls both the Left and Right delay rates. By default, it displays and controls the Left channel – hold ALT to display and control the Right channel.

arc patterns

There are also pattern recorders just for arc!

Remember those p's in right of the grid’s bottom row?

A 1 2 3 | p p p p

Use these to control pattern recorders for each arc encoder. These will record both arc encoder turns as well as arc parameter changes. Record + playback follows the exact same process as the grid patterns. Similarly, you can use ALT to clear the arc patterns.

on-screen menus (envelopes + filters)

on-screen menus


Each menu is a minimal display of relevant parameters. They will reflect changes made on grid or arc, but they also listen to the on-board buttons and encoders.

Generally, across all menus:

  • If one item is highlighted and others aren’t, you can use K3 to toggle between them.
  • K2 will always return you to the Main Menu.
  • Encoders will affect selected parameters.
    • In cases when there is no highlight-toggle, each encoder will affect the most logical bank: E1:a, E2:b, E3:c.
    • In cases where there is a highlight-toggle, each encoder will affect the most logical parameter.

CHALLENGE: Using grid, you can quickly switch between on-screen menus. Can you find how?

[levels]: volume and envelopes

When you navigate to the [levels] menu, you’ll find controls for volume and envelopes:


As we’ve mentioned, each pad in each bank can have its own volume – but each pad can also have its own decaying envelope, to shape its presence in your mix!

Press K3 to navigate to the env? submenu and use the encoders to enable/disable the envelope for each bank’s current pad. Press K3 again and use the encoders to choose a decay length for each bank’s current pad. Envelopes can be as short as 100ms for snappy perc, or as long as 60sec for slow fades.

Envelopes work with both 1-shot and looping pads:

  • Try setting a pad to a super-short loop, double its rate, enable the pad’s envelope, tune it to a 0.9 sec decay, and trigger the pad
  • Try setting a pad to 1-shot with a long loop, enable the pad’s envelope, tune it a 2.3 sec decay, and trigger the pad


When you navigate to the [filters] menu, you’ll find filter controls for each bank’s current pad:


Turn E1 on norns to the right (once for hipass, again for bandpass):

filter-2-m filter-3-m

Hold ALT on grid (or K1 on norns) to affect all the pads in bank ( a ) and change the filter style + cutoff freq + rq:

filter-4-m filter-5-m

Now, all the pads reflect these values (here, a1 and a11 are the same):

filter-6-m filter-7-m

PARAMS (collections/presets, clocking, pattern quantization)


This is the inn-where-you-can-sleep-and-restore-your-hearts of cheat codes (are these metaphors getting out of hand?).

Let’s summarize the additional functions available in PARAMS.


If after a fun session you wish to save the configuration of the banks, head to PARAMS and save a collection. You can save/load up to 100 unique configurations – if you have a sample loaded into the Clip buffers, these references will save as well!

nb. Currently, patterns in the pattern recorders will not be saved or recalled.


cheat codes comes bundled with a custom BeatClock abstraction that rolls crow into the mix. The clocking options are:

  • internal: standard norns internal clock
  • external: MIDI: listens to external MIDI clock
  • external: crow (in2): plug a clock source into crow’s second input

In addition to these clocking options, you can quantize pad + patterns!

Across the clock modes, here’s what “quantization” means:
internal: Delay until the specified quantization division.
external: MIDI: Delay until the specified quantization division.
external: crow (in2): Delay until the next clock pulse is received at crow’s second input.


  • quantize 4x4 pads?: If you trigger a pad, it will delay playback until a clock event.
  • quantize pattern button?: If you arm a pattern for record/playback, it will delay action until the clock event. This does not quantize the content inside an already-recorded pattern, it just starts/stops playback of the pattern on-beat. To record quantized patterns, turn on both this setting and the 4x4 pad setting. To record clean loops of loosely-played pads, turn on this setting and turn off the 4x4 pad setting.
  • quantization division: Based on the specified bpm. Higher values bring higher resolution, lower values will feel choppy to play but will be tempo-accurate. nb. Does not apply to crow clocking.


Various playback parameters.

  • live rec feedback: How much audio from the Live buffer’s record head’s last loop should be heard as it records new audio?
  • global pitch offset: Semitone pitch control over all buffers. Really useful for re-pitching Clips.
  • clip [x] sample: Load a sample into a Clip slot.
  • save live buffer [x]: Save the 8 second loop from any of the three Live buffers. Really useful for times when you found some nice sounds in Live and want to replay them later :sparkles:.
    • audio saves as mono, so you can easily load them back into cheat codes
    • audio saves to the audio folder, as a file named: cc_YYYYMMDD-buffX.wav

MIDI-controllable performance parameters

Don’t have a grid or arc? Just plug in a generic fader box and MIDI map your own control over a ton of parameters! These are also helpful parameters even if you do use a grid or arc (or both) with cheat codes.

We’ve covered a lot of these parameters, so I’ll only define new ones:

  • rate
  • rate slew: Control the time it takes for a pad to move from the previous pad’s rate, if it was different. This is the sorta-tape-sound we are here for, y’all.
  • pan
  • pan slew: Control the time it takes for a pad to move between pan values across the stereo field.
  • level
  • filter cutoff
  • filter q: Lower values = higher resonance, higher values = lower resonance.
  • filter type balances: Individual control over the balance of LP, HP, and BP filters.
  • filter dry: Control how much non-filtered audio is heard in the mix.
  • delay: global level
  • delay: rate
  • delay: feedback
  • delay: bank send levels: Control how much of each bank is sent to each delay channel. nb. Panning also affects delay send levels.
  • delay: bank send levels: Same as the pad filters, but for the delay!

speaking of delay:

what else?

There’s some cool stuff on the roadmap, but really I’m super curious to see how you use it! Please share clips, videos, snippets, whatever you had fun making.

And feel free to ask questions! I made a lot of specific decisions based on my needs + perspective, so knowing how it feels for others would be super valuable :revolving_hearts:.


Watched the video this morning when it popped up on Vimeo. Many people are making things tempting me to get an Arc.


once i got to the part about zilchmo’s i became 100% certain i’ll never make something this cool in my life

totally in awe of your design process
the results are really endearing and usable!


@disquiet + @glia, thank you so so much for kicking off positivity while this was still unlisted :revolving_hearts:

@glia: zach and rod are pretty inspiring folks, I’m just lucky to be able to pay homage :relaxed:

@glia, for the third time: what r u even talking about, cuz concentrics + no metro are gold and the coolest things to have made


I love that you managed to work your love for pizza into cheat codes. Let’s grab pizza sometime and you can show me around all of this Monome and Max stuff you’ve been making.


and thank you for the thorough manual!

can’t wait to dig into this noiz code!


this is next level, as is the depth of this manual. totally blown away by the amount of work put in here to help others start cheating.

can’t wait to dig in!


speechless :no_mouth:


This is incredible. Thank you Dan.

1 Like

Fantastic concept and really clever implementation of so many things!

The pizza slice thing is genius :slight_smile:


amazing - its like cranes on steroids - thankyou Dan for the huge amount of work and detail in this script. Arc support and pattern recorders are a joy!


This is amazing work. As a new user to monome products and a newly built fates, your documentation was crystal clear and example inspiring. I really appreciate the performance tips as well, those were gold.

I know much of the community is extremely skilled and knowledgeable, so a heartfelt thank you from the new person that struggles even with the easiest of scripts. I look forward to diving in deep this week.


now in the project manager of maiden!

be sure to REFRESH your catalog in maiden.


Incredible work Dan. I cannot wait to dive in this week on cheat codes!

Question: maybe I missed it in the guide (which is amazingly detailed), but for live recording; how do I specify which of the 3 buffers I’m recording into? It seemed that my live audio was going into all 3 buffers at once. I’m probably doing something wrong :roll_eyes::slightly_smiling_face:

1 Like

thanks for the kind words, everyone. I’m excited to see what you make with this!

ah, this is the difference between buffers + banks. I definitely can make this clearer in the guide!

when you load a fresh cheat codes session, all three banks (the 4x4 squares) are pointed to the same Live buffer, buffer 1. if you don’t change anything and you start playing audio in, this audio is recorded into buffer 1. since every pad in all three banks is by default set to reference buffer 1, they all start to play/traverse the same audio.

to change the buffer you’re recording into:

to change the buffer a pad references:

after you do this, you’ll notice that these buffer reference changes only affect 1 pad at a time. this is by design! a performance might include recording a pattern of pad presses and dynamically changing the buffers the pads reference as they play back.

to switch all the pads in a bank to reference the same buffer, hold ALT while choosing the buffer :slight_smile:

does that help? please lmk and I’ll edit the guide :revolving_hearts:

edit: @ludvista29, actually I just ended up making a video to demonstrate the decoupled nature of recording + playback, posted in the guide!


AHA! Okay this makes more sense now I think. I really appreciate you elaborating on this area of cheat codes for me. There’s so much to absorb in this script, I love it. I’m out for the rest of the day, but once I have my rig in front of me again I’ll give this a shot again. I’ll let you know if I have anymore questions :slightly_smiling_face:

Thanks so much Dan and happy holidays! :heart:

1 Like

:raised_hands: thanks so much for sharing Dan,
and for taking the time to explain and make those deep tutorials


thank you so much for making this, i can’t wait to dive in. such a huge contribution!


amazing work @dan_derks! Zesty–punta! :slight_smile:

1 Like

v much appreciate the kind words + positive vibes, y’all

for real, though, I feel like I just spent the last two months in a cabin with only softcut and enough water to keep us alive. @zebra, I cannot overstate how incredible softcut is. it is such a flexible and gorgeous tool that enables + rewards risks and trying bizarro things. it’s also so lovely to use in simple applications.

when I was field testing it with my friend Zach (Zilchmo), running trombone and synth and voice thru it, he asked me “how does it sound like that?”. I asked if he meant the script level stuff, the patterns or whatever. he said, “there’s something else, though. that stuff is there, but it’s also about the way all that sounds.”

softcut is such a gift :slight_smile: