A handsome shot of the Korg nanoSERIES pad and controller makes them look pricier than they are. Photo (CC) Jay Vidheecharoen.

When software has “Live” as its name, you know control will be everything. So it’s great that many control surfaces will behave intelligently out of the box with Ableton Live, including devices like the Akai APC40 and Novation ReMOTE SL. If you’ve used one of these products, you’ve no doubt been able to click a device rack in Live and have a blue hand icon appear in the title bar, automatically assigning, say, the first eight macro knobs in a drum rack to your eight hardware encoders.

But what if you have hardware that isn’t covered by this functionality that you want to use? The easiest solution is something called MIDI Remote Scripting. It’s been available since Live 6, but it seems not many people know that it’s there or how to use it. It’s not a perfect solution, but it’s such an easy hack that it’s worth at least exploring.

For this tutorial, I’ll take the example of the Korg nanoKONTROL and nanoPAD. They’re a likely candidate, at about US$60 street each and with some handy controls (kontrols?) for mixer channels and drum racks. But you could take any hardware and apply the same technique — even something you’ve built yourself — so long as it sends simple MIDI messages.

The upshot: you get simple “automap” functionality without something specific like Automap (or drivers, in general).

bluehand

Caught blue-handed: dynamic control of any device means never having to open a template.

Required for this tutorial: Ableton Live 6.x or later. I’ve tested only the full version of Live on Mac and Windows, though I think at least some of the “lighter” versions should work, as well.

This is a long article but a relatively short and easy process. I’m just giving you everything you could possibly want to know about the nanoSERIES and MIDI Remote Scripting!

Introducing MIDI Remote Scripts

Ableton Live uses compiled Python scripts to provide custom support for controllers, as I understand it. I’ve never looked into this specific functionality, and generally you wouldn’t unless you’re a hardware vendor working with Ableton.

As of Live 6, though, there’s a hack provided for everything else, called MIDI Remote Scripts. They’re simple text files that let you specify mappings of MIDI note, Control Change, and channel messages to common parameters in Live. This text file is compiled into a Python script for the hardware when Live launches. Basically, the Remote Script covers:

  • The 16 visible pads in Drum Racks
  • Device Rack encoders (the 8 Macros for each Device Rack)
  • Bank parameters for switching between banks of encoders in devices that aren’t in racks
  • Volume faders 1-8, plus the master volume setting
  • Sends for tracks 1-8 (just the first two sends)
  • Track arm buttons for recording into tracks 1-8
  • Transport controls

Now, if you’re not familiar with Device Racks and Drum Racks, and how to use them for instruments and effects, you should absolutely go brush up now. Really, go ahead – I’ll wait. The rack functionality introduced in Live 6 is essential, because it allows you to take complex sets of effects and instruments and map them intelligently to just eight controls.

You’ll notice there’s plenty of stuff that’s not on here. There’s nothing to do with clips. There’s no way of banking up to track counts higher than 8. There’s no way to easily bank between sets of pads in Drum Racks with more slots. There’s no headphone level. There’s record arm, but not track enable/disable. I could go on…

But you do get a pretty decent base set of functionality if the list above looks appealing. Since you’re just using MIDI, you can manually assign any additional remaining hardware MIDI controls to your favorite parameters.

And the most important thing about all of this is that parameters for the Device Rack are dynamic. So while there are eight of them, that covers any selected device anywhere in your set. Click on the device, and the blue hand lets you know the device is under your control. Whichever controls you’ve chosen — say, eight huge mechanical knobs on a DIY hardware controllers — will map automatically.

Finding and Editing the MIDI Remote Scripts

instanthowto

This file is the extent of the documentation of the MIDI Remote Scripting feature. Tells you everything you need to know, right?

I do mean finding. Your first job is to find the MIDI Remote Script location on your drive.

First, here’s where it’s not: it’s not in the Ableton program folder itself. There is, in fact, a User Remote Scripts folder in there, but it’s not the one you want to use. (I bring this up only because I tried to put my customized text file in that folder, had my script show up in Live’s preferences, but then couldn’t understand why nothing was working. Learn from my mistake, and be wiser.)

