[cheat codes 2] (rev 230319: LTS11 - nb!)

yes! Thanks, Dan. I was just going to pop in here and mention that I had reproduced the issue without a grid. Interesting that the parameter names are getting mismatched somehow! Now I wonder if it’s because I was running matrix mod, toolkit, and crowkit. At any rate (no pun intended), here’s the collection
collection-CCLAG.zip (38.0 KB)

edit: just ran without any of the above-mentioned mods enabled, and the problem seems to have resolved. I guess it was the mods altering the parameter order somehow? never mind, just happened again without the mods. My hypothesis has been disproved 🙁
1 Like

ah got it, thank you!
the param lead was false, apologies – running your collection was super helpful!

you were totally hitting CPU load on one of the cores, which seemed super weird so i dug around + feel like i found embarrassing pictures of myself from high school lol. when i scripted the dj-style filter a few years ago, i added a slewing mechanism which was apparently sending filter cutoff values to softcut 16x per filter value change, instead of simply collecting the filter cutoff changes to the 16 pad variables and only hitting softcut once-per-change :sweat_smile:

fixed it up in this branch, if you’re willing to load it up and test things out on your side? :revolving_hearts:


this seems to be working beautifully! Thanks again, Dan. I tried to put it through its paces CPU-wise by doing basically the same things I was doing with that collection yesterday, for longer than I did it for yesterday, and I didn’t notice any clock lag at all. Here it is in action.

I did, however, encounter some entirely unrelated trouble along the way: I was trying to set up TouchOSC for use with cheat codes, but communication between norns and TouchOSC doesn’t seem to be happening. I got the template loaded up in TouchOSC no problem, and norns shows up when I browse OSC hosts, as described in the cheat codes documentation and norns streams study. I’ve also been able to use TouchOSC with norns successfully before, when I went through the streams study in preparation for norns/habitus (same phone, same app, different norns; the one I was using then was a shield, and the one I’m trying to use TouchOSC with now is stock). But there are no messages traveling in either direction between norns and TouchOSC while I’m running cheat codes. I noticed that, in the params menu for cheat codes, under OSC setup, it seems to be populating with an OSC port (although it isn’t 10111) and part of the IP address but not all of it, which is odd. It only seems to be getting the first 6 digits. Any idea what this might be about?


ayyy, thank you @WilliamHazard !! your jamuary tracks are not only really lovely, but they’re also helping surface some weirdness i didn’t anticipate! :revolving_hearts:

rev 230104: LTS 10.1


  • filter value changes were hitting softcut 16 times per pad, instead of simply sending values to the 16 pad variables and hitting softcut once. this fix vastly improves CPU utilization when heavily modulating the filters with lfos, rnd, or arc patterns.
  • OSC communication regression has been corrected + some of the functions have been streamlined to mimic grid more closely on the backend (eg. hitting rand pat on TouchOSC will now mirror on the ‘timing’ screen the same way a random grid pattern would)

@WilliamHazard , you should be able to simply select the norns host under TouchOSC’s OSC connection panel (should show up under ‘FOUND HOSTS’) – once you see the host details autofill on TouchOSC, enter the template and hit a pad to establish the connection with cheat codes!

lmk if you run into anything else and thank you again!! means the world to have you messin’ around with the script and surfacing these troubles!


thanks, Dan! Getting to know cheat codes a little better has been on my to-do list for quite a while, and using these jamuary sessions to do so has been such a pleasure. I’m glad it’s been an opportunity to clean out some nooks and crannies in the script too!

I can also confirm that, after updating and following the procedures you described above, TouchOSC is working beautifully :blush:


Heyo! Just picked up a fates for xmas and have been digging in. Current cheat code installs, doesn’t run due to Fate not be updated?

Investigating update Fates, in the meantime was wondering if anyone could tell me how to install the old version? Can I install direct from a git hash?

Update: Appears matron does not support fancier git checkout syntax as part of ; install (nice opportunity for an foss contrib :slight_smile: ).

I had searched through the commits and found one for LTS9

ssh we@{my-fates.io}
cd ~/dust/code/cheat_codes_2/
git checkout -b LTS9 1fa6bd00a9d551dce18f5a89ea7fe02d2e7bdecf

Started without complaint! Now to see if I can get this ancient ddj-wego3 controller to do something interesting =)


rev 230105: LTS 10.2


  • arp key releases could sometimes go negative, causing the are there 0 keys held? check for ‘last pressed’ mode to silently fail and slip into ‘additive’ mode. this is now fixed!
  • firmed up the “rules” of pattern recall from the meta-sequencer page. if an arp is playing when a grid sequence slot is accessed, the arp clears. if a grid pattern is playing when an arp sequence slot is accessed, the grid pattern clears. this makes pattern jamming more predictable – since the saves have always been single-focus, the restores should be as well.
  • arp rates were saving with sequence slots, but they were never restoring when recalled. this has been fixed!

user-script bump

in may, i added a user-script side-loading function to cheat codes, which allows someone to piggy-back any functionality they wanted the script to have through a per-collection file of their own design (more info here). of course, some pretty brilliant mods were released since then, which add almost anything you’d want to incorporate – but for folks who are looking to dip into scripting (and, in particular, modifying cheat codes without crawling through the fever-dream that is the script’s code), i thought it’d maybe be useful to bump.

