Hey, just wanted to say thanks so, so much for making and uploading this. I've been frustrated by this for a long time, and finally decided to delve in to see how to fix it myself only to discover the miles of Python code behind this functionality. And I stumbled upon your repo by chance while googling all the terms in the all the Ableton control surface documentation and trying to understand the existing Keylab code. And I'm so so thankful I don't have to mess with that anymore. Seriously - do you have a way of accepting donations? Just want to express my sincere thanks for releasing this that's all.
Also, not to crap on your hard work or demand for even more (this was basically everything I wanted), but can I safely assume you use the same keyboard regularly? Just curious if you've noticed that the 9th encoder on the right is strangely left abandoned even in the default official Control Surface mapping. You can't even manual MIDI map it, because it doesn't even send any MIDI CC, at least in the DAW mapping.
I was looking through your code for this (which thankfully doesn't have to be decompiled again) to try and find if there was a way I could make this knob useful, but I'm still super lost at the moment. And then I realized there was a perfect use for it - scrolling through your current devices in the track, so that you can easily switch which one the other 8 knobs are controlling. Admittedly though I have not yet found the code required for this in the documentation, although I could've sworn I've seen my Novation SL MKII do that before.
Also, whether that function can auto select the scrolled device is another problem too, since on my Novation it was on a jogwheel with a click to select if I remember correctly. So maybe such a function would be better delegated to the Keylab's jogwheel instead. Speaking of which, I'm not sure if I'm just daft but I think your replacement code breaks it? Usually it automaps to scrolling up and down your clips. Not sure why it broke in the process though, I've been comparing the original keylab_essential.py to your edited copy to figure out why, but haven't had much luck even figuring out what your edited code changes are affecting.
Good news is that replacing this control surface with the original BACKUP one revives this functionality, while also still allowing the Essential2 control surface to work. Though I'm sure it's affecting some things in the background that I'm not aware of yet (otherwise there wouldn't be a need for an edited copy at all), but I don't know the code well enough to say.
Anyway, just wanted to thank you again for this code. If you didn't read through all that blabbering it's alright, but at least read this! Oh, and the part about donations too, just to say thanks.