[cheat codes 2] (rev 220524: LTS6.2)

And w/syn parameter control!?! :slight_smile:

1 Like

@dan_derks would you be open to talking a bit about the process used in the promo vid? it’s different from most of the cheat codes stuff i hear and really dig it, trying to wrap my head around what’s going on

1 Like

oh! thank you, that’s super sweet :slight_smile:

it’s pretty much a misuse of the “MIDI echo” feature in the keyboard setup menu (this was before there was an option to send MIDI notes per pad):

  • OP-Z is receiving clock from cheat codes but isn’t controlling cheat codes via MIDI
  • the MIDI echo feature is designed to redraw the encoders on the OP-Z whenever a pad is selected, changing the LED brightness (to visualize loop position, level, and filter tilt), with the assumption that one would use the OP-Z to select pads via the OP-Z integration and that the “control” tracks on the OP-Z would be muted
  • control isn’t coming from the OP-Z (since grid is involved), but the pads are still sending what was intended as redraw info via MIDI back to the OP-Z, which changes the encoder values for that track
  • so, as the drum tracks play on the OP-Z, their parameters are being manipulated based on the playing pad’s loop position

tl;dr: this “pads send MIDI cc’s” thing is actually a feature of the next.release, so it’ll be easier to couple pads and cc’s out to any device more intentionally :slight_smile:


super cool, appreciate you brother!

If I understand this correctly the opz is kind of replicating arc control of cheat codes and playing drums?

rev 210208: macros, transport, midigrid, midi config, w/syn, even more stuff

this update accidentally became a sort-of-massive one. it’s all been super rewarding to work on, so i’m stoked for y’all to dig in!

if you’re feeling overwhelmed by all the new things, i completely feel you. take it piece at a time, hopefully it all feels fluid but if not, i’m here to help – there’s a ton of stuff in this update. also, please consider attending the cheat codes Music Hackspace workshops in a few weeks, where i’ll cover everything in-person :slight_smile:


summary: @cosmicsoundexplorer asked a brilliant question a few weeks back about mapping crow inputs to parameters. this sparked some thoughts that were cross-pollinated by how I use smartphones (s/o @rjonline00), which led to macros – eight banks of eight assignable parameters linked by a single control stream (on-norns, MIDI, and/or crow).

enter: K1+K2 on the main screen


  • E1: cycles across the eight macros
  • K3: cycles between the slots selector and attributes for the selected slot
  • E2: on slot selector, cycles slots. on attributes, navigates across different values (when param isn’t none)
  • E3: on attributes, changes selected value
  • K1+K2: toggle all slots active/inactive (K1 + [E2 or E3] to toggle this slot active/inactive)
  • K1+K3: toggle between program and performance modes
  • K3: in performance mode, seeds random value to currently selected macro

available parameters | targets:

  • current pad | current pad in bank a, b or c
  • rate | current pad in bank a, b or c
  • filter tilt | filter for entire bank a, b, or c
  • start point + end point | absolute position for current pad in bank a, b, or c
  • start (delta) + end (delta) | relative delta change applied to current pad in bank a, b, or c
  • delay div/mult | delay L or R (requires delay mode == clocked)
  • delay free time | delay L or R (requires delay mode == free)
  • delay rate | delay L or R
  • delay pan | delay L or R
  • macro | control any other macro from this macro
    and then all of these are w/synth only:
  • w/curve
  • w/ramp
  • w/fm index
  • w/fm env
  • w/fm num
  • w/fm den
  • w/lpg time
  • w/lpg symm

crow control:

  • crow must be connected before launching cheat codes 2
  • navigate to PARAMS > CROW INPUTS to map each crow input to either macro 1 or macro 2
    • if you want to control more attributes, set either macro to control another macro

MIDI control:

  • navigate to PARAMS > cheat codes external zone > macros to MIDI map each macro
    • remember, as of norns update 210114, MIDI mappings auto-save!

summary: previously, cheat codes didn’t really have a meaningful way beyond clock ticks to sync with other gear in an “everything should start at the same time” compositional style. with this update, everything can be synced, if you want it. you can press the spacebar on your laptop to play an Ableton Live Set and cheat codes will start arpin’ and euclidin’ at the same time. you can start your drum machines from norns. you can send a gate through crow to let your modular rig know its time to party. (nb. rnd values do not stop their generation when transport is off – if this is undesirable, lmk and i will address in a future update!)

