Skip to content

BeePub v0.11.0

Choose a tag to compare

@oalieno oalieno released this 22 Jul 16:43
adf944a

Paper books, and a metadata engine worth the name

The library stops pretending everything is an EPUB, and everything about where book data comes from — fetching, choosing, editing, operating — got rebuilt this cycle.

Physical books

  • Add the books on your shelf. A paper book is now a first-class library entry — no file attached, no reader, but covers, metadata, tags, ratings and activity all work
  • Creation is a form-first page: type a title or scan an ISBN, watch candidates arrive from every enabled source, pick one and the form prefills — with per-source provenance and a row of cover candidates to choose from
  • A format lens filters the library between digital and paper
  • Books without any cover get a generated pattern-and-label cover instead of the gray placeholder

Metadata sources become plugins

  • The six sources (Goodreads, Readmoo, Google Books, Hardcover, 博客來, Open Library) are now drop-in plugins behind one contract — adding a source is one Python file, zero database or frontend changes
  • ISBN and title lookups fan out to every enabled source with per-source results; Readmoo now supplies zh-TW descriptions and covers, 博客來 covers Taiwanese editions
  • Google descriptions keep their paragraph breaks (including the CJK line breaks Google itself flattens), and scraped pages parse with lxml so long descriptions stop silently truncating

Edit metadata, one field at a time

  • The edit page is field-first: tap the field you want to fix, compare every version side by side — your current value, the EPUB original, each source's archived record — or search for more, then pick one to fill. Nothing overwrites wholesale
  • Covers get the same treatment: current cover, every source's candidate, or upload your own
  • Each field remembers where its value came from — a small "filled from Goodreads" hint with a link to the source page

Operating it all

  • /admin/metadata is a control matrix: per-source Enabled and Auto (background fetch) switches that apply instantly, capability icons you can scan vertically, and per-source health — last fetch, books with data, rate-limit cooldowns, consecutive-failure warnings — with API keys managed inline
  • A backfill cut short by a rate limit now announces its continuation on the jobs page ("resuming at 14:30") with a cancel button, instead of silently re-running later
  • Calibre auto-sync lost its interval setting: it simply syncs within a minute of Calibre changes, and a no-op pass over a 29k-book library now takes seconds instead of ten minutes

Also

  • A fresh server greets you with an admin setup page instead of a login form for an account that doesn't exist
  • An empty library says it's empty instead of looking like a 404, error pages center properly, and the edit page's back button no longer ping-pongs with the detail page

Upgrade notes

  • Three database migrations (physical books, the plugin record store, per-field provenance) — applied automatically by the migrate service on startup