Flatten grouped parameters in Ableton Live


I am testing out using grouped parameters and have found that when the parameter is displayed in Logic 10’s automation list is is in the format:

Group Name > Parameter Name

eg: Filter1 > Cutoff

However, in Ableton Live 11, which will flatten the group, it is only the parameter name that is displayed.

Param Name
eg: Cutoff

I have created the group as per the documentation, I would imagine that in a host such as Ableton which flattens the groups it would give something like:

auto grp = std::make_unique(“groupID32123”,

In Ableton for cutoff param based on the above group you would think it would be:
“Filter 1 : Cutoff”
What Ableton is displaying:

Has anyone any ideas on what is happening here and solutions?

I came to the conclusion that it’s necessary to always prepend the group name to the parameter anyway. Back when I tested it, in Logic e.g. the automation list looked fine, but the generic parameter view of the plugin only showed the parameter name. The same goes for Reaper, etc. Not sure if this can even be changed by JUCE?

1 Like

Yeah, but then you a very inelegant list such as

Filter1 > Filter1 Cutoff
Filter2 > Filter2 Cutoff

If you are using juce::FloatParam’s name param as you suggest, then you have the parameter name: " Filter1 Cutoff"

If you were using the param’s name to display a label over a knob, you now have “Filter 1 Cutoff”. If you move to using the optional label param of juce::FloatParam, I notice that in Ableton Live, the vst3 displays the label after the value:


I think the solution is to shelve groups as a concept and use “Filter1 Cutoff” as the param name, leave param label blank and parse out “Cutoff” from the name for any interface components that need a title?

Then if you need some form of grouping of parameters, if you have your own modular structure have the each filter etc report what their associated parameters are. Or create a second tree structure in parallel to JUCE’s and use that.

If you really wanted to, you could write some conditional logic into your parameter creation function that checks the host type – you could, for example, create your entire parameter tree, then if the host is not Logic/GarageBand, parse the tree and append all group names to the actual parameter names you’ve specified.

Juce does allow you to decouple parameter display names from their internal identifiers, so hopefully this shouldn’t mess with state saving & loading…

Hey @benvining, just edited my second post, what do you think of that as a solution? What you’re suggesting is exactly how I felt juce would be doing it, especially given the way the document is written.