43 lines
2.2 KiB
Markdown
43 lines
2.2 KiB
Markdown
# Readerly
|
|
|
|
**Readerly** is modified font based on [Newsreader](https://github.com/productiontype/Newsreader), while attempting to be metrically very similar to [Bookerly](https://en.wikipedia.org/wiki/Bookerly), the default font on Kindle devices, to provide a similar reading experience.
|
|
|
|
When I was doing my usual font tweaking for my [ebook-fonts](https://github.com/nicoverbruggen/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 metrics of Bookerly while still retaining Newsreader and keeping the font licensed under the OFL, and maybe making some mild manual edits?
|
|
|
|
The goal was to get a metrically/visually similar font, without actually copying glyphs or anything that would infringe upon the rights of the original creators; after all, Newsreader is a very beautiful font as a starting point.
|
|
|
|
To get to the final result, I decided to use the variable font and work on it. The original is located in `./src` and is available under the same OFL as the end result.
|
|
|
|
## 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
|
|
- `version.py`: sets the font version from `./VERSION`
|
|
- `./out/sfd`: FontForge source files (generated)
|
|
- `./out/ttf`: 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
|