Cleanup your audiobook collection.
Shelfarr automatically proposes clean, consistent filenames using embedded tags and optional Audiobookshelf metadata. Preview everything first, batch apply, and undo when needed.
Come chat about naming edge cases, share template ideas, and request features. If something hurts in your library, we want the real examples.
What you get
A focused tool with the right defaults: fast scanning, safe renames, and human-friendly review.
Everything is proposed before it’s applied. Start with dry-run and enable backups when you’re ready.
Uses embedded tags and can cross-check Audiobookshelf for better titles and authors.
Use {author}, {series},
{title} and folders to standardize your library.
Quick start (Docker Compose)
Run Shelfarr locally and mount your library at /library.
services:
shelfarr:
image: vacantlycrushing/shelfarr:latest
ports:
- "5055:5055"
environment:
PORT: "5055"
ABR_SETTINGS_DB: "/data/settings.db"
ABR_HISTORY_LOG: "/data/shelfarr_history.jsonl"
ABR_LOG_FILE: "/data/shelfarr.log"
volumes:
- ./data:/data
- /path/to/your/audiobooks:/library
restart: unless-stopped
docker compose up -d
http://localhost:5055, point Shelfarr at your mounted
folder, and start a scan.
Run locally (Python)
Prefer not to use Docker? Run the server directly on macOS, Windows, or Linux.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
PORT=5055 python3 app.py
http://localhost:5055. Use normal filesystem paths
(e.g. /Users/you/Audiobooks).
py -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
$env:PORT = "5055"
py .\app.py
D:\Audiobooks).
app.py (or inside your Docker container).
Your browser is only the UI client.
Configuration
Most settings are available in the UI. These environment variables are useful for deployment.
# Server
PORT=5055
# Paths (persist these)
ABR_SETTINGS_DB=/data/settings.db
ABR_HISTORY_LOG=/data/shelfarr_history.jsonl
ABR_LOG_FILE=/data/shelfarr.log
# Audiobookshelf (optional)
ABS_BASE_URL=http://audiobookshelf:13378
ABS_TOKEN=YOUR_ABS_API_TOKEN
# Safety
ABR_DRY_RUN=1
ABR_BACKUP=1
Screenshots
A quick look at scanning and stats.
FAQ
No. Shelfarr refuses to overwrite existing targets. Start with dry-run, then enable backups.
Yes—if you enable directory moves and use folder-style templates like {author}/{series}/{title}.
No. You can rename using embedded tags only and still get clean, consistent results.