enter: on the cheat codes main screen, hold K2 to bring up the new transport menu!

nav (all while holding K2):

  • E1: flip between transport start/stop and tap tempo
  • K3: if on transport control, will start/stop the transport. if on tap tempo, four taps seed a new BPM.
  • E2: adjust BPM by 1
  • E3: adjust BPM by 1/10

some recommended configurations for various use-cases:

clock + sync external MIDI boxes from cheat codes

  • set clock source to internal, Link or crow
  • navigate to the new PARAMS > transport settings:
    • toggle send MIDI transport? to yes for each MIDI device you want to start at the same time as cheat codes
      • confirm that your MIDI device has TRANSPORT RECEIVE (or similar) enabled
    • toggle send MIDI clock? to yes for each MIDI device you want to receive MIDI clock from cheat codes
      • you can also not send MIDI clock, if you simply want the devices to all start at the same time but run on their own metronomes
  • when you turn on the cheat codes transport, the specified external MIDI boxes will start at the same time and stay in time

clock + sync cheat codes from external MIDI boxes

  • set clock source to MIDI
  • navigate to the new PARAMS > transport settings:
    • toggle receive MIDI transport? to yes for each MIDI device you want to control the cheat codes transport with
      • confirm that your MIDI device has TRANSPORT SEND (or similar) enabled
    • confirm that send MIDI clock? for the device that is driving the clock is set to no

clock + sync cheat codes from Ableton Live

  • set clock source to Link
    • set link quantum to 4
  • in Live’s Preferences, find Link Tempo MIDI and enable Start Stop Sync (Live 10+ only)
  • in Live, set global launch quantization to 1 Bar
  • when you engage Live’s transport, cheat codes will start at the same time
    • cheat codes will also send MIDI transport + clocks to connected external MIDI devices, if they are set up according to the clock + sync external MIDI boxes from cheat codes above

clock + sync cheat codes via crow

  • set clock source to crow (clock normally via crow input 1)
  • navigate to the new PARAMS > CROW IN/OUT:
    • set crow in 2 to either trig: transport or gate: transport
  • when you send a trig or gate signal into crow input 2, cheat codes will auto-start at the next global “1”
    • nb. currently, there is no way to force the transport to start directly at the time of the received signal, it must align with the global clock’s current 4/4 count
    • cheat codes will also send MIDI transport + clocks to connected external MIDI devices, if they are set up according to the clock + sync external MIDI boxes from cheat codes above

clock + sync crow via cheat codes

  • set clock source to internal, Link or MIDI
  • navigate to the new PARAMS > CROW IN/OUT:
    • set crow out 4 to either transport pulse or transport gate
  • when the cheat codes transport starts (from any source), crow will send the specified voltage through crow out 4 to execute events across your modular system

summary: if you have midigrid installed on your norns, you can use a Launchpad to access the same controls as a monome 64 grid. for more information about the 64 grid controls, see this image.

prerequisite: reference @Helen’s excellent guide to get midigrid installed and confirm you can control Awake with your Launchpad.


  • plug your Launchpad into your norns and launch cheat codes 2
  • navigate to PARAMS > GRID > midigrid? and flip to yes
  • LED style and grid size will auto-switch to 4-step and 64
    • these settings will autosave, so you won’t have to do this again unless you need to change something
  • if you do not see the cheat codes interface on your Launchpad, re-run the script
midi config

summary: @glia inspired a dig into MIDI cc’s, so you can now assign MIDI note and velocity + MIDI cc and value to each pad in each bank. this gives cheat codes greater control over external gear. you can choose to send either note or cc or both, depending on your needs.

enter: K1+K3 on the main screen


  • K3: cycles between header, notes, and cc’s
  • E1: on header, change banks. on notes or cc’s, scrolls down pads.
  • E2/E3: on notes or cc’s, change left / right value (- value means no data will be passed)
  • K1: on header, +E3 to change scale for selected bank. on notes or cc’s, toggles to CHannel.

summary: w/syn control via note mode!


  • PARAMS > external zone: pad to note setup
    • under global, toggle w/syn output? to yes
    • under each bank, specify a w/syn voice and set a velocity 0-127 (nb. these scale to 0-5V, so try lower values at first, to avoid clipping)
  • PARAMS > external zone: w/syn controls
    • here, direct MIDI-mappable control over each of w/syn’s parameters
  • check out macros for macro control over the w/syn parameters!
