github vavallee/bindery v1.39.0

2 hours ago

Calibre that never misses a book, a pull mode for desktop Calibre, and fixes for series volumes and wrong author grabs

Books bound for Calibre now wait in a queue instead of being pushed once and forgotten, so anything imported while Calibre is closed arrives when it comes back, failures retry on their own, and the Calibre tab shows what is waiting and why something failed. Every ebook format of a book now lands on the same Calibre record, and a desktop Calibre can fetch books from Bindery itself with the Bindery Bridge plugin 0.8.0, which needs no shared drive, path remap or open port. A new Windows runbook walks through both setups.

Adding or scanning one volume of a numbered series no longer attaches another volume's file, and a release that names a different author after a series label is no longer grabbed. That author check now runs on every automatic and interactive search, not just a fallback path. Transmission downloads survive a daemon restart, rdt-client and other qBittorrent stand ins import automatically again, a folder import stops offering files already in your library, adopting a file suggests every book by its author, and switching metadata providers no longer offers still valid books for removal. This release adds one database migration, additive, which runs on its own at startup.

Added

  • Every ebook format of a book now reaches the same Calibre record with the Bindery Bridge plugin 0.7.0 or later (#2832). A book with an EPUB and a PDF used to get only one of them into Calibre. Now the preferred format makes the record (EPUB, then KEPUB, AZW3, MOBI, PDF, then the rest) and the others are added to it, from an import and from Push all to Calibre alike. With an older plugin, or in calibredb mode, the extra formats are skipped with a reason telling you to update the plugin, and once you do Bindery delivers them on its own.
  • Push all to Calibre now queues books, and the Calibre tab shows what is waiting, what failed and why (#2832). Push all puts every book that is not already delivered into the delivery queue instead of sending them itself, so Calibre does not need to be open and a book is never sent twice. A new Delivery queue section shows how many books are waiting, delivered and failed, when the last one arrived and whether Calibre could be reached, with a table of failed books and their errors, Retry failed, Clear waiting, and Reset delivery state for pointing Bindery at a different Calibre library. Each book's page shows whether it is waiting for Calibre, in Calibre or failed.
  • Calibre can now fetch books from Bindery instead of waiting for Bindery to send them (#2833). Set the Calibre plugin transport to Pull and the Calibre Bridge plugin connects out to Bindery, downloads each queued book and adds it, so a desktop Calibre no longer needs the library on a shared drive, a push path remap, an open inbound port or a fixed address. It uses the plugin API key you already have, which must be at least 16 characters, and it needs Calibre Bridge 0.8.0 or later. The Calibre tab shows when the plugin last checked in.
  • Review duplicate titles for an author (#1970): a new read only report, opened from the author page under More, Review duplicates, groups books whose titles look like the same work and says which rule matched: a punctuation or accent variant, a leading article, an edition marker such as Unabridged, or one title being the main title or subtitle of the other ("Mistborn" and "Mistborn: The Final Empire"). That last rule only counts at a colon, bracket or spaced dash, so a series opener like "Foundation" is not flagged against "Foundation and Empire", and it is skipped for two books that are known, different entries in the same series. Nothing changes automatically; excluding a row uses the existing exclude action, so nothing is ever deleted. Thanks gchahcg for building it.

Changed

  • Books imported while Calibre is closed or unreachable now reach it when it comes back (#2832). Imports queue each ebook for Calibre instead of pushing it on the spot, so an import no longer waits on Calibre. A background job delivers the queue within about a minute of Calibre answering, retries failures with growing gaps and marks a book failed after 8 attempts. Push all to Calibre now sends covers too.

Fixed

  • Calibre Test connection checks a real book, not just the library root (#2831): with the Bindery Bridge plugin, Test connection only asked whether Calibre could see the library root. That path matches the push path remap exactly and skips the part that builds a book's path, so Test passed while every push was about to fail. It now also asks Calibre to open one real book (the newest imported ebook, or the first file under the library root) through the remap, and names the exact path it sent when Calibre cannot see it. When that path starts with a drive letter, it explains that a mapped drive belongs to one Windows logon session and suggests the share address instead. Paths in these messages no longer show doubled backslashes. Test connection also warns when the bridge is older than 0.6.2, which fixes pushes to long network share paths (0.6.1) and the empty book a failed add could leave in Calibre (0.6.2).
  • Network share paths work in path remaps (#2831): a remap that pointed at a Windows share, such as a Calibre push remap of /downloads/BOOKS:\\192.168.1.4\MEDIA\BOOKS, was treated as a Linux path, so pushes asked Calibre for \\192.168.1.4\MEDIA\BOOKS/Author/file.epub with mixed separators, and the forward slash form //nas/books lost its leading slash and stopped being a share at all. Shares now behave like drive letters: \\server\share and //server/share are both understood on either side of a pair, matched without regard to case, and rebuilt in the separator style you wrote. A share that names a server but no share, like \\nas, is now rejected when you save it. For Calibre on Windows a share address is more reliable than a mapped drive letter, which the running Calibre may not be able to see. One thing to check if you already use a remap that starts with two forward slashes: a side like //data/books now counts as the share books on the server data, so it matches without regard to case. A side with a single segment after the slashes, like //data, is unchanged.
  • Push all to Calibre stops listing wanted books as skipped: a book that has not been imported has no file, so it was never going to be pushed, and listing every one of them under Skipped as "not imported" buried the books you could actually do something about. On a library with a few thousand wanted books the sample of 50 filled up with them before any unmonitored book or missing file was reached. Skipped now counts only imported books the run left out, with the reason for each.
  • Importing from a folder no longer lists files that are already in your library (#2480). A file Bindery already tracks, whether at the same path, as a hardlink of a library file, or as a confident match whose book already has that format, is left out of the scan, so rescanning a downloads folder stops offering things you already brought in. Tick Show already imported on the Import page to list them again, labelled, for example to replace a corrupt copy. Thanks to @trevorswanson for the fix.
  • Print editions no longer mistaken for audiobooks over a stray "cd" (#2769): Hardcover edition text was checked for "cd" anywhere, so a name like McDermott could mark a print edition as audio, give the book an ASIN it should not have and widen its media type. "cd" now has to be a word on its own, so Audio CD, 2 CDs and CD-ROM still count. Thanks to @mavonx for the fix.
  • Transmission downloads survive a daemon restart (#2808): Bindery stored the numeric id Transmission hands out when a torrent is added, and Transmission renumbers every torrent when it restarts. After a restart a download could sit at downloading for good, or have its status, import and queue removal land on whichever torrent inherited the number, including deleting that torrent's data. Transmission downloads are now tracked by info hash, which never changes. Downloads grabbed before this release are matched back to their torrent on the next poll by when they were added, with the release name breaking ties, and are only rewritten when the match is unambiguous. One that cannot be matched is never removed by its old id: remove it in Transmission yourself. Thanks dClauzel for the report and ccarpinteri for the fix.
  • Adding the next volume of a series no longer attaches the first volume's file (#2810): when you add a book, Bindery checks whether the library already has it and, if so, attaches the file and skips the search. That check matched titles by shared words alone, so "Defiance of the Fall 17" matched volume 1's file. In a layout like Defiance of the Fall 01/Defiance of the Fall_B094JZMCJX_….m4b, where the number is only in the folder name, the new volume was marked owned, never searched, and nothing new reached Audiobookshelf. The check now compares volume numbers, whether they appear in the title or only in the book folder, the way the series comparison has since #2538, and it never attaches a file that already belongs to another book. Part numbers on a split audiobook and track numbers inside a numbered folder are not mistaken for volumes. The same volume rule applies when a finished download is matched to a book. Thanks magrhino for the report and the fix.
  • Existing library files found when adding an author are recorded properly (#2819): if Bindery could not load the book while recording a file it already found in your library, it used to mark the book imported without registering the file, and reported success even when the book did not exist. It now logs the real error instead. Thanks to @magrhino for the report.
  • Catalogue reconciliation keeps unmatched previous-provider books (#2827): Switching metadata providers no longer makes uncorrelated metadata-only Wanted rows look safe to remove. Complete same-provider absence and explicit profile rejections remain actionable. Thanks to @kevinatlee for the fix.
  • A library scan no longer attaches one volume of a series to another (#2860): the scan matched untracked files to wanted books by how alike the titles look, and two volumes of a numbered series look almost identical. An untracked Defiance of the Fall 01 folder was attached to a wanted "Defiance of the Fall 17", which was then marked owned with the wrong file and never searched. The scan now compares volume numbers first, whether they appear in the title or only in the book folder, using the same rule as adding a book since #2810. The file goes to the volume it really is, or waits under Import, In your library, where the other volume is no longer suggested for it. Numbers that are part of a title, like Fahrenheit 451 or Catch-22, part numbers on a split audiobook and track numbers inside a numbered folder are not mistaken for volumes. Thanks magrhino for the report.
  • A series label no longer hides a release's author (#2863): a release like "Heart of Glass, Skye Druids (03) by Donna Grant EPUB" was grabbed for Jennifer Hillier's "Heart of Glass", because the author check only read "by " when it came straight after the title. It now also reads it after a series name and number, so a same titled book by someone else is dropped, while the right author, an initial ("J. Hillier"), surname first order, or a coauthor still match. Narrator and translator credits are still ignored, and a release with no author at all is kept as before. The check also now runs on automatic and interactive searches, not only on the fallback path. Thanks dallyboytx for the report and the diagnosis.
  • Manual import scan with a symlinked library folder (#2868): files already in your library no longer show up as importable when the library folder is reached through a symlink and the file was offline when Bindery last indexed it or has been edited since. The scan tests now pass on macOS and the macOS lint run is clean again. Thanks magrhino for the report.
  • Automatic import finds files from rdt-client and similar qBittorrent-compatible clients (#2878): real qBittorrent lists a torrent's files with the release folder in front ("Release/book.m4b"), but rdt-client and other clients that emulate its API list them without it ("book.m4b"). Bindery joined those names onto the save path, looked one folder too high, found nothing, and the import failed even though Manual Import of the same folder worked. When a file is not where the save path says, Bindery now also looks under the torrent's content path, with your path remap applied. Real qBittorrent and single file torrents behave exactly as before. Thanks pmillar80 for the report and the API output that pinned it down.
  • Import suggestions now offer every book by the matched author (#2879): an untracked "The Matsumoto - Sarah K. L. Wilson.epub" was offered three other books by her instead of "The Matsumoto", because suggestions on Import, In your library only came from books still waiting for a file. A book you had skipped, or one already imported with a file somewhere else, was never offered, however exact the title. Suggestions now come from all of the author's books, an exact title comes first, and each suggestion shows its status. The scan still only attaches files on its own to books that are wanted or missing a file, so nothing changes without you choosing it. A book that already has its files or was skipped is never a one click Confirm, and adopting into a book that already has a file adds the new one alongside it and says so. The author's spelling with or without a space between initials was already treated as the same name. Thanks bhaveman for the report.

Security

Docs

  • The Calibre on Windows runbook now leads with pull mode (#2834). Pull needs no shared drive, path remap, inbound firewall rule or fixed PC address, so it is the recommended way to connect a desktop Calibre, with push kept for Calibre in a container or on a server. The Calibre docs and the quick answers now describe the delivery queue (books wait while Calibre is closed, failures retry with backoff, Retry failed instead of rerunning Push all), multi format delivery, how to keep the pull key safe, and the plugin status messages seen in a real setup, including why a localhost Bindery URL can make every request take about 20 seconds on Windows.
  • Calibre on a Windows desktop runbook (#2834): a step by step guide for connecting the Calibre desktop app on Windows through the Bindery Bridge plugin, built from a real setup. It covers using the share address instead of a mapped drive letter, installing and checking the plugin, the firewall rule and network profile, a fixed address for the PC, what each Test connection message means, reading the Push all results, and rerunning Push all to recover. The user guide gains Quick answers for the Calibre symptoms seen along the way, including how to get books onto a Kobo.
  • Issue and pull request templates: bug reports ask for the book and the exact release name behind search and import problems and list Unraid as a deployment method, feature requests ask who the feature is for, and the pull request template asks for evidence that a fix's test fails without it, spells out the sign off and licence rules, and names the changelog fragment convention.

Don't miss a new bindery release

NewReleases is sending notifications on new releases.