github cporcellijr/bookbridge v7.7.0
7.7.0

13 hours ago

Release Notes - 7.7.0

A rewind you make now sticks, alignment is safer and more controllable, and
BookBridge can align collections whose ebook sections are ordered differently from
their narration.
The dashboard gains author and series filters and sorts, reading
history records continuous sessions instead of dozens of fragments, and fixed-page
comics now keep their page between KOReader and Grimmory.

This release also hardens every download path and ships BridgeSync 0.6.10, with
substantially lower memory use and safer book replacement on KOReader devices.

What's New

  • Go back in one app and have it stick (#215). If an audiobook runs ahead while
    you sleep, you can return to the place you last remember in a reader and continue
    from there. BookBridge now recognises the continued reading as confirmation that
    the rewind was deliberate and lets that position lead. A single app suddenly
    reporting an old position is held briefly instead of being pushed everywhere at
    once. Honor a Deliberate Rewind is on by default under Settings → Sync and does
    not require turning off furthest wins.

  • Wrong ebook/audio pairings are caught without an LLM (#426). Alignment now
    measures how much of the ebook's wording appears in the transcript before it
    publishes a map. The check works on a standard install and still runs if an
    optional Ollama server is unavailable. Its threshold is configurable under
    Settings → Transcription.

  • Collections and omnibuses can align even when their sections are in a different
    order from the narration (#426).
    Enable experimental Segmented Alignment Maps
    and remap the affected book; BookBridge then fits its sections independently and
    follows a segmented map as playback moves between them. Normally ordered books keep
    the standard map. Any section it still cannot place is reported in Alignment Health
    instead of being silently stretched across the wrong audio.

  • Alignment Health can score, replace, and restore maps (#426). Each alignment
    receives a quality score based on pacing, anchor density, and its largest
    guessed-through gap. Poor maps join old estimated maps in the attention list; a
    Restore previous action can put the last map back if a rebuild is not an
    improvement.

  • Remap alignment without clearing reading progress (#426). The book-card reset
    menu now separates Clear position from Remap alignment. A remap keeps the
    reading position, rebuilds through the normal queue, and refuses to replace the
    current map with a worse result.

  • Word-level timestamps produce more precise maps (#426). Built-in Whisper,
    compatible HTTP transcription servers, and Storyteller re-alignment now preserve
    word timing through transcript caching and EPUB matching. Existing maps remain
    valid; remap a book if you want it rebuilt with the new timing.

  • Optional CTC forced alignment for self-built installations (#426). CTC can
    align audiobook speech directly against ebook text for denser positions on
    character-precise readers. It handles long books in sections and excludes large
    unspoken passages. This is experimental, effectively requires an NVIDIA GPU, and
    is not included in any published image; it is available only in a self-built
    image made with INSTALL_CTC=true.

  • A more useful dashboard. Filter by author and series, combine those filters
    with format, see how many books remain, and sort by author or series reading order.
    The filter lists narrow to choices that can still match. Has Audio and
    Audiobook Only now distinguish books that have both formats from books that
    have only audio.

  • A continuous listen is one reading session instead of dozens (#429). Session
    history now accumulates until you stop, finish the book, or reach a four-hour
    boundary, then writes one entry locally and to Grimmory and BookOrbit. Progress
    itself still syncs immediately. Buffered sessions survive restarts, destinations
    retry independently, and BookOrbit receives only time it did not already record.

Fixed

  • BookOrbit audiobook polling works after its playback API update. BookBridge now
    reads and writes revisioned playback state, uses manifest asset IDs and durations
    to reconstruct multi-file audiobook positions, and keeps a one-time compatibility
    fallback for older BookOrbit releases.

  • Fixed-page comics keep the right page between KOReader and Grimmory (#436). CBZ
    progress travels as a real page number instead of a pretend EPUB locator, including
    archives with WebP pages. Adjacent turns are preserved even just after BookBridge
    writes, and a failed Grimmory write cannot hide newer reader progress.

  • Grimmory covers and progress stay tied to the selected book (#435, #437). Ebook
    covers use the correct media endpoint. Reads, writes, and cached files retain the
    chosen ID after a rename; ambiguous legacy mappings stop rather than guessing a
    different book.

  • A rounded position no longer pulls a reader backward (#434). A newer bridge
    write cannot beat an older, further-ahead device position merely because its
    locator rounded slightly backward. A confirmed deliberate rewind still wins and
    retains its original cutoff through later syncs.

  • KoSync timestamps mean UTC in every container timezone (#438). Older
    timezone-naive values were being interpreted as local time on non-UTC hosts,
    skewing freshness decisions and timestamps returned to readers. Contributed by
    @grandson965.

  • Audiobookshelf clients see completions synced from another reader (#433). A
    completion now travels through the playback-session event clients already follow,
    without adding listening time. Contributed by
    @Kyomorie.

  • An interrupted download no longer replaces a good copy. Audiobookshelf,
    Calibre-Web Automated, Grimmory, BookOrbit, Storyteller, and transcription inputs
    are downloaded beside their destination, validated, and moved into place only when
    complete. Empty responses, short streams, server error pages, and damaged EPUBs
    leave the previous copy untouched. Incomplete BookOrbit audio caches repair
    themselves on retry.

  • Storyteller cache work no longer races itself. Concurrent downloads and
    narration stripping use private staging locations, so neither can remove the
    other's file. A book Storyteller has not narrated yet is treated as pending and is
    picked up automatically when ready.

  • BridgeSync is lighter and safer on KOReader. Version 0.6.10 sends requests
    directly instead of launching a full KOReader subprocess for each one, which
    removes the memory spike that could freeze or exhaust a Kindle. It keeps one app
    sync queue, cancels work on sleep, waits briefly for a busy settings database, and
    does not leave background processes holding ports.

  • BridgeSync validates a replacement before touching the book already on the
    device.
    A missing, empty, wrong-sized, or wrong-content download is discarded for
    retry while the existing book and its reading-position sidecar remain in place.
    Current manifest files also survive an internal book-ID change.

  • A deleted match no longer leaves BridgeSync retrying impossible session uploads.
    Malformed sessions are dropped, sessions for a removed book get a bounded retry in
    case it is re-matched, and genuine temporary failures continue retrying normally.

  • Calibre-Web Automated progress stays on the book you selected (#427). New
    mappings store the numeric ID from CWA's download link; older mappings resolve
    through title and filename hints. Only an exact ID or slug is accepted, so a lone
    but ambiguous search result is never treated as proof.

  • Existing KOReader progress is adopted when its book is added (#431). A matching
    KoSync document is linked immediately, and older orphaned progress heals on the
    next device read. A document hash already owned by another book is left alone, and
    re-matching an aligned book preserves its identity, states, and annotations.

  • One physical audiobook produces one suggestion (#383). If Audiobookshelf and
    Grimmory index the same library files, BookBridge collapses their provider records
    by normalized path. Matching one copy keeps the other from returning on the next
    suggestions scan.

  • Series and author metadata fill in more reliably. BookOrbit supplies missing
    authors for ebook-only books. When a library cannot report series metadata — most
    notably CWA's OPDS feed — BookBridge reads Calibre series fields from the EPUB
    before falling back to the title (#261). New BookOrbit and Grimmory audiobook
    matches also resolve their series immediately.

  • Actively read series stay under In Progress (#432). A grouped series with any
    partially read volume appears in the active section, while completed volumes remain
    available under Finished. Disabling grouping places each book in its own section
    without duplicates, and the collapse control stays beside its series heading (#430).

  • Adding an audiobook from Suggestions merges with the ebook you already have.
    Both matching routes now converge on one book instead of creating two entries that
    compete for the same KOReader document. Concurrent matches likewise adopt the row
    another request just created.

  • Malformed EPUB manifests can be repaired for parsing. A manifest entry that
    names a file missing from the archive no longer prevents the entire book from being
    matched, aligned, or synced.

  • KOReader's book list starts refreshing as soon as the catalog changes. Adding,
    removing, or changing the status of a book triggers one shared manifest worker
    instead of waiting for a timer or continuously rebuilding an unchanged list.

  • Smaller fixes. Grimmory adopts an existing highlight rather than retrying the
    same create forever; transcription cancellation is logged as a clean stop; Last
    Synced sorts by its exact timestamp; series searches respect the active filters;
    audiobook-only books are no longer hidden from every format choice; and Wait for
    Position to Settle toggles now name the integration they affect.

Upgrading

Pull the new image and restart:

docker compose pull && docker compose up -d

Database migrations run automatically during container startup. Re-download
BridgeSync 0.6.10 on every KOReader device that uses the plugin, then restart
KOReader so the new Lua code and state handling are loaded.

Operational Notes

  • Deliberate rewind handling is on by default. No setting change is required.
  • Existing alignment maps remain valid. Quality scores fill in gradually as you
    open Alignment Health. Use Remap only for books you want rebuilt with word timing or
    the optional CTC backend.
  • CTC is not in the standard, CUDA, or any other published image. Those images
    continue using the Whisper/lexical pipeline exactly as before.
  • Existing fragmented reading-session history is not rewritten. New sessions use
    the aggregated format after upgrading.
  • Existing duplicate book rows are not removed automatically. If an older
    Suggestions match produced a separate ebook-only row, delete that leftover row;
    the audiobook-linked entry keeps the progress.
  • Interrupted downloads and stale device state recover on the next normal retry.
    No manual database repair is required.

Don't miss a new bookbridge release

NewReleases is sending notifications on new releases.