Equalise curves across masters?

Working more and more on fonts with several masters in different weights and widths, I’m beginning to wonder if either Glyphs or something like RMX tools could include a feature to balance the curves between masters. My idea would be to look at curve handles in each master and take an average (probably median) measure of their tension in x and y axes, then apply that curve equally across masters. A kind of interpolation of the curves in the master outlines.

It may also be possible to do the same for node positions relative to the bounding box of each glyph, which would smooth out any inconsistent node placements among masters. Anyone else think this could be helpful? (I think it would need to ask which masters to affect, as condensed, for example, would generally need different curvature.)

For node triplets, there is the Dekink script, which goes through all masters.

For balancing curves, I sometimes Tunnify before harmonization. That would be a way to avoid the problem in the first place.

Not sure if it could be applied to your constellation though. Can you show screenshots of a specific case?

This actually used to part of the functionality of the RMX Harmonizer (which was called “Equaliser” then), if I understand you correctly. I posted it on the FontLab forum back in 2004, I believe. Didn’t get much feedback, though.

Have a look at “Equalising the input” on p 9 of my 2006 paper:

It should be emphasised here that redundancies are the single most important source of any problems related to interpolation and extrapolation, be it isotropic or anisotropic. While the redundancy related to Bézier curves is inevitable and can be tackled with a macro programme …

Is this what you were thinking of?

1 Like

I have often wanted this tool/feature.

I’ll make an image, when I have a little time, to show what I was imagining.

Wondering if Jens’ Curve Equaliser plugin would also be helpful for this sort of thing:

Is anyone able to port it to Glyphs?

Relatedly: please can the ‘fit curve’ values be stored with the font, same way as the ‘dimensions’ are? Keeping a note of the curve tension setting for each project separately is not a good way for me.

1 Like

There is a Glyphs version of @jkutilek’s Curve Equalizer (included in the git repository), but it looks like it may need a little update. I see that Georg sent a pull request to update to the current API just last week, too. Perhaps Jens will merge it, soon.

1 Like

Oh, look what I found in the FontLab forum from 2004: a “general outline optimiser”

This was essentially the first version of the RMX Harmonizer. Haha, seems like no-one could be bothered back then, at least there are no replies. I later removed the MM-equalisation but I am planning to re-add that functionality.

And here is the zip in case you want to have a look: Optimiser.zip (6.1 KB)

There are lots of comments as well. “In other words, the macro will remove dents and bumps and allow you to inter- and extrapolate like crazy.” Now that’s quite something!

1 Like

@mekkablue This is the kind of situation I’d find it helpful in. As you see the horizontal and vertical handles take different shares of the tension in the light and regular. Finding the in-between values for each would mean curves get constructed the same way across all the intermediate instances.
It sounds like Jens’ plugin would work by sharing the tension equally between horizontal and vertical handles in a given master, which would give a different, but also useful result.

I suppose when saying “tension” you mean the handle lengths realtive to the intersection? And “sharing the tension equally between horizontal and vertical handles” means establishing the same realtive handle lengths for boths handles?

That’s not necessary for good interpolation (or, even more sensitive, extrapolation). All you need is the same ratio of relative handle lengths in all participating masters.

1 Like

Yes. I imagine tension to be a percentage from zero (handle fully retracted) to 100% where it reaches to the intersection…I guess the ‘fit curve’ function works this way. Some people have suggested to me that having both handles equally sharing the tension of a curve is the ‘proper’ way, but I don’t think this is really my approach. Maybe there’s something in it.

Yes, that’s where I’m thinking this plugin could be very handy.

Some people have suggested to me that having both handles equally sharing the tension of a curve is the ‘proper’ way, but I don’t think this is really my approach. Maybe there’s something in it.

Yes, this seems to be the current fashion. I have had long discussions about this and we always ended up turning in circles. Ultimately, no-one can describe what the benefit of this approach is supposed to be. My assumption is that every designer likes tidy and pretty things, and balanced handles look tidier and prettier, and since bezier curves (with visible points) is what we look at all day, designers what to make that look nice, too. And they forget that what the user/reader/beholder sees in the end (i.e. the final shape, not the control points) is the only thing that matters. So, my stance is: no, there is nothing in it, and it is complete nonsense.

Unfortunately I never finished the Glyphs port of the Curve Equalizer. Georg showed me how to build the dialog window in XCode, but XCode always gived me headaches (I open it about once a year, and each time everything is different because XCode is also updated once a year), so that’s where I stopped. But it should not be hard to use the existing code from the RoboFont extension and adapt it. I just don’t have time to do it in the foreseeable future.

I also had a RoboFont script for that, which would overlay the handle lengths from a selected UFO scaled to the same segment of the current UFO, which I think is basically what you would like to see. If somebody would port it to Glyphs, that could be nice. I don’t have time at the moment, sorry.

Actually, the code is closely related to that of Curve EQ.

FactCheck.py.zip (3.3 KB)



  1. any kind of post-processing (conversion, offsetting, etc.) is facilitated (or made possible in the first place)
  2. consistency across masters
  3. easier and way faster handling, especially in MM set-ups

And what if more-or-less-balanced handles pass this test reasonably well, and very unbalanced handles do not improve the outcome significantly? Often enough, I see that the added advantage of not balancing the handles is often minimal.

Don’t get me wrong, for good transitions from one segment to the next, you will not end up with the exact same percentage on every handle, of course not. IOW I am not advocating complete balancing at all times. But I keep the unbalancing to a reasonable minimum.