CrossPoint supports loading additional fonts from the SD card, including fonts with extended Unicode coverage (CJK, Cyrillic, Greek, etc.).
There are three ways to install fonts:
- Connect your CrossPoint reader to Wi-Fi
- Go to Settings > System > Manage Fonts
- Browse available font families and tap to download
- Downloaded fonts appear immediately in Settings > Reader > Font Family
- Start File Transfer and connect through Join Network or Create Hotspot
- Open the web interface URL shown on the reader
- Navigate to the Fonts tab
- Upload
.cpfontfiles using the upload form
-
Download font files from the crosspoint-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/ │ ├── Literata_12.cpfont │ ├── Literata_14.cpfont │ ├── Literata_16.cpfont │ └── Literata_18.cpfont └── fonts/ ← Visible root (equally valid) └── Merriweather/ ├── Merriweather_12.cpfont └── ... -
Insert the SD card and power on your CrossPoint reader
The built-in UI fonts are Latin-only, so by default the interface (book titles in the library, file names in the browser, list rows, headers) shows replacement boxes for Chinese/Japanese/Korean text even when book content renders correctly with a selected SD-card font.
To avoid shipping a large CJK glyph set in flash, CrossPoint instead reuses the SD-card font you already selected: when a UI string contains a CJK character the built-in font cannot draw, that whole string is rendered with your selected SD-card font instead.
The fallback is size-matched. The built-in UI fonts render at 8 pt
(small/author lines), 10 pt (list rows) and 12 pt (book-cover titles, headers),
so CrossPoint loads your SD family at those sizes too and maps each UI font to
its same-size SD font. CJK book names therefore appear at the same size as the
Latin text around them. For this to work the family must contain .cpfont
files at sizes 8, 10 and 12 (in addition to the reader sizes 12–18); any UI
size missing from the family simply keeps showing boxes for CJK at that size.
Note that Settings > Reader > Font Size lists every size the family ships, so a family built at 8,10,12,14,16,18 offers all six as reading sizes — the UI sizes are not hidden from the list. Reading at 8 pt is your call; if you would rather not see the small sizes there, convert two families (one with the UI sizes for fallback, one with only the reading sizes you want).
When converting your own font, include the UI sizes:
python3 lib/EpdFont/scripts/fontconvert_sdcard.py \
MyCJKFont-Regular.otf \
--intervals cjk \
--sizes 8,10,12,14,16,18 \
--style regular \
--name MyCJKFont \
--output-dir ./MyCJKFont/
What this means in practice:
- Select a CJK-capable SD font under Settings > Reader > Font Family
(see Installing Fonts and the
cjk/hangulpresets under Converting Custom Fonts). That single selection drives both book content and size-matched CJK fallback in the UI. - Pure-Latin UI strings keep the crisp built-in font; only strings that actually contain CJK are routed to the SD font.
- The fallback is per string, not per glyph: a mixed title such as
三体 Vol.1renders entirely in the SD font (including the Latin part). If that SD font is aMonofamily, the Latin portion will appear half/full width. - If no SD font is selected (a built-in reading font is active), there is no CJK fallback and the UI again shows boxes for CJK — pick a CJK SD font to restore it.
The current list of pre-built fonts is maintained in the crosspoint-fonts repository.
To convert your own TrueType/OpenType fonts:
pip install freetype-py fonttools
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/
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/
| 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 |
hebrew |
Hebrew + Alphabetic Presentation Forms |
georgian |
Georgian + Georgian Supplement |
armenian |
Armenian |
ethiopic |
Ethiopic + Extended |
vietnamese |
Vietnamese subset (ơ/ư and combining marks) |
ipa-chars |
IPA Extensions + Spacing Modifier Letters (phonetic transcription) |
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 the firmware's built-in font conversion intervals |
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
--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 the web interface or manual SD card copy.