Instead, you’ll want to navigate to your user preferences folder.

On Windows Vista/Windows 7, my Live preferences live in:

[Windows boot drive] > Users > Peter > AppData > Roaming > Ableton > Live 8.04 [or your version] > Preferences > User Remote Scripts

(Yours may be in Local rather than Roaming, depending on whether you installed Live for all users. On XP, the path is similar, but in your boot drive’s Documents and Settings.)

On Mac:

[Library folder] > Preferences > Ableton > Live 8.04 [or your version] > User Remote Scripts

Note that on the Mac, in similar fashion to the Remote/Roaming difference on Windows, you may need either the Library folder at the root level of your boot drive or the Library folder inside your user folder (the one you see when you click Home, Documents, etc.).

You’ll find two files in that folder. One is a how-to text file, as pictured above, though it doesn’t tell you that much. The other is a sample file.

To create your custom script, you’ll want to duplicate the UserConfiguration.txt script and place it in a folder with the name you want to appear in Live. So, for my custom nanoKONTROL script, I have:

User Remote Scripts > nanoKONTROL > UserConfiguration.txt

Note that the new file will still be called UserConfiguration.txt.

Customizing in the nanoSERIES Editor

The nano in action, live. Photo (CC) Ambra Galassi

Let’s take a quick side trip to set up our KORG nanoSERIES controllers the way we want.

Out of the box, the KORG nanos don’t come with any software disc, because you don’t need them – just plug them in, and they work. And, in fact, if you’re happy with the default MIDI assignments, you never need to go beyond this. In this case, though, I was interested in remapping some stuff, particularly on the nanoKONTROL buttons, so I went ahead and started editing.

You can head to the Korg Nano site and navigate through support, or even easier is to head to this direct link:

Support Results for nanoSERIES

(If you’re outside the Americas, there may be a different link.)

Click Downloads and choose Kontrol Editor for Mac or PC. (You may also want to grab KORG’s own USB MIDI Driver.)

The Kontrol Editor is really quite nice to use and surprisingly powerful for a $60 piece of hardware. At the top, you’ll see buttons for the scenes on the nanoPAD and nanoKONTROL. There’s a visual representation of the controller which, by default, displays MIDI Control Change and note number assignments. (To change what this preview displays, select the dropdown just below the picture of your nano.) The Browse tab allows you to navigate your file structure, but keep Control selected to change assignments.

You can safely ignore the boxes above the controller for now, which control scene settings and channels. Instead, focus on everything on top of and below the controller. On the nanoKONTROL, the faders’ CC assignments are just below the faders. (Look carefully; that can be a bit confusing at first.)

I’m providing my download of my template, so you don’t have to muck with this, necessarily. But here was my strategy:

ed_nanokontrol

nanoKONTROL I was most interested in reassigning the buttons next to the faders. Selecting “Momentary” lights up the button only as you’re pressing it; “Toggle” has it turn on and off. Note that this doesn’t actually impact the messages it sends; just the lights. For Scene 1, I wanted these buttons to double as triggers for my drum pads, so I changed all of them to Assign Type: Notes and adjusted Button Behavior to Momentary. For the remaining scenes, they’re record arm buttons, so those I left as Control Change assignments and Toggle behavior.

nano_assignment

Custom assignment in the KORG Kontrol Editor.

The tricky part of this is that KORG has nine faders and encoders instead of eight, and everything in Live is grouped in eight. I made the ninth fader a master. You might manually assign the knob above that ninth fader to headphone out.

ed_nanopad

nanoPAD All the fun in the nanoPAD editor is to be had on the X/Y controller. The two boxes that are pre-assigned represent X control and Y control on the pad. The third box allows you to define an additional controller for touch across the whole pad. On the pads themselves, note that you can assign up to eight(!) control change or note messages, not just one.

For this project, I just wanted to adjust the note settings to map more intelligently across my Drum Racks, which I’ll explain with the download. That means, unfortunately, going through one by one and changing pitch assignments. For the pad, I’m of two minds. You can keep those CC assignments consistent across all four scenes, or use each scene to control different parameters for a total of eight (conveniently, the number of macros on a Live Device Rack) Note that the scene descriptions at top are just text you add, so the “Drum Kit” or “Chromatic” labels are really just suggestions; they have no functional purpose. You can change them if you want, but the editor is the only place you’ll see them.

