Turn static fonts into one variable font.
Point it at a folder of thin, regular, and bold. Get one file with every weight in between.
npm install -g static-to-variable
cd ~/Downloads/Inter/static
static-to-variable init
static-to-variable buildinit finds the .ttf and .otf files in the folder, reads each one's weight, and writes a config you can edit. build produces the variable TTF and WOFF2.
Variable fonts that didn't exist
See all 14 familiesFont
Weight400
One file, every weight in between.
How it works
Normally you can't just merge the files because they don't line up. This handles that, and skips anything it can't do cleanly instead of breaking it.
- Lines the files up
- Every weight is redrawn the same way, so they blend smoothly.
- Checks every letter
- Each weight has to match the original, and the in-betweens can't go wonky.
- Skips what it can't
- Anything it can't merge cleanly stays fixed at one weight, and you get a list.
What you need
It runs on your machine, so nothing is uploaded anywhere and a big family can take as long as it needs.
- Node 24.11+
- Runs the CLI itself. nodejs.org
- Python 3.11+ and uv
- The font engine. docs.astral.sh/uv
- A few minutes
- Three weights of a small family take under a minute; nine weights of a 3,000-glyph family take several.