[Docker Apps] BookHub : Automatisation DL ebooks et traitement
-
Hello,
Suite au différents évènements sur un certain Y machine truc, comme beaucoup, j’ai cherché des alternatives. Je suis assez rapidement tombé sur ce forum et j’ai commencé à lire et à un peu participer. Et il faut dire qu’il y a du contenu très intéressant. J’ai d’ailleurs modifié ma SeedBox suite à une discussion (coucou @Aerya), installé RustDesk (coucou @Raccoon), prévu d’installer Veeam (coucou @Violence) et d’autres choses sont en attente.
Ensuite j’ai eu pas mal de demandes pour des ebooks, de la musique et des livres audio de la part de ma belle maman, ma maman, ma femme, deux de mes filles et une amie de la famille qui vit en Australie. Et qu’est-ce que fait un flemmard dans ce genre de cas? Trouver des solutions qu’il peut gérer à distance. Installer une fois ce qu’il faut et gérer tranquillement depuis son canapé

C’est là que j’ai découvert Kavita (pour envoyer sur des Kindle), Audiobookshelf, Prologue, ShelfPlayer, etc… Et ma nouvelle meilleure amie Anna pour les eBooks (découverte sur ce forum pour changer).
Tout ça c’est bien. J’ai fait une note partagée par personne, comme wishlist et je me suis vite retrouvé avec pratiquement 100 titres rapidement (oui, ça lit beaucoup chez nous et plus de place dans les bibliothèques, pourtant il y en a beaucoup…). Cool, mais chercher manuellement, c’est long, corriger toutes les méta données pour un affichage propre dans Kavita, c’est long.
N’ayant pas trouvé une solution qui me convenait complètement, j’ai décidé de m’amuser un peu avec l’IA. Tout d’abord Perplexity (une catastrophe le résultat), puis ChatGPT.

**DISCLAIMER** : je ne sais pas coder! Mes connaissances se limitent au CSS et HTML il y a 15 ans
C’est là qu’est né le projet Autothèque. Oui le nom est moche. Entièrement réalisé avec ChatGPT, ce qui a pris un certain nombre d’heures avec une IA qui avait tendance à partir dans tous les sens et faire des modifications foireuses.
But du projet :
- Avoir une Wishlist (doc Excel dans mon NextCloud) que je remplis avec “Public, Type, Titre, Auteur, Statut”
- Pouvoir lancer automatiquement ces DL d’ebooks chez ma copine Anna ou autre source
- Ensuite correction des méta données automatiquement (Titre, Auteur, Série)
- Pour finir trier les ebooks dans les bonnes bibliothèques
Tout cela avec 0 intervention humaine mis à part le remplissage de la Wishlist.
Dans Kavita j’ai 3 bibliothèques :
- Adultes
- Ados
- Enfant
Pour cela qu’il y a “Public” dans ma wishlist. Il y a aussi “Type”, pour “books, audiobooks, comics”. Je n’exclus pas que ça fasse aussi partie du projet par la suite. Pas utile pour le moment.
Est-ce que ça a marché? Euh…si je dis :
- Plusieurs crashs complets de docker

- docker.img corrompu

- Freeze de HDD sur mon NAS

- Plantage complet de UnRAID (devenu tellement lent)

Vous en dites quoi ?

Je vous l’avais dit, je ne sais pas coder. Donc, ça c’était la V1. Mais avec cet échec, j’étais bien plus au clair sur les problèmes, ce qui n’a pas fonctionné et la structure. C’était trop complexe, exécution trop lente, mais beaucoup d’I/O (freeze les HDD…).
C’est parti pour la V2 avec quelques heures passées avec ChatGPT uniquement pour définir la structure, les bases du fonctionnement et définir une ligne claire pour qu’il ne dévie plus!
BookHub
Est-ce que le nom existe déjà? Aucune idée

