I just finished my small job : decompiling Python MIDI remote scripts for the PUSH controller.
But finally, I decompiled ALL Ableton Live 9 Remote Scripts =)
I’d suggest you to read this : http://julienbayle.net/ableton-push and especially the part about MIDI Remote Scripts.
I’m not proud at all but just very happy to be able to deliver all sources just one day before the official Ableton Live 9 Release
How this wizardry works ?
Basically, a MIDI Remote script is just a piece of code enabled when you use a MIDI controller already known by Ableton Live and able to be directly recognized as a remote surface.
This is a piece of code very efficient and smart used as an interface between the remote surface and Live itself.
Every features available in the python side of things in Live is also available in Max for Live.
But Python doesn’t require Max for Live and for some people that could be very interesting to code some specific interface behaviors for their own surfaces.
Python scripts source codes are not provided by Ableton.
This is a choice we all have to respect and they obviously know we can hack some stuff here and they also respect that afaik.
Basically, bytecode is “a kind of” binary executable. When you go into Preferences > MIDI Sync, you can choose a remote surface amongst a big list of surfaces. This list is populated by (valide) python bytecode organized and sorted in some folders in Ableton Live folders. Check MIDI Remote Scripts.
As soon as you select a surface, Live activates the corresponding script.
The magic, now: in case you are able to find the global framework/api etc and you are able to code your own scripts, Live would even compile them to bytecode and run them !
The second magic is here: I decompiled all remote scripts today and especially (and at first) the PUSH remote scripts.
EVERY pieces of behaviors of the PUSH is inside the script, not inside the PUSH, please keep that in mind !
The Ableton Push’ Remote Scripts
Here they are: https://github.com/gluon/AbletonLive9_RemoteScripts