Se connecter Accueil
Fonctionnalités
L'IA Tarifs FAQ
Bibliothèques
Télécharger
Journal des modifications

Ce qui a changé, en direct du code

Le contenu ci-dessous n'est pas une page marketing : c'est le fichier CHANGELOG.md réellement livré dans le zip téléchargeable, lu automatiquement à chaque affichage — jamais ressaisi à la main, donc jamais désynchronisé.

Version actuelle : v1.5.5 Télécharger cette version

[1.5.0] - 2026-10-02
Ajouté — GitHub Copilot Enterprise : modèles autorisés par l'organisation
  • Bouton « Lister les modèles autorisés » dans Paramètres > IA (page Copilot Enterprise) : le champ Modèle devient une liste remplie avec les modèles de chat que l'organisation autorise réellement (modèles désactivés par l'admin et embeddings exclus). La liste se remplit aussi d'elle-même juste après « Se connecter avec GitHub ». Si le modèle saisi n'en fait pas partie, il est remplacé par le plus proche (version la plus récente de la même famille, ex. claude-sonnet-5 → claude-sonnet-5.5), et un message l'explique.
  • Message clair quand le modèle est refusé : à la place de « Erreur HTTP 400 : The requested model is not supported », le chat indique que le modèle n'est pas (ou plus) autorisé, où le changer, la liste des modèles autorisés et une suggestion.
  • « Tester la connexion » teste maintenant le modèle configuré (et non plus un modèle fixe) : un modèle refusé est repéré dès la configuration.
  • Raccourci Socomec de l'accueil : modèle par défaut passé à claude-sonnet-5.5.
