Skip to main content

260611_procédure Komga-PDF par Claude sur StirlingPDF

Présentation

La procédure Komga-PDF est un script de compression de fichiers PDF pour réduire considérablement la taille du stockage des bibliothèques d'ouvrages de la collection de Julien.

L'acquisition de fichiers issus de bases de données Internet accumule des fichiers PDF en haute résolution (images surtout). Ces fichiers sont synchronisés entre les NAS Synology et un disque dur kDrive Infomaniak de 6 To.

Contexte

Des points de montage Rclone relient les répertoires kDrive et les containers Docker installés sur le VPS OVH juxjux.ovh. Ces containers lisent les PDF à la volée — permettant ainsi de construire une infrastructure de très forte densité de connaissances digitales (epub, pdf, images, vidéos, musiques...) avec une solution serveur d'entrée de gamme (10 €/mois tout inclus).

La lecture réseau est multi-support : PC, tablette, téléphone. Elle est aussi nomade, séquentielle et pressée. La compacité des fichiers PDF devient donc nécessaire pour diffuser rapidement sur les réseaux. Un magazine ou un ouvrage informatique ne doit pas peser 130 Mo sur un écran de 10 pouces.

Procédure

  • Les nouveaux PDF sont déposés dans le dossier Syncthing : Syncthing/komga-pdf/ depuis n'importe quelle machine (PC Elio+Jux, PC Nexte, Ubuntu, Xiaomi...)
  • Syncthing synchronise automatiquement vers le VPS : /home/debian/Documents/komga-pdf/
  • Le service komga-watch (systemd VPS) détecte l'arrivée via inotifywait local
  • Dès détection, komga_compress_vps.py compresse le PDF via StirlingPDF et dépose le résultat dans /home/debian/Documents/komga-compressed/
  • Julien range manuellement les PDF compressés vers sasnexte puis dans le dossier thématique de son choix
  • Les originaux ne sont jamais supprimés du VPS — Julien valide et conserve si besoin (haute résolution souhaitée)

Architecture technique

Élément Chemin / URL
Dépôt (toutes machines) Syncthing/komga-pdf/
Dossier VPS (Syncthing) /home/debian/Documents/komga-pdf/
Destination VPS /home/debian/Documents/komga-compressed/
API compression https://spdf.juxjux.ovh/api/v1/misc/compress-pdf
Scripts VPS /home/debian/komga_compress_vps.py + /home/debian/komga_watch_vps.sh
Logs journalctl -u komga-watch -f (sur le VPS)

Scripts

Le service tourne entièrement sur le VPS — plus de dépendance Ubuntu ni de SSH persistant.

Fichier Rôle
komga_compress_vps.py Compression : liste les PDFs locaux, envoie à StirlingPDF, écrit dans komga-compressed/. Idempotent (ignore les fichiers déjà compressés).
komga_watch_vps.sh Surveillance : traite le backlog au démarrage, puis boucle inotifywait locale.
/etc/systemd/system/komga-watch.service Service system (pas user), actif au boot, Restart=always.

Gérer le service (VPS)

sudo systemctl status komga-watch
sudo systemctl restart komga-watch
journalctl -u komga-watch -f

Retour d'expérience (2026-08-22) — Test de bout en bout depuis le poste julie

Première validation complète de la chaîne depuis le redémarrage du service le 2026-07-08, et premier passage depuis le PC Windows julie (entré dans le maillage Syncthing le 2026-08-10). Aucune intervention manuelle : dépôt du fichier dans D:\Syncthing\komga-pdf\, tout le reste s'est enchaîné seul.

Chronologie mesurée — 1 min 50 s entre le dépôt sur le VPS et le fichier compressé :

Étape Horodatage (UTC) Syncthing dépose le .tmp sur le VPS, inotify déclenche 11:24:50 Fin de l'attente de 3 s, le script détecte le PDF 11:24:53 StirlingPDF rend le fichier compressé 11:26:40 Retour du fichier compressé sur le poste julie (Syncthing) 11:26

