Skip to content

Releases: cubezombies/MidnightAthenaeum

0.16.2

Choose a tag to compare

@github-actions github-actions released this 07 Aug 03:05

Security

  • Patched a high-severity advisory in js-yaml (used by the packaging
    toolchain), pinned to its patched version. No functional or behavioral
    changes.

0.16.0

Choose a tag to compare

@github-actions github-actions released this 31 Jul 14:41

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 .aax decryptionFile → Decrypt Audible file (.aax)…
    decrypts one of your own .aax files into a plain .m4b right 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 .aax is 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

Choose a tag to compare

@github-actions github-actions released this 25 Jul 15:47

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

Choose a tag to compare

@github-actions github-actions released this 25 Jul 14:43

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

Choose a tag to compare

@github-actions github-actions released this 25 Jul 05:33

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. Set MIDNIGHT_ATHENAEUM_DEBUG=1 for
    detailed tracing when investigating something specific.

0.13.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 00:52

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

Choose a tag to compare

@github-actions github-actions released this 24 Jul 18:04

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

Choose a tag to compare

@github-actions github-actions released this 24 Jul 15:15

Changed

  • The library index moved from one monolithic library.json file to a real
    SQLite database (library.db), migrated automatically on first launch of
    this version — your old library.json is kept as library.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

Choose a tag to compare

@github-actions github-actions released this 23 Jul 23:23

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 via DOMParser, 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.

0.9.1

Choose a tag to compare

@github-actions github-actions released this 23 Jul 19:47

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.