L'excitation d'allumer une nouvelle liseuse (Kobo, Kindle ou liseuse Android) est universelle : un écran e-ink tout neuf, un éclairage doux, une autonomie de plusieurs semaines et la perspective d'avoir toute sa bibliothèque dans la poche de sa veste.

Puis arrive l'étape inévitable : le chargement des premiers packs de livres numériques.

On récupère des archives communautaires, des packs thématiques de science-fiction, de thrillers ou de fantasy, parfois 500, 1 000 ou 6 000 ePubs d'un coup. On branche le câble USB, on glisse les dossiers... et là, sur l'écran d'accueil de la liseuse, c'est l'anarchie visuelle la plus totale.


Le constat : l'enfer des packs bruts sur liseuse

Une liseuse ne lit pas dans vos pensées. Pour afficher la grille de votre bibliothèque, elle se base sur deux choses : le nom physique du fichier et les métadonnées internes du conteneur (le fameux fichier content.opf et les balises Dublin Core d'un ePub).

Dans les packs sauvages, 95% des fichiers sont issus de la scène P2P ou d'anciens rips mal calibrés :

Bernard.Minier.2020.Le.Commandant.Servaz.T6.La.Vallee.FRENCH.Epub-NoGRP.epub
Douglas.Preston.&.Lincoln.Child.-.Nora.Kelly.T01.-.Tombes.Oubliees.(French.Edition).epub
Asimov, Isaac - Fondation (01) - Fondation [HQ].epub
S01_03_Damasio_La_Horde_du_Contrevent_v2_final.epub

Le résultat sur l'e-reader est catastrophique :

  1. Titres pollués et tronqués : la liseuse affiche Tombes Oubliées (French Edition) - FRENCH.Epub-NoGRP, coupant le véritable titre sur les écrans 6 pouces.
  2. Ordre de lecture impossible : impossible de trier une saga par ordre chronologique. Le tome 1 s'appelle T01, le tome 2 Tome 2, le tome 3 3, et la saga Le Commandant Servaz est éparpillée sur 4 pages de bibliothèque.
  3. Auteurs dupliqués : la liseuse crée trois entrées distinctes pour le même écrivain : Isaac Asimov, Asimov, Isaac et ASIMOV Isaac.
  4. Métadonnées internes fantômes : le fichier a un nom potable dans le Finder, mais l'ePub interne a un champ <dc:title> vide ou contenant le nom du ripper.

La solution classique ? Ouvrir Calibre. Mais quiconque a déjà injecté 5 000 ePubs dans Calibre connaît la douleur : interface lourde héritée des années 2000, base de données SQLite centralisée qui copie tous les fichiers dans un dossier propriétaire, crashs au parsing de masse, et nécessité de cliquer manuellement sur chaque livre pour corriger les champs.

Il me fallait un outil moderne, rapide, scriptable et capable de s'intégrer directement dans mon terminal et mes flux automatisés. C'est comme ça qu'est né BookFlow Studio.


L'approche BookFlow : pipeline en 5 phases

BookFlow Studio est un utilitaire CLI développé en Python 3.11+ avec Typer et Rich. Son objectif : transformer n'importe quel dossier de bouquins en vrac en une bibliothèque propre, standardisée et enrichie, sans jamais corrompre un fichier.

flowchart TD
    A["📁 Fichier Source (EPUB / PDF)"] --> B["🔍 Extraction Interne (Dublin Core / OPF)"]
    A --> C["🧩 Parseur Heuristique Regex (Tags Scene, T01, Année)"]
    B --> D["⚖️ Fusion & Arbitrage des Métadonnées"]
    C --> D
    D --> E{"🌐 Métadonnées Manquantes ?"}
    E -->|Oui : enrichissement| F["🏛️ API Open Library (Cache SQLite Local)"]
    E -->|Non| G["✨ Normalisation des Chaînes (Casing, Auteurs)"]
    F --> G
    G --> H["🏷️ Nommage Cible : Prénom Nom - Série T01 - Titre.epub"]
    H --> I{"🛡️ Mode Simulation ?"}
    I -->|Oui : dry-run| J["📋 Rapport Visuel Rich en Terminal"]
    I -->|Non : execute| K["🚀 Déplacement/Copie + Injection Métadonnées"]

Le moteur fonctionne autour de cinq étapes clés :

1. L'extraction Dublin Core & EPUB3

BookFlow ouvre le fichier ePub (qui est une archive ZIP) et inspecte directement le descripteur XML (package.opf). Il extrait l'auteur (dc:creator), le titre (dc:title), la langue (dc:language), l'identifiant (dc:identifier / ISBN) et les tags Calibre (calibre:series, calibre:series_index).

2. Le parseur heuristique de releases "scene"

Souvent, les métadonnées internes sont vides mais le nom de fichier brut contient des pépites d'information. BookFlow intègre une batterie d'expressions régulières spécialisées qui découpent les release names :

  • Détection des motifs de tomes : T01, T1, Tome 01, Vol. 1, Book 1, #01.
  • Nettoyage des tags de scène : FRENCH, MULTi, Epub, NoGRP, Ebook, TrueFrench, Retail.
  • Élimination des résidus d'éditions : (French Edition), [HQ], .2020..

3. L'enrichissement externe via Open Library

Quand une information cruciale manque (ex: la série ou le numéro de volume pour un roman policier), BookFlow peut interroger l'API publique d'Open Library (Internet Archive). Pour éviter de saturer le réseau et garantir une exécution ultra-rapide sur des milliers de fichiers, les requêtes sont mises en cache dans une base SQLite locale.

4. La convention de nommage standard

Pour s'afficher parfaitement sur n'importe quel OS ou liseuse, BookFlow applique par défaut un format limpide et cohérent :

  • Série avec tome : Prénom Nom - Nom de la Série T01 - Titre du Livre.epub
  • Roman indépendant (one-shot) : Prénom Nom - Titre du Livre.epub

Les accents et apostrophes typographiques françaises sont préservés, les particules d'auteurs respectées (de, du, von), et les inversions Nom, Prénom sont automatiquement remises à l'endroit.

5. La réécriture atomique des métadonnées

Ranger le fichier ne suffit pas : il faut que la liseuse voie les bonnes métadonnées une fois le livre ouvert. BookFlow réécrit de manière atomique le fichier content.opf au sein de l'archive ePub pour mettre à jour les balises Dublin Core avec le titre épuré, la série et l'auteur canonique.


En pratique : comment on l'utilise au quotidien

L'outil s'installe en une ligne avec uv tool :

uv tool install git+https://github.com/Boblebol/bookflow.git

1. Auditer un pack avant de toucher à quoi que ce soit

bookflow scan "/Volumes/WD_BLACK/Media/books/Pack Thrillers"

BookFlow génère un tableau synthétique : nombre de formats détectés, taux de séries identifiées, livres sans auteur et conflits potentiels.

2. Inspecter un livre en profondeur

bookflow inspect "Bernard.Minier.2020.Le.Commandant.Servaz.T6.La.Vallee.FRENCH.Epub-NoGRP.epub"

La commande affiche en couleur les métadonnées lues dans le fichier, ce que le parseur en déduit, le résultat trouvé sur Open Library et le nom final proposé : Bernard Minier - Le Commandant Servaz T06 - La Vallée.epub.

3. Organiser en simulation (--dry-run) puis exécuter

Par défaut, bookflow organize refuse d'altérer le disque sans confirmation explicite. Il fonctionne en mode simulation :

# Simulation sans risque
bookflow organize "/source/packs" --target "/liseuse/books"

# Exécution réelle avec écriture des métadonnées
bookflow organize "/source/packs" --target "/liseuse/books" --execute

Le résultat sur la liseuse

Une fois le dossier synchronisé sur la Kobo (ou synchronisé avec kepubify) :

  • Bibliothèque impeccable : tous les livres d'un même auteur sont groupés sous une identité unique.
  • Séries alignées : les sagas s'affichent dans l'ordre naturel de lecture (T01, T02, T03).
  • Écran de veille net : les couvertures et titres pleine page affichent le vrai nom de l'œuvre sans mentions parasites.

Le projet est entièrement open-source sous licence MIT sur GitHub : Boblebol/bookflow.