Modèle / jeu de données
hydropix/TranslateBooksWithLLMs avatar
hydropix/TranslateBooksWithLLMs

TranslateBooksWithLLMs : traduire un livre entier sans casser sa mise en forme

Translate full-length books and documents with Ollama, OpenAI-compatible, Gemini, Mistral, DeepSeek, Poe or OpenRouter. Preserves formatting. Resumes where you left off. No file size limits.

2 408 étoiles320 forksPythonAGPL-3.0

En bref

De quoi s’agit-il ?
Une application de bureau Python qui découpe EPUB, SRT, DOCX et TXT en segments, les envoie à un LLM local ou distant, et recolle le tout en conservant styles et timecodes. Le point délicat n'est pas la traduction, c'est la reprise après interruption et la cohérence entre segments.
À qui s’adresse-t-il ?
Adoptez-le si vous traduisez des documents longs et structurés (romans EPUB, sous-titres SRT) et que vous acceptez de faire tourner un serveur web local sur le port 5000 : le découpage en segments, le glossaire automatique et la reprise sur checkpoint couvrent ce que les scripts maison ratent.
Puis-je l’utiliser commercialement ?
Oui, sous conditions strictes. AGPL-3.0 est une licence à copyleft réseau : si des personnes utilisent une version modifiée via un réseau, par exemple comme service hébergé, vous devez leur proposer son code source sous la même licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement Python, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Le vrai problème : la structure, pas la langue

Traduire un paragraphe avec un LLM est trivial. Traduire quatre cents pages en gardant les balises de chapitre, les notes de bas de page, l'italique et les timecodes d'un fichier de sous-titres est un problème d'ingénierie. TranslateBooksWithLLMs, abrégé TBL dans son propre README, prend en charge quatre formats : EPUB, SRT, DOCX et TXT. Le README annonce qu'aucune limite de taille n'existe, du document d'une page au roman de mille pages, et que la mise en forme ressort intacte, timecodes SRT compris. C'est cette promesse de préservation qui distingue l'outil d'un simple script qui envoie le texte brut à une API. Le public visé est concret : traducteurs indépendants, éditeurs qui veulent une première passe avant relecture humaine, sous-titreurs, et développeurs qui préfèrent ne rien envoyer à un service tiers. Les trois binaires publiés (Windows, macOS Intel, macOS Apple Silicon) indiquent que l'auteur cible des utilisateurs qui ne veulent pas installer Python.

Découpage, glossaire automatique et reprise sur checkpoint

Le mécanisme central est un découpage en segments avec conservation du contexte entre eux. Le README parle d'un système de chunking intelligent qui traite un contenu illimité tout en préservant le contexte d'un segment à l'autre. Deux fonctions s'y ajoutent. D'abord les presets de style : on extrait un preset depuis des livres échantillons, ou on l'écrit à la main, et il est appliqué à chaque segment pour garder un registre et un rythme homogènes sur toute la traduction. Ensuite le mode Auto pour le glossaire et le style : si aucun preset n'est prêt, l'application dérive les deux directement depuis le document, au prix d'un appel LLM supplémentaire pour chacun avant le démarrage du job, sans rien enregistrer. La reprise repose sur un système de checkpoint qui sauvegarde la progression automatiquement : après une interruption, on repart du dernier point enregistré. Ces trois briques répondent au même problème pratique, celui d'un job qui dure des heures et qu'on ne peut pas relancer de zéro à chaque coupure réseau ou plantage. Le README ne détaille pas la granularité exacte du checkpoint (par segment, par chapitre, par lot) : c'est un point à vérifier soi-même sur un job coupé volontairement.

Interface web locale, CLI et huit fournisseurs interchangeables

L'application se lance comme un petit serveur local. Après extraction de l'archive, on exécute TranslateBook.exe sous Windows ou ./TranslateBook sous macOS, puis on ouvre http://localhost:5000 dans un navigateur. Le premier lancement crée un dossier TranslateBook_Data qui contient les réglages. Sous macOS, le README signale qu'il faut passer par Réglages Système, Confidentialité et sécurité, puis Ouvrir quand même, ce qui trahit une application non notariée. Côté fournisseurs, la liste est large : Ollama en local, OpenAI, OpenAI-compatible (llama.cpp, LM Studio, vLLM, LocalAI), Gemini, Mistral, DeepSeek, Poe, OpenRouter et NVIDIA NIM. La ligne de commande reprend les mêmes options, par exemple python translate.py -i book.epub -sl English -tl Chinese, ou avec OpenRouter python translate.py -i book.txt --provider openrouter --openrouter_api_key YOUR_KEY -m anthropic/claude-sonnet-4 -tl French. Les clés d'API passent par des options nommées par fournisseur, comme --gemini_api_key ou --deepseek_api_key. Pour Ollama, le README donne ollama pull qwen3:14b et, en cas d'échec de connexion, curl http://localhost:11434/api/tags comme test de diagnostic. L'installation depuis les sources demande Python 3.8 ou plus récent, Ollama et Git, puis start.bat sous Windows ou chmod +x start.sh && ./start.sh sous Mac et Linux.

Ce que la documentation ne tranche pas

