static-to-variable
Turn a family of static weights into one variable font.
Static weights are usually drawn independently, so their glyphs don't line up — different points and contours per weight — and won't interpolate. static-to-variable rebuilds them onto a shared structure so they do, then builds and checks the font for you.
Scrub the weight axis
real fonts the pipeline built, live
Each of these was rebuilt from three or four independent static weights into a single file with a continuous wght axis. Drag the slider — every glyph interpolates natively.
The hard part it solves
A variable font interpolates point-by-point between master weights. That only works if every weight shares the same number of contours and points, in the same order. Independently-drawn statics almost never do — so a naive merge either fails to build or mangles glyphs mid-interpolation.
Re-derive every weight onto one shared point structure so they interpolate — the part independent static fonts get wrong.
Fix donor-inherited height and metric defects so masters line up.
Compile the variable font with fontmake, then verify every named weight matches its donor and freeze anything that can't interpolate cleanly.
Google Fonts families rebuilt end-to-end into valid variable fonts
from geometric sans to high-contrast display serif to monospace
per-weight fidelity checks and interpolation-safety gates on every build
Three commands
# scaffold a config static-to-variable init # point it at your static fonts, set the weights, then static-to-variable build --config stv.config.json