Jump to content

Recommended Posts

Posted

Add structured eBook metadata fields to Emby so books can be indexed, searched, filtered, sorted, synced, and surfaced with the same quality as video and audio libraries.

Problem

Current handling of eBooks in Emby is limited. Important fields are missing or unindexed, which makes large libraries hard to organise. Users who migrate from Calibre or other managers lose rich metadata, reading progress, and annotations.

Proposed solution

Introduce native models, scanners, UI, and API support for the following fields.

Core fields

  • Title. Main identifier for the eBook. Used in listing and searching.

  • Author/Editor. One or many. Essential for grouping and sorting.

  • Language. For filtering and display.

  • Series. Series name and number, sortable.

  • File Format. EPUB, MOBI, PDF, AZW3, CBZ, etc. Drives renderer choice.

  • Identifier. Unique ID next to ISBN, such as, DOI, UUID, or an internal GUID.

  • File Path / Location. Absolute path for local and NAS items.

Optional fields

  • Publisher. Useful to separate commercial and indie content.

  • Subject / Genre. Fiction, Non-fiction, Sci-Fi, Thriller, etc.

  • Tags / Keywords. Freeform labels for flexible search and smart lists.

  • Reading Progress. Per user last read location, bookmarks.

  • DRM Status. Enum: Unknown, None, Present.

  • Word Count / Page Count. For size filters.

  • Rating. Per user and external ratings.

  • Last Accessed / Last Read. Per user activity to support “Continue reading”.

  • Annotations / Highlights. Per user notes and highlights, exportable.

Data model

Add a new BookItem entity that extends the existing BaseItem.

  • Scalars: Title (string), Language (ISO 639-1), SeriesNumber (decimal), DateAdded (datetime), DatePublished (date), Format (enum), DrmStatus (enum), WordCount (int), PageCount (int), RatingExternal (float), RatingUser (float), LastAccessedUtc (datetime).

  • Collections: Authors (list of person refs), Editors (list), Identifiers (list of type:value), Tags (list), Subjects (list).

  • Per-user: ReadingProgress (location plus percent), Bookmarks (list), Annotations (list of location plus text and timestamp).

  • Paths: Path (string), LibraryId (guid).

Indexing and search

  • Index Title, Authors, Series, Language, Publisher, Tags, Subjects, Identifiers.

  • Sort keys: Title, Author, SeriesName+SeriesNumber, DatePublished, DateAdded, PageCount, WordCount, Rating.

Ingestion and metadata

  • Add an eBook library type in Library Setup with supported extensions and a priority order: EPUB, MOBI, AZW3, PDF, CBZ, CBR.

  • Parse embedded EPUB OPF metadata, PDF XMP, and sidecar .opf files produced by Calibre.

  • Optional metadata providers: Google Books, Open Library, ISBNdb, Goodreads export files. Providers should map cleanly to core fields and never overwrite user edits unless requested.

  • Support Calibre migration: read Calibre library structure, .opf sidecars, and metadata.db when available in read-only mode.

UI and UX

  • Library views: Grid, list, and series views with badges for format, language, and DRM.

  • Detail page: Title, series breadcrumb, authors, description, identifiers, subjects, tags, publisher, publication date, format, page count. Actions for “Read”, “Download”, “Mark as finished”, “Add bookmark”.

  • Reader integration: For EPUB and PDF, an in-browser reader that persists per-user progress, bookmarks, and annotations. If a built-in reader is out of scope, expose progress endpoints so external readers can update state.

  • Filters: Language, series, publisher, genre, tags, format, size, DRM, rating, date added, date published.

  • Smart playlists and collections using the new fields.

API contracts

Extend the public API:

  • GET /Items?IncludeItemTypes=Book with new query filters series, language, publisher, format, drmStatus, minPageCount, maxPageCount, subject, tag.

  • GET /Users/{id}/Books/{itemId}/Progress and POST to update progress, bookmarks, and annotations.

  • POST /Items/{itemId} allows updates to book metadata with field-level overwrite controls.

  • WebSocket events for progress updates to sync multi-device reading.

Permissions and privacy

  • Store annotations and progress per user. Do not expose one user’s notes to others unless explicitly shared.

  • Allow metadata locking at the item and field level.

Migration and compatibility

  • Backfill DateAdded from file system timestamps if no prior value exists.

  • Detect duplicates by Identifier or by fuzzy match on Title, Author, Series, and Page Count.

  • Do not break existing audio-book flows. Keep AudioBook separate from Book.

Performance considerations

  • Defer parsing heavy PDFs until requested or during low-priority background tasks.

  • Cache OPF and XMP reads. Respect library scan schedules.

Acceptance criteria

  • A user can import a mixed EPUB, MOBI, and PDF library and see correct Title, Author, Language, Series, Format, Identifier, Path, Date Added, and Date Published without manual edits.

  • A user can filter by Language and Series, sort by Date Published, and search by ISBN.

  • Reading progress persists per user across devices for EPUB.

  • Optional fields are editable in the UI and via API and are indexed for search.

  • Export of per-user annotations to JSON is available.

Nice to have, phase 2

  • OPDS server for books using the new metadata.

  • Goodreads or Open Library sync for ratings and shelves.

  • Calibre two-way sync for edits and progress.

  • Agree 5
  • 2 weeks later...
Posted

These look like AI generated suggestions? Because half of these are already in place.

Posted
4 hours ago, Luke said:

These look like AI generated suggestions? Because half of these are already in place.

Not ai generated, just ai spellchecked. I've added for example the ingestion part that is already in place, for completeness to have the full overview. It made more sense to me without having to explain which part to have where.

  • Thanks 1
  • 3 weeks later...
Posted

Author and File Format options are basic necessities for just any eBook collection!

Series would follow pretty closely for anyone who collects books in a Series (which is very common).

I'm really confused as to how the Book Library has existed as an option for as long as it has without even an Author option, or functional Metadata Downloaders. I tried migrating to Emby from PLEX many many years ago because I wanted my eBook accessible remotely on the same Media Server as my Movies and TV Shows, but I decided not to stick with it because it wasn't very functional. I transitioned to eBook reading in 2010 and haven't looked back, but have always been disappointed with eBooks exclusion from media center/managers. Books are the OG Media!

Thanks to whomever is finally getting some work done on this project. :)

I've reinstalled Emby from scratch and am playing with it again, but the Metadata system still needs some very simple things addressed. So I'm not all in yet.

  • Like 3
  • Agree 3
  • Thanks 1
  • 2 months later...
Posted

The simplest solution may be to catalog with Calibre, then each directory containing an ePub should contain a cover.jpg file and an xml metadata.opf file.

All that would be needed is a plugin that can import this data without further cataloging by Emby.

  • Agree 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...