# 04_Audiobookshelf

## audiobookshelf

*Self-hosted audiobook and podcast server*

<table id="bkmrk-imageghcr"><tbody><tr><th>Image</th><td>`ghcr.io/advplyr/audiobookshelf:latest`</td></tr><tr><th>Version</th><td>2.35.0</td></tr><tr><th>Etat</th><td><span style="color:#008000;">Up (healthy)</span></td></tr><tr><th>Compose project</th><td>audiobookshelf</td></tr><tr><th>Reseau</th><td>audiobookshelf\_audiobookshelf\_network</td></tr><tr><th>URL</th><td>[https://audiobookshelf.juxjux.ovh](https://audiobookshelf.juxjux.ovh)</td></tr><tr><th>Source</th><td>[https://github.com/advplyr/audiobookshelf](https://github.com/advplyr/audiobookshelf)</td></tr></tbody></table>

### Ports

<table id="bkmrk-hotecontainerip13378"><thead><tr><th>Hote</th><th>Container</th><th>IP</th></tr></thead><tbody><tr><td>13378</td><td>80/tcp</td><td>127.0.0.1</td></tr></tbody></table>

### Volumes

<table id="bkmrk-source-hote-destina"><thead><tr><th>Source (hote)</th><th>Destination</th><th>Type</th><th>Mode</th></tr></thead><tbody><tr><td>`/home/debian/audiobookshelf/config`</td><td>`/config`</td><td>bind</td><td>rw</td></tr><tr><td>`/home/debian/audiobookshelf/metadata`</td><td>`/metadata`</td><td>bind</td><td>rw</td></tr><tr><td>`/home/debian/audiobookshelf/podcasts`</td><td>`/podcasts`</td><td>bind</td><td>rw</td></tr><tr><td>`/home/debian/audiobookshelf/audiobooks`</td><td>`/audiobooks`</td><td>bind</td><td>rw, :shared</td></tr></tbody></table>

---

## Integration Claude Code — MCP

<table id="bkmrk-statut-mcp"><tbody><tr><th>Statut MCP</th><td><span style="color:#008000;">MCP actif</span></td></tr><tr><th>Outils (prefix)</th><td>`mcp__audiobookshelf__`</td></tr><tr><th>Configuration</th><td>Script Python : C:\\Users\\eliob\\.claude\\mcp\_audiobookshelf.py | Auth : JWT Bearer via POST /login</td></tr></tbody></table>

### Outils disponibles

- `get_libraries`
- `get_library`
- `get_library_items`
- `get_library_personalized`
- `get_item`
- `get_item_progress`
- `get_podcast_episodes`
- `download_podcast_episodes`
- `get_listening_sessions`
- `get_listening_stats`
- `get_me`
- `search_library`

### Ce que nous pouvons faire ensemble

- Parcourir la bibliothèque d'audiobooks et de podcasts
- Suivre la progression d'écoute d'un livre ou épisode
- Rechercher un titre, auteur ou podcast
- Consulter les statistiques d'écoute (temps total, sessions)
- Télécharger des épisodes de podcast

---

## Scan quotidien automatique — 2026-06-24

Un cron tourne chaque nuit à 04h00 UTC pour scanner toutes les bibliothèques Audiobookshelf et détecter les nouveaux contenus ou les renommages de dossiers.

### Script

`/home/debian/abs_scan.sh` — log : `/var/log/abs_scan.log`

```
0 4 * * * bash /home/debian/abs_scan.sh
```

### Fonctionnement

1. Authentification via `POST /login` pour obtenir un token JWT frais
2. Récupération de toutes les bibliothèques via `GET /api/libraries`
3. Déclenchement d'un scan pour chaque bibliothèque via `POST /api/libraries/{id}/scan`

Bibliothèques scannées : 36 (audiobooks + podcasts). Durée estimée : quelques minutes.

Exemple de log :

```
2026-06-24 04:00 SCAN OK 36/36 libs
```

---

## REX — 2026-06-24 : audiobook illisible après renommage de dossier

### Contexte

Audiobookshelf ne pouvait plus lire *Les routes de la soie* (Peter Frankopan). Erreur dans les logs :

```
Error: ENOENT: no such file or directory, stat '/audiobooks/Histoire/2 - Moyen Age/Peter Frankopan - Les routes de la soie/27_CH_08_LA_ROUTE_DU_CIEL.mp3'
```

### Cause

Le dossier avait été renommé sur kDrive/NAS de `Peter Frankopan - Les routes de la soie` en `Peter Frankopan-les routes de la soie` (tiret sans espaces, minuscule). Audiobookshelf conservait l'ancien chemin dans sa base.

### Solution

Le scan quotidien `abs_scan.sh` détecte ce type de désynchronisation et met à jour les chemins. Pour forcer immédiatement : lancer un scan manuel depuis l'interface Audiobookshelf ou exécuter `bash /home/debian/abs_scan.sh`.