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 surveille(systemd VPS) détecte l'arrivée de fichiers sur le VPS via inotifywait (SSH persistant)local
  • Dès détection, komga_compress.komga_compress_vps.py téléchargecompresse le PDF, le compressePDF via StirlingPDF,StirlingPDF et dépose le résultat surdans le NAS sasnexte/home/debian/Documents/komga-compressed/
  • Julien reclasserange lui-mêmemanuellement 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 NAS sasnexteVPS /mnt/sasnexte/Komga/pdf_compressed/home/debian/Documents/komga-compressed/
API compression https://spdf.juxjux.ovh/api/v1/misc/compress-pdf
Scripts VPS Syncthing/Jux_univers/Jux-scripts/Komga-PDF//home/debian/komga_compress_vps.py + /home/debian/komga_watch_vps.sh
LogLogs Syncthing/Jux_univers/Jux-scripts/Komga-PDF/komga_compress.logjournalctl -u komga-watch -f (sur le VPS)

Scripts

LesLe scriptsservice sonttourne dansentièrement sur le dossierVPS Syncthing partagéplus entrede toutesdépendance lesUbuntu machinesni (VPS,de Ubuntu,SSH Windows Elio+Jux, Windows Nexte, Xiaomi). Ils sont donc révisables et améliorables depuis n'importe quelle machine.persistant.

Fichier Rôle
komga_compress.komga_compress_vps.py Compression : liste les PDFPDFs sur le VPS via SSH, télécharge,locaux, envoie à StirlingPDF, déposeécrit surdans sasnextekomga-compressed/. Idempotent (ignore les fichiers déjà compressés).
komga_watch.komga_watch_vps.sh Surveillance : connexiontraite SSHle persistantebacklog +au démarrage, puis boucle inotifywait sur le dossier VPS, déclenche la compression à chaque nouveau fichierlocale.
~/.config/etc/systemd/user/system/komga-watch.service Service systemd utilisateur Ubuntusystem (nonpas Syncthing — propre à la machine)user), actif au démarrageboot, Restart=always.

Lancer manuellement (Ubuntu)

/usr/bin/python3 ~/Syncthing/Jux_univers/Jux-scripts/Komga-PDF/komga_compress.py

Gérer le service (Ubuntu)VPS)

sudo systemctl --user status komga-watch.servicewatch
sudo systemctl --user restart komga-watch.servicewatch
tailjournalctl -u komga-watch -f
~/Syncthing/Jux_univers/Jux-scripts/Komga-PDF/komga_compress.log

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%

      Points techniques résolus :

        Casse du chemin Syncthing : le dossier VPS est /home/debian/Documents/ (D majuscule), synchronisé depuis Syncthing/ sur Ubuntu. Erreur initiale avec /home/debian/documents/ (minuscule) qui ne recevait rien. Race condition inotifywait / Syncthing : Syncthing écrit d'abord un fichier .syncthing.nom.pdf.tmp, puis le renomme en .pdf. inotifywait (sans -m) sortait sur l'événement .tmp, redémarrait, et ratait le renommage final. Fix : sur tout événement, attendre 3 secondes puis lancer komga_compress.py sans filtrage préalable. Le script est idempotent (ignore les fichiers déjà compressés). Python : utiliser /usr/bin/python3 (système, avec requests) et non /usr/bin/env python3 qui pointait sur un venv cassé (Python 3.14, pip absent). StirlingPDF auth : token JWT via POST /api/v1/auth/login → session.access_token, valable 24h. Ubiquité des scripts : déplacés dans Syncthing/Jux_univers/Jux-scripts/Komga-PDF/ — disponibles et éditables sur toutes les machines. Le service systemd (propre à Ubuntu) pointe vers ce chemin Syncthing.