Feature Suggestion : "Subsetted Designspace" CP for Variable exports

Since the “Disable Masters” custom parameter now seems especially stable (Thanks, @GeorgSeifert!), I’m using it frequently to generate subsetted VFs.

I was wondering if it might be a good addition to include a “Subsetted Designspace” custom parameter, where users could choose a range for each axis and then Glyphs could detect which masters are outside the ranges and disable them, similar to how “Disable Masters” works.

Let’s say I have a 4 masters project like :

* Light Condensed  :  wght:200, wdth:60
* Bold Condensed   :  wght:600, wdth:60
* Light            :  wght:200, wdth:100
* Bold             :  wght:600, wdth:100

To export a Condensed VF, actually I could use “Disable masters” with :

Light
Bold

With a “Subsetted Designspace”, it could be :

wght : 200-600
wdth : 60

For small projects, it’s not a big difference, but for projects with many masters/axes, this could be really helpful.

Yes, this would be great built in. @HugoJ There is a slicer in fonttools: instancer — fontTools Documentation and the Slice app GitHub - source-foundry/Slice: An open-source, cross-platform GUI app to generate custom font design spaces from variable fonts
Sometimes both produce differently buggy fonts though, random features don’t work, etc. So always test the output thoroughly.

Bonus:
If the axis poles don’t correspond to existing masters, those missing masters could be generated for export.

It’s always tricky with alternate and intermediate layers, though, also with the current Disable Masters parameter.

I also use both, but sometimes this needs to be done directly in Glyphs, because some glyphs are not available in all masters. For instance, in a setup where the Condensed masters are Light and Bold, but the Normal width has an extra Black master, it’s not possible to generate the VF and then subset it with an external tool.

A safe option could be to allow users to choose values only from one of the existing masters, and not between.

What is then the difference to the Disable Masters parameter?

What happens if I set the parameter, and then change the axis values in the masters?

The idea is to automatically detect which masters need to be disable instead to have to write all names in a “Disable Masters” CP.

Same as if you change the name of a master with Disable Masters, it’s broken.