Résultat de compression :

Fichier Original Compressé Gain La Revue du Vin de France - Septembre 2026.pdf 129,2 Mo 55,4 Mo -57%

Même taux que le numéro de juin 2026 du même magazine (-57 %) — la compression est reproductible d'un numéro à l'autre pour une source identique.

Mesure mémoire — marge plus étroite qu'attendu

C'est le point neuf de ce test. Le fichier de 129 Mo est le plus gros passé dans la chaîne à ce jour (précédent record : 96,6 Mo le 2026-06-13). Consommation du container stirling-pdf, relevée toutes les 15 s :

t+ Mémoire 15 s 701 Mio 30 s 1001 Mio 45 s 1,036 Gio 60 s 1,069 Gio (pic) 75 s 1,047 Gio 90 s 1,039 Gio (terminé)
    Pic à 1,069 Gio sur le plafond de 2 Gio posé le 2026-08-02 → il reste ~45 % de marge Le plafond de 1 Go initialement envisagé aurait tué ce traitement en OOM kill. La décision de le porter à 2 Go (motivée alors par l'OCR, qui monte à ~969 Mio) se trouve validée une seconde fois, pour une raison indépendante : la compression d'un gros PDF La consommation ne suit pas la taille du fichier de façon linéaire — elle plafonne vers 1 Gio et s'y maintient. Mais une compression concurrente d'un OCR ferait dépasser les 2 Gio. Ne pas lancer les deux en parallèle, et ne pas redescendre la limite

    Point d'attention — aucun log persistant

    Les logs partent uniquement dans journald (komga_watch_vps.sh écrit sur stdout, capté par systemd). Le journal a été tourné depuis le démarrage du service : tous les traitements de juin et juillet sont irrécupérables, journalctl -u komga-watch ne montrait rien avant ce test.

    Pour conserver un historique consultable, ajouter une redirection vers un fichier dans le script, ou poser un journalctl --unit komga-watch en rotation propre. Non fait à ce jour.

    Retour d'expérience (2026-06-13) — Refactorisation VPS

    Problème de l'architecture Ubuntu : le service tournait sur Ubuntu avec un SSH persistant vers le VPS. Deux défauts structurels :

    • inotifywait ne détecte pas les fichiers déjà présents au redémarrage du service (backlog silencieux)
    • Impossible à contrôler depuis Windows/Claude Code

    Solution : service systemd sur le VPS lui-même. inotifywait local, pas de SSH persistant. Le script traite le backlog à chaque démarrage avant d'entrer dans la boucle de surveillance.

    Résultats de compression (2026-06-13) :

    Fichier Original Compressé Gain
    Beaux Arts - Juin 2026.pdf 75.8 Mo 61.1 Mo -19%
    Connaissance des Arts - Juin 2026.pdf 57.3 Mo 35.2 Mo -39%
    La Revue du Vin de France - Juin 2026.pdf 93.3 Mo 39.9 Mo -57%
    Livre lacto fermentation.pdf 96.6 Mo 19.6 Mo -80%
    Monde Gourmand N°93 - Juin 2026.pdf 41.2 Mo 17.4 Mo -58%

    Points techniques :

    • Dossier VPS avec D majuscule : /home/debian/Documents/ (Syncthing sensible à la casse)
    • Race condition inotifywait/Syncthing : attente 3s après événement, script idempotent
    • Python : /usr/bin/python3 (système, requests 2.28.1 disponible)
    • StirlingPDF auth : JWT via POST /api/v1/auth/login → session.access_token, valable 24h
    • Fichiers sync-conflict Syncthing filtrés automatiquement par le script

    Retour d'expérience (2026-06-12)

    Résultats de compression :

    Fichier Original Compressé Gain
    Monde Gourmand N°93 - Juin 2026.pdf 42 Mo 17 Mo -58%
    Connaissance des Arts - Juin 2026.pdf 57 Mo 35 Mo -39%