User Configuration Settings

userconfig

Lastly, let’s walk through the changes to make to UserConfiguration.

[Globals]:

For InputName and OutputName, it’s essential that you match exactly the text listed by a MIDI device when it’s connected to your computer. For the nanos, that’s “nanoPAD” and “nanoSERIES.” You can verify this by opening your Live preferences and checking under MIDI.

You also need to double-check your GlobalChannel. Numbering starts at zero, so channel 1 is channel 0, and 10 is 9. You can plug multiple nanoSERIES devices into a USB hub — even an unpowered hub, the power draw is so low — so I like to assign different channels to different devices to avoid confusion.

In the rest of the document, any channel that references “-1″ is equivalent to the default. For that reason, I recommend leaving channel assignments along and just changing the default global channel.

Pads and Device Controls

Here’s the fun part: you can set up pads and Device Controls (Macro) encoders to dynamically control the active device. Choose note messages for the pads, and Control Change messages (with the associated numbers) for the encoders.

Here’s the trick: you need to have everything assigned, or it won’t work. In other words, you can’t assign just the first few encoders or just the first few pads, or, oddly, Live will refuse to recognize this as a mappable device.

Banks and Locking

I didn’t find Banks as useful. Banks allow you to choose banks of unassigned controllers. That can get confusing, though, so I still recommend using Device Racks to manually pick and choose which macros you want assigned.

There is, however, an assignment for LockButton. This allows you to pick a button that will “lock” your dynamic controls to one device. So, for instance, let’s say you have a rack of effects you want to control with your nanoKONTROL. When you’re at home in the studio, you might want to mouse around and click different devices for tangible control. But live onstage, you want just one live performance effects rack. Lock the device, and you won’t accidentally click something else and lose control.

I didn’t assign this on the nanoKONTROL because there wasn’t a convenient parameter to assign, but you can still lock a Device from within Live.

[MixerControls]

This gives you limited automatic control of mixer levels (for channels 1-8), sends (1-2 for each of those channels), record enable (for arming tracks), and the master mixer level. I like having a master to control, so having that ninth fader on the nanoKONTROL wound up being very nice.

Now, it is a little annoying to be limited to eight tracks, but there are two important factors here. Firstly, this is a dynamic assignment, meaning you don’t need to manually assign anything or make a special Live session template. That means you can mix and match MIDI and audio tracks arbitrarily, which you can’t do with a template. Secondly, sometimes having the arbitrary limit of eight channels is ideal in live performance — and it means you don’t have to bank around.

Transport

This winds up working perfectly: you get play, stop, record, forward scrub, reverse scrub, and even a loop on/off switch. Of course, you don’t get some of the other parameters you get from an Akai APC40, like turning on and off MIDI overdub. But, hey, you spent sixty bucks on the Korg and you really can’t balance an APC40 and your laptop on Greyhound.

Setting Up Live

liveprefs

Once your MIDI Remote Script is in the proper folder, your device will show up automatically in Live. That’s especially cool if you’re a DIYer; you could have Maria’s Arcade Button Mashapalooza show up if you want.

Select a configured device just as you would any other control surface. Choose Preferences > MIDI/Sync, select Control Surface in the first column (nanoPAD, for instance), and then its Input and Output ports. Finally, enable the Control Surface Input for Track and Remote. This will allow you to manually override assignments if you want, and to assign controls on your hardware you didn’t assign in the MIDI Remote Script, both via the usual MIDI Map method.

recordarming

Arm multiple tracks for recording simultaneously by turning off “Exclusive” arming.

Because I want to be able to easily record-toggle multiple tracks — and because anything else will mean the “toggle” lights on the nanoKONTROL are wrong — I also like to turn off “exclusive” arming in preferences. This way, you can record-enable multiple tracks at once, so that when you want to feed MIDI into your soft synth on track 7, your vocoded vocal track on track 2 doesn’t immediately switch off. Go to Preferences > Record/Warp/Launch > Record > Exclusive and make sure Arm is unlit. (Pictured above.)

