How to control the Push LCD with sysex messages

    Max For Live

    Adam Murray
    May 15 2013 | 6:37 am
    I haven't found any info on this, so tonight I reverse engineered my Push LCD screen. An invaluable tool was MIDI Monitor (, which allows me to spy of the Push "Live Out" MIDI port.
    A single 77 byte sysex message sets the text for a single line. Each line on the LCD has 68 characters. The sysex message format looks like (in decimal format):
    240 71 127 21 {line} 0 69 0 {ASCII char1} {ASCII char2} ... {ASCII char68} 247
    the value of the {line} byte is:
    24 for line 1 of the LCD
    25 for line 2
    26 for line 3
    27 for line 4
    For the ASCII characters, the value must be between 0 and 127. From 32-126, it matches standard ASCII character sets ( The other values are various other characters. All 128 numbers in this range are printable on the LCD (unlike standard ASCII).
    Patchers speak louder than words, so try the patch below for yourself. Note, this only works in stand-alone Max/MSP. Live & Max for Live do not allow you to send sysex messages  (unless you hack on the Python remote scripts, but the point of all this is to avoid that and just use Max).
    There is one workaround for the lack of sysex support in Live that I know of:
    Create a patcher in stand-alone Max/MSP Setup your midiin/midiout in the stand-alone patcher to talk to the Push Add a send or receive object Create a MFL device with a corresponding send/receive object Leave the MFL device open for edit
    Alternately you could probably do something with networking protocols, but timing will possibly be worse? That last bullet point is annoying, but seemingly necessary. I can't get MFL send/receive to talk to Max stand-alone send/receive otherwise. It's really not ideal, but workable... in the meantime, if this is something you want to do, pester Ableton about adding sysex support!
    Max Patcher
    In Max, select New From Clipboard.
    Show Text
    Anyway, here's the patcher (only works in stand-alone Max/MSP!):

    • broc's icon
      May 15 2013 | 9:46 am
      Here are externals for unlimited midi communication of M4L devices (Mac only)
    • Adam Murray's icon
      Adam Murray's icon
      Adam Murray
      May 16 2013 | 4:04 pm
      Those external look promising, however I am under the impression they only work with certain versions of OS X (maybe not Mountain Lion?) and not Windows. Of course, my workaround has its own problems. There's no ideal solution right now AFAIK.
    • broc's icon
      broc's icon
      May 16 2013 | 7:35 pm
      The latency of UDP/OSC messages sent or received from an M4L device depends on Live's audio buffer (eg. 12ms @512 samples). So it's quite usable for sysex data.
    • Adam Murray's icon
      Adam Murray's icon
      Adam Murray
      May 17 2013 | 4:55 am
      That is a good point. I was trying to take a purist approach and only use MIDI, as that's what I want to do even though the software doesn't quite support it yet. I'll keep networking protocols in mind as a backup plan.
    • Jonathan Schmitz's icon
      Jonathan Schmitz's icon
      Jonathan Schmitz
      May 09 2016 | 4:55 pm
      That is some excellent work right there. The last unaccessible aspects of the Push Hardware are now accessible. Thank you.
    • Dan H's icon
      Dan H's icon
      Dan H
      Aug 23 2016 | 4:05 pm
      I don't know a lot about MAX or how it is used at all, however, I have a softwhere than can send Sysex codes, when I try to send one with your template, either random LEDS on my push turn on, or nothing happens. What am I doing wrong, could someone provide clearer instructions on what to do? What does MFL mean? Maybe an example Sysex message that has worked before? I don't know where I am going wrong.
    • Anthony Palomba's icon
      Anthony Palomba's icon
      Anthony Palomba
      Sep 05 2017 | 3:43 pm
      It looks like this patch is not working any more. I am testing with Push2, no text is showing.
    • Adam Murray's icon
      Adam Murray's icon
      Adam Murray
      Nov 07 2017 | 2:57 am
      Anthony, I think the way the screen is handled on Push 1 and Push 2 are completely different. I don't think my approach will work with Push 2.
      There are some alternatives that will work with Push 2, described here: