Logic Pro X : getting articulations autoloaded in a grid from LPX articulations sets

For a while, I've been wandering around the possibility that O S C would take benefit of articulation sets in Logic to autoload them on a grid. Logic version : 10.7.7, O S C : v.1.22.0

And voilà, it works.


  • install, use or copy-paste the attached custom module .
    It is well commented so you can adapt to your likings (colours, articulation groups, plist directory, etc.).
    More specifically :
    line 222 : adapt to the OSC message that gets the track name (in my case, I use Touch OSC as wrapper between Logic and O S C. I'm using the Logic Pad template, set on page 3 - please check your Control Surface in Logic).
    lines 47-146 : you can change the color and the association between the icon in Articulation Set and the matching color.
    line 35 : use your directory that contains the articulation sets plist files.
    Please note that it requires a couple of extra libraries.

  • On your O S C template , you will need those controls
    2 variables called curArtList and curArtColors
    1 switch:
    set to layout = grid. I recommend also putting 4 in gridTemplate (=columns) and wrap =soft. Give it a large size if you use many articulations.
    set the values to @{curArtList} and if you want to benefit from colored buttons, copy-paste this in css and adjust to taste.


var colRAW = @{curArtColors}
var colors=colRAW.split(",");
var css = 'value {border-radius:5px;font-family:"Avenir Next Condensed";font-size:12px;border:1px solid #000000;}\n'
for (var i = 0; i <= colors.length; i++) {
  css += "value:nth-child(" + (i) + "){--color-fill:" + colors[i-1] + "ee;min-height:28px;}\n"
  css += "value.on:nth-child(" + (i) + "){--color-fill:" + colors[i-1] + "ff;min-height:28px;border:1px solid #ffffff;text-transform:uppercase;font-size:14px;}\n"
return css

You can adjust the address and preArgs to your configuration. I use address = /control and preArgs = [1,32] since my articulations are inspired by Spitfire's UACC where articulation switching is driven by CC32.


  • In Logic, create an articulation set and set the articulations, input and output as you wish. If you want to do like me, then all the input are controlled by CC32. Output depends on your plugin. For example, for VSL, you'd want keyswitches by Note On, for Spitfire, either Note on & CC32 (if UACC KS), etc. You can use articulation symbols to benefit from colour coded buttons.
  • Save this art set as a file. You can give it any filename you want, but you'll need to put a short name in brackets .
    For example : VSL Synchron Strings Pro [SSP] .plist
  • In Logic, create a track with the following requirements:
    The track name should contain the short name (no brackets needed). For example : VSL SSP Violins 1.
    You must set the related articulation set on the track.

Run O S C, set the track in Logic, and voilà, you should see the switch control auto-filled with the articulations put in the articulation sets and coloured the way you defined it using the articulation symbols.

When O S C is running (or each time you save the custom script), O S C scans your articulation directory and reads all plist files and fills 2 variables with articulations and colours.

When you select a track, the track name is sent from Logic to O S C (this is done by your configuration, not my script). The custom modules receives this data and looks through all articulations to see if the track name makes reference to a known articulations set. If it finds one, then it's setting the articulation list and the colours in 2 widgets variable.

Then the switch widget is automatically refreshed with the content of the 2 variable widgets to update its values and its style (css).

This hint is provided as this, it is not a finished product nor a commercial product. I may help if you're struggling but no more than this. It's experimental, far from optimized but it works wonderfully for me.
Beware of the track name, some "middleware" (TouchOSC or OSCulator) have a tendency to cut the track label, sometimes altering the short name that triggers everything.
I have a big template with a lot of articulations sets, sometimes the switch widget takes a moment to refresh once I select a track (less than 1s though).
I am not endorsed by any stakeholders cited above (Apple, Logic, Open Stage Control, VSL, Spitfire, etc.).
I can't guarantee that this script will work in future versions of Logic or O S C.

I hope you can enjoy this script though.
I will post the same content later in Open Stage Control forum.

PS: here's a capture of my O S C template, with SSP Violins 1 selected.

myCustomModule.js.zip (4.5 KB)

1 Like

hi @LowweeK75

thanks for sharing with OSC community but hum where are the files ?

I'm so stupid... Problem solved : I've added the custom script file in the original post.
Have fun and tell me if it works and if so, how useful it is.

thanks @ [LowweeK75], this code seems great !

some questions for you :

  • does your script have to be a custom module because of the extra components used or does it works as a standard script ?
    EDIT : Found the answer : external module is the only way to access data in your computer drive with "nativeRequire"
  • it seems that your code doesn't extract the midi values from the articulation, is it a reason for that ?

I will try to modify your code to be able to get the track name directly from the Mackie Control LCD, bypassing the need for touch OSC.
This code seems to be a good start for what I want to do with logic !!!!


1 Like


I've managed to get it work without Touch OSC using Mackie control protocol !
but I have some issues :

  • if the articulation name have a space in it, the name is miss returned
  • if the articulation name start by a number, it will be sorted before the others

Will have a look at this

Now I will try to get the articulations midi value from logic too to populate the OSC switches automatically
Will let you know and will post the resulting script.
It is really promising !!!!!!


Sorry for the late reply.

Concerning getting the name out of Logic, I didn't implement it because there are several ways to do it : 3rd parties like TouchOSC or OSCulator, using Mackie protocol to "decypher" it. I commented this in the code IIRC.

There are threads dedicated to it.
OSCulator is sadly deprecated with newer versions of Logic and I didn't manage to get track names from Mackie in a reliable way, so I'm relying on TouchOSC. It works well, though I'd pay for a stable universal OSC controller in Logic.

Whatever the solution, the track names are always "compressed" with value purged of space characters, signs, etc. With experience, one finds a track syntax that not too much damaged by the compression and keeps the stuff in brackets.

Good luck and keep us updated.
We only make progress together.

I've made it working !!!!
No use of Touch OSC, only Mackie control in Logic.
You will just need Logic & Open Stage Control

I've add a way to display the selected track Library picture.

Used my own code to get the track name from the Mackie control LCD, it is much simpler than the one in your external module.

I've corrected the way you were managing Articulations Names to avoid errors if they are containing spaces or starting with numbers.

It is based on MIDI remote for Logic's Articulations, so no script at all, just ready to go !

LowweeK75 if you don't mind I will made a new topic in the next few days with the modified external module and my OpenStage files so everyone will be able to use it without special Open Stage knowledge.

Thanks again !

A little teaser


Ha, you are Pierre, from Nuances :slight_smile: Nice to meet you.

It is totally fine to adapt my code, I created it for the sake of proving it can work, it is very unrefined and unoptimized.
The code about trackname were snippets of code I grabbed on this forum but didn't manage to make it work. I left it for later fixing.

If you plan to reuse part of the code, just credit me in the comments of your code if you don't mind.
People are beginning to contact me about this very topic and I'd be proud to get credited in the making of a more professional product. :wink:

1 Like

Hey guys! I'm trying to see how you synchronized TC and playhead pos. and how you changed the fonts but I can only load json files into OSC and not js files. I'm on v1.17.0 and would prefer not to update unless the js file can only be opened on later versions :slight_smile:

Sorry for the late reply.
TC is handled by the custom module and displayed on each digit inside the timecode.
Mackie Control protocol doesn’t update full TC but sends only the changes in the digit.
So you need an algorithm to recompose the timecode.

Fonts are handled using the style property of the widget (sorry, I’m away from computer, can’t check the exact name).
You’d use CSS style syntax inside.
Fonts are dealt with {font-family:;} (don’t forget semicolon after each instruction). The font has to be installed on your machine but I think O S C works also with Google fonts.