How to Install Audiobookshelf (Self-Hosted Audiobooks and Podcasts)

Your audiobooks, self-hosted: Audiobookshelf: resume anywhere, download for the car, no cloud.

Audiobooks bought from Audible are locked to Audible; ones ripped from CDs or bought DRM-free sit in a folder with no way to resume where you left off on a different device. Audiobookshelf fixes that: a library server for audiobooks and podcasts with a lovely web player, phone apps that remember your position everywhere, offline downloads, playback speed, sleep timer, and a podcast manager that fetches new episodes for you.

Quick reference

TaskWhat
Folder~/docker/audiobookshelf/compose.yaml
Libraries/mnt/data/media/Audiobooks, /mnt/data/media/Podcasts
Webhttp://server-ip:13378
Folder layoutAuthor/Title/ with the audio files inside
AppsAudiobookshelf (iOS, Android), or any browser
MetadataMatch button → Audible / Google Books lookup

1. The compose file

mkdir -p ~/docker/audiobookshelf && cd ~/docker/audiobookshelf
nano compose.yaml

services:
audiobookshelf:
image: ghcr.io/advplyr/audiobookshelf:latest
container_name: audiobookshelf
ports:
- "13378:80"
environment:
TZ: Europe/London
volumes:
- /mnt/data/media/Audiobooks:/audiobooks
- /mnt/data/media/Podcasts:/podcasts
- ./config:/config
- ./metadata:/metadata
restart: unless-stopped

docker compose up -d
sudo ufw allow 13378/tcp

Open http://192.168.1.50:13378, create the root user, and add a library: Audiobooks, folder /audiobooks. Add a second, type Podcast, folder /podcasts.

2. Folder layout

Audiobookshelf reads structure from folders:

Audiobooks/
Terry Pratchett/
Guards! Guards!/
01 - Chapter 1.mp3
02 - Chapter 2.mp3
cover.jpg
Ursula K. Le Guin/
A Wizard of Earthsea/
A Wizard of Earthsea.m4b

One .m4b or a folder of MP3s per book; Author/Series/Title also works. Chapters are read from the m4b or generated from the files.

3. Match metadata

Open a book → Match. It searches Audible and Google Books and fills in the description, narrator, series, year and cover. Do it once per book; the result is stored in ./metadata, not written back to your files unless you ask.

4. The phone app

Install Audiobookshelf (iOS: App Store; Android: Play Store or the GitHub build), enter the server address and log in. Tap a book to stream, or the download icon to keep it offline for the car. Your position syncs: pause on the phone in the car, resume on the laptop at your desk. Playback speed, sleep timer and chapter skip are all there.

5. Podcasts

Podcasts library → Add → Search, find a show, choose which episodes to download and tick Auto download new episodes. Episodes land in /podcasts/Show/, the app plays them, and you've replaced a podcast app's cloud with your server.

6. Family

Settings → Users — each person has their own progress and listening history. A child's account can be limited to specific libraries.

Behind the proxy

books.example.com → 127.0.0.1:13378 with the WebSocket lines (tutorial 28) and client_max_body_size 1G if you'll upload books through the web UI.

Troubleshooting

Book shows as several books. The folder has subfolders per disc; move the files up one level, or name them Disc 1/01.mp3 and tick Multi-disc in the match.

Chapters wrong. Edit them in the book's Chapters tab; it can look up chapter lists from Audible.

App says server unreachable from outside. Use the https proxy address or the VPN; the app needs to reach the server directly.

Scanning is slow on a Pi. First scan reads every file; later ones only check changes. Leave it.

Wrapping up

One container, two folders, a Match click per book, the app on your phone. Every audiobook you own plays anywhere and remembers where you were, and podcasts download themselves without a cloud account.

Call us