Skip to content
Infrastructure

Self-hosting my audiobooks with Audiobookshelf

By Victor Da Luz
homelab audiobookshelf audiobooks self-hosted proxmox

I buy a lot of audiobooks, mostly from Audible, and I wanted them somewhere that was mine: streamed to my phone, position synced across devices, and not locked inside one company’s app. Audiobookshelf does exactly that, so I gave it a container in the homelab.

This was one of a pair of small media projects I did around the same time. The other was self-hosting my ebooks with Kavita. Months later I folded both into a single server, which is its own story: consolidating audiobooks and ebooks into Audiobookshelf. This post is where the audiobook half started.

Picking a server

The self-hosted audiobook field is small. The two names that come up are Audiobookshelf and Booksonic. Booksonic descends from the old Subsonic lineage and feels it; Audiobookshelf is actively developed, handles audiobooks and podcasts, has a clean web UI with position tracking, and ships real mobile apps. Easy call.

Deploying it

Same pattern as the rest of my homelab: a Proxmox LXC container running Docker Compose with the official advplyr/audiobookshelf image. The library lives on my NAS, mounted into the container over SMB at /media/audiobooks, so the big files don’t sit on the container disk.

The one deploy detail worth calling out is the reverse proxy. Audiobookshelf uses WebSockets for live updates (playback progress, scan status), so the Traefik router in front of it has to pass WebSocket connections through. Proxy it like a plain HTTP app and the UI loads but progress and live updates quietly never arrive. Once the router forwarded the upgrade headers, it worked.

Beyond that it was the usual: an HTTPS route, Proxmox replication to the second node every 15 minutes, HA failover, and a tile on my homelab dashboard.

Picking an iOS client

Audiobookshelf’s own iOS app exists but lives in a frequently-full TestFlight beta, so I looked at third-party clients. There are several: Plappa, SoundLeaf, Still, and ShelfPlayer among them. They all talk to the same ABS API; the differences are polish and features.

I went with ShelfPlayer. It does offline downloads, CarPlay, Siri, and widgets, and it is the one I actually keep on my phone. The point of a self-hosted audiobook server is listening away from home, so offline support and CarPlay mattered more to me than anything else.

Getting my Audible library in

This was the fiddly part. Audiobooks I buy on Audible come wrapped in DRM in Audible’s AAX format, which Audiobookshelf can’t read directly. To get my own purchases into my own library, I had to download them and convert to a normal format.

Two tools do this. Libation is free and open source: it logs into your Audible account, downloads your books, strips the DRM, and converts to MP3 or M4B while keeping metadata and cover art. OpenAudible is a paid option ($21.95) that does the same with a nicer interface and built-in chapter splitting. I went with Libation because it is free, open source, and scriptable.

To be clear, this is about backing up books I bought, in a format I can play on my own server. Libation works against your own Audible account and your own purchases.

After a batch export I dropped the M4B files onto the NAS under /media/audiobooks, Audiobookshelf scanned them, matched metadata, and they showed up with covers and chapters.

Where it landed

A self-hosted audiobook library: streamed over HTTPS, position synced between the web player and ShelfPlayer, my Audible purchases living as plain M4B files I control, and the whole thing backed up with the rest of the homelab.

A few things I took away:

  • Audiobookshelf needs WebSockets through the proxy. If live updates and progress aren’t working, check that first.
  • The server was the easy part. Getting an Audible library out of DRM and into a normal format was the real work, and Libation made it painless.
  • Pick the mobile client for how you actually listen. Offline and CarPlay decided it for me.

The audiobook side worked well enough that, months later, I let Audiobookshelf take over my ebooks too and retired the separate ebook server.

Related reading

Infrastructure

Consolidating audiobooks and ebooks into a single Audiobookshelf

I was running two media servers, Audiobookshelf for audiobooks and Kavita for ebooks, when one could do both. Rebuilding the homelab in v3 was the excuse to merge them: one Ansible-deployed Audiobookshelf, local-disk storage, and a USB-drive ZFS scare in the middle of the migration.

Read
Infrastructure

Self-hosting my ebooks with Kavita

I wanted my EPUBs, PDFs, and Kindle purchases in one self-hosted library I could read from any device. Kavita became that library: a clean web reader, OPDS for mobile, and the work of getting Kindle books in.

Read
Infrastructure

Deploying RomM, a self-hosted ROM manager, in the homelab

I wanted a web-based, self-hosted way to organize a pile of game backups with real metadata. RomM was the only option that fit. Here is the Docker-in-LXC deployment, the two gotchas that cost me time, and the NAS mount mistake that bit me later.

Read

Ready to Transform Your Career?

Let's work together to unlock your potential and achieve your professional goals.