SD Card Fonts
CrossInk supports loading additional fonts from the SD card, including fonts with extended Unicode coverage (CJK, Cyrillic, Greek, etc.).
Installing Fonts
There are three ways to install fonts:
Option 1: Download from device (recommended)
- Connect your device to WiFi
- Go to Settings > System > Manage Fonts
- Browse available font families and tap to download
- Downloaded fonts appear immediately in Settings > Reader > Font Family
Before downloading, choose Settings > Reader > Download Font Size Range. That setting controls which .cpfont point sizes are downloaded for each family:
- teensy: 8, 9, 10, 12 pt
- tiny: 10, 12, 14, 16 pt
- xlarge: 16, 18, 20 pt
- no_emoji: 10, 12, 14, 16, 18 pt
- all: 8, 9, 10, 12, 14, 16, 18, 20 pt
Only the files in the selected range are downloaded. For example, if the range is xlarge, downloading Lexend Deca installs only:
Lexend Deca_16.cpfont
Lexend Deca_18.cpfont
Lexend Deca_20.cpfont
Downloaded ranges for the same family are saved into the same installed family folder. For example, downloading Lexend Deca with the teensy range and then again with xlarge keeps one Lexend Deca family and adds the larger files to that same folder.
On the SD card, downloaded fonts are stored under /.fonts/ by default:
SD Card Root/
└── .fonts/
└── Lexend Deca/
├── Lexend Deca_8.cpfont
├── Lexend Deca_9.cpfont
├── Lexend Deca_10.cpfont
├── Lexend Deca_12.cpfont
├── Lexend Deca_16.cpfont
├── Lexend Deca_18.cpfont
└── Lexend Deca_20.cpfont
Each folder appears as one option in Settings > Reader > Font Family. When that family is selected, Font Size changes to match every size installed in that folder.
Option 2: Upload via web browser
- Open File Transfer on your device and choose Join Network or Create Hotspot
- Open the web interface in your browser (shown on the WiFi screen)
- Navigate to the Fonts tab
- Upload
.cpfontfiles using the upload form
Option 3: Manual SD card copy
- Download font files from the crossink-fonts repository
-
Copy font family folders to one of two locations on your SD card:
/.fonts/— hidden directory (preferred; keeps the SD root tidy when mounted on a desktop)/fonts/— visible directory (use this if your OS hides dot-files and you’d rather see the folder in your file manager)
Both roots are always scanned at boot and the results are merged: a family installed in
/fonts/shows up even when/.fonts/also exists, and vice versa. The two roots only collide if the same family name appears in both — in that case the copy in/.fonts/wins and the duplicate in/fonts/is ignored.SD Card Root/ ├── .fonts/ ← Hidden root (preferred) │ └── Literata (tiny)/ │ ├── Literata_10.cpfont │ ├── Literata_12.cpfont │ ├── Literata_14.cpfont │ └── Literata_16.cpfont └── fonts/ ← Visible root (equally valid) └── Merriweather/ ├── Merriweather_12.cpfont └── ... - Insert the SD card and power on your device
Available Pre-Built Fonts
The current list of pre-built fonts is maintained in the crossink-fonts repository.
Converting Custom Fonts
-
Using the official Crosspoint Font tool: https://crosspointreader.com/fonts
-
Convering TrueType/OpenType fonts on your computer:
Prerequisites
pip install freetype-py fonttools
Single font (one style)
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/
Multi-style font
python3 lib/EpdFont/scripts/fontconvert_sdcard.py \
--regular MyFont-Regular.ttf \
--bold MyFont-Bold.ttf \
--italic MyFont-Italic.ttf \
--bolditalic MyFont-BoldItalic.ttf \
--intervals latin-ext \
--sizes 12,14,16,18 \
--name MyFont \
--output-dir ./MyFont/
Available Unicode interval presets
| Preset | Coverage |
|---|---|
ascii | U+0020–U+007E (Basic Latin) |
latin1 | U+0080–U+00FF (Latin-1 Supplement) |
latin-ext | European languages (Latin + Extended-A/B + punctuation + ligatures) |
greek | Greek + Extended Greek |
cyrillic | Cyrillic + Supplement |
georgian | Georgian + Georgian Supplement |
armenian | Armenian |
ethiopic | Ethiopic + Extended |
vietnamese | Vietnamese subset (ơ/ư and combining marks) |
punctuation | General punctuation (U+2000–U+206F) |
cjk | CJK Unified Ideographs + Hiragana + Katakana + Fullwidth |
hangul | Korean Hangul syllables + Jamo + Compatibility Jamo |
cherokee | Cherokee (historic + supplement block) |
tifinagh | Tifinagh |
symbols | Math, currency, arrows, box-drawing, misc symbols, dingbats |
reading | Literary fiction coverage: Latin, Greek, Cyrillic, math/symbol blocks, supplemental punctuation, and CJK quote marks |
builtin | Matches built-in Bookerly coverage exactly |
Combine presets with commas: --intervals latin-ext,greek,cyrillic
You can also specify arbitrary Unicode ranges directly: --intervals latin-ext,(0x2100-0x214F)
To list all presets with codepoint counts:
python3 lib/EpdFont/scripts/fontconvert_sdcard.py --list-presets
Additional options
--force-autohint — force FreeType’s auto-hinter instead of the font’s native hinting (useful when a font’s built-in hints produce poor results at small sizes).
Install custom fonts via WiFi upload or manual SD card copy.
When a custom font family contains multiple .cpfont sizes, the reader maps font-size steps onto those files from smallest to largest. If the point sizes do not exactly match CrossInk’s built-in sizes, the firmware still uses a best-effort match for the visible Font Size labels. For example, a custom 13 pt file may appear near the built-in Small / Medium choices instead of creating a brand-new named size.