Added
-
Book metadata can be remapped from the Book Detail page (#590) — Books with ABS or stale metadata now show an Improve metadata action that searches upstream providers or accepts a direct provider ID. New
POST /api/v1/book/{id}/mapapplies the upstream title, cover, language, ratings, genres, and provider ID while preserving local status, files, media type, ASIN, narrator, selected edition, and exclusion state. -
Calibre-Web-Automated (CWA) ingest (#417) — A new
Settings → General → Calibre-Web-Automated (CWA) field configures a
shared ingest folder. When set, every successful ebook import is also
copied into that folder so a sibling
CWA container
can auto-ingest it. Bindery keeps its own copy and never moves the file,
so a misconfigured CWA can't take bindery's library with it. No Calibre
runtime dependency is added to the bindery container — only the file
drop is in scope. Audiobook imports are unaffected since CWA is built
around ebook libraries. -
Prowlarr search timeout is now configurable (#576) — The Prowlarr indexer
search timeout has been raised from 15 s to 60 s and can be adjusted in
Settings → Indexers → Prowlarr → Search timeout. Slow usenet indexers
no longer time out on the first query.
Fixed
Importer / download clients
- qBittorrent SavePath fallback caused incorrect imports (#574) — When
qBittorrent'scontent_pathfield was absent or empty, the importer
fell back toSavePath(the shared download root) and could match
unrelated files or walk directories it should not touch. The importer
now usescontent_pathexclusively and aborts cleanly when it is missing. - Default import mode changed from
movetohardlink/copy(#577) —
The out-of-box default wasmove, which silently broke torrent/usenet
seeding immediately after import. Bindery now defaults tohardlinkwhen
source and destination are on the same filesystem (free, preserves seeding)
orcopywhen they are cross-device. Upgrade note: migration 038
clears the implicitmovedefault written at install time; users who
explicitly set an import mode in Settings are not affected. - Downloads stuck in
importFailedare now retried automatically (#578)
— Previously, a download that failed during import was permanently orphaned.
Bindery now retries up to three times before leaving it for manual
intervention. Retry count is persisted via migration 037. - CheckDownloads now polls all enabled download clients (#572) — Only
the highest-priority client was polled for status updates. Secondary
clients (e.g. a second qBittorrent instance or a fallover) were silently
ignored. All enabled clients are now iterated in priority order. - Bulk-grab torrent dedup race condition fixed (#573) — Grabbing multiple
releases simultaneously could assign the sametorrent_idto two
downloads, breaking per-download tracking.AddTorrentis now serialised.
Auth
- API key authentication now grants admin role (#582) — Requests
authenticated via API key successfully verified the key but did not set
the admin role in the request context, causingRequireAdmin-protected
endpoints to return 403. The role is now correctly propagated. - Auth endpoints no longer require
X-Requested-Withheader (#575) —
The login endpoint enforcedX-Requested-With: bindery-ui, blocking
non-browser clients (curl, mobile apps, integrations). Auth endpoints are
now exempt; programmatic clients should use API key auth instead of cookie
sessions.
AudioBookShelf (ABS)
- ABS library is rescanned after audiobook import (#581) — Bindery now
triggersPOST /api/v2/libraries/:id/scanafter a successful audiobook
import so the file appears in ABS immediately rather than on its next
scheduled scan. - Move-mode audiobook imports no longer appear MISSING in ABS (#583) —
The ABS rescan after import updates ABS's path knowledge, resolving the
MISSING status that appeared when the import moved the file. - History events include format for dual-format books (#584) —
bookImported
events for books withmedia_type='both'now record which format (ebook
or audiobook) was imported, making the History page unambiguous.
Metadata
- ISBN lookups now canonicalise provider-native matches (#590) — ISBN
searches normalise ISBN input, consult configured metadata enrichers, and
conservatively relink provider-native results back to canonical OpenLibrary
works when the author/title evidence is unambiguous. This improves
translated and edition-specific matches while avoiding plausible
wrong-title fallbacks. - Audiobook ASIN enrichment can relink to upstream metadata (#590) —
Enriching an audiobook now uses Audnex ASIN metadata to find a safe
canonical upstream match, so ABS/imported audiobook rows can gain better
titles, covers, language, search metadata, and OpenLibrary IDs while
keeping audiobook-specific fields intact. - ABS imports no longer trust stale secondary-author aliases or provenance
(#590) — Existing ABS author provenance and aliases are reused only when
they still match the local author, preventing secondary-author names from
corrupting future imports. - Direct book adds preserve series links (#590) — Adding a book directly
no longer drops existing series associations during metadata
canonicalization. - Google Books provider settings are respected at startup (#590) —
Bindery now prefers the UI-managed Google Books API key, keeps legacy
setting fallback for existing installs, and treats a deliberately cleared
UI setting as disabled.