Consider transition to harfbuzz subsetter for static instantiation
chrissimpkins opened this issue · comments
The harfbuzz subsetter is a compiled C++ lib that supports variable to static font instantiation. This appears to be exposed through the uharfbuzz Python bindings and it should be significantly faster.
so, I think that we could do something along the lines of the following:
import uharfbuzz
with open(fontpath, "rb") as fontbin:
hb_face = uharfbuzz.Face(fontbin.read())
hb_font = uharfbuzz.Font(hb_face)
variation_axis_defs = {
"opsz": "10",
"wght": "700",
"GRAD": "-25",
}
hb_font.set_variations(variation_axis_defs)
# TODO
# how do you write binary back to disk?
It isn't clear to me based on a quick read through of the hb source what level of feature support it has relative to the pure Python varLib.mutator and varLib.instancer libs.
Questions
- What are the differences (if any) relative to fontTools.varLib.mutator? fonttools/fonttools#2248 (reply in thread)
Per Cosimo, instancing is not yet supported fonttools/fonttools#2248 (reply in thread)
But it is planned. Something to keep an eye on. Will leave this open.
D/W Behdad and his feedback was that it is best to continue to base this application on fontTools for now. The support in harfbuzz is not mature at the moment and the fonttools implementation is likely to remain the default in the near - mid term. Will leave this open and follow.