Skip to content

Audiobook support - #2462

Open
TheSpyder wants to merge 3 commits into
jeffvli:developmentfrom
TheSpyder:feat/audiobooks
Open

TheSpyder wants to merge 3 commits into
jeffvli:developmentfrom
TheSpyder:feat/audiobooks

Conversation

@TheSpyder

Copy link
Copy Markdown
Contributor

This implements my audiobook proposal, resolving #2403. I found some significant places to clean up the AI mess; hopefully they were the ones you hinted at.

I've added a checkbox to the Jellyfin server config (both regular and quick-connect screens) to enable audiobooks. When this is enabled:

  • Song requests sent to the server include audiobooks as a filter. Jellyfin is fine with requesting ItemTypes Audio,AudioBook even though libraries can never contain both.
  • The library list and scan include libraries of the "Books" type.
  • The folder view shows audiobook items instead of empty folders in Books libraries.
  • Playlists already displayed audiobook items before this change (that's what gave me the idea to do this).

I made a few small quality-of-life changes across all playback for Jellyfin content, which I did not restrict to when the setting is enabled:

  • Playing a resumable item will read the timestamp from the server and start from there (after a small delay, I checked and this is still necessary as it is in use-queue-restore.ts).
  • Playing a resumable item will send progress updates.
  • Stop scrobble events are sent for resumable items.
  • I swapped the order of song change scrobbling to send the stop for the old track before the start for the new one. They're both async so there's no guarantee, but it seems more correct to me.

…e playback

When an item is resumable, Jellyfin returns an `item.UserData.PlaybackPositionTicks` property.
Map this to a new `resumePositionMs` song property and seek to it when playback begins.
Jellyfin persists the resume position from progress and stop reports for
item types that are resumable (e.g. AudioBook). Progress is reported
every 10 seconds, and the stop scrobble is sent. The stop is sent before
the new track's start because Jellyfin clears the session's now-playing
item on any stop report.
@vercel

vercel Bot commented Sep 14, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
feishin Error Error Sep 14, 2026 10:32am UTC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant