Releases: cubezombies/MidnightAthenaeum
Releases · cubezombies/MidnightAthenaeum
Release list
0.16.2
0.16.0
Added
- Delete and remove library entries — two new per-book actions, in the
book detail view and via right-click on any library card: Remove from
library (drops it from Midnight Athenaeum, files untouched) and Delete
book (files too) (also sends its files to the Recycle Bin — never a
permanent delete). Deleting also clears out that book's progress,
bookmarks, normalization, online-metadata override, ebook pairing, and
transcript, so nothing orphaned is left behind. If a book's folder ends up
completely empty afterward (and only then — a folder shared with other
books is never touched), the empty folder is removed too. - Audible
.aaxdecryption — File → Decrypt Audible file (.aax)…
decrypts one of your own.aaxfiles into a plain.m4bright alongside
it, using your own Audible activation bytes (entered once via File →
Set Audible activation bytes…, stored locally, used only to decrypt —
never sent anywhere). The original.aaxis never touched. Adding a
folder that contains undecrypted Audible files — or running File →
Rescan library on one already in your library — now also offers to
decrypt all of them at once. A decrypted book shows a small "AUDIBLE"
badge on its card.
Fixed
- Library covers could flicker back to a broken-looking state while
scrolling quickly through a large library, or while a background scan was
still filling in details — most visible on a big scrollbar drag. Covers
now load smoothly and consistently regardless of how you're scrolling or
what's happening in the background.
Changed
- Updated the underlying Electron runtime from 34 to 43, which brings a
newer Chromium and closes 18 security advisories against the old version —
including two that applied directly to how this app serves your audio files
and packages itself. The app now reports no known vulnerable dependencies.
Playback, scanning, covers, transcription and the library database were all
re-verified against the new runtime. - One visible side effect of that update: the "add library folder" and
"choose ebook" file pickers now open at your Downloads folder rather than
wherever they opened before. Electron changed the default; the backup and
data-location dialogs are unaffected because they set their own location.
0.15.0
Changed
- Cover thumbnails are now generated with Electron's built-in image support
instead of a third-party library. They are produced 26x faster (61ms
vs 1.6s per cover, measured over 50 real covers), come out slightly
smaller, and look the same. The removed library was also the last piece of
the app that ran a JavaScript image decoder over cover art taken from your
audio files — which is arbitrary data the app doesn't control — and it
carried an unfixed advisory for exactly that situation. The app now ships
with no known vulnerable dependencies.
0.14.1
Fixed
- A scan could delete your whole library if the drive wasn't available.
If a library folder couldn't be read — drive disconnected, still spinning
up, drive letter changed — the scan found nothing there, and that empty
result was saved over your library. Folders that can't be read are now
skipped and the books already known under them are kept; if nothing is
readable at all, the scan stops and tells you rather than emptying
anything. A scan that finds no books at all when your library isn't empty
is likewise refused.
0.14.0
Fixed
- A background failure during a scan could terminate the app outright, with
no error and no window — it simply disappeared. Best-effort background
work (cover thumbnails, the scan/fill chain) now stays best-effort, and a
stray failure is logged rather than taking the app down with it. - Very large libraries (~6,000 books) burned several seconds of solid CPU
on bookkeeping alone during a scan — every finished book re-copied and
re-indexed the entire library list. Now updated in place: ~1,200x faster
on a 6,000-book library, and a large chunk of the scan-time CPU spike
and system stutter goes with it. - Scan and background-fill progress updates were sent to the window once per
book. On a large library the scan reaches ~800 books/second, so the window
was being asked to redraw its progress bar ~800 times a second — enough to
saturate it, stutter the whole system, and sometimes take the window down
with it (the app appearing to close itself mid-scan). Progress updates are
now coalesced to ~20/second: 63x fewer redraws on a 5,800-book library,
visually identical, with the final state always delivered so progress can
never appear stuck. - Scanning a large library could freeze the app until Windows killed it.
On a ~5,800-book library the scan would spike CPU, stop responding, and
the window would vanish part-way through — intermittently, so it sometimes
survived. Windows was reporting this as an application hang, not a
crash: the scan's inner loop never yielded to the message queue that keeps
a window responsive, so once it was running at full speed the UI was
starved until Windows declared the app dead. The scan now yields
regularly. Measured on the affected library: peak memory during a scan
dropped from 7.3GB (killed) to 843MB (reclaimed afterwards), and a scan
that previously died part-way now completes all 5,825 books in 8 seconds. - Rescans no longer re-check every file of every book. Deciding whether a
book had changed meant inspecting each of its files — around 80,000 file
checks on a ~5,800-book library, almost all of it in books split into
hundreds of tracks. That saturated the drive on every launch and was the
bulk of the scan's cost. A book's folder is now checked first, and its
files are only examined if the folder actually changed. Measured on the
affected library: a routine rescan dropped from 7.6s to 2.9s even with a
warm disk cache, and far more on a cold spinning drive where those checks
were seeks. If a file is edited in place without its folder changing (a
re-tag, say), File > Rescan library still does the full per-file check. - Added a diagnostic log (
diagnostic.log, alongside your library data). It
records scan progress and, if any part of the app ever dies unexpectedly,
which part and why — so a future "it just closed itself" can be diagnosed
from evidence instead of guesswork. SetMIDNIGHT_ATHENAEUM_DEBUG=1for
detailed tracing when investigating something specific.
0.13.0
Added
- Listening stats — a new Stats view (bar-chart icon in the top bar)
showing total time listened, books finished, your current day streak,
top 5 authors and narrators, and a 12-week listening pace chart. Streak
and pace start tracking from this version forward — there's no historical
data to back-fill from before now.
Fixed
- Ebook read-along pairings (
ebook-pairings.json) were never actually
loaded from disk at startup — every launch silently re-scanned the whole
library for matches and could overwrite a manually-picked pairing with a
fresh auto-guess. Pairings now load correctly on launch.
0.12.0
Changed
- The library grid now renders only the books actually in or near view,
instead of accumulating every card you've ever scrolled past — memory and
DOM size stay flat no matter how far you scroll a large library. - Covers now get a small cached thumbnail (generated in the background,
same pass that already fills in chapters) that the grid, series view, and
duplicates finder load instead of the full-size image. Combined with the
grid change above, scrolling back into a section you'd already passed no
longer visibly pauses to redecode covers. The book view still shows your
covers at full resolution.
0.11.0
Changed
- The library index moved from one monolithic
library.jsonfile to a real
SQLite database (library.db), migrated automatically on first launch of
this version — your oldlibrary.jsonis kept aslibrary.json.bak, never
deleted. Rescans and detail fills now write only the rows that actually
changed instead of rewriting the whole file every time; on a 5,800+ book
library this cut a routine background write from a full-file rewrite down
to single-digit milliseconds. No visible change to search, sort, or
filtering — this is purely a storage change underneath.
0.10.0
Added
- Read along — pairs an EPUB with its matching audiobook and shows the
current chapter's text in a side panel while you listen. A new Read
along button in the book view opens it (or prompts to pick the ebook
file if none was found automatically); a background pass checks the whole
library for matches over time, powering a new Has ebook library
filter and a card badge. The panel auto-advances to the chapter matching
what's playing when confident (exact chapter-count match, or proportional
position as a weaker signal — never a wrong guess), and estimates your
paragraph position within that chapter from how far through the audio
chapter you are. Word-level highlighting is a further-out idea — this is
the "even without it, showing the matching chapter is valuable" version
from the roadmap.- New
src/main/epub.js: a hand-rolled EPUB reader (ZIP central-directory
parsing + narrow container.xml/OPF/NCX/nav.xhtml extraction), no new
dependency. Handles nested/fragment-split tables of contents,
percent-encoded paths, and both EPUB2 and EPUB3 conventions; chapter
text is extracted safely in the renderer viaDOMParser, not
main-process regex. - New
src/main/ebook-pairing.js: on-demand (not scan-time) folder-
proximity matching, tuned against a real-data dry run of this library. - Verified with a 32-check synthetic EPUB harness (real generated
fixtures covering nested TOCs, both EPUB eras, malformed markup, and a
simulated DRM failure) before ever touching real files.
- New
0.9.1
Fixed
- Skip-silence was cutting into narrators pausing to breathe mid-sentence
(still talking, just inhaling), boosting playback speed for a moment in
the middle of a sentence — audible as choppiness. The "sustained quiet"
threshold before boosting was only 200ms, well under a normal breath
pause; raised to 700ms, confirmed to fix it by ear.