- FastAPI-Backend mit vollständiger ABS v2.x API-Kompatibilität - SQLAlchemy-Models: User, Library, LibraryItem, BookFile, Chapter, Podcast, PodcastEpisode, MediaProgress, Bookmark, PlaybackSession - Auth: JWT-Login (/login, /logout, /api/authorize) - Library + Items Endpoints inkl. camelCase ABS-Response-Format - HLS-Streaming via FFmpeg (POST /api/items/:id/play, Session-Sync) - Me/Progress Endpoints + Lesezeichen - User-Management + Server-Settings (Admin) - Library-Scanner (MP3/WAV Discovery, Hintergrund-Task) - File Watcher (watchdog, 30s Debounce) - Matching-Skelett (MusicBrainz, OpenLibrary, Google Books – Phase 5) - Docker-Setup: backend (Python 3.12+FFmpeg), frontend (React/Vite), nginx Reverse-Proxy auf Port 3000 - setup.sh: Installiert Docker auf Debian/Ubuntu, richtet .env ein Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.6 KiB
3.6 KiB
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
- Öffne
http://<server-ip>:3000im Browser - Melde dich mit den in
.envgesetzten Admin-Daten an - In der Audiobookshelf-App: Server-URL
http://<server-ip>:3000eintragen - 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— AuthentifizierungGET /api/authorize— Token-Validierung + User/LibrariesGET /api/libraries— Library-ListeGET /api/libraries/:id/items— Hörbücher/Podcasts einer LibraryGET /api/items/:id— Einzelnes Item mit MetadatenGET /api/items/:id/cover— Cover-BildPOST /api/items/:id/play— HLS-Streaming startenPOST /api/playback-session/:id/sync— Fortschritt synchronisierenGET /api/me— User-Profil mit FortschrittPATCH /api/me/progress/:id— Hörfortschritt setzenPOST /api/me/bookmark/:id— Lesezeichen setzenGET /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