autoselect

Using Auto Select in Drum Racks can make managing bigger racks much easier.

One last tip, as suggested by Mike Hatsis of Trackteam Audio: use the Drum Rack’s Auto Select feature, and you’ll automatically toggle the interface to whatever part of the rack’s various pads you happen to trigger. (This works in Live 7 and later only.) This way, you can easily toggle more than the 16 visible pads. On my nanoPAD template, for instance, I’ve already gone to the trouble of mapping the remaining scenes, so the first 16 pads map automatically, and then scenes 2-4 can access other pad slots.

To enable Auto Select, make sure the Chain is visible in the rack, then click the small A button as pictured above.

Alternatives, Future

Now, go forth and have fun!

Granted, this isn’t a perfect control mechanism. If you need to bank more easily between tracks, control a whole lot of mechanisms that aren’t here, focus on clips, or … well, do anything other than the stuff described above … it’s not ideal.

On the other hand, I find this resolves about half of the situations that would otherwise require manual MIDI assignments and, worse, templates rather than dynamic assignment. For basic MIDI tasks, it’s a hack, but a useful hack.

What about the future? HyperControl from M-Audio and Automap from Novation both have more sophisticated integration. The Akai APC40 goes further than previous devices as far as dynamic clip triggering and shortcuts. And other integration is possible with Ableton’s own scripts than what you can do here, although you don’t necessarily get support for all the hardware you’d like to use.

MIDI Remote Scripting is frozen in time in Live 6, so as its own documentation says, there’s some stuff missing. I don’t expect it to be updated, however — too bad, as it is a nice hack.

liveobject

Max implementation of the Live API, coming in the Live API. Courtesy Cycling ’74.

The Ableton Live API is likely where future action is at. While it’s not an official or supported feature, I have no reason to suspect that it’s going away. On the contrary, you should be able to use API functions controlling clips and most functions of the user interface in Live dynamically. This functionality will be baked into Max for Live if you’re a Max user, but should also be accessible via the hacker-spported, community-based Python API wrapper. Most promisingly, hackers have already wrapped this Python API into both MIDI and OSC implementations, meaning you should have a choice between using Max for Live and supporting this functionality directly from hardware, even without M4L.

I’ll be documenting what’s coming very soon, both on the Max and Python/OSC sides. In the meantime, here’s a preview of what the API will do from our friend Andrew Benson at Cycling ’74. Andrew is himself a visualist, so I expect we’ll see some nifty visual applications.

Max-for-Live: A Sneak Peak at the Live API features

And looking beyond even Live, I think we’re now in a world in which we’re finally moving beyond simple MIDI learn. That’s a big relief. Next stop: OSC.

KORG owners: Downloads coming in a separate article later today!