C’est comme qu’est né BookHub. Enfin! Il n’est pas parfait, certainement largement améliorable sur plusieurs points et finalement encore en test.
La première étape a été de définir mon cachepool SSD comme base pour BookHub
Ensuite voilà un résumé du projet fait pas mon nouveau pote ChatGPT.
BookHub — Automatisation complète de gestion d’eBooks(ShelfMark → Calibre → Kavita)
ObjectifBookHub est une chaîne d’automatisation personnelle permettant de :
- partir d’une wishlist simple (Excel)
- rechercher et télécharger automatiquement des eBooks via ShelfMark
- normaliser les fichiers avec Calibre
- produire une bibliothèque finale propre
- exposer cette bibliothèque à Kavita
- tout en limitant volontairement les I/O
BookHub n’est pas un gestionnaire de téléchargement,
n’est pas une bibliothèque,
c’est un orchestrateur fiable et déterministe.
🧱 Conteneurs utilisés
BH-Orchestrator
→ scripts Python BookHub
→ gestion des états
→ dashboard HTMLBH-ShelfMark
→ recherche & téléchargement des eBooksBH-CalibreWorker
→ Calibre
→ normalisation
→ export finalKavita
→ lecture des bibliothèques finales
🧠 Principes clés
- Un script = une responsabilité
- Un cycle = un livre maximum
- Aucune action implicite
- Historique conservé
️ Arborescence principale/BookHub ├── 00_Wishlist │ ├── wishlist.xlsx │ └── _snapshots/ │ ├── 10_Inbox │ ← téléchargements ShelfMark │ ├── 20_Queue │ ├── Adultes │ ├── Ados │ └── Enfants │ ├── 95_State │ ├── jobs.json │ ├── queue.json │ ├── dashboard.html │ ├── dashboard.css │ └── runner.lock │ ├── config │ ├── snapshot_wishlist.py │ ├── read_wishlist.py │ ├── build_queue.py │ ├── resolve_and_trigger_shelfmark_v2.py │ ├── scan_inbox.py │ ├── move_to_calibre_queue.py │ ├── process_one_calibre.py │ └── runner.py │ └── Ebooks ├── Adultes/Livres ├── Ados/Livres └── Enfants/Livres
Gestion par PublicChaque livre est classé dans un public :
AdultesAdosEnfants
Le public détermine :- la file d’attente
- la bibliothèque finale
- la bibliothèque Kavita
Wishlist (point d’entrée)/BookHub/00_Wishlist/wishlist.xlsx
- simple Excel
- aucune logique métier
- snapshot automatique à chaque cycle
🧾 Scripts BookHub (et leur rôle)
1️⃣ snapshot_wishlist.py
- fige la wishlist
- garantit la traçabilité
2️⃣ read_wishlist.py
- transforme la wishlist en jobs
- état initial :
NEW
3️⃣ build_queue.py
- construit la queue
- préserve l’historique
4️⃣ resolve_and_trigger_shelfmark_v2.py
- recherche via ShelfMark
- déclenche le téléchargement
- état :
DOWNLOADING
5️⃣ scan_inbox.py
- détecte les fichiers téléchargés
- matching tolérant
- état :
DOWNLOADED
6️⃣ move_to_calibre_queue.py
- déplace vers
20_Queue/{Public} - état :
READY_FOR_CALIBRE
7️⃣ process_one_calibre.py
- import Calibre
- fetch metadata
- export final
- nettoyage complet
- état final :
DONE
8️⃣ runner.py
- orchestre tous les scripts
- lock anti double-run
- conçu pour cron / Unraid User Scripts
️ Ordre d’exécution→snapshot_wishlist.py
→read_wishlist.py
→build_queue.py
→resolve_and_trigger_shelfmark_v2.py
→scan_inbox.py
→move_to_calibre_queue.py
→process_one_calibre.py
Bibliothèque finale (Kavita)/BookHub/Ebooks/{Public}/Livres
- fichiers propres
- métadonnées normalisées
- source unique
- Calibre utilisé uniquement comme outil
🧹 Politique de nettoyage
Après export :
- suppression du livre dans Calibre
- suppression du fichier source
- aucune duplication
- cache maîtrisé
Dashboard- HTML + CSS séparé
- lecture directe de
queue.json - responsive
- filtres
- états colorés
- aucune écriture
Évolutions possibles- actions depuis le dashboard
- CSS avancé
- statistiques
- règles spécifiques par public
État du projet
️ Téléchargement automatisé
️ Matching robuste
️ Normalisation Calibre
️ Export Kavita
️ Dashboard stable
️ Historique conservé
BookHub privilégie la stabilité, la compréhension et la maîtrise des flux.
Est-ce que ça fonctionne?
Apparemment oui
Il y a certainement des améliorations à apporter. Ce sera son utilisation qui permettra de mettre le doigt sur ce qui peut coincer.Mais surtout :
- Pas de crash complet de docker