even more stuff
  • change default state
    • you can now define the default state that cheat codes loads into – maybe you want your buffer segments set up a certain way, or want looping on by default, or need all the rnds all the time!
    • set up your new default and navigate to PARAMS > collections > save default collection to save it
    • get back to zero by opening maiden and deleting the file under data > cheat_codes_2 > names > DEFAULT.cc2
  • # tab in [loops] (s/o @swhic and a few others for the idea! [very sorry I can’t find the right posts])
    • provides a bird’s eye view on how all your banks are interacting
    • this was the original [loops] view in cheat codes 1
    • navigation:
      • K3: switch between header and body
      • E1: switch between lanes
      • E2: move start point (hold K1 for fine)
      • E3: move end point (hold K1 for fine)
      • K1 + E1: change pad / segment
      • K2 + E1: move loop window
      • K2 + K3: auto-chop to evenly distribute audio content across the 16 pads
      • K2 + K1 (tricky, sorta hold K1 a little): shorten pad loop points to 1/16th at current BPM
  • visual metronome in [loops]
    • adds the metronome from timing to the loops page (s/o @Clashley1 for the idea!)
    • see PARAMS > loops + buffers > global > visual metronome?
  • [timing] tap tempo
    • set the BPM based on feel (s/o @climatechanged for the idea!)
    • on the [timing] menu, hold K2 and tap K3. you’ll see the bpm at the top of the screen change in response.
  • filter tilt now MIDI-mappable
    • controls bank-wide filter tilt via parameters
    • see PARAMS > manual control > (x) values
  • new [delay] parameters (PARAMS > delays)
    • delay pan: L and R can be anywhere you want 'em!
    • delay filter curves: change the shape of the filter cutoff’s trajectory, especially fun if the two delay cutoffs are linked (s/o to @CarlosUnch for this idea!)
  • passthrough
    • if you have passthrough installed, cheat codes will load it
    • need it? execute ;install https://www.github.com/nattog/passthrough in maiden’s REPL + restart cheat codes.
  • namesizer
    • if you have namesizer installed, cheat codes will use it for collection naming (super fun!)
    • need it? execute ;install https://github.com/Quixotic7/namesizer in maiden’s REP + restart cheat codes.
  • [euclid] fixes
    • tightened timing mechanism, which fixed phasing issues
    • K1+K2 to reset all lanes to 1, K1+K3 to reset selected
  • global pause fixes
    • previously, ALT + pause would toggle each individual pad’s pause state
    • now, ALT + pause sets all pads’ pause states to current pad’s pause state
  • vertical rotate (s/o @amgnowhere for the idea!)
    • previously, you had to have your USB cable coming from the top of the grid
    • now, you can flip to the bottom, if you want: PARAMS > GRID > vert rotation
video notes
  • at the top of the video, I toggle on cc2’s transport, which sends a MIDI start message to the Analog Rytm
  • norns is also synced to Ableton Live on the computer via Link, which just plays a kick drum
  • most of the rest of the video is manipulating the macros feature (also new as of feb 2021). basically, K3 seeds a random value 0 - 127 to a macro which also controls filter tilt and delay rate

i used to play a lot of whac-a-croc when i was a kid (see https://youtu.be/ZLI5yeNXSg0), but instead of using the mallet i’d just use my hands. i’m glad to be revisiting this gesture with machines as an adult.



I love these cc2 sessions w/ rtym btw


~~ repeatedly doffing my cap and throwing flowers in the direction of @dan_derks for this obscenely generous update ~~


The killer script and 20 characs🎉!


This is amazing! You are a beast!

1 Like


1 Like

Can’t wait to dig in (actually just gone to bed and all I can think of is playing CC)!


i’m completely overwhelmed with excitement. cheat codes seems to grow a new tree ring every dang month at this point. such an important & impactful device – congrats on the new features!


holy fracken…i don’t…where to…what the?


Dan now THIS is the spice melange of updates!!!
Thanks so much for the transport goodness and all your hard work.


so, i just dunno what to say…
this is an epic update…
they have all been epic! but this macros things is really incredible…
did some live input recording with macro control of everything…
its the most interesting looper i’ve ever touched!
its truly insane, the depths!!!


whoa full-on midigrid support is a game changer :raised_hands:


Today is a good day, much appreciated, thanks!


That demo video was so awesome . . . :hot_face:


Midi sync! Thank you!

1 Like