Modifié — fonctions réservées aux abonnés (dès le palier Essentiel)
  • Connecteurs IA personnels (API compatible OpenAI, GitHub Models, GitHub Copilot Enterprise) : réservés aux abonnés. Sans abonnement, leurs pages de Paramètres > IA restent visibles mais grisées (« 🔒 abonnés » dans la liste, bandeau explicatif et bouton Voir l'abonnement Essentiel ↗), et tout appel est refusé avec un message clair.
  • Essais gratuits (Gemini, Groq, OpenRouter) : plafonnés à 300 000 tokens par mois sans abonnement, compteur affiché sur la page, renouvelé le 1er du mois. Une action commencée sous le plafond va jusqu'au bout. Plus de plafond avec un abonnement.
  • Mise en scène (styles de mouvement, fond animé) : bouton, menu (Ctrl+Maj+M), sous-menu Fond animé et styles du brief visibles mais grisés sans abonnement. Animations et transitions classiques, Morph et « Animations simples » restent gratuits ; un deck déjà mis en scène se joue et s'exporte normalement.
  • Accueil IA : textes des cartes alignés (plafond de l'essai, connecteur complet marqué « 🔒 Abonnement requis », ce que débloque l'abonnement).
  • Verrouillé par défaut, même vente fermée ou site injoignable (couper l'accès au site ne contourne rien) ; un abonnement non resynchronisé depuis 7 jours ne compte plus. Nouvel interrupteur admin Paiements > Fournisseurs > Fermeture du service : libère ces fonctions pour tous, définitivement, si le service s'arrête.
  • Licences signées (Ed25519) : l'application ne croit un abonnement ou une fermeture du service que s'ils sont signés par le site (clé générée dans Paiements > Fournisseurs > Signature des licences, clé publique à recopier dans services/license_signature.py). Modifier le cache local ne permet plus de se déclarer abonné.
Modifié — menu contextuel des miniatures simplifié

- 17 entrées à plat ramenées à 8, rangées par objectif, sans aucune fonctionnalité retirée : les actions structurelles restent à un clic (Insérer avant / après, Dupliquer, Renommer, Masquer, Supprimer) ; le reste passe dans deux sous-menus.
- Contenu et design (IA) : Revue de la slide, Suggérer des mises en forme, Proposer des notes de l'orateur.
- Animations et transitions : réglages manuels (Transition de la slide, Gérer les animations, Fond animé), puis suggestions IA (Animer la slide, Proposer des transitions), Dupliquer pour Morph et Mise en scène de la présentation… (anciennement « Mise en scène… », renommée car elle règle tout le deck).
- Sur une sélection multiple, un en-tête grisé (« 3 slides sélectionnées ») rappelle sur quoi porteront les actions.

Ajouté — langue des slides dans le brief
  • Sélecteur « Langue des slides » dans le dialogue « Nouveau deck — brief et fichiers d'analyse » (drapeaux, 5 langues). Par défaut la langue de l'interface ; tant qu'on ne l'a pas choisie, elle suit la langue d'un brief tapé ou dicté.
  • Plus de phrase de langue ajoutée au brief : choisir un agent insère sa version dans la langue choisie (si elle existe), sans consigne. La consigne est ajoutée à l'envoi seulement, et toute consigne de langue restée dans le texte est retirée : changer de langue après avoir choisi un agent ou tapé le brief ne laisse jamais deux consignes contradictoires. Si le brief vient d'un agent et n'a pas été retouché, changer de langue remplace le texte par la version de l'agent dans la nouvelle langue.
  • Langue enregistrée dans le projet (deck.language) : les retouches IA des slides et les notes du présentateur la respectent ensuite, même si la demande est tapée dans une autre langue. Le chat l'affiche au lancement (« 🌐 Langue des slides : English »).
Ajouté — moteur de mise en scène, lot 2.1 : l'IA connaît les nouveaux effets
  • « Animer la slide (IA) » propose maintenant tout le moteur de mise en scène : entrées du moteur (révélation par masque, montée, pop, machine à écrire…), mises en valeur (compteur sur un chiffre, tracé d'un graphique ou d'une frise, surlignage, pulsation), sorties, découpage ligne / mot / lettre, et la transition Morph quand la slide reprend des éléments de la précédente. L'IA choisit quoi mettre en valeur et dans quel ordre ; les durées et courbes restent celles du style (ou de vos réglages faits à la main). En mode « 100 % PowerPoint », elle ne propose que des effets natifs.
  • Nouvelle fenêtre de validation : chaque ligne se décoche, et l'aperçu animé rejoue la slide avant / après à chaque changement. Badge « diaporama uniquement » sur les effets sans équivalent PowerPoint, nombre de clics avant → après, nouveaux points du vérificateur de mise en scène. Une seule annulation (Ctrl+Z) retire le tout.
  • Jamais de slide vide à l'arrivée : si la proposition fait tout attendre d'un clic, le premier élément part dès l'arrivée (signalé dans la fenêtre). Avec un Morph, les éléments communs aux deux slides gardent leur mise en valeur mais pas d'entrée, puisque le Morph les amène déjà.
  • Option « Dupliquer la slide pour préparer un Morph », proposée par l'IA quand un moment Morph serait fort. Elle est toujours décochée par défaut.
  • Sans IA configurée, ou si l'IA échoue : proposition calculée automatiquement (séquence du moteur pour les slides générées, sinon titre > chiffre > visuel > texte, compteur sur les chiffres clés, tracé des graphiques, Morph sur une slide de suite), avec la raison de l'échec affichée. Un modèle sans vision travaille sur la liste des éléments. Un refus d'abonnement ou de quota s'affiche comme partout ailleurs.
  • Le chat comprend les champs du moteur : « mets un compteur sur le chiffre », « surligne ce mot », « fais un Morph avec la slide précédente », « fais apparaître le texte mot par mot ». La relecture de slide (IA) peut aussi les proposer. Les listes d'effets données à l'IA sont générées depuis le catalogue : un nouvel effet devient proposable sans retoucher les consignes.
  • Le « Réalisateur IA » sur tout le deck, prévu au lot 2, est abandonné (décision du 2026-10-02) : les styles gèrent déjà ce travail sans IA.
Ajouté — moteur de mise en scène : fin du lot 1
  • Mise en scène par slide (slide.motion) : la fenêtre Mise en scène s'applique à toute la présentation, à la slide courante ou aux slides sélectionnées. Une slide réglée ainsi garde son style si l'on change celui du deck.
  • Réappliquer le style : case « Remplacer aussi les animations et transitions réglées à la main ». Décochée (par défaut), les réglages faits à la main restent prioritaires ; cochée, le style décide de tout sur les slides visées (les liens Morph sont conservés).
  • 5 nouveaux styles : Minimal suisse, Cinéma, Data storytelling, Pédagogique, Manifeste. 3 nouveaux effets natifs PowerPoint : Glissement, Descente, Machine à écrire.
  • Barre de l'éditeur : boutons Mise en scène et ▶ Lire (rejoue la slide courante comme au diaporama, transition d'arrivée puis animations, dans une petite fenêtre, sans quitter l'éditeur ; une slide qui ne bouge pas est signalée avec la marche à suivre pour l'animer).
  • Brief (génération) : options rangées en trois sections (Images, Mise en scène, Notes du présentateur). La case « Ajouter transitions et animations » devient un choix Aucune animation / Animations simples / Style « … », avec une phrase d'explication et un bouton Comparer les styles… (aperçu animé aux couleurs de la charte choisie). Le style choisi est appliqué au deck généré. L'ancien réglage est repris.
  • Garde-fous de mise en scène (menu Présentation › Vérifier la mise en scène…) : avertissements non bloquants quand une animation dure trop (> 1,5 s, 3 s pour une révélation mot à mot), plus de 3 animations jouent en même temps, un texte disparaît ou se fait recouvrir, une slide reste vide jusqu'au clic ou démarre lentement, ou trop de slides utilisent des effets forts. Double-clic → la slide concernée. Une ligne « ⚠ … » le signale aussi dans la fenêtre Mise en scène.
  • Grain photo adouci sur les fonds clairs.
Ajouté — moteur de mise en scène (lot 1, jalon 1 : fondations)

- Objectif : passer des effets par élément à un vrai moteur de mise en scène (continuité Morph, grammaire de mouvement cohérente, typographie cinétique, data vivante). Audit et plan : docs/motion/AUDIT.md.
- Schéma 1.1 (champs tous optionnels) : deck.motion (style, intensité sobre / élégant / spectaculaire, mouvement réduit, rythme manuel / automatique, mode « 100 % PowerPoint »), transition morph + courbe, slide.ambient (fond animé, Ken Burns), element.morph_key, element.motion (entrée / mise en valeur / sortie, déclencheur, ordre, profondeur).
- Migration douce et non destructive : un deck 1.0 passe en 1.1 au chargement sans autre modification ; l'ancien champ animation reste valide et est traduit à la lecture.
- Styles de mouvement (assets/motion_styles/*.json) : Corporate sobre, Keynote, Tech néon, Éditorial luxe, Social énergique. Un deck existant garde le style implicite « Historique », qui reproduit exactement son rendu actuel.
- Appariement Morph core/motion/pairing.py (jalon 2) : relie automatiquement les éléments de deux slides consécutives (clé Morph explicite > même identifiant > même marquage > même type et contenu proche — texte sans tenir compte de la casse ni des accents, même image, mêmes catégories de graphique). Déterministe : à contenu égal, l'élément le plus proche gagne ; chaque élément n'est relié qu'une fois.
- Compatibilité PowerPoint complète (jalon 7) — l'export PPTX rejoue la mise en scène avec les effets natifs de PowerPoint, tout en restant 100 % éditable :
- Nouveau minutage (render/pptx_timing.py), écrit depuis la même timeline que le diaporama. Déclencheurs « avec / après le précédent » enfin respectés (l'ancien export transformait tout en clics), départ automatique à l'arrivée de la slide, délais propres, durées, accélération/décélération.
- Découpage natif mot à mot et lettre à lettre (iterate), ligne par ligne (par paragraphe) ; Montée, Pop, Zoom, Pulsation, sorties ; Révélation par masque et Rebond approchés.
- Tracé : les barres d'un graphique poussent depuis la ligne de base ; les frises (regroupées automatiquement) et les formes se dessinent de gauche à droite. Surlignage : forme éditable aux couleurs de la charte, posée juste derrière le texte. Ken Burns : agrandissement + trajectoire qui garde le point d'intérêt immobile. Le compteur montre sa valeur finale.
- Correction : le Balayage partait de la droite dans PowerPoint (de la gauche à l'écran) ; il part désormais de la gauche partout.
- Vérifié dans PowerPoint 16 : ouverture sans réparation, séquence d'animation relue (types, déclencheurs, délais, durées) et rendu vidéo produit par PowerPoint lui-même.
- Mode « 100 % PowerPoint » (fenêtre Mise en scène) : le diaporama et le fichier jouent exactement les mêmes effets, et les effets non natifs sont grisés dans le panneau. Case « Voir comme dans PowerPoint » pour prévisualiser le rendu du fichier.
- Matrice de compatibilité diaporama / PowerPoint (365, 2016, LibreOffice, Google Slides) / vidéo : docs/motion/MATRICE.md.
- Robustesse : un export lancé hors interface (tâche de fond, workflow) n'essaie plus de dessiner le fond animé, ce qui évite un plantage. Le fond habituel est conservé.
- Fonds animés (jalon 6) : 4 fonds discrets qui vivent derrière le contenu pendant le diaporama — Dégradé maillé (halos colorés qui dérivent lentement), Lueur douce (deux lueurs qui respirent), Grain photo (grain argentique léger), Particules (points qui montent lentement).
- Couleurs exclusivement issues de la charte ; elles s'adaptent au fond RÉEL de la slide (les particules prennent la couleur de la charte la plus contrastée). Sur une image de fond, les halos sont atténués.
- Performance plafonnée : 24 images/s, 48 particules au plus, grain pré-calculé. Rendu déterministe (même image pour un même instant : prêt pour la vidéo).
- Mouvement réduit : le fond reste affiché mais immobile.
- Intensités vraiment distinctes (retour utilisateur : « je ne vois pas toujours la différence entre les 3 modes ») : Sobre = apparitions simples et en bloc (ni découpage, ni pop, rebond ou masque), transitions décoratives ramenées à un fondu, ni fond animé ni Ken Burns ; Élégant = le style tel que conçu ; Spectaculaire = mouvements deux fois plus amples et 25 % plus longs, titres mot à mot, textes ligne par ligne, visuels plus dynamiques (fondu → montée, montée → pop). Ne s'applique qu'aux choix du style, jamais aux réglages faits à la main. Dans la fenêtre Mise en scène, le niveau choisi est bien visible (bouton plein), décrit en une phrase, et le résumé indique les durées.
- Visible dans l'éditeur : une slide qui a un fond animé (y compris celui apporté par le style) l'affiche en image fixe derrière ses éléments, avec une pastille « ✦ Fond animé : … » en haut à droite ; un badge dédié apparaît aussi sur sa miniature. Un clic sur la pastille ouvre la fenêtre Mise en scène.
- Choix : par le style de mouvement (Keynote → lueur, Tech néon → particules, Éditorial luxe → grain, Social énergique → dégradé), ou par slide : clic droit sur une miniature > Animations et transitions > Fond animé (Selon le style, Aucun, ou l'un des 4).
- Export PowerPoint : le fond animé devient une image fixe, plein cadre, placée derrière tout le reste ; le contenu reste entièrement éditable.
- Réglages accessibles dans l'interface (début du jalon 8, avancé à la demande) :
- Panneau Propriétés > Animation : 4 nouveaux effets d'apparition (Révélation par masque, Montée, Pop, Rebond), un réglage Découpage pour les zones de texte (bloc entier, ligne par ligne, mot par mot, lettre par lettre) et une Mise en valeur proposée selon le type d'élément (Compteur ou Surlignage pour un texte, Tracé pour un graphique, une frise ou une forme, Pulsation pour tout élément), avec la compatibilité PowerPoint en info-bulle. Les nouveaux effets gardent dans l'export PPTX l'effet PowerPoint natif le plus proche. Avec un découpage choisi, les effets qui ne se découpent pas (Cercle, Roue, Damier, Pop…) sont grisés ; un tel effet grise à son tour le Découpage, avec une info-bulle qui liste les effets possibles.
- Traduction anglaise de tous les noms d'effets, de transitions, de déclencheurs, de mises en valeur et de styles (noms PowerPoint officiels : Fade, Wipe, Fly In, On Click…), dans le panneau, les dialogues d'animation et le menu ; « (personnalisée) » traduit aussi.
- Dialogue Animation de l'objet (clic droit sur un élément) aligné sur le panneau : mêmes réglages (Effet, Découpage, Déclencheur, Durée, Mise en valeur) et mêmes règles, grâce à des contrôles communs (ui/motion_controls.py) ; son ancienne mention « visible uniquement dans le PPTX exporté » est remplacée (les animations se jouent désormais aussi dans SlydeForge), de même dans le dialogue de transition. Sous les réglages du panneau, la ligne d'aide se met à jour dès qu'un effet est choisi.
- Menu Présentation > Mise en scène… : une fenêtre unique remplace les sous-menus (retour utilisateur : « difficile de comprendre ce que ça va faire ») — les styles à gauche (nom + description), un aperçu animé en boucle de la slide courante à droite (transition depuis la slide précédente, Morph compris, puis chaque étape comme au diaporama, légendée : « Arrivée sur la slide », « Clic 1 : « … » »), l'intensité (Sobre / Élégant / Spectaculaire), le fond animé de toutes les slides et le mouvement réduit, avec un résumé en clair de ce que fait le choix (« Titres : révélation par masque mot par mot · Chiffres clés : fondu + compteur · Transition par défaut : Morph (0,9 s)… »). Chaque changement met l'aperçu à jour ; rien n'est appliqué avant OK, en une seule action annulable. La fenêtre rappelle que le réglage s'applique à toute la présentation, et l'aperçu peut se jouer sur une slide de démonstration (titre, liste, chiffre clé, graphique) où les différences entre styles se voient mieux. Accès rapide : Ctrl+Maj+M, clic droit sur une miniature > Mise en scène…, ou la pastille du fond animé.
- Typographie cinétique et data vivante (jalon 5) — dans le diaporama :
- Texte révélé ligne par ligne, mot par mot ou lettre par lettre (révélation par masque, fondu, montée, balayage), avec un décalage entre chaque morceau (par défaut 120 ms par ligne, 70 ms par mot, 25 ms par lettre, même sans style de mouvement ; si le texte compte plus de lignes que prévu, chaque ligne est un peu raccourcie pour garder le décalage). Le découpage suit les VRAIES lignes affichées (retours à la ligne automatiques compris), et les puces suivent leur ligne.
- Compteur : le premier nombre d'un texte défile de 0 (ou d'une valeur de départ choisie) jusqu'à sa valeur, en gardant exactement son format : « 12 500 clients », « 98,6 % », « +35 % », « 1 250,75 € », « 1,500 users » (anglais)… Avant de démarrer, il affiche sa valeur de départ.
- Surlignage : bande aux couleurs de la charte (accent) balayée derrière le texte, ligne après ligne ; elle reste ensuite.
- Tracé : les barres d'un graphique poussent depuis la ligne de base, les courbes se tracent de gauche à droite, les camemberts et anneaux se remplissent (valeurs affichées à la fin) ; les frises et les formes se dessinent de gauche à droite.
- Ken Burns : zoom lent de l'image de fond, centré sur son point d'intérêt (focal_point), d'amplitude et de durée données par le style (ex. +8 % sur 14 s en « Éditorial luxe spectaculaire ») ; désactivé en mouvement réduit.
- Dernière image de chaque animation identique au pixel près à l'affichage statique (aucun saut à la fin).
- Transition Morph (jalon 4) : entre deux slides, les éléments communs (même texte, même image, même forme, ou liés à la main) glissent, changent de taille, de couleur et de rotation au lieu de disparaître ; le reste se fond. Un même texte dans un cadre différent garde sa taille de police (aucun texte déformé ni flou).
- Diaporama : le Morph se joue en avançant ; un retour arrière ou un saut direct affiche la slide sans le rejouer. Les éléments arrivés par le Morph ne rejouent pas leur animation d'entrée.
- Export PowerPoint natif : vraie transition Morph de PowerPoint 2019 / Microsoft 365, avec repli automatique en fondu pour PowerPoint 2016 et antérieurs, LibreOffice et Google Slides. Les formes appariées sont nommées « !!… » pour que PowerPoint les relie exactement comme SlydeForge. Vérifié dans PowerPoint 16 : ouverture sans aucune réparation, transition reconnue comme Morph, et rendu vidéo de PowerPoint montrant les éléments qui se transforment (docs/motion/morph_powerpoint.gif).
- Interface : choix « Morph » dans les transitions ; badge « lien » sur la miniature d'une slide atteinte en Morph ; clic droit sur une miniature > Animations et transitions > Dupliquer pour Morph (copie liée élément par élément, prête à être modifiée) ; clic droit sur un élément > Morph > Lier à un élément de la slide précédente / suivante…, Ne pas apparier (fondu), Appariement automatique. Tout est annulable (Ctrl+Z).
- Vidéo : le Morph y est pour l'instant remplacé par une coupe, comme les autres transitions ; le rendu fidèle arrivera avec la vidéo « fidèle » (lot 2).
- Le diaporama joue réellement les animations (jalon 3, render/motion_player.py) : jusqu'ici, chaque clic affichait seulement une image plus complète de la slide. Désormais chaque effet se voit vraiment à l'écran : fondu, montée, vol, zoom, pop, rebond, balayage, cercle, losange, croix, roue, stores, damier, bandes, barres, révélation par masque, sorties et pulsation. Les animations sans clic se jouent dès l'arrivée sur la slide, après la transition. Le texte reste net (redessiné en vectoriel à chaque image), et les performances sont d'environ 5 ms par image en Full HD.
- Navigation par étapes : un clic pendant une animation lance l'étape suivante ; le retour arrière affiche l'état exact de l'étape précédente, sans rien rejouer ; un saut direct à une slide (numéro, grille, console) l'affiche dans son état final. Avec le rythme « automatique », les étapes s'enchaînent seules. Un redimensionnement (passage en plein écran, changement d'écran) reprend l'animation au même instant au lieu de la couper.
- Animations de démarrage de slide visibles au lancement (retour utilisateur : une animation « Après le précédent » placée en premier ne se voyait pas) : elle démarre bien à l'arrivée de la slide, mais l'ouverture sur un 2e écran et la vue présentateur la terminaient avant le premier affichage. Désormais, un gel momentané de l'affichage met l'animation en pause au lieu de la faire sauter.
- Vue présentateur : nouvelle ligne « Prochain clic : … » (ex. « Prochain clic : « Chiffre d'affaires » », « diapositive suivante »).
- Filet de sécurité : en cas d'erreur de rendu, le diaporama revient automatiquement à l'affichage historique ; la préférence motion_player permet aussi de le désactiver.
- Résolveur central core/motion/resolve.py : valeurs explicites > style × intensité > défauts, timeline normalisée (étapes, délais absolus, durées, courbes, stagger) destinée à tous les rendus. Rien n'est encore branché sur le diaporama, le PPTX ou la vidéo à ce jalon : le comportement de l'application est inchangé.

Amélioré — tableaux : rendu plus soigné et dialogue « Modifier le tableau » plus complet
  • Retour utilisateur : « que le rendu et design soit encore meilleur et que l'outil de config pour l'utilisateur soit plus abouti ».
  • Galerie de styles (Grille, Épuré, Bandes, Accent, Minimal) avec vignettes aux couleurs de la charte ; un clic applique le style et efface les fonds/couleurs posés cellule par cellule (taille, gras, alignements conservés ; Ctrl+Z pour revenir).
  • Nouvelles options de tableau : en-tête « Fond plein » ou « Souligné » (filet épais, texte accentué), bandes alternées teintées calculées au rendu (suivent la charte et le fond de la diapo), 1re colonne en gras, ligne de total (gras + filet renforcé), couleur des séparateurs, densité (compacte / normale / aérée).
  • Cellules : alignement vertical (haut / milieu / bas), bouton « Effacer la mise en forme », alerte « Texte peu lisible » avec correction en un clic.
  • Lisibilité automatique : une cellule sans couleur de texte prend une couleur lisible sur son fond (ex. texte blanc sur l'en-tête plein) ; un texte quasi invisible (ex. bleu sur bande grise) est corrigé au rendu.
  • Tableaux générés par l'IA : style choisi selon la direction de « Mise en forme » (Éditoriale / fond fort → en-tête souligné et filets ; Relief → bandes + filets ; autres → en-tête plein et bandes), 1re colonne en gras, colonnes chiffrées alignées à droite, ligne « Total / Sous-total » détectée. Plus aucune couleur figée cellule par cellule : changer de style ou de charte reste cohérent.
  • Rendu : séparateurs discrets par défaut (au lieu de « secondary » plein), marges de cellule identiques à l'écran et dans PowerPoint, filets tracés par-dessus les fonds. Un seul modèle (render/table_model.py) alimente l'aperçu, l'export PPTX et la grille du dialogue : les trois ne peuvent plus diverger.
Ajouté — grouper / dissocier des objets dans l'éditeur de slides
  • Retour utilisateur : « grouper et dégrouper des éléments pour pouvoir les déplacer / agrandir / réduire ensemble […] depuis un clic droit sur un ou plusieurs objets ».
  • Clic droit > Grouper (Ctrl+G) / Dissocier (Ctrl+Maj+G), aussi dans le menu Édition et l'éditeur de modèles de slide. Les membres d'un groupe deviennent contigus dans l'ordre des calques.
  • Un clic sur un membre sélectionne tout le groupe, avec un cadre et 8 poignées qui redimensionnent tous les membres ensemble (Maj sur un angle : proportions conservées) ; un 2e clic sur un membre ne sélectionne que lui (pour le régler seul) ; Ctrl+clic ajoute/retire le groupe entier. Déplacement et redimensionnement = une seule entrée d'annulation.
  • Export PPTX : un groupe devient un vrai groupe PowerPoint (sauf si l'un de ses membres est animé, PowerPoint n'animant pas un objet à l'intérieur d'un groupe). Import PPTX : les groupes du fichier sont conservés comme groupes.
Ajouté — modifier les propriétés de plusieurs objets en une fois
  • Retour utilisateur : « si je sélectionne plusieurs objets […] depuis le panneau des propriétés je puisse les appliquer en masse […] à partir du moment où ils savent gérer cette propriété ».
  • Avec plusieurs objets sélectionnés (ou un groupe), le panneau de propriétés affiche tous les réglages gérés par au moins un objet (« Texte (2/3 objets) ») : taille/couleur/gras/italique/alignement/listes du texte, forme et remplissage, image, contour, ombre, opacité, animation, position/taille/rotation, verrouillage, ordre des calques. Une valeur commune s'affiche normalement ; des valeurs différentes s'affichent vides / « (valeurs multiples) » / case partielle.
  • « Épaisseur » réglée sur des objets sans contour leur donne un contour (couleur du texte) au lieu de ne rien faire — aussi pour un seul objet.
  • Toucher un réglage n'écrit QUE ce réglage, et seulement dans les objets qui le gèrent : le texte, les tailles manuelles et la mise en forme riche de chaque objet sont préservés. Une seule entrée d'annulation par série de réglages.
Corrigé — thème sombre : éléments désactivés indiscernables
  • Entrées de menu (ex. « Dissocier » sans objet groupé) et champs désactivés s'affichaient comme actifs ; ils sont maintenant grisés.
Corrigé — couleur « Personnalisée… » du panneau de propriétés
  • Choisir une couleur personnalisée effaçait la couleur de l'objet, et la couleur choisie n'était jamais appliquée.
Corrigé — décompte des tokens fiable (abonnements API SlydeForge)
  • Retour utilisateur : « tout mon système économique tourne autour de ça, il faut être précis pour éviter des remarques qui pourraient reprocher un système non fiable ou approximatif ».
  • Serveur — consommations perdues : le grand-livre du quota est un seul document pour tous les abonnés ; deux appels IA simultanés (même d'abonnés différents) le réécrivaient chacun et le second effaçait l'incrément du premier. Mesuré : 8 appels concurrents × 25 → 36 % seulement de la consommation enregistrée. Écriture désormais sous verrou exclusif (fichier ou MySQL) : 100 %.
  • Serveur — appel facturé, jamais décompté : le script pouvait s'arrêter entre la réponse d'OpenAI et l'inscription au grand-livre (limite PHP de 120 s pour jusqu'à 2 × 120 s d'appel) ; une réponse sans usage était décomptée 0. Désormais inscription garantie, et estimation marquée comme telle en l'absence d'usage.
  • Le montant affiché EST le montant décompté : le serveur renvoie billing.charged (tokens ajoutés au quota pour cet appel) et l'app affiche ce chiffre, sans « ≈ ».
  • App — appel abandonné mais facturé : l'app attendait 60 s alors que le serveur peut mener l'appel à terme bien après ; délai porté à 260 s.
  • App — compteur unique (ai/usage.py) : chaque appel IA abouti enregistre le décompte réel du fournisseur (tokens de raisonnement et images compris ; Gemini usageMetadata ; flux SSE via stream_options.include_usage, avec repli mémorisé pour les serveurs qui le refusent). L'ancien compteur (caractères ÷ 4, seulement pour les appels relayés à la main) ignorait le raisonnement, les images, et des fonctions entières (notes, animations, analyse de charte, correcteur, workflows…). Estimation calibrée par modèle seulement en repli, affichée « ≈ ».
  • Action annulée : le coût reste affiché — retour utilisateur : « il faut les conserver pour que l'utilisateur se rende compte que ce n'est pas gratuit ». Le message d'arrêt indique « Interrompu par l'utilisateur après 12,3 s · 3500 tokens déjà consommés. » (enregistré dans l'historique du projet) ; l'adaptation de format note son coût dans l'assistant, qu'elle aboutisse, échoue ou soit annulée.
  • Tout appel est attribué à l'action en cours, y compris dans les traitements parallèles ; un appel arrêté par Stop en plein flux est compté ; un serveur qui répond un JSON au lieu d'un flux n'est plus rappelé (double consommation). Génération d'images : images et tokens comptés à la génération, même si l'image ne peut pas être affichée ensuite.
Corrigé — mode réflexion autorisé : plus aucun deck avec un modèle local
  • Retour utilisateur : même brief avec gemma4:26b (Ollama, fenêtre 16 384 tokens), réflexion autorisée → « Plan de présentation impossible : réponse coupée » puis « le modèle a passé tout son temps à réfléchir », aucun résultat ; une autre fois, deck « que du texte ». Cause commune : la réflexion se prend dans la même fenêtre que la réponse ; avec ≈ 9 000 tokens de prompt, elle consommait toute la place restante (JSON coupé → slides de secours à puces, ou rien).
  • Une étape dont la réflexion ne laisse plus de place pour répondre (réponse absente ou coupée) est maintenant refaite sans réflexion au lieu d'échouer ; le bilan indique combien d'étapes l'ont été et comment l'éviter (contexte serveur 32 768+).
  • Fenêtre du modèle connue : une place est réservée à la réflexion (documents lus en conséquence, signalé dans le bilan) et le budget de tokens ne dépasse plus jamais la fenêtre.
Corrigé — export PPTX : lignes de tableau blanches, texte illisible
  • Deck UAT (charte SlydeForge sombre, claude-sonnet-5) : dans PowerPoint, une ligne sur deux du tableau apparaissait sur fond clair sous un texte clair, alors que l'aperçu était correct. Les cellules sans fond explicite recevaient le fond du style de tableau intégré de PowerPoint ; elles sont maintenant exportées sans remplissage, comme à l'écran.
Amélioré — rendu moins dépendant du modèle IA (modèles locaux type gemma4)

- Retour utilisateur : même brief (recette utilisateur), « le résultat est clairement meilleur avec sonnet 5 […] possibilités d'amélioration pour être moins dépendant du LLM sur la qualité du rendu ».
- Slides de charte vides : gemma4:26b avait rédigé un bon contenu sous ses propres clés (« title », « key_metrics », « sections »…) en laissant les emplacements vides → 4 slides sur 7 livrées vides (décor seul), sans aucune alerte. Désormais (generate/engine/salvage.py) : une slide de charte mal remplie est relancée seule (1 petit appel par slide, en parallèle, avec le squelette des emplacements et le contenu déjà rédigé) ; si la relance échoue, le contenu est placé dans la mise en page générique équivalente (chiffres clés, cartes, deux colonnes, couverture) — jamais une slide vide. Le bilan le signale. Mesuré sur le deck gemma : 4 slides remplies dans leur modèle de charte, +12 s. Aucun appel supplémentaire quand les emplacements sont bien remplis (cas GHE / claude-sonnet-5).
- Sortie structurée : pour le backend « API compatible OpenAI » (Ollama, LM Studio…), la relance impose le format de réponse (schéma JSON : clés t1…tN exactes) ; un serveur qui refuse le paramètre est rappelé sans. Autres backends inchangés.
- Listes affichées avec crochets : ["47 items golden", "48% du périmètre"] s'affichait tel quel dans des slides claude-sonnet-5 ; une liste encodée dans une chaîne est maintenant décodée (lignes séparées, cellules de tableau jointes par « · »).
- Trop de slides à puces : au-delà du tiers prévu par le plan, une liste dont chaque puce est « Libellé : explication » devient des cartes. Un deck qui respecte déjà la règle n'est pas modifié.
- Consigne de rédaction précisée : pour un modèle de charte, contenu sous "slots" avec exactement les clés t1, t2…
- Serveur « compatible OpenAI » (modèles locaux) — retour utilisateur après un 2e essai : « c'est encore loin de l'objectif qualitatif donné ». gemma4 remplissait t1…t5 à la suite (5 emplacements sur 33, sans lire leur rôle) et rédigeait les cartes en card_1_title… Désormais, avec ce backend, chaque slide de charte est rédigée DIRECTEMENT à part (squelette des emplacements + schéma JSON imposé + brief et sources), en parallèle des autres slides ; les relances, elles aussi, disposent des sources. Mesuré sur le brief UAT : 6 slides en 29 s (contre 32 s avant, 44 s avec claude-sonnet-5), chiffres clés, tableau manuel/ETL et plan d'action remplis avec les données réelles. Autres backends inchangés.
- Fenêtre de contexte du modèle prise en compte (ai/model_profile.py) — retour utilisateur : « la consommation de token est vraiment importante […] le rendu est vraiment moche […] faut-il revoir le paramétrage ? ». Cause mesurée : Ollama chargeait gemma4 avec 16 384 tokens de contexte ; le prompt avec 3 fichiers joints en pesait 14 991 RÉELS (estimé 9 000) → réponses coupées après 3 s, relances inutiles (d'où les tokens), slides minimales ; au-delà, Ollama tronque le début du prompt sans prévenir. Désormais SlydeForge lit la fenêtre auprès du serveur (Ollama) ou la déduit d'une réponse coupée, apprend le vrai ratio caractères/token de chaque modèle, et dimensionne sources, lots et max_tokens pour que tout tienne ; le bilan dit quelle part des documents a pu être lue et quoi régler. « Tester la connexion » signale une fenêtre < 24 576 tokens et explique pas à pas comment la passer à 32 768 (application Ollama, serveur Linux, variable d'environnement). Backends cloud : inchangés.
- Diagnostic du modèle adapté à CHAQUE utilisateur (« Tester la connexion ») — retour utilisateur : « il faut que ça s'adapte à l'utilisateur et ne pas se fier qu'à mon contexte car ça va être utilisé par d'autres personnes ». Aucun matériel ni modèle supposé :
- consignes selon la configuration réelle : serveur sur ce PC ou sur une autre machine (adresse citée, « nvidia-smi » / « ollama ps » à lancer sur le serveur au lieu du Gestionnaire des tâches), Windows / Mac / Linux / Docker pour agrandir la fenêtre de contexte, commande d'installation à lancer au bon endroit ;
- chaque test est mémorisé par serveur et modèle : nouvelle colonne « Testé chez vous » (vitesse, contexte, échec, format, réflexion non coupable) dans le tableau des modèles installés ;
- mémoire graphique du serveur ESTIMÉE à partir de ce qu'il a chargé (modèle entièrement en carte → au moins sa taille ; en partie → au plus la part chargée ; modèle testé très rapide → il est en carte), affinée à chaque test : colonne « Mémoire » (✔ / ⚠ trop gros / ?) ;
- « À essayer en priorité chez vous » : 1 ou 2 modèles installés, uniquement sur des éléments OBSERVÉS chez l'utilisateur (jamais sur la seule taille) ; sinon « testez-en d'autres pour comparer » ;
- question pour une IA adaptée (serveur distant, bornes de mémoire connues, résultats de tests des modèles installés).
- Trace de l'assistant : chaque génération commence par « Modèle IA : API compatible OpenAI · gemma4:26b · contexte 16 384 tokens » — utile pour comprendre des logs transmis.
- Structure imposée à TOUTES les slides (serveur « compatible OpenAI ») — retour utilisateur (test 5) : « encore des problèmes de mise en forme […] un tableau se préparer et disparaître ; un tableau aurait vraiment été mieux qu'une liste à puces ». gemma4 avait écrit la comparaison en comparison_label_1…, les étapes en step_title/step_description (panneaux et étapes vides) et un tableau aux cellules VIDES (remplacé ensuite par des puces). Désormais chaque lot de rédaction reçoit un schéma JSON (une entrée par slide, dans l'ordre, champs exacts de son archétype, textes principaux non vides) ; mesuré sur 9 générations gemma : aucune slide vide, 17 à 26 s. Une slide générique restée vide est redemandée une fois (tableau rempli avec les vraies données) avant tout repli. Sans schéma (autres backends), les clés préfixées (step_title) et les comparaisons indexées sont aussi reconnues.
- Consigne du plan : une liste d'éléments décrits par les mêmes attributs (référence, sujet, responsable, constat, note…) → tableau, jamais des puces.
- Réponse coupée d'un lot de slides (retour utilisateur, gemma4 : « je vois apparaître un tableau et après il disparaît et le design est devenu tout moche », bilan « JSON incomplet ») : la réponse d'un lot de 4 slides dépassait le budget de tokens ; tout le lot était jeté (y compris les slides déjà reçues complètes) et le 2e essai, identique, était coupé à son tour → versions minimales. Désormais les slides reçues complètes sont gardées, seules les manquantes sont redemandées (nouvel appel, plus de marge par slide) ; budget initial un peu relevé (plafond seulement : aucun coût quand le modèle s'arrête avant).
- Tableau à en-tête vide (retour utilisateur, charte SlydeForge, gemma4) : en-têtes rangés sous "headers" (ou "colonnes"…), lignes sous "data" ou en objets {colonne: valeur} → ramenés au format attendu ; sans en-tête fourni, une 1re ligne sans chiffre sert d'en-tête. La 1re colonne n'est plus tronquée (« W-0174 » → « W-017451 »).
- Relance d'une slide de charte peu remplie qui confirme le même choix de contenu : la charte est gardée (jamais de bascule vers une mise en page générique pour un modèle légitimement peu rempli).
- Remplissage « en séquence » (seuls t1…tk renseignés) détecté et repris ; listes aplaties (card_1_title, kpi1_value…) ou rangées sous une autre clé (items, sections, metrics…) reconstruites ; une slide générique réduite à son titre est rebâtie avec ce que le modèle a écrit.