windhint
Configuration-driven batch font hinting for TrueType (.ttf) fonts, powered by ttfautohint.
Installation
pip install windhint
# or
uv tool install windhint
Quick Start
# 1. Generate a configuration template
windhint --init
# 2. Edit windhint.yaml — set your input and output directories
# 3. Run
windhint
Configuration Reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
input-dir |
string | Yes | — | Directory containing .ttf fonts to hint |
output-dir |
string | Yes | — | Directory where hinted fonts will be written |
windows-compatibility |
boolean | No | true |
Add blue zones for usWinAscent and usWinDescent to avoid clipping |
fallback-stem-width |
integer | No | 50 |
Fallback stem width at 2048 UPEM |
hinting-range-min |
integer | No | 8 |
Minimum PPEM value for hint sets |
hinting-range-max |
integer | No | 50 |
Maximum PPEM value for hint sets |
hinting-limit |
integer | No | 200 |
Switch off hinting above this PPEM value; 0 means no limit |
increase-x-height |
integer | No | 14 |
Increase x-height for 6 ≤ PPEM ≤ N; 0 disables |
stem-width-mode |
string | No | "sss" |
Stem width mode: three letters of n (natural), q (quantized), s (strong) |
Example Configuration
input-dir: ./fonts/source
output-dir: ./fonts/hinted
windows-compatibility: true
fallback-stem-width: 50
hinting-range-min: 8
hinting-range-max: 50
hinting-limit: 200
increase-x-height: 14
stem-width-mode: sss
CLI Options
| Option | Description |
|---|---|
--init |
Generate a windhint.yaml configuration template |
-f, --force |
Overwrite existing hinted fonts instead of skipping them |
How It Works
windhint walks input-dir recursively, finds all .ttf files, mirrors the directory structure under output-dir, and invokes ttfautohint on each file with the parameters from your configuration.
By default, fonts that already exist in output-dir are skipped — use --force to overwrite them.
License
Apache-2.0
Metadata
Release files for windhint 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| windhint-0.4.0.tar.gz | 3.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| windhint-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 9.3 kB
Release files / windhint-0.4.0.tar.gz
| Download URL | windhint-0.4.0.tar.gz |
|---|---|
| Size | 3.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da77f1464a3f70f4cfbfc5f5f598e29025374f3cd701b215bbcb20fdd0603801
|
|
BLAKE2b-256 checksum How to use checksums |
91c30698ae744aba89adcab561694e4c33fbf6650efd9edaf9f107b10234e2d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.10 {"installer":{"name":"uv","version":"0.11.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / windhint-0.4.0-py3-none-any.whl
| Download URL | windhint-0.4.0-py3-none-any.whl |
|---|---|
| Size | 5.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4c6a09221762ae82e7f91d74f652149b35c275fad61ac8c728219df4e9d65a04
|
|
BLAKE2b-256 checksum How to use checksums |
a3ce89c919f6d731b57a6a599ed060763f8e9d52d9b130db517624d99d131c4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.10 {"installer":{"name":"uv","version":"0.11.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|