This document describes the process of developing Max For Live devices for Ableton Push. It explains how to connect with Push and how to create a custom interface. It also describes how Push works in general.
Ableton Push is a midi controller that has been specifically built for Ableton Live. Therefore it has an interface that represents many of Live's functions. However it can also be used with other daw's and software.
Ableton Push receives and sends midi note, control change (cc), pitch bend and sysex values. It has two independent midi in- and outputs that send their values via an USB connection.
If the user presses the user mode button in the normal Live operation, the python scripts switch the Push to a special mode that receives/sends values over the Push User Ports. Only the user button itself isn't sending any midi values, so that the user can switch back to the normal Live mode.
All the functions of Push (like the step sequencer, note mode, etc.) aren't saved inside Push. The device has no knowledge of Live and its functions.
These functions are represented in python scripts that come with the installation of Ableton Live. They are located inside the Live application. As soon as you connect Push with Ableton Live, the scripts automatically sends values over the Live Ports to the push. They also interpret values from the Live Port.
These scripts can be modified to change or add functions. To do so, you need to decrypt them. Though it isn't recommended.
On Mac OS X they are saved under "Ableton Live (Suite) 9.app/Contents/App-Resources/Midi Remote Scripts/Push"
Decrypted scripts can be found here.
There are 11 m4l objects included in the development kit. They make it much easier to write your own m4l devices.
For example I ported the m4l Monome version of Polygomè in about 15 minutes. I only needed to include these few objects (no other changes were needed):
I strongly recommend to use them, as they make programming much easier. They also provide a uniform interface for the users of your m4l device for interacting with Push. This is especially important, as there are so many possibilities in presenting your interface, that it could get confusing for the user.
Thanks to the "Grab/Release" objects, the integration with Push feels much more native and not like a hack. They aren't breaking the user experience of Push, which is really important on a device like the Push.
The objects are written for the default Ableton Live mode. They aren't working in User Mode.
There are two kinds of Push m4l objects:
As we are going to talk a lot more about grabbing and releasing: What does "to grab" and "to release" a Push control element mean?
If you grab a Push element (like the 8x8 grid or the encoders) you release it from its original functionality and grab it. It allows you to interact with it, because it won't be used by Live anymore. If you release it, it will get its original functionality back and you can't talk to it anymore.
There are currently two bugs that are really annoying and that you need to be aware of. You can't have two m4l Push devices on one track. You also always need to deactivate the m4l device or Push control, if you want to delete the device from the track. Else the control element is still grabbed and you can't use your Push until you turn it on/off or another m4l device grabs/releases it. I try as hard as possible to find solutions for the problems.
This objects outputs a 1, when the m4l device or the track that includes the m4l device is selected (depending on the selection). It should be used most of the time, as it gives the best user experience for a Push m4l device.
The selectable options:
You should always include the object in the interface of your m4l device. It is also recommended to add the control at the eight position on the Push. This allows the user to easily change the settings.
To place it at the eight position, right click on the object and select object->new view of < none >. On the the new patcher window select the live.menu, go to the inspector and change the auto mapping index to 8. From thereon all your other live.dials, menus, etc. also need to get an auto mapping index or else they won't be shown on Push.
The object sends a 1, if the m4l device is entered with the "In Button" above the mute button on Push. Normally Push would then show more parameters for the selected device, but with this object you can also use it to show your custom Push interface.
A m4l device with this object should always have at least one interface element (knob, menu, etc.), otherwise the "In button" isn't lit
Sometimes it gets confused with its state, so I wouldn't use them. I really recommend to use the "Device/track selected" object.
Each control element objects saves its states/values when it gets released. It even remembers new values. If you regrab it, it shows the saved values (like the led colors).
The most important object. It allows you to grab the 8x8 grid. The left inlet lets you draw on the grid/change led colors and the middle inlet is for activating a color press feedback.
To change/activate a color of the 8x8 there are several methods that you can set to the color input.
|one button||set x y color|
|row||row x y color x_start|
|column||col x y color y_start|
|rectangle||rect x y color x_lenght y_lenght|
|unfilled rect||u_rect x y color x_lenght y_lenght|
|rect without edges||rect_w/o_e x y color x_lenght y_lenght|
|unfilled rect without edges||u_rect_w/o_e x y color x_lenght y_lenght|
x0 y0 is top left, x7 y7 bottem right.
Color is a value from 0-127. To find the color you want, use the color finder object. 0 as color value is always turning off the led color. You can also input a rgb color value to the first input of the color finder to find the right Push color value.
If you grab the touchstrip, you can choose a touchstrip mode and monitor the current value.
1: Default pitch wheel mode. 2: a normal fader. 3: up/down fader. 4: point mode.
If you grab the scene buttons, you can change the led colors. It also outputs button pushes.
Led Color methods for Scene Buttons:
If you grab the display, you can input a text.
Set replaces the previous text with the new one. Place places only the new text at the position x, without replacing the rest of the display line.
If you grab the two button rows below the display, you can change the color and monitor button presses.
Led Color methods for Select/state Buttons:
If you grab the encoders, you can monitor encoder touches and movement
Input: - Intensity (left): Change the intensity when a knob should report a movement. The smaller the number the faster the report. - Connection (right): Activate/deactivate connection
Output: - Touched encoder (left) - Moved encoder (right)
Depending on the intensity setting, the left outlet outputs a 1 for clockwise movement and -1 for anti clockwise. Default is 5.
Developers should always upgrade there Push m4l devices with the newest objects.
Please report any bug or problem that you can find! If you find a solution, I would be extremly grateful, if you send it to me. Email
If there is a m4l Push device with track mode next to other m4l Push devices on one track, there will be conflicts. !High priority! Will be fixed in the next version.
If the m4l device gets deleted, Push needs to get to the default mode/release the controls. The only workaround for the user is to stop the connection manually with the **** interface.
The m4l device isn't connection with Push, if Push gets turned on, after the m4l device is placed. The workaround is to select another track/device and switch back to the m4l device.
The Push grid flickers while switching between the track with the m4l device and another track.
"This_device entered" object:
Thanks to everyone who helped me! Without the people from the cycling74 forum, this wouldn't be possible. A week ago, I had absolutely no idea of Max/Msp and visual programming.
A huge thanks also to synthfan.info. His blog posts gave me a great and important overview over the live object model.
And of course Adrian :) Thanks Adrian!
The development kit wasn't developed by Ableton AG.
All the devices and documentation here are published under a Creative Commons CC BY-NC 3.0 licence. Feel free to modify the objects and use them in your own projects.
If you need support, you can always contact me. Email
And if you want to support me in what I do, it is also possible to send me a small donation. Maybe someday I can buy Max 6. :) Or live a more relaxed student Life. :D
Paypal: Link or firstname.lastname@example.org