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. Nothing leaves your machine.
Loading preview font…
How it works
Merge without breaking letters
You can't just glue the files together. The outlines usually don't line up. This redraws them so they blend, and skips anything it can't do cleanly.
- 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.
Showcase
Try a finished font
These started as separate weight files. Drag the slider. That's one file.
Setup
Two minutes, once.
No account. No upload. You only need tools installed on your machine.
Install Node 24.11+
Runs the CLI. nodejs.org
Install Python 3.11+ and uv
Powers the font engine. docs.astral.sh/uv
Set aside a few minutes
A small family with three weights finishes under a minute. A big family with thousands of glyphs takes longer.
Install
Run it on your machine
Install once. Point it at a folder of weights. init writes a config you can edit. build makes the variable font.
npm install -g static-to-variable
cd ~/Downloads/Inter/static
static-to-variable init
static-to-variable build