[PR #5039] [CLOSED] add support for reading DAISY audiobook metadata #4400

Closed
opened 2026-04-25 00:19:36 +02:00 by adam · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/advplyr/audiobookshelf/pull/5039
Author: @Timtam
Created: 2/8/2026
Status: Closed

Base: masterHead: addDaisyMetadataSupport


📝 Commits (10+)

  • 58bfdc0 add some accessibility
  • 557fc6d Merge remote-tracking branch 'remotes/upstream/master'
  • bb63471 Merge branch 'master' of github.com:advplyr/audiobookshelf
  • fbed92d Merge remote-tracking branch 'remotes/upstream/master'
  • 2896e32 Merge branch 'master' of github.com:advplyr/audiobookshelf
  • 5c113f8 Merge branch 'master' of github.com:advplyr/audiobookshelf
  • 6643b37 Merge remote-tracking branch 'remotes/upstream/master'
  • c4a7543 Merge remote-tracking branch 'remotes/upstream/master'
  • 4463457 Merge remote-tracking branch 'remotes/upstream/master'
  • f643d12 Merge remote-tracking branch 'remotes/upstream/master'

📊 Changes

19 files changed (+462 additions, -55 deletions)

View changed files

📝 client/components/app/BookShelfToolbar.vue (+6 -6)
📝 client/components/app/SideRail.vue (+12 -12)
📝 client/components/cards/LazyBookCard.vue (+1 -1)
📝 client/components/cards/LazySeriesCard.vue (+2 -2)
📝 client/components/covers/PreviewCover.vue (+1 -1)
📝 client/components/modals/libraries/EditModal.vue (+1 -1)
📝 client/components/modals/libraries/LibraryScannerSettings.vue (+6 -1)
📝 client/components/ui/ReadIconBtn.vue (+5 -1)
📝 client/pages/config/index.vue (+9 -9)
📝 client/pages/item/_id/index.vue (+1 -1)
📝 client/pages/library/_library/podcast/latest.vue (+17 -16)
📝 server/models/Library.js (+1 -1)
📝 server/scanner/BookScanner.js (+9 -0)
server/scanner/DaisyFileScanner.js (+99 -0)
📝 server/scanner/LibraryItemScanData.js (+6 -1)
server/utils/parsers/parseDaisyMetadata.js (+177 -0)
📝 server/utils/scandir.js (+5 -2)
test/server/utils/parsers/parseDaisyMetadata.test.js (+86 -0)
📝 test/server/utils/scandir.test.js (+18 -0)

📄 Description

Brief summary

DAISY audiobooks are commonly used e.g. within german libraries for the blind and visually impaired. DAISY is a file format that builds on top of MP3 by providing descriptive files in form of XML/HTML to every audio file, providing book metadata and audio chunks, which makes navigating within the book easier. Reading those metadata allows us to import them directly into ABS.

Which issue is fixed?

I didn't create an issue for that, nor did someone else. It seems to be a pretty niche thing, but at least to me its pretty useful.

In-depth Description

Although DAISY books consist of multiple metadata files, the only information that is useful to us seems to reside within the ncc.html file that comes with every DAISY book. This PR does the following:

  • add a separate metadata provider for daisy audiobooks
  • provide a scanner parsing daisy metadata
  • provide a parser util that parses the ncc.html for several information like authors, narrators, isbn, description, title and chapter names

Full disclosure: I used AI agents, namely codex, to speed up my coding process. I know my way well around JS and reviewed every change, there aren't too many changes or to much weird stuff going on here either. If you however still wish me to change things, please let me know.

How have you tested this?

I provided test cases, let me know if they don't cover all edge cases.

Screenshots


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/advplyr/audiobookshelf/pull/5039 **Author:** [@Timtam](https://github.com/Timtam) **Created:** 2/8/2026 **Status:** ❌ Closed **Base:** `master` ← **Head:** `addDaisyMetadataSupport` --- ### 📝 Commits (10+) - [`58bfdc0`](https://github.com/advplyr/audiobookshelf/commit/58bfdc0e91a7a0344b3e1b1012f506095495631f) add some accessibility - [`557fc6d`](https://github.com/advplyr/audiobookshelf/commit/557fc6dc6470710b00cbe8e9f5005c4f3413fb2d) Merge remote-tracking branch 'remotes/upstream/master' - [`bb63471`](https://github.com/advplyr/audiobookshelf/commit/bb63471ba03731fc3ab20738c65cdb08ee9431c1) Merge branch 'master' of github.com:advplyr/audiobookshelf - [`fbed92d`](https://github.com/advplyr/audiobookshelf/commit/fbed92dacf98f9269e65e086940f57d602c9e58e) Merge remote-tracking branch 'remotes/upstream/master' - [`2896e32`](https://github.com/advplyr/audiobookshelf/commit/2896e32f4ec477d7129a3c3635e64c93c627e086) Merge branch 'master' of github.com:advplyr/audiobookshelf - [`5c113f8`](https://github.com/advplyr/audiobookshelf/commit/5c113f8d7dcc3dc96f9fdd8dcec32c80aa1afdae) Merge branch 'master' of github.com:advplyr/audiobookshelf - [`6643b37`](https://github.com/advplyr/audiobookshelf/commit/6643b371ccbcf9c137188e2b8b1a23ff9edeba4f) Merge remote-tracking branch 'remotes/upstream/master' - [`c4a7543`](https://github.com/advplyr/audiobookshelf/commit/c4a7543712ac8a96c2c0f376ec0688296c778165) Merge remote-tracking branch 'remotes/upstream/master' - [`4463457`](https://github.com/advplyr/audiobookshelf/commit/446345761cbdb2bf4f5bf308e5d0a500f9f6597d) Merge remote-tracking branch 'remotes/upstream/master' - [`f643d12`](https://github.com/advplyr/audiobookshelf/commit/f643d12cd662b739ed579ee684788bed641e7964) Merge remote-tracking branch 'remotes/upstream/master' ### 📊 Changes **19 files changed** (+462 additions, -55 deletions) <details> <summary>View changed files</summary> 📝 `client/components/app/BookShelfToolbar.vue` (+6 -6) 📝 `client/components/app/SideRail.vue` (+12 -12) 📝 `client/components/cards/LazyBookCard.vue` (+1 -1) 📝 `client/components/cards/LazySeriesCard.vue` (+2 -2) 📝 `client/components/covers/PreviewCover.vue` (+1 -1) 📝 `client/components/modals/libraries/EditModal.vue` (+1 -1) 📝 `client/components/modals/libraries/LibraryScannerSettings.vue` (+6 -1) 📝 `client/components/ui/ReadIconBtn.vue` (+5 -1) 📝 `client/pages/config/index.vue` (+9 -9) 📝 `client/pages/item/_id/index.vue` (+1 -1) 📝 `client/pages/library/_library/podcast/latest.vue` (+17 -16) 📝 `server/models/Library.js` (+1 -1) 📝 `server/scanner/BookScanner.js` (+9 -0) ➕ `server/scanner/DaisyFileScanner.js` (+99 -0) 📝 `server/scanner/LibraryItemScanData.js` (+6 -1) ➕ `server/utils/parsers/parseDaisyMetadata.js` (+177 -0) 📝 `server/utils/scandir.js` (+5 -2) ➕ `test/server/utils/parsers/parseDaisyMetadata.test.js` (+86 -0) 📝 `test/server/utils/scandir.test.js` (+18 -0) </details> ### 📄 Description <!-- For Work In Progress Pull Requests, please use the Draft PR feature, see https://github.blog/2019-02-14-introducing-draft-pull-requests/ for further details. If you do not follow this template, the PR may be closed without review. Please ensure all checks pass. If you are a new contributor, the workflows will need to be manually approved before they run. --> ## Brief summary <!-- Please provide a brief summary of what your PR attempts to achieve. --> DAISY audiobooks are commonly used e.g. within german libraries for the blind and visually impaired. DAISY is a file format that builds on top of MP3 by providing descriptive files in form of XML/HTML to every audio file, providing book metadata and audio chunks, which makes navigating within the book easier. Reading those metadata allows us to import them directly into ABS. ## Which issue is fixed? <!-- Which issue number does this PR fix? Ex: "Fixes #1234" --> I didn't create an issue for that, nor did someone else. It seems to be a pretty niche thing, but at least to me its pretty useful. ## In-depth Description <!-- Describe your solution in more depth. How does it work? Why is this the best solution? Does it solve a problem that affects multiple users or is this an edge case for your setup? --> Although DAISY books consist of multiple metadata files, the only information that is useful to us seems to reside within the ncc.html file that comes with every DAISY book. This PR does the following: * add a separate metadata provider for daisy audiobooks * provide a scanner parsing daisy metadata * provide a parser util that parses the ncc.html for several information like authors, narrators, isbn, description, title and chapter names Full disclosure: I used AI agents, namely codex, to speed up my coding process. I know my way well around JS and reviewed every change, there aren't too many changes or to much weird stuff going on here either. If you however still wish me to change things, please let me know. ## How have you tested this? <!-- Please describe in detail with reproducible steps how you tested your changes. --> I provided test cases, let me know if they don't cover all edge cases. ## Screenshots <!-- If your PR includes any changes to the web client, please include screenshots or a short video from before and after your changes. --> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
adam added the pull-request label 2026-04-25 00:19:36 +02:00
adam closed this issue 2026-04-25 00:19:36 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/audiobookshelf#4400