Repository navigation
NickelReadingStats v0.2.0
⚠️ Superseded by v0.2.1. Please update (privacy). v0.2.0 still let Kobo's Google Analytics run on Tolino, which collected reading events such as opening and closing books with a book ID and uploaded them to Google when Wi-Fi was on. v0.2.1 silences it and deletes entries that have not been sent yet.Deutsch: Bitte auf v0.2.1 aktualisieren (Datenschutz). In v0.2.0 lief auf dem Tolino noch Kobos Google-Analytics-Erfassung mit; v0.2.1 legt sie still.
Bugfix and privacy release. Everyone on v0.1.0 should update.
Deutsch, kurz: v0.1.0 konnte auf dem Tolino Teile des Systems in den Kobo-Modus versetzen (Kobo-Menüs, Thalia-Konto/Sync weg) und hat Nutzungsdaten wie Buchtitel und Lesezeit an Analytics übertragen. Beides ist in v0.2.0 behoben. Installation wie bisher:
Kobo.tgznach.kobo/kopieren und neu starten; die alte Version muss vorher nicht entfernt werden.
Fixes
- Tolino partly turning into a Kobo (Kobo menus, Thalia account and sync missing). v0.1.0 lifted the
isTolino()gate globally, for all threads, while the reading-life code ran (for example at boot), so other parts of Nickel could set themselves up as Kobo. The override now applies only to the calling thread, for the duration of those calls. - Analytics upload caused by the mod. With v0.1.0 Nickel queued analytics events for sideloaded books, including title, author, ISBN and reading time, and uploaded them on the next sync. A stock Tolino queues none. All analytics events are now dropped on a Tolino; on a Kobo nothing changes. The reading-life data behind the stats is stored on the device and is not affected.
- Wrong session length passed on.
EventEngine::endReadingSession()returns the session length in seconds but was declaredbool. - Chapter bars shifted when an EPUB had a missing spine file or percent-encoded file names (
Chapter%201.xhtml). - Stats offered for the wrong books. The per-book stats now follow Nickel's own rules for kepubs, applied to plain EPUBs: no fixed-layout, no image-only books, same accessibility check. Whether a book's stats page is shown is left to Nickel again, so it no longer appears on an empty or misaligned word-count list.
- Parental control. The Activity entry is hidden if its guards cannot be checked, instead of being shown.
Improvements
- Word counting runs in the background (no UI freeze when opening large books), is cached per file, and caps each file at 8 MB.
- More accurate word counts: body text only (no chapter titles), comments and scripts ignored, punctuation-only tokens not counted, more space entities, UTF-16 chapters.
- Every hook is optional: a symbol missing on some firmware build disables only that feature.
Tested
On a Tolino with firmware 5.18.264769:
- The per-book stats page shows chapter bars with read chapters highlighted.
- Activity: hours read, minutes per session and pages per minute work.
- Thalia sync and book downloads work.
- No Kobo menus appear, and the analytics queue stays empty.
Built against Qt 6.5.2 (strayrose/nickeltc toolchain). Host tests and firmware symbol/ABI checks pass.
Known limitations
- The "time remaining" estimate can read too low until the reading speed has been learned (unchanged from v0.1.0).
- Fixed-layout content (fixed-layout EPUBs, PDFs, comics) and image-only books are excluded.
- Firmware 5.18+ (Qt 6) only. Kobo devices on 5.x are expected to work but have not been verified yet; firmware 4.x is not supported.
Install
- Download
Kobo.tgzfrom the assets below. - Copy it to
.kobo/on the device. - Eject and restart.
To uninstall, place an empty file readingstats_uninstall in the device root and restart.
SHA-256 of Kobo.tgz:
f36cb4fc1d5e333189ad96c017c8f06f255434af16428c297704d7a75458ff42
Notes
Reverse-engineered with AI assistance; full credits and attribution are in the README. Licensed under MIT.
Originally released on Codeberg on 2026-10-20.