Daily goal
You set the minutes; Infinity nudges you to hit them, every day.
Firmware for the Xteink X4 and X3 e-ink readers. Most firmwares let you read. Infinity won't let you stop.
Habits are built through reinforcement, so Infinity adds a gamification layer designed to keep you coming back. All of it is optional and can be switched off — but it's hard to give up once you start.
You set the minutes; Infinity nudges you to hit them, every day.
A reading-day streak you'll hate to break — with tokens that forgive an off day.
Sometimes hitting your goal gifts you a token, sometimes not. Variable-ratio reinforcement: exactly what hooks you.
Rotating challenges that change every day.
Badges unlocked by reading milestones.
Personal records and a weekly log, to see how far you've come.
Images, CSS styles, and multilingual hyphenation.
Pre-rendered XTC supports books larger than 2 GB.
Bookerly, Lexend and Bokerlam built in, plus custom fonts from the SD card. Dual-font model for mixed scripts.
Font cache plus silent pre-indexing of the next chapter. Four sizes with smoothed grayscale rendering.
Continue your progress across devices.
Hides every extra: just you and your books.
Dark mode, five themes, a fully configurable status bar, four orientations with remappable buttons.
Long-press to bookmark; reading stats feed the streaks. Nine power-button actions via single, double or triple press.
Not a junk drawer: each game was chosen because it controls well with a D-pad and a handful of buttons. Each keeps its own high score.
The Xteink X4 has no battery-backed RTC. This is the kind of problem Infinity sweats over — and a fair sample of how the firmware is built under the hood.
On wake from deep sleep, time is restored from an imprecise internal oscillator that keeps accumulating drift. The device could show 23:55 when it was really 09:00.
Worse: bringing WiFi up from a low-priority task with little free memory froze the whole device.
Infinity resyncs opportunistically. When the clock is approximate, it connects in the background to a saved WiFi network, sets the time via NTP, and switches the radio off. A discreet ~ in the status bar marks the time as approximate until sync completes — you saw it at the top of this page.
The radio now always starts from the main task, through a state machine that advances one small step per cycle, so the interface never blocks. Timezones with DST rules are built in.
Or build it yourself:
git clone --recursive https://github.com/alexfdez1010/Infinity.git
cd Infinity
pio run --target upload
Custom fonts: convert any .ttf / .otf at xteink.lakafior.com, drop the .bin into /fonts/ on the SD card, restart.
PlatformIO, Arduino framework, C++17. The architecture follows an Android-style activity model: each screen is an Activity pushed onto a manager that owns the lifecycle and a single render thread. TLS buffers are trimmed to 4 KB so WiFi and encryption fit in the free heap.
pio run -e default # standard build, serial log
pio run -e slim # release build, smaller
pio run -e ble # bluetooth build (beta)
pio run -t upload # flash via USB
Contributing is the usual dance: fork → branch → pull request. Every visible string is translated (English and Castilian Spanish). Infinity stands on CrossPoint Reader, which provides the EPUB engine and system foundation, and CrossPet, the adaptation it takes over from.