Jellyfin runs on my mini PC inside a single Debian VM. Until recently, I put that VM under more multitasking than it should have had to handle. On that Proxmox-based mini PC, Jellyfin handled movies and shows. Calibre-web took care of my ebooks. Komga managed all the comics. Audiobookshelf organized all the audiobooks. Four separate services, four separate logins. All for the same broad job: showing me the media library.
Jellyfin 12 changed all that and gave me a real reason to stop running three of those four apps and finally trust Jellyfin’s book support.
Running four separate apps for a media server was painful
Jellyfin was for videos, and three for everything else
From the beginning, Jellyfin was never the problem. It’s been my go-to local media server option for movies and shows ever since I cut ties with Plex. But gradually, I realized the limitations of Jellyfin as a media server. Anything beyond movies and shows felt like an afterthought.
That’s why I ran Calibre-web only for ebooks, which made them searchable and readable even in the web browser. Komga stepped in when I wanted to read digital copies of comics and manga while maintaining reading progress. For audiobooks, I have used Audiobookshelf since my collection kept growing beyond a couple of MP3 files. I wanted a chapter-aware listening experience and a way to track my listening progress.
Each app had one specific job, and each did it well. I didn’t map any of those libraries into Jellyfin to avoid duplication or metadata confusion. So none of the apps talked to Jellyfin and vice versa.
The Bookshelf plugin feels empowered with metadata duties
Scans finally keep up with the library
Jellyfin has always supported books in the media library, but it still felt secondary to video. However, it wasn’t native. It ran through a community-maintained Bookshelf plugin to handle ebooks, comics, and audiobooks under a single folder structure. When I first installed Jellyfin years ago, I added the folders to the books library. But the lack of proper metadata support for books led me to stick with Jellyfin as a video streaming server.
Jellyfin 12 is the release that made me reconsider that approach. The Bookshelf plugin got rebuilt on a more solid footing. It’s been described as a significant expansion of book and audiobook-handling capabilities. For starters, file identification and metadata extraction have improved noticeably. Author pages display relevant information sourced from other pages rather than remaining blank. Library scans are faster and more predictable across folders.
Getting there took one plugin, not the three separate apps I was used to. The Bookshelf plugin doesn’t ship with the fresh Jellyfin 12 installation. I had to add it before the books library option even showed up. Once it was in, the folder structure and format support just worked.
Migrating three libraries took an afternoon instead of a weekend
The same files and folders work without dedicated apps
The actual migration of the libraries was more straightforward than I expected. In Jellyfin’s books library, I added three separate folders for books, audiobooks, and comics. I already had Komga, Audiobookshelf, and Calibre-web syncing with the media folders. So I merely pointed Jellyfin’s books library to those respective folders.
Jellyfin 12 also brings broader book format support with CBZ, CBR, CBT, CB7, EPUB, MOBI, AZW, AZW3, ZIP, RAR, 7Z, and PDF natively. With that, it also supports popular audiobook formats like MP3 and M4B. So I didn’t have to convert a single file.
After the first sync, I noticed that the metadata for the authors needed some attention. Except for EPUB files, which carry their own embedded metadata, I added metadata provider plugins from Jellyfin’s plugin catalog:
- Comic Vine
- Google Books
These plugins make it easy to fetch metadata for books and comics from their respective sources. To force identify a book, you need to use the Google Books ID (from the URL) or the ISBN. The Comic Vine plugin made it easy to put cover art for the comics. Only audiobooks in MP3 format inside the folders gave the plugin trouble. No matter how hard I tried, the Bookshelf plugin wouldn’t fetch metadata for them. Next, I hope the SmartCovers plugin gets updated to support Jellyfin 12. For the time being, I haven’t uninstalled Audiobookshelf, Komga, or Calibre-web. I can start them anytime.
Playback holds up with one mobile catch for audiobooks
Audio dies the second I lock my phone’s screen
Jellyfin’s book libraries hold up well on their own and even work in the web interface. The chapter navigation and user progress get tracked in Jellyfin, just like in Audiobookshelf. If the M4B file includes an embedded chapters list, all those chapters appear in the dedicated audiobook client app that supports Jellyfin media server. The official Jellyfin client for audiobooks syncs progress with the server, which is how I can continue listening on desktop or in the web browser.
One oddity I noticed with the Jellyfin app (iPhone) is that the book audio cuts off when I lock the phone’s screen. It happened to me twice, and I assumed the playback had paused. So if you tend to keep your phone in your pocket and the screen off, try out another audiobook client like Plappa on iOS or Lissen on Android.
Jellyfin has grown into a real media library, not just a player
The VM has noticeably more RAM and CPU headroom, enough that I trimmed its allocation by a couple of gigs. To be clear, I haven’t uninstalled Calibre-web, Audiobookshelf, or Komga. They’re just dormant. If the Bookshelf plugin in Jellyfin 12 still struggles to cover all the media I host, I can always restart the inactive services.
Would I ever spin them back up? Maybe. If the lock-screen playback issue continues to bother me more than it has so far. But for now, the plugin does the job that I had assigned to three separate apps. I didn’t mind using separate apps for specific media types. I minded needing four separate logins just to use them all.