eg. if you want to get acclimated to the lfo lib and you wanted to add a bunch of LFOs that cc2 doesn’t provide (like LFO control over arp 1’s rate), your user_script.lua file could look like:

-- required container, do not change this:
local user_script = {}

-- this function is called whenever a loaded collection
--   has a 'user_script.lua' file in the collection:
function user_script.init()
  local side_lfos = require 'lfo'
  local lfos = {}
  params:add_separator('user_script_separator', 'experiment zone')
  params:add_group('user_lfos', 'LFOs', 15) -- 15 params per LFO!
  lfos.arp_1_rate = side_lfos:add{
    -- to get appropriate min/max values,
    --   go into MIDI map mode + check the 'out' range of any parameter
    min = 1,
    max = 11,
    action = function(scaled, raw) params:set('arp_1_rate',scaled) end
  lfos.arp_1_rate:add_params('arp_1_rate', 'arp 1 rate')
    -- 'arp 1 rate' is how the LFO will show up in the params UI

-- we don't do anything with the rest of the template,
-- but it all needs to be there, so here it is!

-- this function is called whenever the transport starts:
function user_script.transport_start()
  -- print("user script started")

-- this function is called whenever the transport stops:
function user_script.transport_stop()
  -- print("user script stopped")

-- required return, do not change this:
return user_script

honestly, i’d been neglecting my own messin’ around with per-collection side-loads, so hopefully this sparks something fun for either of us :hugs:


Hello, I have a problem with my grid 64 Launchpad MK ii in Cheat Codes 2. Everything works fine with the grid till I use the delays page. After pressing the upper right button of the grid at the main page everything looks fine but there is no sound when I press one of the sixteen buttons from Bank A or B or C. I tried anything but I could not solve this problem. Is this an error or does the script has to be edited? If someone please could help me that would be wonderful. Thanks in advance.
Rinie[date=2023-01-19 timezone=“Europe/Amsterdam”]

hello! hope all’s well otherwise :slight_smile:

oh! the delay page on a 64-sized grid has no controls for the banks – it only presents the delay controls, which are described in the top post:

i hope that helps clarify! please post if you run into any further trouble – a few others around here using 64’s to control cheat codes and they might also have insights into that size’s more-regular use :slight_smile:


Thank You Dan,
That explains a lot.

1 Like

I’m just starting to experiment with using midi to control CC2. I’m able to trigger individual pads in a given bank with midi notes, but when I try record a pattern, it doesn’t seem to record the incoming notes as presses, thus no pattern is recorded. I’ve dug around the manual and this thread but haven’t been able to find a solution. Am I missing something obvious?

hihi! hope all’s been well :slight_smile:
hmm – is there a grid also connected to norns? i ask because when i started building control-via-MIDI-notes into the script, i assumed that the control schemes would be exclusive – somebody would use a grid if they had a grid, or they’d use MIDI if they didn’t have a grid, but the original scope didn’t flesh out what it’d look like to use both.

if that’s the speedbump, just lmk and i can do a little shifting around to make room for dual-controller approach!


Yep, I have a grid attached, so I was hitting the pattern record button with my finger then playing midi notes on my zendrum. I plan to map pattern record and other control to the either the Zendrum or a midi foot controller. Although the grid might not be needed if I get enough controls mapped eventually, it certainly makes a nice display to be able to easily see what’s going on! And since I am fairly familiar with the grid interface for CC2, I like having it there as an option for interfacing in addition to the midi controller.

Edit: I can confirm that the pattern records as expected once I also had a midi control mapped to pattern record button for the bank. Awesome!

1 Like

Ay up. When in live recording I want to be able to record different section of audio in the the buffer, the @dan_derks codebreaking video on YouTube gives a great example of how to do this using ENC1 in the # page of LOOPS. However, ENC1 doesn’t seem to work for me and I am unable to select a new scetion of the buffer to record new audio into. Any ideas? Cheers!

hi @swim_tortuga ! are you sure you don’t have the entire buffer window selected? if you use enc 2 and 3 you can make the current window smaller. with enc 3 you should then be able to move the window to a new section


Thanks!! I really dont think so… have used enc2 and 3 to resize window, but enc1 does nowt CW and scroll back up page CCW… hopefully I’m miss8ng something really obvious!

hihi! hope all’s well :slight_smile:
two way to travel segments of the live recording buffer:

  • on the L page of loops, press K3 to enter the ‘local’ view – E2+E3 resize the live loop, and E1 travels across the buffer by the loop’s size
  • on the # page of loops, press K3 to enter the ‘local’ view – use E1 to scroll down to the L loop and hold K2 + turn E1 to travel across the buffer by the loop’s size

lmk if you run into any further trouble!


Maybe a better question for the general eurorack thread, but I’m curious about Cheat Codes + Just Friends integration. I’m torn between picking up an intellijel midi 1u or waiting on this next batch of Crow. Is there any core functionality between CC & JF I’d be missing out on with the Midi 1u over Crow?

I think, with the midi 1u, you’d be able to send 1 pitch, 1 gate, and 1 trig to JF, whereas with crow connected over i2c, you’d be able to control all 6 JF voices independently (i.e., you could send up to 6 separate pitches and triggers simultaneously or variously send pitches and triggers to each of the 6 voices at intervals of your choosing, independently of one another, such that you could, for example, have 4 voices playing chords and the remaining two playing melody and counterpoint)


That actually does sound like quite a lot of fun, thanks!

1 Like