- docker.img pas corrompu

- pas de freeze HDD (de toute façon c’est sur mon cachepool SSD)

- Pas de plantage complet de UnRAID

Je mets les livres dans ma Wishlist (xlsx) et les téléchargements se lancent petit à petit via ShelfMark et je retrouve les ebooks dans la bonne bibliothèque au final. Aucun problème d’en mettre 100, puisqu’il en gère un par run.
Ce qu’il faudra certainement améliorer :
- Gestion des erreurs
- Meta données pas si propres que ça, donc classement final pas toujours parfait
- Voir si les séries sont bien gérées
A quoi ça ressemble ?
Les conteneurs :

La Wishlist :

ShelfMark (rien de particulier) :

Le dashboard pour le suivi :


Pourquoi avoir posté tout ça? Parce que j’aurai bien aimé tomber dessus
J’ai découvert pas mal de choses intéressantes ici, ce qui m’a permis de lancer certaines choses ou parfaire certains services. Et ce n’est que le début.Précisions :
- Un livre est ajouté dans la wishlist et lorsque statut passe en “A télécharger”, ça lance l’automatisation, dans le cas contraire -> ignoré
- Pas de retour dans la wishlist, sert uniquement de base
- Le traitement ensuite pas le conteneur orchestrateur a volontairement des limites, 1 livre par lancement (cron via User Script). Cela permet d’éviter des problèmes d’I/O trop importants. Pour le moment en tout cas.
- Pour le moment le dashboard ne permet pas encore de piloter quoi que ce soit. J’aimerai que ce soit le cas, comme supprimer un livre de la wishlist (suite à une erreur)
- Calibre est piloté vis des scripts, donc pas grand chose à configurer de son côté.
C’est quoi la suite ?
Je ne sais pas trop. Des améliorations de toute façon pour que ça demande le moins de maintenance possible et simplement profiter des ebooks
-
undefined Violence marked this topic as a regular topic
-
undefined Networld marked this topic as a question
-
@Violence C’est mieux comme ça
? -
undefined Violence marked this topic as a regular topic
-
Salut,
Joli projet

Pas client, notamment parce que j’ai jamais fait de liste Excel mais j’ai utilisé Readarr quelques temps et testé Shelfmark et Charptarr mais je vise plus les comics et BDs que les livres (en autoDL), du coup rien trouvé qui réponde à mes besoins.Pourquoi préférer un fichier Excel comme wishlist plutôt que des classiques Goodreads ou Listy ?
-
Pour que ça reste au maximum en local

J’ai pas encore testé pour les comics et les BD, mais ça doit fonctionner pareil. En fait, pas tout à fait vrai, dans la liste il y avait 2 BD et elles ont été téléchargées.
Comme ce sont des scripts qui pilotent Calibre, c’est assez simple de router un type de contenu dans un dossier spécifique ensuite. J’ai inclus un type “comics” dans ce sens.