INKFRAME is an open-source, DRM-free, repairable DIY e-reader built on the CrossPoint firmware, ported to custom INKFRAME hardware. It is designed to be fully hackable, component-swappable, and free from vendor lock-in — forever.
This is a fork of CrossPoint. The full reader engine, UI, EPUB parsing, WiFi upload server, and settings are CrossPoint's work. INKFRAME replaces only the hardware layer (display driver, SD card, input) to run on custom hardware. See SYNCING_WITH_CROSSPOINT.md for how to pull upstream CrossPoint updates.
| Component | Part |
|---|---|
| MCU | ESP32-S3-N16R8 (16MB Flash, 8MB OPI PSRAM) |
| Display | Waveshare GDEQ0583T31 — 5.83", 648×480px, 135 DPI, UC8179 controller |
| Display driver | Waveshare e-Paper Driver HAT (breadboard / V1) |
| Storage | MicroSD card, FAT32 |
| Navigation | Sunrom 4379 5-way tactile switch |
| Charging | TP4056 + MT3608 boost |
| Signal | GPIO |
|---|---|
| EPD_PWR_EN | 6 |
| EPD_BUSY | 7 |
| EPD_RST | 8 |
| EPD_DC | 9 |
| EPD_CS | 10 |
| EPD_DIN / SD_MOSI | 13 (shared bus) |
| EPD_SCK / SD_SCK | 47 (shared bus) |
| SD_MISO | 21 |
| SD_CS | 48 |
| NAV UP | 1 |
| NAV DOWN | 2 |
| NAV LEFT | 4 |
| NAV RIGHT | 5 |
| NAV CENTER | 17 |
| POWER button | 0 |
| BAT_ADC | 15 |
| CHRG (TP4056) | 38 |
| STDBY (TP4056) | 39 |
| BOOST_EN (MT3608) | 45 |
- Reader engine — EPUB 2/3 rendering, image handling, hyphenation, chapter navigation, footnotes, bookmarks, go-to-percent, auto page turn, KOReader progress sync
- Formats —
.epub,.txt,.bmp - Custom fonts — drop
.ttffiles into/fonts/on the SD card - Library workflow — folder browser, recent books, SD cache management
- Wireless workflows — file transfer web UI, WebSocket fast uploads, WebDAV, WiFi AP/STA mode, Calibre wireless connect, OPDS browser, OTA
- Themes — Classic, Lyra, Lyra Extended, RoundedRaff
- Localization — 24 UI languages, RTL support
/
├── books/ ← put EPUB files here
├── fonts/ ← custom .ttf font families
└── .crosspoint/ ← settings and reading position (auto-created)
| Font | Source | Why |
|---|---|---|
| Gelasio | Google Fonts | Georgia clone, designed for low-DPI screens — best pick |
| Bitstream Charter | nicoverbruggen/ebook-fonts | Designed for 300 DPI laser/fax — holds up perfectly at 135 DPI |
| Atkinson Hyperlegible | Google Fonts | Engineered for degraded rendering conditions |
Avoid Garamond, Baskerville, and Bookerly — their hairline strokes break up at 135 DPI.
- PlatformIO (VS Code extension or CLI)
- ESP32-S3-N16R8 dev board connected via USB (not UART) port
git clone https://github.com/t-veera/inkframe-reader.git
cd inkframe-reader
git checkout inkframe-s3-uc8179
git submodule update --init --recursivepio runpio run -t uploadpio device monitorN16R8 is required.
platformio.inisetsboard_build.arduino.memory_type = qio_opifor the Octal PSRAM. Compiling without this flag (for N8R8) will cause silent failures.
INKFRAME follows a clean five-layer stack. Only layer 3 (the HAL) differs from upstream CrossPoint. See ARCHITECTURE_LAYERS.md.
5 · UI CrossPoint — untouched
4 · Application/logic CrossPoint — untouched
3 · Driver / HAL INKFRAME — GxEPD2 shim, shared SPI, 5-way switch
2 · Framework / RTOS Arduino-ESP32 + FreeRTOS — given by Espressif
1 · Hardware Your board and wiring
INKFRAME-specific files (layer 3 only):
open-x4-sdk/libs/display/EInkDisplay/src/EInkDisplay_inkframe.cpp— GxEPD2 shimopen-x4-sdk/libs/hardware/SDCardManager/src/SDCardManager.cpp— shared SPI SDlib/hal/inkframe_pins.h— single source of truth for all pin numbersplatformio.ini— S3 board, OPI PSRAM, GxEPD2 dependency
All changes are guarded by #ifdef INKFRAME_HW so CrossPoint's originals are
preserved and upstream syncs remain clean.
See SYNCING_WITH_CROSSPOINT.md for the full workflow. Short version:
git remote add upstream https://github.com/crosspoint-reader/crosspoint-reader.git
git fetch upstream
git rebase upstream/master| Phase | Status | What |
|---|---|---|
| Phase 1 | ✅ Done | Boot + display rendering CrossPoint UI on INKFRAME hardware |
| Phase 2 | 🔜 Next | 5-way switch input, battery ADC (GPIO15), power management |
| Phase 3 | Planned | Home-library dashboard (UDP discovery + POST /upload) |
| Phase 4 | Planned | Deep sleep/wake, NVS position caching, polish |
| V3 | Future | Custom PCB, GDEY display, OTA, ≤9mm thickness |
INKFRAME firmware inherits CrossPoint's licence. See LICENSE for details. Hardware design files are released under CERN-OHL-S.
Built on CrossPoint by the CrossPoint community. Display driver via GxEPD2 by Jean-Marc Zingg. EPUB engine originally from atomic14.