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.

Thin.ttf
Regular.ttfPoppins-VF.woff2
Bold.ttf
ThinBold

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.

See all 14 fonts
Font
Weight
One file, every weight in between.

Setup

Two minutes, once.

No account. No upload. You only need tools installed on your machine.

  1. Install Node 24.11+

    Runs the CLI. nodejs.org

  2. Install Python 3.11+ and uv

    Powers the font engine. docs.astral.sh/uv

  3. 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