Releases: PuppetHoundZ/PicoReader-MuOS
Release list
v26.08.27.07
Changelog
All notable changes to PicoReader are documented here. Entries are
added at release time, not every development session — for the
day-to-day build log, see the AI notes at the top of main.py.
v26.08.27.07
Fixed
- LibriVox author searches now actually find the author's work.
Searching a name like "Lovecraft" used to return almost nothing —
LibriVox's search only matches book titles, not authors, so a
search for an author's name only ever caught the rare book whose
title happened to start with that word. Author search now falls
back automatically when a title search comes up thin, merging in
the real author-matched results. - LibriVox searches no longer time out on "no results." A
genuine no-match search from LibriVox's own server was
measured taking 11–25 seconds to respond — well past the app's old
15-second timeout, which made a real (if slow) "nothing found"
answer look like a network failure. Timeout raised with real
margin above the worst measured case. - A stale search title no longer lingers on screen. Using Find
Audiobook on one book, then a different book right after, could
leave the first book's title sitting in the LibriVox screen's
header even though the results below were for the second book. - Fixed a real freeze risk on the Library screen. Sorting by
"Last Read," or just having the Library or Library Menu screen
open, was silently re-reading and re-parsing your entire
bookmarks file from disk once per book, every single frame —
scaling directly with library size. Now loaded once per screen
update instead of once per book.
Performance
- Chapter navigation and the Chapters screen are now measurably
faster to open, especially on very large books (a full Bible
edition's internal chapter/spine lookup went from a linear scan to
a constant-time lookup). - Removed several long-standing inefficiencies in LibriVox audiobook
browsing and playback: duplicate library-scan imports, a
redundant duplicate implementation of a network-error-handling
path, and repeated filesystem probing for the installed media
player on every track of a queue instead of once per session.
Maintenance
- Removed several genuinely dead functions (never called from
anywhere) found via real cross-file reference checking, not just
code reading: an orphaned JW Broadcasting category handler, an
unused category-tree counter, and a couple of small pass-through
wrapper functions. - Corrected a few stale code comments that no longer matched current
behavior (leftover from earlier, smaller versions of a couple of
screens).
v26.08.11.04
Changed
- The two-press exit confirmation now requires a real pause between
presses. A fast reflexive double-tap of B no longer counts as
confirming — it's ignored, and the "Press B again to exit" prompt
stays up so a genuinely-paused second press still works normally.
v26.08.11.03
Added
- Confirm before quitting. The Library screen now asks you to
press B a second time before actually closing the app — the first
press shows a "Press B again to exit" prompt, and any other button
cancels it. Only applies at the library's top level; B while
browsing into a folder still just goes up a level, as before.
v26.08.11.02
Maintenance
- Dead-code cleanup. Removed several fully unreachable functions
left behind by earlier refactors (an old sound-engine cleanup method
that was never wired up, and a couple of image/prerender helpers
superseded by later, better-performing replacements). No behavior
change — verified via real execution, not just code inspection. - Minor UI consistency fix. The "Download From" source list now
truncates long names the same safe way every other list in the app
already does, closing a small gap that wasn't causing a visible
problem today but had no margin for error if a future source's name
ran long.
v26.08.07.23
Added
- LibriVox audiobook downloads now have a real home. A "Downloaded
Audiobooks" entry sits at the top of LibriVox's category list,
showing every audiobook you've downloaded, grouped by book so
tracks from different titles never mix together. Works fully
offline — no network call needed to browse what you already have. - Delete downloaded audio right from the browser. A new "Delete"
option (via the X quick menu) removes a downloaded audiobook — the
whole book, or just one track — directly from the Downloaded
Audiobooks list. Two-press confirm, same as every other destructive
action in the app. - The Library's popup menu got reorganized. New Folder, Move to
Folder, Delete Folder, and Delete Book — previously scattered
throughout the menu — now live together in their own "Edit
Library" submenu, keeping the main Library menu shorter and the
file-management actions grouped in one place. Settings now sits
immediately before Back.
Fixed
- Category browsing is now always live. Previously, if a live
fetch failed, the app could fall back to a cached snapshot of a
category's contents from a past session — occasionally serving a
stale or corrupted list (missing details, and in rare cases a crash
when opening an item from it). Every category is now a fresh fetch,
every time; the only offline fallback left is showing files you've
actually already downloaded, which is both safer and matches what
people actually want when offline. - Fixed a folder-naming bug affecting downloaded audio. Under
certain conditions, downloaded audio files could be saved into the
wrong destination folder rather than each source's own folder.
Fixed — new downloads are now always filed correctly. (If you'd
downloaded LibriVox audio before this fix, it may be worth checking
where it landed.) - Fixed duplicate books appearing after library cleanup. The
"check for files to migrate" tool in Storage could, in some cases,
create a duplicate copy of a book instead of correctly filing the
existing one — now it recognizes books it's already placed and
leaves them alone. - Fixed several back-button navigation bugs in the download
browser. In a handful of specific spots, pressing Back after
drilling into a category wouldn't fully "unwind" the list you were
looking at — the screen would visually change, but the item list
underneath could still be showing the previous, deeper level. Found
through a full sweep of every category across every source and
fixed everywhere it turned up. - Fixed the reader's popup menu occasionally showing a shorter list
than it should, with rows seeming to "appear" partway through
scrolling. The menu's visible-row count is now calculated correctly
regardless of which optional items are hidden for a given book.
Earlier versions
Released informally prior to this changelog's introduction. See
commit history and main.py's own AI notes for details.
v26.08.11.02
Changelog
All notable changes to PicoReader are documented here. Entries are
added at release time, not every development session — for the
day-to-day build log, see the AI notes at the top of main.py.
v26.08.11.02
Maintenance
- Dead-code cleanup. Removed several fully unreachable functions
left behind by earlier refactors (an old sound-engine cleanup method
that was never wired up, and a couple of image/prerender helpers
superseded by later, better-performing replacements). No behavior
change — verified via real execution, not just code inspection. - Minor UI consistency fix. The "Download From" source list now
truncates long names the same safe way every other list in the app
already does, closing a small gap that wasn't causing a visible
problem today but had no margin for error if a future source's name
ran long.
v26.08.07.23
Added
- LibriVox audiobook downloads now have a real home. A "Downloaded
Audiobooks" entry sits at the top of LibriVox's category list,
showing every audiobook you've downloaded, grouped by book so
tracks from different titles never mix together. Works fully
offline — no network call needed to browse what you already have. - Delete downloaded audio right from the browser. A new "Delete"
option (via the X quick menu) removes a downloaded audiobook — the
whole book, or just one track — directly from the Downloaded
Audiobooks list. Two-press confirm, same as every other destructive
action in the app. - The Library's popup menu got reorganized. New Folder, Move to
Folder, Delete Folder, and Delete Book — previously scattered
throughout the menu — now live together in their own "Edit
Library" submenu, keeping the main Library menu shorter and the
file-management actions grouped in one place. Settings now sits
immediately before Back.
Fixed
- Category browsing is now always live. Previously, if a live
fetch failed, the app could fall back to a cached snapshot of a
category's contents from a past session — occasionally serving a
stale or corrupted list (missing details, and in rare cases a crash
when opening an item from it). Every category is now a fresh fetch,
every time; the only offline fallback left is showing files you've
actually already downloaded, which is both safer and matches what
people actually want when offline. - Fixed a folder-naming bug affecting downloaded audio. Under
certain conditions, downloaded audio files could be saved into the
wrong destination folder rather than each source's own folder.
Fixed — new downloads are now always filed correctly. (If you'd
downloaded LibriVox audio before this fix, it may be worth checking
where it landed.) - Fixed duplicate books appearing after library cleanup. The
"check for files to migrate" tool in Storage could, in some cases,
create a duplicate copy of a book instead of correctly filing the
existing one — now it recognizes books it's already placed and
leaves them alone. - Fixed several back-button navigation bugs in the download
browser. In a handful of specific spots, pressing Back after
drilling into a category wouldn't fully "unwind" the list you were
looking at — the screen would visually change, but the item list
underneath could still be showing the previous, deeper level. Found
through a full sweep of every category across every source and
fixed everywhere it turned up. - Fixed the reader's popup menu occasionally showing a shorter list
than it should, with rows seeming to "appear" partway through
scrolling. The menu's visible-row count is now calculated correctly
regardless of which optional items are hidden for a given book.
Earlier versions
Released informally prior to this changelog's introduction. See
commit history and main.py's own AI notes for details.
v26.07.27.14
🚀 Release Highlights (v26.07.29.13 – v26.07.30.31)
📁 File & Folder Management
- Passive Folder Migration: Replaced the manual migration tool. The app now passively detects and safely migrates legacy flat audio/video folders to structured locations during download checks without re-fetching content.
- Plugin Directory Isolation: Audio and Video downloads are now nested under dynamic plugin wrappers (
ROMS/Music/<PLUGIN_NAME>/...andROMS/movies/<PLUGIN_NAME>/...) to keep media separated from other apps. - Collision-Proof Subfolding:
- Added per-item subfolders so identical chapter filenames no longer overwrite each other.
- Periodicals & Publications: Added per-issue subfolders (e.g.,
.../202610/) and category subfolders (.../Publications/Books/<Title>/).
🎧 Audio System Overhaul
- Music vs. Publications Restructuring: Audio navigation is now cleanly split into Music and Publications groups at the top level.
- Full Audio Backlog Browsing: Added full back-issue browsing for primary periodical and workbook audio (matching historical depth back to 2016).
- Audio Availability Filtering: Added persistent caching for MP3 availability checks—publications lacking audio are cleanly filtered out without repeating live network queries.
- Article Series Audio Support: Added support for audio-enabled article series, including legacy archives, life stories, additional topics, and docid-range probing for specific study series.
📚 Catalog & Content Expansion
- Search Discovery Caching: Items discovered via live search or manual code entries are now permanently cached and seamlessly merged into normal category browsing.
- New EPUB Catalog Additions: Live-verified and added two new publications to the main catalog.
- Multi-Year Gap Backfill: Updated periodical issue generators to automatically scan and backfill multi-year gaps if maintenance was missed across multiple calendar years.
⚡ Navigation, UI & Async Fixes
- Quick Menu Overlay Fix: Fixed a freeze where opening the Quick Menu (X) while loading audio issues broke the loader permanently.
- Race Condition Guards: Updated async completion guards to check exact source identity rather than just screen state, preventing stale background requests from clobbering newly selected views.
- B-Button Routing Fixes: Corrected back-button navigation hierarchy across multi-level audio pickers, content lists, and publication categories.
- Metadata Extraction: Integrated
epub_engineto parse downloaded EPUB metadata on the fly, auto-populating missing cover themes into issue lists.
v26.07.18.12
This release switches PicoReader's public GitHub release tags from the
earlier 0.1.x scheme to the same date-based YY.MM.DD.XX scheme already
used internally in main.py's own changelog. Going forward, release tags
will always match the app version they were built from.
Fixed
- LICENSE.md trimmed to pure, unmodified MIT text so GitHub correctly
auto-detects the license instead of showing "Other." - FONT_LICENSE.txt corrected to not overclaim it contains the full legal
text — now a summary with a link to the canonical license.
Added
- README screenshots section with real captures of the Library and Reader
screens, plus a five-theme gallery.