Corrections/tips: More to add? Let me know and I’ll update the story. -Ed.

  • mhulot

    wow that was awesome and unexpected. Thanks!

  • http://soundcloud.com/altitudesickness altitude sickness

    what beautiful timing! i just got a used nanoKontrol and have been less than satisfied with plain-old MIDI mapping. thanks!

  • http://ruinwesen.com wesen

    hey peepzors, if you want to get more into the inner workings of live scripts: http://ruinwesen.com/blog?id=72

  • http://muellerware.org Patrick Mueller

    Great stuff, thanks Peter!

  • http://www.chromedecay.org Joshua Schnable

    well done, Peter!

  • Kyran

    I made one for an x-station, if someone is interested, let me know :)

  • tezifon

    thank you a lot, i configured automap for my behringer bcr2000 with this method ¡¡!!

  • Pingback: Create Digital Music » Download Free Korg nanoPAD, nanoKONTROL Scripts for Ableton Live

  • Pingback: Custom Korg nanoSERIES Control for Ableton | AaronRutledge.com

  • priscilla

    Is there a vid tutorial of this online anywhere

  • J. Phoenix

    Thank you * n

  • http://nwrecords.com gbsr

    also worth noting is that if you use something like bomes midi translator you can for example make use of the mackie protocol etc for..lets say, half your controller and still have the automap by using two surfaces at once in your io settings. ive got my hercules mk2 setup so that my left fader is working like a mackie fader and i switch tracks/banks via a couple of buttons, while the rest is automapped via the custom remote scripts. good thing about bomes midi translator is that you can set up rule sets and if then statements, something that you cant do with lives remote scripts (unless you hack it via the live api for example). settings up if then statements with bomes then take the output from bomes to the remote script in live and you can in theory make your controller work as 8 different automapped controllers just by switching controller style via buttons, or keyboard buttons for that matter.,for example. ;)

  • http://fthebiters.com kidcuisine

    thank you. im finally putting my nanoKontrol to use

  • http://www.myspace.com/djchinkial al

    oh yeah

    and using scripts can u get more midi info out

    of ableton like song position information for each track

    thanks again

    al.

  • Rickvallone

    Kyran, I'd love to get ahold of your x-station script! My email is the same as my username on this post (@gmail.com)

  • mhulot

    I'm really interested in this, could one write scripts for virtual midi ports… ie… it would be great to write a Midi script to give an App like Numerology direct access to ableton parameters without having to manually assign midi everytime.

  • mhulot

    mostly I'm interested in haveing automatic assignment for the 8 macro knobs for multiple tracks…

  • Pingback: NCKN* – Nicken.Music. » Blog Archive » Tutorial: Automap in Ableton Live with Novation Nocturn

  • Linus

    I've been using the nanoKontrol buttons to change scenes in Live. Can I use scripts to make a button skip to the next scene, regardless of which scene is playing at the moment?

  • Adam Smith

    Maybe I am misunderstanding what is possible, or maybe I did not implement it correctly, but should I be able to mimic a trigger finger or mpd-style functionality (pads are relatively mapped and play back the sample of the 16 currently highlighted/visible pads) using TouchOSC and User Remote Scripting?

    One of your bullet points for what remote scripting covers is "The 16 visible pads in Drum Racks" which leads me to believe that this is possible but can't seem to get it to work. Can someone provide clarification?

    Thanks!

  • alexbarker

    Hey Kyran, I'd love to have a look at your x-station script too! same as the last guy, my email is my username on this pose (@gmail.com)

    chur!

  • Adam Smith

    Hmmm…it seems that I did not misunderstand what is possible. I am able to mimic trigger finger or mpd-style functionality using TouchOSC, OSCulator, and User Remote Scripting. I am unsure of what I was not doing correctly the other day, but I tried it again today and it works as I had hoped.

    I created a 16 pad bank via the TouchOSC editor, mapped that via OSCulator, then created a user remote script per Peter's instructions, and bing bang boom, the 16 pads are relatively mapped to the 16 visible drum rack pads in Ableton regardless of the track I'm on. Nice.

    Thanks Peter!

  • yes i am

    KYRAN! I would be very happy to get this X-station script. Could you hook me up?

    jsantanen ((())) gmail___dot___com

  • zailbob

    @Kyran

    Me, too. Hope you still check this thread.

    once again: e-mail = user + arcor.de

    cheers zailbob

  • Pingback: Create Digital Music » nanoKONTROL Myr for Ableton Live: Free, Powerful Control for Live

  • http://myspace.com/weh2kah Tino Müller

    Hey Peter,

    big thanks for this impressive script.

    i own a bcr2000 and would try script an automatic mapping for the track mute in channel 1-6 (button cc 40-56). with my low knowledge of python is really hard to understand how it works. if you dont mind, please give me tip how i can do that.

    peace& sun

    Tino

  • Pingback: jorumkim's me2DAY

  • Alexander

    Hi! thanks very useful!

    But exist more script name to assign solo, mute and pan controls? like:

    volumeslider1: -1 its for mixer fader

    sendknob1: -1 its for send… my be:

    panknob1: -1???

    solobutton1: -1 and muteknob1: -1???

    and create new banks for more than 8 tracks?

    Thanks again!

  • Dal

    Kyran

    hopefully u still check this thread.intrested in your x station scripts if you can hook it up. email dallas.albrett at gmail dot com

    chur

  • israelv

    the xy controller only works diagonal from corner to corner i cant make it to work the whole xy screen please help

  • Vernon

    Thx soo much!!!

    Im jamming now with friends…

    Next problem???

    is how to sync 3 computers…

    Salamat!!!

  • Kofi Vanderpuye

    Somehow this didn't work for me. Neither Live 8.0 nor Live lite 6.0.5 were able to see the nanoseries controllers in the control surface menu. I think I followed the instructions to a 'T'. Maybe I left out some obvious detail (that wasn't mentioned in the article)?

  • Kofi Vanderpuye

    Never mind… I see what I did wrong. I came across the folder 'Put in user remote scripts' and put it in user remote scripts :-)

  • Pingback: MIDI Remote Scripting – with Ableton Live « fletch music blog

  • PETER

    lets say i want to assign a couple of pads (nanoPAD) to move up/down on scenes.

    what would be the codeline for this, and where should i write it ([Globals],[MixerControls]??

  • Saurabh

    I want to lock the 8 Sliders of nano kontrol to eight rows & ninth to universal volume for all four scenes – how to do the same

    Thnks

  • http://www.outersphererecords.com MikeD

    Hello,

    Thanks for the tutorial! Very helpful. I ran into the problem of locating the correct folder the place the scripts in. After searching around on the net, I got it figured out. You may want to clarify for MAC users, the path for the User Remote Scripts is:

    [OSX Boot Drive] > Users > [YourUsername] > Library folder > Preferences> Ableton > Live 8.04 [or your version] > User Remote Scripts

    Currently, you have the path just listed as Library. This can be confusing as there is a global Library, then Library folders for each user.

    Thanks!

    Mike D.

  • Pingback: Akai LPD8 controller for Ableton Live 8 « Eclectic Consciousness

  • Pingback: AN ARGUMENT FOR USING USER SCRIPTS | THE ABLETON COOKBOOK

  • Pingback: nanoKONTROL | Bandesnaci Hides Here

  • https://www.facebook.com/austinabletontutor jimmy

    pretty dope..  so this makes me think that their is a possible way to do have the new midi track that is created by a slice to midi function defaults change.  i was excited because i thought changing the default instrument track to in would do the trick but it didn't.. any thoughts?

  • ichicuts

    WTF why doesn’t this article have a thousand comments, a hundred thousand views, and a thousand thousand virgins feeding you grapes and gracious compliments??? Thanks over and over for taking the time to write this out. Any changes/functionality increases in the past two years?

  • Goudewup

    Great article! This can really help me out with my iControls :)

  • Eyeland Electric

    Thanks for the great stuff :)
    I have been using it for months and now, after a reinstall I simply cannot get it to work :)
    I am unsure of the exact meaning of “# The channel that the controller should send on
    GlobalChannel: 0
    # If your controller is connected via USB, replace ControllerName
    # with the name of the respective port. Live will then try to 
    # recognize the ports for you when you select your Instant-Mappings”
    Atm I am just trying to get my nanoKontrol to work. I AM getting midi input in Live, but none of the scripting is working. I followed the instructions to the letter – appart from the points concerning global channel and input name of which I am unsure.
    I seem to recall having the same issue last time I installed it but back then I might have screwed around with numereous settings in the Korg driver utility and the txt file untill it magically worked :)
    As my wodoo seems weak today any help would be appreciated :)

  • Eyeland Electric

    Also, I still had the files from the previous install but as I read through this guide I seem unable to find any link? Am I blind? :D

  • Eyeland Electric

    *cough* my bad.. found the link and remembered that I was using the further developed Myr version.. not so odd that it didn’t work as expected… Thanks again

  • djfuturemike

    This may be a dumb question, but when you plug the device in, how do you know its recognizing that device when you create your remote script?

  • ISHU

    Don’t suppose anyone has a read-written script for the Vestax Pad One (with the same controls as the nanoPAD) they’d be happy to share?

  • ISHU

    *ready-written

  • julienbayle

    Ableton Live 9 MIDI Remote Scripts Python sources revealed …

    http://julienbayle.net/blog/2013/03/03/ableton-live-9-python-remote-scripts