Le README est commercial dans son ton et pauvre en détails techniques. Il ne dit rien de la taille maximale d'un segment, du nombre de segments envoyés en parallèle, ni de la stratégie de retry quand un fournisseur renvoie une erreur 429. Ces paramètres existent forcément quelque part dans le code, mais rien dans le matériel fourni ne permet de les citer. Autre angle mort : la qualité. Le README renvoie vers un wiki intitulé Translation Quality Benchmarks, mais aucune valeur, aucun modèle gagnant, aucune langue de test n'est reproduit dans le README lui-même. Un utilisateur qui choisit un modèle pour le français ou le japonais devra donc consulter ce wiki, et le fait que ces chiffres vivent hors du dépôt signifie qu'ils peuvent vieillir sans lien visible avec les versions publiées. Le ton du README, avec des formules comme Perfect preservation, mérite d'être confronté à un test réel sur un EPUB contenant des notes de bas de page et des tableaux, cas que la documentation n'évoque jamais.

Quand TBL est le mauvais outil

Première limite structurelle : TBL est une application, pas une bibliothèque. Il n'expose pas d'API Python documentée dans le matériel fourni, seulement un exécutable, une interface web et un script translate.py en ligne de commande. Si vous voulez intégrer la traduction dans un pipeline de publication automatisé, vous devrez passer par des appels subprocess vers translate.py ou par HTTP vers le port 5000, ce qui est fragile. Deuxième limite : la traduction littéraire reste de la traduction automatique. Un glossaire dérivé automatiquement par un appel LLM peut se tromper sur un terme récurrent, et rien n'indique dans le README qu'une correction manuelle du glossaire soit possible après coup. Troisième limite : le coût. Chaque segment est un appel facturé chez les fournisseurs cloud, et le mode Auto ajoute deux appels avant même le premier segment. Sur un roman de mille pages, la facture se compte en dizaines de milliers d'appels. Quatrième limite : l'absence de signature macOS oblige à contourner Gatekeeper, ce qui est rédhibitoire dans un parc d'entreprise verrouillé.

Face à d'autres approches

L'alternative la plus proche n'est pas un concurrent nommé mais une catégorie : les bibliothèques Python de traduction de documents qui s'importent dans un script, comme les outils construits autour de formats EPUB et de clients LLM génériques. La différence d'approche est nette. TBL livre un produit fini avec interface, checkpoints et gestion des formats pris en charge, mais vous enferme dans son exécutable et son port 5000. Une bibliothèque vous laisse écrire votre propre boucle de découpage, votre propre cache et votre propre logique de reprise, ce qui est plus de travail mais s'intègre à un pipeline existant. Le choix dépend donc d'une question simple : voulez-vous un outil ou un composant ? Pour un traducteur seul devant un EPUB, TBL fait gagner des semaines. Pour une équipe qui traduit cinquante livres par mois avec un suivi de qualité, le contrôle manuel du glossaire et l'absence d'API programmable deviennent bloquants. À noter aussi que TBL ne se limite pas aux livres : le support SRT en fait un outil utilisable pour des sous-titres, usage que les bibliothèques généralistes traitent rarement aussi directement.

Licence, maintenance et coût de mise à jour

Le dépôt est publié sous AGPL-3.0. Concrètement, si vous modifiez le programme et que vous l'exposez en réseau, par exemple en hébergeant le port 5000 pour votre équipe, l'AGPL impose de mettre à disposition le code source de votre version modifiée. Pour un usage interne où chacun lance son propre exécutable, la question ne se pose pas de la même façon, mais elle mérite d'être posée à votre service juridique avant toute mise en production partagée. Ce paragraphe n'est pas un conseil juridique. Côté maintenance, le rythme est soutenu : trois versions en quelques semaines, v1.5.8 et v1.5.9 le même jour, puis v1.5.10 le 6 septembre 2026. Ce rythme signifie que les correctifs arrivent vite, mais aussi que les formats de fichiers internes et les checkpoints peuvent changer entre deux versions. Avant de lancer une traduction de plusieurs jours, vérifiez que vous restez sur une version donnée jusqu'à la fin du job, sinon une mise à jour au milieu du traitement peut rendre un checkpoint illisible. Le fait que le dépôt ne soit pas archivé et que les releases soient signées par une seule personne indique un projet porté par un mainteneur unique, avec le risque de bus factor que cela implique.

Conclusion éditoriale

Adoptez-le si vous traduisez des documents longs et structurés (romans EPUB, sous-titres SRT) et que vous acceptez de faire tourner un serveur web local sur le port 5000 : le découpage en segments, le glossaire automatique et la reprise sur checkpoint couvrent ce que les scripts maison ratent. Évitez-le si vous avez besoin d'une bibliothèque appelable depuis votre propre code, ou si votre chaîne d'intégration exige une licence permissive : l'AGPL-3.0 impose ses conditions dès qu'un service réseau expose le programme modifié. Avant de vous engager, lancez une traduction sur un chapitre entier avec le modèle et le fournisseur que vous visez, puis coupez le processus en cours de job et relancez-le pour vérifier que la reprise repart bien du dernier segment validé et non du début.

Sources officielles

  1. hydropix/TranslateBooksWithLLMs on GitHub
  2. License: AGPL-3.0
  3. Project website
  4. README
  5. Releases
Notes de la communauté

Notes de la communauté