Audiolib 6166fd8ab0 FileBrowser: diagnose container mounts + support extra audio path
This is a Docker volume issue, not a code bug. The backend container
only sees paths explicitly mounted in docker-compose.yml. A new mount
on the Linux host (e.g. NAS share, USB drive) is invisible to the
container until added as a volume — restarting the container alone
doesn't help, and restarting just the host doesn't either.

Backend: New GET /api/filebrowser/diagnose endpoint reads
/proc/self/mountinfo and returns the actual bind/nfs/cifs mounts the
container sees, plus a check of common candidate roots (/audiofiles,
/mnt, /media, /srv, /home, /app/data) showing whether they exist and
have content.

Frontend: Info icon in FileBrowser header toggles a diagnose panel
showing mounts and root candidates. Quick-access buttons now built
dynamically from candidate roots that actually exist. On 'path not
found' error: helpful inline explanation including the exact .env
variable and docker-compose command needed to add a new mount.

docker-compose.yml: New EXTRA_AUDIO_PATH env variable. Mounts a
second host path 1:1 (same path inside container, like
AUDIOFILES_PATH does). Defaults to ./data → /extra_audio_unused
when unset, which is a no-op.

.env.example: Documents EXTRA_AUDIO_PATH usage with example.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-26 21:23:47 +02:00

Audiolib

Selbst gehosteter Audiobook- und Podcast-Server, vollständig API-kompatibel mit Audiobookshelf (ABS) v2.x. Bestehende Audiobookshelf-Apps (iOS, Android, etc.) funktionieren ohne Änderungen.

Voraussetzungen

  • Docker und Docker Compose installiert
  • Audiodateien (MP3/WAV) auf dem Server verfügbar

Schnellstart

1. Repository klonen / Dateien vorbereiten

cd /opt/audiolib
cp .env.example .env

2. .env anpassen

Mindestens folgende Werte setzen:

JWT_SECRET=mein_langer_geheimer_zufallsstring
ADMIN_USERNAME=admin
ADMIN_PASSWORD=sicheres_passwort
AUDIOFILES_PATH=/pfad/zu/meinen/audiodateien

3. Starten

docker-compose up -d --build

Der Server ist dann erreichbar unter: http://<server-ip>:3000

4. Erste Schritte

  1. Öffne http://<server-ip>:3000 im Browser
  2. Melde dich mit den in .env gesetzten Admin-Daten an
  3. In der Audiobookshelf-App: Server-URL http://<server-ip>:3000 eintragen
  4. Library scannen: Admin → Libraries → Scan

Konfiguration

Alle Einstellungen werden über die .env-Datei konfiguriert:

Variable Standard Beschreibung
SERVER_PORT 3000 Externer Port
JWT_SECRET Unbedingt ändern! Langer zufälliger String
ADMIN_USERNAME admin Admin-Benutzername
ADMIN_PASSWORD changeme Unbedingt ändern!
AUDIOFILES_PATH ./audiofiles Pfad zu den Audiodateien (NAS-Mount möglich)
AUTO_MATCH_BOOKS true Automatisches Metadaten-Matching für Hörbücher
AUTO_MATCH_PODCASTS true Automatisches Matching für Podcasts
PODCAST_UPDATE_INTERVAL_HOURS 24 Wie oft Podcast-Feeds aktualisiert werden

Projektstruktur

audiolib/
├── backend/         Python/FastAPI Backend
│   └── app/
│       ├── models/      SQLAlchemy-Datenmodelle
│       ├── routers/     API-Endpoints
│       ├── schemas/     Pydantic-Schemas (ABS-kompatibel)
│       └── services/    Scanner, HLS, File Watcher, Matching
├── frontend/        React/Vite Web-Interface (Phase 8)
├── nginx/           Reverse-Proxy-Konfiguration
├── data/            Persistente Daten (DB, Cover, HLS-Cache)
└── docker-compose.yml

API-Kompatibilität

Implementierte ABS-Endpoints:

  • POST /login — Authentifizierung
  • GET /api/authorize — Token-Validierung + User/Libraries
  • GET /api/libraries — Library-Liste
  • GET /api/libraries/:id/items — Hörbücher/Podcasts einer Library
  • GET /api/items/:id — Einzelnes Item mit Metadaten
  • GET /api/items/:id/cover — Cover-Bild
  • POST /api/items/:id/play — HLS-Streaming starten
  • POST /api/playback-session/:id/sync — Fortschritt synchronisieren
  • GET /api/me — User-Profil mit Fortschritt
  • PATCH /api/me/progress/:id — Hörfortschritt setzen
  • POST /api/me/bookmark/:id — Lesezeichen setzen
  • GET /api/users — User-Verwaltung (Admin)
  • GET /api/settings — Server-Einstellungen

Entwicklung

Backend lokal starten (ohne Docker)

cd backend
pip install -r requirements.txt
cp ../.env.example .env
uvicorn app.main:app --reload --port 8000

Frontend lokal starten

cd frontend
npm install
npm run dev

Geplante Features (nächste Phasen)

  • Phase 5: Matching-Engine Hörbücher (MusicBrainz, OpenLibrary, Google Books)
  • Phase 6: Matching-Engine Podcasts (iTunes, Podcastindex)
  • Phase 7: Vollständiger Podcast-Support (RSS-Feeds, Episoden)
  • Phase 8: Vollständiges Web-Interface mit Player
  • Phase 9: Web-Player mit Kapitelnavigation, Lesezeichen, Sleep-Timer

Lizenz

MIT

Description
No description provided
Readme 418 KiB
Languages
Python 57.1%
TypeScript 39.9%
Shell 2.1%
JavaScript 0.3%
Dockerfile 0.2%
Other 0.4%