Bolder Fonts on an Xteink Running Crosspoint
I found Crosspoint's only preinstalled font, Noto, too thin and spidery for easy reading. But getting new fonts turned out to be a little complicated.
You can find some pre-built .cpfont files (the format Crosspoint understands) in crosspointreader.com/fonts, and some more in Crosspoint font releases. No previews, and I couldn't find any way to download everything (short of cloning the whole repository and then checking out the appropriate release SHA) so you have to just guess at which font face names might fit your needs, and then download files one at a time for each face and size you want to try.
To install them on the SD card, make a directory Familyname under Fonts, then put the .cpfont files there. For instance,
mkdir /xteink/Fonts/Bitter cp Bitter_12.cpfont Bitter_14.cpfont /xteink/Fonts/Bitter
I tried a few of them, but all the fonts I tried were still thin and hard to read. I needed something better.
Converting Your Choice of Font
To convert other fonts to cpfont format,
following the instructions at
SD
Card Fonts, first either
apt install fonttools python3-freetype (on Debian) or
pip install freetype-py fonttools (on any platform).
Then:
python3 lib/EpdFont/scripts/fontconvert_sdcard.py \ MyFont-Regular.ttf \ --intervals latin-ext \ --sizes 12,14,16,18 \ --style regular \ --name MyFont \ --output-dir ./MyFont/
Merriwether and PretendardMedium were pretty good. But they didn't solve the thin-and-spidery problem — especially since the font looks fine when I choose it in Settings, but then when I go back to the book, draws once like it looked in Settings, but then redraws the screen with all the letters thinned
Converting Heavier Weights of a Font
. I've seen a reference to someone converting the Semi-Bold version of a font for use on Xteink, but they didn't say how they did it and I couldn't find instructions for that anywhere. I searched for a while then finally gave up and asked Claude, which found a way to do it:
- Make a new font with the weight you want:
fonttools varLib.instancer MerriweatherSans-VariableFont_wght.ttf wght=600 -o MerriweatherSans-SemiBold.ttf
- Convert it to its own .cpfont file:
python3 lib/EpdFont/scripts/fontconvert_sdcard.py ~/.fonts/xteink/Merriweather_Sans/MerriweatherSans-SemiBold.ttf --intervals latin-ext --sizes 12,14,16,18 --style regular --name Merriweather_Sans_SemiBold --output-dir ~/.fonts/xteink/Merriweather_Sans/
You can use different weight values, like 500 for Medium or 700 for Bold.
The Merriweather and Bitter font files I got from Google (two fonts that seemed to be recommended by Crosspoint users) came with separate TTF files for Roman and Italic, which isn't how I've seen other fonts done, but I guess that's how Google does it. But in case I want to read books that use Italic, I'd like the font to include that too, all in the same .cpfont file.
Make it Into a Python Script
That worked, but it was a bit fiddly, so I wanted to automate it.
So I wrote a Python script: crosspoint-fontweight.py. It uses fonttools, (available from Debian or pip), plus the previously mentioned fontconvert_sdcard.py, from the crosspoint-reader GitHub repository, which you have to put somewhere in your path.
The fonts I downloaded from fonts.google.com came as two files: Bitter (recommended by quite a few people as a good xteink reading font) came as a Bitter.zip file that expanded into Bitter-VariableFont_wght.ttf and Bitter-Italic-VariableFont_wght.ttf as well as a large collection of other files like static/Bitter-ExtraLight.ttf, static/Bitter-MediumItalic.ttf, static/Bitter-ExtraBoldItalic.ttf and so forth. I don't know why they separate italic into separate .ttf files, but they did that with all the fonts I downloaded, so I wrote the script to handle that. I used the VariableFont_wght files rather than the specific SemiBold and ExtraBold files.
Run the script like this:
crosspoint-fontweight.py Bitter-VariableFont_wght.ttf Bitter-Italic-VariableFont_wght.ttf
It will produce (as well as a bunch of intermediate .ttf files) three directories: Bitter-475, Bitter-550 and Bitter-625, with three different weights of that font face, each of which contains sizes 12, 14, 16 and 18. You can copy those directories into the Fonts folder of your Xteink SD card.
I'll probably tweak these choices as time goes by; I think I want a weight bolder than 625 for a lot of fonts, and I'd also like 13 and 15 sizes. (In fact, after typing that, I made those changes to the script, so it now produces five weights and seven sizes.) And of course I plan to make those weights and sizes choosable from the command line, though for now, you have to edit the script. It's a start.
[ 16:18 Oct 21, 2026 More tech | permalink to this entry | ]