40 lines
1.8 KiB
Markdown
40 lines
1.8 KiB
Markdown
# Readerly
|
|
|
|
When I was doing my usual font tweaking for my ebook-fonts repository, I stumbled upon variable fonts exporting. Doing this for Newsreader gave me some interesting results at small optical sizes: the font was now reminding me of Bookerly.
|
|
|
|
I asked myself the question: how close can we get to the visual appearance of Bookerly while still retaining Newsreader and keeping the font licensed under the OFL?
|
|
|
|
The goal is to get a metrically/visually similar font, without actually copying glyphs or anything that would infringe upon the rights of the original creators.
|
|
|
|
To accomplish this, I wanted to start from the 9pt font, which I exported. Then, it was a matter of playing around with scripts and manual edits to see if I could get something that was optically close enough.
|
|
|
|
## Project structure
|
|
|
|
- `./src`: Newsreader variable font TTFs (source of truth)
|
|
- `./scripts`: FontForge Python scripts applied during the build
|
|
- `scale.py`: scales lowercase glyphs vertically to increase x-height
|
|
- `metrics.py`: sets vertical metrics (OS/2 Typo, Win, hhea)
|
|
- `lineheight.py`: adjusts OS/2 Typo metrics to control line spacing
|
|
- `rename.py`: updates font name metadata from Newsreader to Readerly
|
|
- `./src_processed`: intermediate files after instancing/processing (generated)
|
|
- `./out`: final TTF fonts (generated)
|
|
|
|
## Building
|
|
|
|
```
|
|
python3 build.py
|
|
```
|
|
|
|
This uses `fontTools.instancer` and the Flatpak version of FontForge to:
|
|
|
|
1. Instance the variable fonts into static TTFs at configured axis values (opsz, wght)
|
|
2. Scale lowercase glyphs (configurable in `scripts/scale.py`)
|
|
3. Set vertical metrics, adjust line height, and update font names
|
|
4. Export to TTF with old-style kerning in `./out`
|
|
|
|
Variant configuration (in `build.py`):
|
|
- Regular: wght=400, opsz=9
|
|
- Bold: wght=550, opsz=9
|
|
- Italic: wght=400, opsz=9
|
|
- BoldItalic: wght=550, opsz=9
|