audiobookshelf/client/components/modals/item/tabs
Victor Da Luz 640c2f98b8 Add "Download by Chapters" tool for audiobooks
Adds a new tool in the item tools tab that splits a book's audio file
into per-chapter files using ffmpeg -c copy (no re-encoding) and
packages them as a ZIP download.

Key details:
- New GET /api/items/:id/download-chapters endpoint
- Accepts optional ?fileIno= to select which audio file to split when
  a book has multiple (e.g. m4b + mp3)
- Computes each file's start offset in the global chapter timeline and
  filters + re-bases chapter timestamps to be file-relative before
  splitting, handling the case where ABS stores chapters from all audio
  files with concatenated global timestamps
- Splits all chapters in parallel (ffmpeg -c copy per chapter) then
  streams the result as a ZIP
- Temp files written to MetadataPath/cache/items/:id/chapter-split-:ts
  with a timestamp suffix to prevent concurrent request collisions;
  cleaned up in a finally block regardless of success or failure
- UI shows a file selector dropdown when multiple audio files exist,
  with "Preparing..." state feedback during the request
- 10 new tests covering guard conditions and the chapter offset logic

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 17:24:01 -06:00
..
Chapters.vue Update:Close edit modal when pressing chapter edit button and already on chapter page #2915 2024-05-03 17:25:30 -05:00
Cover.vue Update providers users to fetch providers on demand 2025-10-19 18:57:27 +03:00
Details.vue Merge master 2025-03-25 17:29:09 -05:00
Episodes.vue Update date time input validation, add red border for invalid datetime 2025-01-07 14:08:57 -06:00
Files.vue Implement new JWT auth 2025-06-29 17:22:58 -05:00
Match.vue Fix Match click to use current label string 2026-02-28 11:32:28 -06:00
Schedule.vue Tailwind V4 migration initial commit 2025-03-16 16:41:37 +02:00
Tools.vue Add "Download by Chapters" tool for audiobooks 2026-04-14 17:24:01 -06:00