Skip to main content

localtools-font-subsetter

Make web fonts small, on your machine: subset TTF/OTF/WOFF/WOFF2 fonts to the characters you actually use (Unicode presets, your own text, or Unicode ranges), keep or drop OpenType features, drop hinting, pin or limit variable-font axes (e.g. wght 400 to 700), and write WOFF2, WOFF or TTF/OTF. Each result shows before/after size and glyph count, a coverage report (which requested characters the font does not have), font metadata (family, style, axes, license, fsType embedding bits, with a warning when they forbid embedding or subsetting), a live preview rendered with the subset font, and a ready-to-paste @font-face rule with the exact unicode-range. Nothing leaves your computer.

Install

OS command
Windows (PowerShell) irm https://raw.githubusercontent.com/chayprabs/localtools/main/font-subsetter/install.ps1 | iex
macOS / Linux curl -fsSL https://raw.githubusercontent.com/chayprabs/localtools/main/font-subsetter/install.sh | bash
PyPI (Python 3.10+) pipx install localtools-font-subsetter

The installer unpacks a portable build with its own Python 3.13 (17 MB zip on Windows, 24 to 39 MB on macOS/Linux).

Use

UI: run localtools-font-subsetter (or the Start menu / Applications launcher). It opens http://127.0.0.1:47129. Drop one or more fonts, tick presets (Latin, Latin Ext, Cyrillic, Cyrillic Ext, Greek, Greek Ext, Vietnamese, or Keep all) and/or type sample text, optionally Unicode ranges, layout features and axes, pick a format, press Subset. The preview line is editable. Copy CSS and Download sit on each result.

  • Presets use the same ranges Google Fonts serves, so unicode-range splitting works the way the web expects.
  • Layout features: default (fontTools' set: kern, liga, calt, mark, mkmk, locl, ...), all, none, an exact list (kern,liga) or edits to the default (+ss01,+tnum,-liga).
  • Axes use fontTools instancer syntax: wght=400 pins, wght=400:700 limits, wght=300:400:700 limits and moves the default, opsz=drop pins to the default. Pin every axis to get a static font.
  • Hinting is dropped by default (smaller files; browsers on modern systems barely use it). Tick Keep hinting to keep it.

CLI:

localtools-font-subsetter subset Inter.ttf --preset latin --text "Ωμέγα" --format woff2 -o out/
localtools-font-subsetter subset RobotoFlex.ttf --preset latin,latin-ext --axes "wght=400:700 opsz=drop" -o out/ --css > fonts.css
localtools-font-subsetter subset *.otf --text-file page.html --features +tnum --format woff -o out/ --json

Output files are <name>-subset.<ext>. Missing characters and license warnings go to stderr; --css prints the @font-face rules, --json the full report.

API: POST /api/subset, multipart: file (repeat for several fonts), preset (comma list), text, unicodes, features, hinting (1), axes, format (woff2 woff ttf otf). One font returns the font file, several return a zip with fonts.css. POST /api/report takes the same fields and returns JSON (sizes, glyphs, axes, metadata, coverage, warnings, CSS, base64 font). Errors: 400 {"error": "..."}.

curl -F file=@Inter.ttf -F preset=latin -F text=Hello -F format=woff2 -o Inter-subset.woff2 http://127.0.0.1:47129/api/subset

Engine

fontTools (MIT): fontTools.subset is pyftsubset, and fontTools.varLib.instancer is the reference variable-font instancer; Google Fonts and most font foundries build with them. WOFF2 uses Google's brotli (MIT). The font is subset first and instanced second: that is faster, and it avoids a fontTools failure when subsetting an already partially-instanced font in memory. The full name table (copyright, license, instance names) is kept.

Not included

  • Font collections (.ttc/.otc): refused with a clear error; extract a single font first.
  • EOT and SVG fonts: obsolete web formats.
  • Instancing large variable fonts is slow (a 2 MB, 4,500-glyph font takes about 20 s). Subsetting first helps a lot.

Update / uninstall

localtools-font-subsetter update / localtools-font-subsetter uninstall (installer builds). For PyPI installs: pipx upgrade localtools-font-subsetter / pipx uninstall localtools-font-subsetter.

License

MIT. Test fonts in samples/ are subsets of Inter, Roboto Flex and Noto Sans (SIL OFL 1.1, see samples/licenses/).

Metadata

Release files for localtools-font-subsetter 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for localtools-font-subsetter 1.0.0
File Size Uploaded
localtools_font_subsetter-1.0.0.tar.gz 81.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for localtools-font-subsetter 1.0.0
File Interpreter ABI Platform
localtools_font_subsetter-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 165.6 kB

Release files / localtools_font_subsetter-1.0.0.tar.gz

Download URL localtools_font_subsetter-1.0.0.tar.gz
Size 81.4 kB
Tags Source
SHA-256 checksum
How to use checksums
7bbbb790e132ff91848afdae270be5e2d138f06cd45a26017f5e9221fbc9a3f4
BLAKE2b-256 checksum
How to use checksums
2353ec31440a0ce56f1a4af00129845c410d31497e3fdd00776b5342f0f11885
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release files / localtools_font_subsetter-1.0.0-py3-none-any.whl

Download URL localtools_font_subsetter-1.0.0-py3-none-any.whl
Size 84.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7d37621517bf7c2747addbafb0ba558f397d177cc5a979796e096ba2c8609879
BLAKE2b-256 checksum
How to use checksums
b4e83b4492ce4558359eec54dce7ff17ead665675cbeb88c3faf89df6ce834c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release history Release notifications | RSS feed

1.0.1

2 release files

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page