v1.0.1 — Works on every theme
A bug-fix release. Two problems reported after v1.0.0, both fixed.
Upgrading is just reflashing. Your streak, character choice, and reading history are stored on the SD card, not in firmware, so none of it is lost.
The companion only laid out correctly on Lyra
Reported by u/ppfry. On the other themes the character was drawn over the last menu row, and its speech bubble was often empty.
Two causes. The home screen worked out where the menu ended using a formula that only matched Lyra — Classic was off by 10px, RoundedRaff by 35px, because RoundedRaff sizes its rows from the font rather than the metrics table. And the bubble was pinned to the character's height, so a small character produced a bubble too short to fit a single line of text, which then drew nothing at all.
The companion has moved off the bottom of the screen entirely. Each theme now says what space it can spare, and the companion goes there.
| Theme | Where the companion sits now |
|---|---|
| Lyra | In the column to the right of the menu buttons |
| Lyra Extended | In the column to the right of the menu buttons |
| RoundedRaff | In the column to the right of the menu buttons |
| Classic | To the right of the book cover at the top of the screen. Its menu rows are full width with nothing to sit beside, so it uses the strip under the menu only when there is genuinely room there |
Left: Lyra Extended, beside the menu. Right: Classic, beside the cover.
Putting it beside the menu was u/joshthor's suggestion, and it turned out to be the answer for three of the four themes. The menu buttons only need to be as wide as their labels, so narrowing them opens a column that is taller and better shaped than the strip underneath ever was. Every theme now gets a full size character, where before the roomiest one managed three quarters of that and the tightest showed a 30px character with an empty bubble.
Waking from sleep left the sleep screen ghosted behind the home screen
A CrossPoint bug rather than a companion one, and it happens whether or not you enable the companion.
Waking skips the panel's clearing pass to keep resume fast, leaving the sleep image on the screen for the next paint to replace. The reader repaints properly; the home screen used the fast e-ink waveform, which draws over a retained frame without clearing it. So the sleep image sat behind the UI until enough button presses wore it away.
The first home paint after a wake now clears properly. This costs roughly a second on wake — that is the trade for a clean screen. Resuming into the reader is unaffected.
Both this and a divide-by-zero in the settings list are CrossPoint bugs found while building this, and are being offered upstream.
Still only tested on the Xteink X3
Unchanged from v1.0.0. Should run on an X4, but it has no RTC so streaks and the sad moods will not work. Will not boot on an X4 Pro, which is a different chip. Back up your firmware before flashing — instructions in the README.
Thanks to u/ppfry and u/joshthor for finding and shaping both of these.
Found something else? Open an issue.

