Releases: Bruno-Aublet/Distillat
Releases · Bruno-Aublet/Distillat
Release list
Distillat v1.5.0: Nouveau modèle Gemini par défaut, avertissement de modèle obsolète, correction de retraduction du statut
Distillat v1.5.0: Nouveau modèle Gemini par défaut, avertissement de modèle obsolète, correction de retraduction du statut
Latest
- Ajout du modèle
gemini-3.7-flashà la liste des modèles Gemini proposés au choix par profil, qui devient le nouveau modèle par défaut (à la place degemini-3.6-flash) pour les profils sans modèle explicitement choisi. - Quand le profil de clé API actif utilise un modèle Gemini différent du modèle par défaut actuel, le libellé du profil dans l'en-tête de la fenêtre principale s'affiche désormais en orange, avec une info-bulle immédiate expliquant qu'un modèle plus récent est disponible et où le changer.
- Changer la langue de l'interface pendant que le texte de statut affichait "En attente d'un livre à résumer." (ou son équivalent anglais) le laissait dans l'ancienne langue jusqu'à la prochaine action : il se retraduit désormais immédiatement comme le reste de l'interface.
Distillat v1.4.2: Reprise plus rapide, protection de l'adresse de contact, corrections d'affichage, ouverture du fichier dans l'Explorateur, allègement de la page web
- Le fichier de reprise d'une génération en lots interrompue par un échec partiel sauvegarde désormais aussi le nombre de tokens du texte du livre déjà calculé, pour éviter de le recalculer inutilement au moment de la reprise.
- L'adresse mail du bouton "Contact" n'apparaît plus en clair dans le code source de l'application ni dans la page web, pour limiter sa collecte par des robots de scraping.
- Sur la ligne du fichier sélectionné, le bouton "Retirer" affichait son texte dans une police plus petite que le reste de la ligne, et un nom de fichier long tronquait le début du nom au lieu de sa fin : la police du bouton est désormais alignée sur celle du nom de fichier, et un nom trop long est tronqué proprement en fin de nom avec « (...) », le nom complet restant visible en survolant la ligne (info-bulle). Un style visuel a par ailleurs été défini pour toutes les info-bulles de l'application.
- Cliquer sur le nom du fichier sélectionné ouvre désormais l'Explorateur Windows dans le dossier de ce fichier, avec focus sur le fichier en question.
- La page de présentation du projet (
index.html) est allégée : les copies d'écran, jusqu'ici encodées en base64 directement dans le fichier (le rendant très volumineux), sont désormais des fichiers séparés (assets/) dans le dépôt.
Distillat v1.4.1: Lisibilité, correction du scroll des personnages, mention IA dans le PDF, bouton de contact
- Ouvrir une fiche de lecture par-dessus une fiche déjà affichée pouvait laisser certains blocs de description de personnage scrollables individuellement au lieu d'afficher tout le texte, la hauteur de ces blocs n'étant recalculée automatiquement que lors d'un redimensionnement de la fenêtre (qui se produit naturellement au tout premier affichage, mais plus ensuite) : elle est désormais aussi recalculée explicitement à chaque remplacement de fiche.
- Plusieurs fenêtres secondaires (publicité MosaicView, Changelog, Comprendre les quotas et les requêtes, Licence, Profils de clé API, Limites de quota, Prompts) affichaient leur texte dans une police trop petite et peu lisible, avec parfois une taille de fenêtre figée risquant de tronquer le contenu : la police est agrandie et la taille de ces fenêtres s'adapte désormais à leur contenu réel ; le texte de présentation de MosaicView a par ailleurs été enrichi de nouveaux exemples de fonctionnalités.
- Dans la fenêtre principale, le nom du fichier sélectionné, le texte de statut à côté du bouton d'aide sur les quotas et le bouton "Résumer" affichaient leur texte dans une police trop petite : elle est agrandie sur les trois, sans changer la taille du bouton lui-même.
- Fermer une fiche puis changer la langue de l'interface provoquait un plantage (
RuntimeError: wrapped C/C++ object ... has been deleted) : le texte d'aide affiché dans l'onglet Personnages en l'absence de fiche pointait vers un widget déjà détruit après une première fermeture de fiche, plutôt que vers celui réellement affiché à l'écran. - La mention de l'origine IA du contenu d'un export PDF n'apparaissait jusqu'ici que dans les métadonnées du fichier, jamais à la lecture : une mention discrète (« Généré par IA (nom du modèle) ») s'affiche désormais aussi dans le pied de page.
- Un nouveau bouton "Contact" dans le pied de page, juste après "Page web", ouvre le client mail par défaut avec l'objet "Distillat" prérempli.
- Divers changements mineurs sur la landing page du projet (
index.html).
Distillat v1.4.0: Nouveau format .dstl, écran de lancement, transparence sur le modèle IA utilisé
- L'extension des fiches sauvegardées passe de
.distillat.jsonà.dstl, bien plus courte ; les fiches déjà sauvegardées au format.distillat.jsonrestent lisibles indéfiniment et sont automatiquement renommées en.dstldès qu'elles sont ouvertes (chargement ou glisser-déposer), avec une notification et une proposition de migrer en une fois tous les fichiers.distillat.jsond'un dossier choisi (et ses sous-dossiers) vers le nouveau format. - Un double-clic sur un fichier
.dstl(ou l'ancien.distillat.json) dans l'Explorateur Windows ouvre désormais directement Distillat avec cette fiche chargée : dans une instance déjà ouverte si l'une d'elles est un écran d'accueil libre (rien de sélectionné ni affiché, aucune génération en cours), sinon dans une nouvelle instance, sauf si les 4 instances maximum sont déjà toutes occupées (message d'avertissement dans ce cas). L'association de fichier est enregistrée automatiquement au premier lancement de l'exécutable compilé, sans manipulation ni droits administrateur requis. - Par souci de transparence, chaque fiche générée indique désormais qu'elle a été produite par intelligence artificielle, avec le nom du modèle Gemini utilisé : ce champ est sauvegardé dans le fichier
.dstlet reporté dans les métadonnées (mots-clés) de l'export PDF, jamais dans le contenu visible du document. Les fiches générées avant l'ajout de ce champ n'enregistraient pas le modèle exact utilisé : elles reçoivent la mention générique « Gemini (modèle exact non enregistré) » au moment de leur migration.distillat.json->.dstl(au fil de l'eau ou en masse), pour qu'aucune fiche produite par Distillat ne reste sans cette mention. - Au démarrage en mode compilé, si un dossier
Fichesse trouvait à côté de l'exécutable (ex. une sauvegarde de l'application accompagnée d'une copie du dossier des fiches sur un disque externe), son contenu était automatiquement déplacé versDocuments\Distillat\Fichessans aucune confirmation ni notification, dans l'idée de migrer les vestiges d'anciennes versions qui stockaient encore leurs fiches à cet emplacement. Cette migration, ainsi que celles associées (ancien fichier.quota_state.jsonà côté de l'exe, anciens fichierslast_dirs.json/prompts.json, ancienne clé API unique à migrer vers un profil), a été entièrement supprimée : elle ne concernait plus que des installations très anciennes et présentait un risque réel de déplacer des données de sauvegarde de l'utilisateur à son insu. - Le README contenait beaucoup trop de détails techniques d'implémentation (noms exacts des fichiers de persistance, mécanique interne du découpage par lots ou des verrous inter-instances...) : il est allégé pour se concentrer sur l'usage, ces détails restant documentés dans
ARCHITECTURE.md. - L'export PDF embarque désormais aussi ses métadonnées (titre, auteur, mention du modèle IA) au format XMP en plus du format historique déjà utilisé, pour une meilleure compatibilité avec les lecteurs et outils qui s'appuient sur XMP (ex. Adobe Acrobat). Ne corrige pas l'affichage dans l'onglet Détails de l'Explorateur Windows, qui reste vide quel que soit le logiciel ayant produit le PDF : Windows n'implémente nativement aucun composant capable de lire les métadonnées d'un PDF dans cette fenêtre, y compris avec Adobe Acrobat installé (limitation connue et documentée d'Adobe, jamais comblée par leurs logiciels officiels).
- Un écran de lancement (splash screen) affichant le logo de l'application s'affiche désormais pendant le court instant de démarrage, avant l'apparition de la fenêtre principale, plutôt que de laisser l'utilisateur sans aucun retour visuel après le double-clic sur l'exécutable.
Distillat v1.3.6: Fiches partielles, gestion des reprises en attente, publicité pour MosaicView
- Quand Gemini renvoyait une réponse où seuls certains champs (ex. personnages et analyse) étaient vides, toute la fiche était jusqu'ici rejetée en bloc : le message d'erreur ne citait que les champs réellement manquants, mais l'utilisateur ne voyait aucun onglet rempli, y compris ceux (ex. résumé, résumé détaillé) pourtant bien générés par Gemini. La fiche partielle s'affiche désormais normalement, avec un avertissement listant les champs restés vides à compléter à la main ou à régénérer, plutôt que de perdre tout le contenu valide déjà produit.
- Cliquer sur "Fermer" dans la fenêtre des livres en attente proposée au démarrage empêchait jusqu'ici de la rouvrir avant le prochain lancement de l'application. Un bouton "Reprises en attente" placé à côté de "Résumer" permet désormais de la rouvrir à tout moment ; il est grisé s'il n'existe aucun livre en attente ou si tous les livres en attente sont actuellement en cours de traitement dans une autre instance de Distillat. Sélectionner un livre en attente dans une instance verrouille par ailleurs désormais aussitôt ce livre pour les autres instances, au lieu d'attendre le clic sur "Résumer" comme auparavant : deux instances pouvaient jusqu'ici sélectionner le même livre en attente sans aucun avertissement tant qu'aucune n'avait lancé sa génération.
- Un nouveau bouton "Publicité éhontée" dans le pied de page ouvre une fenêtre présentant MosaicView, une autre application de bureau du même auteur (un éditeur de bandes dessinées numériques), avec les logos de l'application et des liens cliquables vers sa page de présentation et ses téléchargements.
Distillat v1.3.5: Formatage des titres de section dans l'analyse littéraire, enrichissement du journal de diagnostic des appels API
- Les titres de section de l'analyse littéraire (ex. « Les Thèmes Principaux », « Portée et Héritage de l'Œuvre ») pouvaient s'afficher tous précédés d'un « 1. » au lieu d'un titre stylé, la consigne de formatage Markdown (
##/###en début de ligne) n'étant jusqu'ici demandée à Gemini que pour les titres du résumé détaillé, pas pour ceux de l'analyse. Elle s'applique désormais aussi à l'analyse dans les quatre prompts par défaut (français/anglais, génération en une requête et par lots). - Constaté sur un lot de résumés de chapitres ayant échoué deux fois de suite avec le message « Réponse vide reçue de l'API Gemini » : le journal d'appels API (
api_requests.log) n'indiquait alors qu'unfinish_reason=Nonesans aucune autre information disponible dans la réponse de l'API. Le journal ajoute désormais systématiquement, sur la lignegenerate_content OK:finish_message(texte explicatif accompagnant parfoisfinish_reason),prompt_feedback(cause d'un blocage décidé avant toute génération, ex. filtre de sécurité),safety_ratings(évaluations de sécurité du candidat produit),tokens_reflexion(tokens de raisonnement interne du modèle, comptés au quota même sans texte produit),traffic_type(type de trafic facturé par Google),model_versionetresponse_id(identifiants utiles en cas d'échange avec le support Google). - Grâce à
prompt_feedbackci-dessus, le cas observé plus haut s'est révélé être un blocage de sécurité Gemini (PROHIBITED_CONTENT) sur le contenu d'un passage précis du livre, jusqu'ici affiché comme une simple « Réponse vide » invitant à recliquer sur Résumer alors qu'un nouvel essai était voué à échouer indéfiniment sur ce même passage. Ce cas est désormais détecté explicitement (viaprompt_feedback.block_reason, en plus du cas déjà couvert viafinish_reason) et affiche un message dédié précisant qu'il ne s'agit pas d'un aléa passager, qu'un nouvel essai donnera le même résultat sur ce même passage, et qu'aucun contournement n'est possible depuis Distillat ; ce message n'invite plus non plus à reprendre la génération interrompue, contrairement aux autres échecs partiels.
Distillat v1.3.4: Fiabilité du parsing JSON et détection d'une fiche générée incomplète, message d'erreur clair pour un EPUB corrompu, formatage du changelog
- Le message affiché pendant la requête de fusion finale d'un livre découpé en lots de chapitres ("Résumés fusionnés. Identification des personnages et rédaction de l'analyse…") laissait croire que la fusion était déjà terminée alors qu'elle correspond justement à la requête en cours. Il devient "Fusion des résumés. Identification des personnages et rédaction de l'analyse…" pour refléter une action en cours plutôt qu'achevée.
- La fenêtre Changelog affichait le contenu de
CHANGELOG.mdtel quel, balises Markdown brutes comprises, au lieu d'un texte mis en forme (titres, listes, gras) comme les autres textes affichés dans l'application. - Un EPUB dont le manifeste interne référence une ressource absente de l'archive (fichier corrompu ou mal formé) faisait échouer la génération avec une erreur technique brute d'
ebooklib("There is no item named '...' in the archive"), incompréhensible pour l'utilisateur. Un message clair s'affiche désormais à la place, invitant à retélécharger ou réparer le fichier. - Constaté sur un livre tenant en une seule requête (gemini-3.6-flash) : Gemini pouvait insérer un retour à la ligne brut au lieu de la séquence échappée
\nà l'intérieur du résumé détaillé, entre deux sections, rendant tout l'objet JSON de réponse invalide ("Invalid control character") et faisant échouer la génération sans qu'aucune réparation existante ne s'applique (le reste de la réponse était par ailleurs valide et complet). Ce cas est désormais détecté et réparé automatiquement avant le parsing ; de plus, les prompts demandés à Gemini rappellent désormais explicitement de toujours utiliser la séquence échappée\ndans les valeurs de chaîne et de relire l'objet une fois terminé pour vérifier que les quatre champs demandés sont bien tous renseignés. - Seul un résumé court manquant faisait jusqu'ici échouer explicitement une génération : un résumé détaillé, des personnages ou une analyse manquants se repliaient silencieusement sur un contenu vide, affichant une fiche incomplète comme un succès sans avertir l'utilisateur. Les quatre champs (résumé court, résumé détaillé, personnages, analyse) sont désormais traités de façon identique : si l'un d'eux revient vide, un message clair l'indique nommément, précise qu'il s'agit d'un aléa occasionnel de Gemini (les consignes demandées ne sont pas toujours respectées), invite à vérifier visuellement ce qui a été généré, et recommande de relancer une génération à zéro plutôt que de chercher à récupérer un contenu par nature incomplet.
Distillat v1.3.3: Modèle Gemini par défaut, détection de couverture EPUB, fiabilité du parsing JSON et des résumés de série, ergonomie des fenêtres multi-instances, modifications mineures de la page web
- Le modèle Gemini proposé par défaut à la création d'un nouveau profil de clé API, passe de gemini-3.5-flash à gemini-3.6-flash.
- Ouvrir une nouvelle instance via le bouton dédié faisait apparaître sa fenêtre exactement à la même position que les fenêtres déjà ouvertes, masquant totalement la précédente. Chaque nouvelle fenêtre s'ouvre désormais légèrement décalée vers le bas et la droite, proportionnellement au nombre de fenêtres déjà ouvertes (sans jamais sortir de l'écran), pour laisser les précédentes visibles en dessous.
- Cliquer plusieurs fois rapidement sur le bouton d'ouverture d'une nouvelle instance (dans une même fenêtre, ou presque simultanément depuis plusieurs fenêtres) lançait autant d'instances que de clics, en dépassant la limite de 4 instances simultanées : chaque clic vérifiait la limite avant que les instances précédemment lancées aient eu le temps de finir de démarrer et d'être comptées. Le bouton est désormais désactivé dans toutes les fenêtres ouvertes dès qu'un lancement démarre, et ne se réactive partout qu'une fois la nouvelle fenêtre réellement ouverte et prête.
- La détection automatique de la couverture d'un EPUB rattrape désormais deux cas supplémentaires où elle échouait faute de métadonnée ou de nom de fichier exploitable : une page XHTML dédiée à la couverture (image encapsulée dans du HTML plutôt que déclarée comme image nue), et à défaut la première image de la première page du livre, comme le fait un lecteur EPUB classique.
- La fiche d'exemple
Fiches/FICHE TEST - Les Terres Oubliées - LIVRE FICTIF.distillat.jsona été réécrite (résumé détaillé, personnages, analyse) pour refléter fidèlement le niveau de détail réellement produit par gemini-3.6-flash ; le même contenu est désormais aussi fourni traduit en anglais dansFiches/TEST SHEET - The Forgotten Lands - FICTITIOUS BOOK (EN).distillat.json. Ces deux fiches d'exemple sont désormais copiées automatiquement au démarrage dans le dossier normal des fiches (Documents\Distillat\Fiches) si elles n'y sont pas déjà présentes, pour être directement visibles et chargeables sans avoir à aller chercher le dossierFiches/du projet. - Constaté sur un livre tenant en une seule requête : Gemini pouvait refermer prématurément l'objet JSON de réponse (personnages et analyse encore vides à ce stade) puis continuer à écrire ces deux champs à la suite comme si l'objet était resté ouvert, plutôt que de s'arrêter net (cas déjà couvert depuis la 1.3.2). Ce contenu, syntaxiquement hors de l'objet JSON retenu, se retrouvait alors relégué dans le texte supplémentaire ignoré au lieu de remplir la fiche, laissant les onglets Personnages et Analyse vides sans que rien ne l'indique clairement. Ce cas précis est désormais détecté et déclenche une erreur explicite invitant à recliquer sur « Résumer », plutôt que de produire silencieusement une fiche incomplète ; le prompt demandé à Gemini interdit en plus désormais explicitement de refermer puis prolonger l'objet JSON.
- Constaté sur le tome 2 d'une série dont le tout début rappelle les événements du tome précédent : Gemini pouvait consacrer l'essentiel du résumé détaillé à ce seul rappel, produisant un résumé détaillé anormalement court (plus court que le résumé court) et ne couvrant pas l'intrigue propre au livre. Les prompts demandés à Gemini précisent désormais explicitement de ne mentionner un tel rappel qu'en une ou deux phrases avant de consacrer l'essentiel du résumé détaillé à l'intrigue de ce livre, sans toutefois confondre ce rappel avec une scène d'ouverture, un prologue ou un flashback faisant partie intégrante de l'histoire du livre, qui doit au contraire toujours être détaillé normalement.
- Modifications mineures sur la page web de présentation du projet.
Distillat v1.3.2: Choix du modèle Gemini par profil de clé API, fiabilité des prompts
- Chaque profil de clé API permet désormais de choisir le modèle Gemini utilisé pour les générations (gemini-3.5-flash ou gemini-3.6-flash, un nouveau modèle stable proposé en plus de l'ancien), modifiable à tout moment dans la fenêtre Profils ; les compteurs et limites de quota RPM/TPM/RPD sont suivis séparément pour chaque modèle utilisé avec une même clé, sans jamais mélanger leur consommation. Une génération déjà entamée continue toujours avec le modèle utilisé au départ, même si le modèle du profil est changé entre-temps, pour ne jamais mélanger dans une même fiche des résumés produits par deux modèles différents. Le modèle Gemini actuellement utilisé s'affiche sous le nom du profil actif, en haut de la fenêtre principale.
- Constaté avec gemini-3.6-flash sur un livre volumineux : Gemini pouvait produire un résumé détaillé complet puis s'arrêter sans erreur avant de produire les personnages et l'analyse, laissant ces deux sections vides dans la fiche générée. Les prompts par défaut précisent désormais explicitement que les quatre éléments demandés (résumé court, résumé détaillé, personnages, analyse) sont tous obligatoires et qu'il ne faut jamais s'arrêter en cours de route, quel que soit celui après lequel le modèle serait tenté de le faire.
Distillat v1.3.1: Verrouillage multi-instances d'un livre en cours de génération, page web du projet
Distillat v1.3.1: Verrouillage multi-instances d'un livre en cours de génération, page web du projet
- Lancer la génération d'un même livre depuis plusieurs fenêtres de Distillat en parallèle (première génération comme reprise d'une génération interrompue) consommait du quota en double et pouvait faire écraser tour à tour le même état de reprise. Un même livre ne peut désormais être généré que dans une seule fenêtre à la fois : les autres refusent avec un message explicite, et la fenêtre listant les livres en attente de reprise au démarrage indique désormais en direct ceux déjà en cours ailleurs (entrée grisée, non sélectionnable).
- Le projet dispose désormais d'une page web de présentation (https://bruno-aublet.github.io/Distillat/), bilingue français/anglais.
- Le footer de la fenêtre principale propose désormais un lien « Page web » (« Website » en anglais), à droite du lien Changelog, menant vers cette page.