
Vous avez un logo en SVG, propre et figé. Iridis le prend, promène des couleurs le long de son tracé, le fait respirer, tourner, s’illuminer, et vous rend une image animée prête à poser dans une page, ou le code qui l’anime. Sans écrire une ligne.
Un logo immobile dit qui vous êtes. Un logo qui bouge se regarde. Entre les deux, il y a d’habitude un logiciel d’animation professionnel, une courbe de temps par propriété, et une demi-journée de travail pour trois secondes de mouvement.
Iridis prend le problème par l’autre bout. Vous chargez votre dessin, vous ouvrez des blocs de réglages, vous poussez des curseurs, et l’aperçu bouge pendant que vous réglez. Ce que vous voyez dans la fenêtre est exactement ce qui sortira du logiciel.
Il n’y a pas d’images clés à poser, pas de courbes à lisser, pas de calques à décaler d’une image. Vous décrivez un comportement, le logiciel le joue en boucle, et vous ajustez jusqu’à ce que cela vous plaise. Un double-clic sur n’importe quel curseur le ramène à sa valeur de départ, ce qui vous autorise à tout essayer sans rien perdre.
Une scène se compose de calques empilés, comme dans un logiciel de retouche. Chaque calque porte son dessin, ses couleurs, ses mouvements et sa propre horloge. Vous les réorganisez à la souris, vous les rangez dans des dossiers, et vous éteignez d’un clic ceux que vous voulez mettre de côté le temps d’un essai.

Des couleurs qui courent le long du tracé
Le cœur d’Iridis tient en une idée : un dégradé se déplace le long d’un chemin que vous dessinez sur votre logo, et les formes prennent la couleur qui passe sur elles.
Vous choisissez une palette, vous réglez le nombre de bandes, la vitesse, le sens, et vous posez à la souris les points du chemin que les couleurs vont suivre. Le dégradé peut aussi s’accrocher aux formes plutôt qu’au dessin entier : chaque forme prend alors sa propre couleur, et le logo se met à scintiller par morceaux.
Les effets changent la façon dont les couleurs circulent : elles défilent, elles tournent, elles pulsent, elles se mélangent. Un second effet peut se superposer au premier.

Chaque forme peut vivre sa propre animation
C’est la fonction qui change tout sur un logo un peu riche. Iridis détecte les formes de votre SVG, vous les groupez comme vous voulez, et chaque groupe devient un calque à part entière, rangé dans un dossier.
À partir de là, un rond peut tourner pendant qu’un autre disparaît, une lettre peut changer de couleur pendant que le reste respire. Si votre dessin compte dix formes, vous disposez de dix animations indépendantes dans la même scène, chacune avec ses propres réglages.
Un sélecteur en haut du panneau choisit sur quel groupe vos réglages s’appliquent, et vous pouvez en cocher plusieurs d’un coup pour les régler ensemble. Une case affiche un cerne en pointillés qui tourne autour de la forme choisie, pour ne jamais vous tromper de cible.

Du mouvement, de la lumière et du relief
Au-dessus des couleurs viennent les blocs qui donnent de la présence.
Les mouvements directionnels font tourner le calque en continu, le balancent de gauche à droite, le font respirer, trembler, ou décrire une orbite. Chaque forme peut aussi bouger pour elle-même, avec ses miroirs et ses échos, ces copies en retard qui laissent une traînée derrière le mouvement.
Le bloc Lumière couvre une longue liste d’effets : le néon qui palpite, le stroboscope, le filament qui tremble, les étincelles qui tournent en couronne, les lucioles qui dérivent en clignotant, le bokeh et ses taches molles, le ciel étoilé, le pulsar dont les anneaux s’élargissent en s’effaçant. S’y ajoutent un contour lumineux, une lueur diffuse, et un biseau en relief avec sa face claire, sa face sombre, son angle et son élévation, comme dans un logiciel de retouche.
L’ombre portée et le halo complètent le tableau, et la retouche colorimétrique reprend l’exposition, la luminosité, le contraste et l’éclat de l’ensemble.
Enfin, les modes de fusion de la retouche d’image sont disponibles partout où une couleur se pose, et sur le calque entier : votre dessin peut se mélanger à ce qui se trouve derrière lui en Produit, en Superposition, en Lumière douce et dans une douzaine d’autres modes.

De la matière qui tombe et s’empile
Iridis sait aussi remplir un contenant de matière simulée. Des grains, des billes, des flocons ou des fragments tombent, rebondissent, s’empilent, glissent sur une pente et se tassent dans le fond. Vous réglez la gravité, la friction, le rebond, la viscosité, le vent, la turbulence, et la matière se comporte en conséquence.
Elle peut tomber dans un contenant que vous choisissez, se poser sur votre dessin, le contourner, ou le remplir. Des figures vivantes complètent la famille : des engrenages qui tournent, un tournesol dont les graines s’ordonnent, un électrocardiogramme, un brasier, des filaments qui ondulent sous le vent.

Le temps, calque par calque
Chaque calque possède sa propre horloge. Vous lui donnez un délai avant d’entrer, une durée, une pause, un nombre de passages, un fondu d’entrée et un fondu de sortie, et vous décidez s’il est absent ou figé avant son entrée et après sa sortie.
Sous les blocs, une piste de temps montre ce calendrier en pavés que vous tirez à la souris : attraper le corps d’un pavé décale l’entrée, attraper son bord droit étire la durée. Un marqueur se déplace avec la lecture, et vous pouvez l’emmener où vous voulez pour inspecter un instant précis. Une vue d’ensemble rassemble toutes les pistes de la scène en colonnes, avec un aperçu vivant au-dessus.

Et si vous n’avez pas de dessin
Iridis ne sert pas qu’à animer un fichier que vous apportez. Le logiciel livre une bibliothèque d’indicateurs d’attente, ces petites figures qui tournent pendant qu’une page charge. Vous en choisissez un, vous l’animez comme n’importe quel calque, et vous le sortez en image animée ou en script. Vous pouvez aussi déposer vos propres dessins dans le dossier prévu pour les retrouver dans la même liste.
Pour poser une ambiance sur l’ensemble, un habillage calculé par la carte graphique ajoute un grain de pellicule, une aberration chromatique, une onde ou une lueur sur toute la scène. Si la carte ne sait pas le faire, le calque se pose simplement sans l’effet, et votre dessin reste visible.
Quatre sorties, selon où va votre logo
Votre animation ne reste pas prisonnière du logiciel.
- Image animée : APNG ou WebP, avec ou sans perte, aux dimensions et à la cadence que vous fixez. À poser dans une page ou dans un montage vidéo.
- Image fixe : PNG ou WebP, pour l’instant que vous avez choisi.
- Page web : un SVG monté dans la page et animé par un script autonome, en JavaScript natif ou pour un site qui charge déjà jQuery. Le script peut être allégé et compacté, et il n’embarque que les morceaux de moteur que votre scène emploie vraiment.
- Code pour une application .NET : un contrôle autonome à coller dans votre projet, accompagné d’une démonstration prête à compiler.
Les sorties en code portent en tête un avertissement qui cite ce que le format visé ne sait pas reproduire, et il ne cite que ce que votre scène emploie vraiment. Vous savez donc avant de coller si votre animation passera entière.

En pratique
| Point | Détail |
|---|---|
| Système | Windows, avec le cadre .NET 9 pour les applications de bureau |
| Entrées | SVG et SVGZ, PNG, JPEG, BMP, GIF, TIFF, plus les réglages au format JSON |
| Sorties | APNG, WebP animé ou fixe, PNG, page web en JavaScript, code .NET |
| Langues | Français et anglais livrés, et vous pouvez ajouter la vôtre à partir d’un modèle exporté par le logiciel |
| Vos données | Un seul dossier, « Documents\Iridis », à sauvegarder ou à emporter |
| Mises à jour | Le journal des versions est embarqué dans le logiciel, accessible par le bouton « Journal » |
| Affichage | Le logiciel suit la mise à l’échelle de Windows, et un zoom à cent pour cent montre la taille réelle au pixel près |
Trois détails qui comptent à l’usage. Vos réglages sont rattrapés par un filet : la dernière scène se recharge au lancement, même après une fermeture brutale. La bibliothèque de scènes garde vos compositions dans un fichier unique, facile à emporter. Et un dé en bas à droite tire une scène au hasard quand vous cherchez une idée de départ.
Pour commencer
Chargez un SVG, ouvrez le bloc « Animation du dégradé », choisissez une palette et posez trois points sur votre dessin. Vous avez une animation. Le reste, les groupes de formes, les lumières, le relief, la matière et le temps, s’ajoute quand vous en avez besoin.
La documentation complète, chapitre par chapitre, avec chaque réglage et ce qu’il fait, se trouve dans le wiki d’Iridis.
Télécharger
- LE SIGNALEMENT DE BOGUE ET LA SUGGESTION passent par la même entrée que le forum, avec leur cible : une seule porte sur le site, et le code du moment pour l'ouvrir.
- LE SIGNALEMENT DE BOGUE ET LE DÉPÔT DE SUGGESTION emportent eux aussi le code avis du moment : le site sait de quelle copie du logiciel vient le message.
- LES ADRESSES DU SITE deviennent des boutons, et celles qui en ont besoin emportent le code avis du moment : le dépôt d'avis et l'abonnement au forum s'ouvrent avec le code en cours, recalculé au clic. Pas de code périmé dans un lien resté ouvert.
- LE SIGNALEMENT DE BOGUE ET LA SUGGESTION passent par la même entrée que le forum, avec leur cible : une seule porte sur le site, et le code du moment pour l'ouvrir.
- LE SIGNALEMENT DE BOGUE ET LE DÉPÔT DE SUGGESTION emportent eux aussi le code avis du moment : le site sait de quelle copie du logiciel vient le message.
- LES ADRESSES DU SITE deviennent des boutons, et celles qui en ont besoin emportent le code avis du moment : le dépôt d'avis et l'abonnement au forum s'ouvrent avec le code en cours, recalculé au clic. Pas de code périmé dans un lien resté ouvert.
- LE CODE AVIS TOURNE : il change toutes les cinq minutes, et un cercle à côté de lui montre le temps qu'il lui reste — minutes et secondes au centre, anneau qui se vide. Le code s'affiche en grand dans un bouton : un clic, il est dans le presse-papiers.
- LES ADRESSES DU SITE sont là : laisser un avis, signaler un bug, déposer une suggestion, ouvrir la FAQ, le forum ou la page de téléchargement. Un clic, et la page s'ouvre dans le navigateur.
- LE CODE AVIS, dans la fenêtre du journal des versions : six caractères à recopier sur le site pour y déposer un avis. Le bouton « Copier », ou un clic sur la ligne, le met dans le presse-papiers.
- LE PULSAR ET LE CIEL ÉTOILÉ dans le code C# : les anneaux qui naissent au centre et s'élargissent en s'effaçant l'un après l'autre, et les étoiles fixes au double scintillement — un rythme lent, doublé d'un tremblement plus vif, comme l'air d'une nuit d'été.
- IL NE RESTE QUE LES EFFETS QUI SUIVENT UN CHEMIN — laser, guirlande, balayage —, ceux dont les éléments parcourent le contour même du dessin. Tout le reste de ce que règle l'atelier est reproduit par le code C#.
- LES TROIS SEMIS DE LUMIÈRE dans le code C# : les ÉTINCELLES qui tournent en couronne, chacune à sa vitesse et sur son rayon ; les LUCIOLES qui dérivent en clignotant — un scintillement bref et vif ; le BOKEH et ses larges taches molles qui flottent lentement. Chacun a son pinceau : la luciole est chaude, le bokeh est fondu, l'étincelle est vive.
- LE MÊME SEMIS QU'À L'ATELIER, littéralement : ces effets tirent leurs positions d'une suite de nombres, et la formule employée ici différait d'une constante — les grains seraient tombés ailleurs, et l'illumination aléatoire aurait clignoté autrement. La suite est désormais la même dans les trois rendus, et un contrôle veille à ce qu'elle le reste.
- Il ne reste au code C# que les effets de lumière À TRAJET — balayage, sillage, laser, guirlande, ciel étoilé, pulsar —, ceux dont les éléments suivent un chemin plutôt qu'un semis.
- LES MIROIRS ET LES ÉCHOS PAR FORME dans le code C# : les copies réfléchies autour du milieu du dessin, et la traînée du mouvement — des copies en retard de phase, de plus en plus pâles. Elles suivent leurs modèles en couleur comme en mouvement.
- L'EFFET VOYAGE, qui fait passer l'animation de groupe en groupe, et LA FUSION DU REFLET du biseau, par le même nuanceur que les modes de calque.
- IL NE RESTE QU'UN SEUL MANQUE au code C#, et l'avertissement de l'export ne cite plus que lui : les effets de lumière À ÉLÉMENTS — étincelles, lucioles, bokeh, pulsar, balayage, sillage. Tout le reste de ce que règle l'atelier est désormais reproduit.
- LES MODES DE FUSION ARRIVENT À L'ATELIER ET DANS LE CODE C#, par un nuanceur graphique. On les croyait hors de portée : WPF ne mélange pas un calque avec ce qui est derrière lui, un pixel ne connaît que le sien. La réponse tenait en une ligne de conduite — donner au nuanceur les DEUX images, le calque et son fond, et lui laisser composer. Les seize modes de Photoshop sont écrits en HLSL, avec la déprémultiplication qu'exige WPF et les quatre modes non séparables (teinte, saturation, couleur, luminosité) au complet.
- LE NUANCEUR VOYAGE AVEC LE CODE PRODUIT : sa source est embarquée dans le fichier livré, qui reste autonome et le compile au premier emploi. Sans carte compatible ou sans la bibliothèque de compilation, le calque se pose en Normal — visible, toujours : mieux vaut un mode manquant qu'un dessin disparu.
- Il ne reste plus, dans le code C#, que les effets de lumière À ÉLÉMENTS, les miroirs et échos par forme, la portée du voyage, et la fusion du reflet du biseau.
- LE BISEAU 3D DANS LE CODE C#, avec la même approximation qu'à l'atelier : deux liserés taillés dans la géométrie de chaque forme, un clair du côté d'où vient la lumière, un sombre à l'opposé, adoucis au flou. La page exportée reste plus riche — elle porte un vrai éclairage de surface, que WPF ne sait pas faire — et c'est dit dans les aides depuis le début.
- LE CONTOUR LUMINEUX et L'OMBRE PAR GROUPE suivent : le liseré de lumière se pose sur le tracé des formes, et l'ombre, quand une portée est posée, s'applique forme par forme au lieu du dessin entier.
- IL NE RESTE QUE TROIS MANQUES, et l'avertissement de l'export ne cite plus qu'eux : les effets de lumière À ÉLÉMENTS (étincelles, lucioles, bokeh, pulsar, balayage, sillage), les miroirs et échos par forme, et les modes de fusion. Ces derniers sont une LIMITE DURE : mélanger deux couches demande un nuanceur graphique que WPF n'expose pas — ils se posent donc en Normal, exactement comme dans l'atelier.
- LES MOUVEMENTS PAR FORME DANS LE CODE C# : les dix façons dont une forme peut bouger sur place — respirer, orbiter, s'éloigner du cœur, tourner, basculer, onduler, battre, s'étirer en goutte, fusionner — et le MÉLANGE, où chaque forme tire la sienne. Le brassage est celui de l'atelier, si bien qu'une forme donnée reçoit le même effet dans les trois rendus. La portée du bloc Placement décide qui bouge.
- LA LUMIÈRE QUI MODULE L'ÉCLAT, portée elle aussi : le NÉON qui s'amorce en vacillant avant de tenir, le STROBOSCOPE et ses huit éclairs par tour, le FILAMENT qui chauffe et refroidit — plus le GLOW, ce rayonnement que WPF sait rendre nativement. L'éclat se multiplie aux fondus du bloc Temps au lieu de les écraser.
- Restent au seul export web les effets de lumière À ÉLÉMENTS — étincelles, lucioles, bokeh, pulsar, balayage, sillage —, les miroirs et échos par forme, le biseau et les modes de fusion. L'avertissement de l'export ne cite plus que ceux-là.
- LE RENDU PAR FORME ARRIVE DANS LE CODE C#. Jusqu'ici, ce gabarit ne peignait forme par forme que les figures vivantes : un dessin vectoriel accroché sortait avec ses couleurs figées, et tout ce qui en découle manquait. Désormais chaque tracé prend SA couleur dans le cycle à chaque image, comme à l'atelier.
- ET AVEC LUI, TROIS FAMILLES DE RÉGLAGES : l'ILLUMINATION par formes — chenillard, aléatoire, vague, fondu enchaîné —, l'illumination PAR GROUPES où chaque groupe brille d'un bloc, et les PORTÉES du dégradé et de la lumière, qui décident quelles formes reçoivent quoi. Les formules sont celles de l'atelier, trait pour trait : les trois rendus doivent montrer la même chose.
- LE CODE C# PRODUIT NE COMPILAIT PLUS — et personne ne pouvait le savoir. Le modèle du gabarit est une ressource embarquée : le programme ne le compile jamais, aucun contrôle ne s'en occupait, et deux appels au journal interne de l'atelier partaient dans le fichier livré, où cette classe n'existe pas. Le fichier était donc cassé à l'arrivée. Ces appels deviennent une trace de mise au point, et surtout UNE ÉPREUVE COMPILE DÉSORMAIS LE CODE PRODUIT à chaque livraison : modèle, effets, spinners, retouche et palettes assemblés comme à l'export, passés au compilateur. C'est le filet qui manquait pour combler le retard du gabarit sans avancer à l'aveugle.
- LE BLOC TEMPS EST PORTÉ AU GABARIT C# : chaque calque y entre à son heure, joue sa durée, se repose, recommence, et se fond à l'entrée comme à la sortie. Ses couleurs, sa rotation et ses mouvements suivent son horloge propre — un calque qui entre à deux secondes commence son animation au début, il ne la reprend pas en cours de route. Premier trou comblé sur les six.
- LA MATIÈRE AUSSI EST À JOUR : l'audit s'est étendu aux quatre-vingt-trois réglages des calques vivants, qui se lisent autrement que ceux d'un calque ordinaire. Un seul partait sans lecteur — le recouvrement de la jointure du guide de couleurs, dont la géométrie est de toute façon exportée déjà tracée. Il ne voyage plus.
- LE CODE C# DIT CE QU'IL NE SAIT PAS FAIRE. Ce gabarit reproduit le dégradé animé, les mouvements du calque, l'ombre, le halo et le placement — mais pas les effets de lumière, l'illumination et les mouvements par forme, le biseau, les modes de fusion, le bloc Temps ni les portées par groupes. C'était su, toléré, et tu. Désormais l'atelier prévient AVANT d'écrire, en ne citant que ce que la scène emploie vraiment, et le fichier produit porte l'avertissement en tête. Celui qui l'ouvre sait tout de suite ce qui manque, au lieu de chercher pourquoi le rendu ne ressemble pas.
- AUDIT DU MOTEUR JAVASCRIPT. Les vingt-six réglages ajoutés depuis la 4.109 — illumination par groupes, biseau 3D et ses neuf commandes, modes de fusion, bloc Temps, portées par groupes, mesures de mouvement et de pivot — font tous le trajet complet : le calque les porte, le figement les emporte, la fiche les écrit, le moteur les lit. Aucun n'est muet à l'export. Les réglages retirés, eux, ne partent plus : l'anneau serpentin a bien quitté la fiche.
- DEUX RESTES DE RÈGLES CHANGÉES EN COURS DE ROUTE, corrigés. Le SILLAGE s'embarquait dans chaque page dès que le calque tournait, alors que depuis la 4.119 il ne s'affiche que sous son effet de lumière : sa section partait pour rien. Et une fonction de la matière, sans aucun appel, voyageait dans toutes les pages produites.
- UN CONTRÔLE PERMANENT plutôt qu'une vérification isolée : le trajet des vingt-six réglages est refait à chaque livraison, et l'élagage doit suivre la règle d'affichage. C'est ce qui empêchera qu'un réglage ajouté demain reste muet dans la page.
- LE SÉLECTEUR DE GROUPE DIT ENFIN CE QU'IL RÈGLE : son champ restait vide alors qu'un groupe était bien coché — une liste éditable remet son texte au gré de WPF, à l'ouverture comme à la fermeture du menu. Le résumé est désormais réécrit après chaque passage : le groupe réglé, le nombre de groupes réglés ensemble, ou « Tous les groupes ».
- « CE QUI BOUGE » REPARAÎT DANS UN DOSSIER : c'est justement là qu'on veut faire voyager l'effet de groupe en groupe. Tant que le calque n'a pas de groupes à lui, la commande reste visible mais inactive, et son survol dit ce qu'il manque — plutôt que de disparaître sans explication.
- LE DERNIER DÉCALAGE D'ORBITE, SUPPRIMÉ. La page déduisait le centre de rotation de la TAILLE du calque — la moitié de sa largeur — en supposant que le dessin occupe exactement son cadre, depuis son origine. Quand ce n'est pas le cas, et c'est fréquent, le calque tournait autour d'un point voisin du bon : au lieu de pivoter sur place, il décrivait un petit cercle. Le point de rotation est désormais MESURÉ à l'atelier — le vrai point autour duquel le calque tourne — et voyage avec la scène ; la pose, la respiration et le sillage tournent tous autour de lui. Vérifié au navigateur : le dessin reste au centre au pixel près pendant tout un tour, là où il dérivait d'une trentaine de points.
- L'« ORBITE » DE L'EXPORT, ENFIN COMPRISE ET SUPPRIMÉE. La TAILLE du calque partait convertie à l'échelle de la scène — alors que la page s'en sert comme CENTRE DE ROTATION, dans le repère du dessin, où cette conversion n'a pas lieu d'être. Le calque tournait donc autour d'un point qui n'était pas son centre : il décrivait un grand cercle et sortait du cadre, exactement comme une orbite qu'on n'avait pas demandée. La taille reste désormais celle du dessin, et le calque tourne sur lui-même comme à l'atelier. Un contrôle interdit qu'on la reconvertisse un jour par mégarde.
- LA ZONE DE TRAVAIL A LES COINS ARRONDIS, comme le cadre qui la porte.
- LE ZOOM DIT ENFIN LA VÉRITÉ. Il affichait le facteur de la loupe — cent pour cent en permanence — alors que la zone de travail rétrécit dès que la fenêtre manque de place : on ne savait plus à quelle taille on regardait son dessin. Le compte tient désormais compte de la place disponible ET de la mise à l'échelle de Windows : cent pour cent veut dire un pixel de la scène pour un pixel de l'écran, et le bouton de reprise y ramène exactement.
- LE MARQUEUR DE LA TIMELINE NE DÉRIVE PLUS : la piste se redessinait à chaque réglage, recalculait sa fenêtre et faisait sauter le marqueur au moindre clic. Elle ne se refait maintenant que si son programme a vraiment changé, et le marqueur ne bouge que si l'instant bouge.
- « CE QUI BOUGE » PARAÎT ET DISPARAÎT AVEC LES GROUPES, au lieu d'être décidé une fois pour toutes à l'ouverture du panneau.
- LE DÉ REMIS À JOUR — audit fait. Il activait encore l'ANNEAU SERPENTIN, retiré du panneau depuis longtemps : d'où cet anneau vert qui surgissait sans qu'aucun réglage visible permette de l'éteindre. Il ignorait à l'inverse tout ce qui a été ajouté depuis : le BISEAU 3D et sa fusion, le glow, le contour lumineux, le mode de fusion du calque, l'entrée retardée et le fondu du bloc Temps. Le tirage les couvre désormais, avec mesure — un relief franc mais pas systématique, une fusion normale la plupart du temps, une entrée décalée de loin en loin. Un contrôle interdit dorénavant au dé de tirer un réglage dont le bloc a été retiré.
- LE DESSIN EXPORTÉ QUI PARTAIT DE TRAVERS, RÉPARÉ. La pose du calque était relevée à l'INSTANT du figement — donc avec la rotation et la respiration de cet instant-là — et la page rejouait ces mêmes mouvements par-dessus : le dessin se retrouvait tourné, agrandi, et tournant autour d'un centre qui n'était plus le sien. La pose se prend désormais AU REPOS, mouvement, rotation et respiration neutralisés : la page rejoue seule ce qu'elle doit rejouer.
- UN DESSIN IMPORTÉ S'AFFICHE EN ENTIER : sa taille de départ est celle qui le fait tenir tout juste dans la zone de travail, hauteur comprise. La largeur fixe d'avant coupait les dessins hauts et gâchait de la place sur les dessins larges.
- LES CURSEURS OBÉISSENT AU DOUBLE-CLIC : un double-clic sur la glissière rend la valeur par défaut, et le pouce S'ACCROCHE au repère quand il passe à côté — assez près pour aider, assez lâche pour ne jamais empêcher de régler juste à côté.
- LA TIMELINE DIT ENFIN L'HEURE : elle affichait l'âge de la session — deux cents secondes et plus — au lieu de l'instant dans le tour qu'elle montre.
- « CE QUI BOUGE » NE PARAÎT QU'AVEC DES GROUPES : ce réglage fait voyager l'effet de groupe en groupe, il n'a rien à dire sur un dessin qui n'en a pas.
- LES PORTES DU NOUVEAU CALQUE RESPIRENT : un vrai intervalle les sépare, en largeur comme en hauteur.
- L'APERÇU RESPIRE : trois marges empilées — celle de la coque, celle de la grille et celle du cadre — mangeaient près de quarante points sur chaque bord. Elles sont ramenées au strict nécessaire, et la place gagnée revient au dessin, qui s'affiche d'autant plus grand puisque sa taille suit celle de la zone de travail.
- RÉGLER PLUSIEURS GROUPES ENSEMBLE : le sélecteur du dossier devient MULTIPLE — ses lignes sont des cases à cocher, et une ligne « Tous les groupes » les prend d'un coup. Le panneau montré est celui du premier groupe coché, et TOUT ce qu'on y règle se répercute aussitôt sur ses compagnons : palette, effet, rotation, ombre, lumière, biseau, temps, jeux par forme. La recopie parcourt les réglages enregistrés du calque, si bien qu'un réglage ajouté demain suivra sans qu'on y pense. Le sélecteur porte désormais une teinte franche pour se distinguer du reste du panneau.
- CERNER LA FORME CHOISIE : une case à cocher entoure dans la scène les formes du ou des groupes réglés — un pointillé vert qui suit leur CONTOUR EXACT et tourne autour, comme la sélection d'un logiciel de dessin. Sur « Tous les groupes », rien n'est cerné : entourer le dessin entier n'apprendrait rien.
- UN MASQUE ILLISIBLE N'EFFACE PLUS LE DESSIN. La page vérifie désormais que la découpe des zones animées est bien un tracé — un chemin commence par un déplacement — et l'ignore sinon. C'est la ceinture qui manquait sous la correction précédente : un clip au chemin illisible est un clip VIDE, il masque le calque entier, formes comprises. Mieux vaut un dégradé qui déborde qu'un dessin absent, et le scénario « masque illisible » le vérifie à chaque livraison.
- LA PAGE EXPORTÉE INVISIBLE, RÉPARÉE À LA RACINE. Le masque des zones animées partait dans le fichier sous la forme « System.Windows.Media.GeometryGroup » au lieu d'un tracé : seul un chemin sait s'écrire dans la syntaxe des tracés, les géométries composées rendent leur nom de type. Ce texte servant de DÉCOUPE, le navigateur masquait tout le calque — les formes étaient bien là, bien placées, découpées à néant. Toutes les géométries sont désormais aplaties en chemin avant d'être écrites, et un contrôle interdit qu'une seule reparte sans l'être.
- L'ARBORESCENCE À L'ENDROIT : le titre d'un dossier s'affichait SOUS ses calques, la pile se lisant du haut vers le fond. Il coiffe maintenant ses groupes, comme il se doit.
- LE DESSIN SUIT LA ZONE DE TRAVAIL : quand l'aperçu rétrécit faute de place, le dessin rétrécit avec lui. Sa taille est retenue en unités de SCÈNE, et sa taille à l'écran s'en déduit — la proportion du dessin dans la scène reste donc juste, quelle que soit la taille de la fenêtre.
- L'EXPORT D'IMAGES ANIMÉES SE CALE SUR LA SCÈNE : quand l'onglet Scène pose une durée d'animation, la fenêtre d'export s'ouvre déjà dessus, et « Durée qui ne saute pas » la reprend — le fichier se replie donc au même instant que l'atelier et que la page exportée. Sans durée de scène, le calcul d'avant reprend la main : la plus petite durée contenant un nombre entier de tours de chaque animation.
- LA DURÉE DE L'ANIMATION, dans l'onglet Scène : la fin commune sur laquelle tout se referme et repart, ensemble. C'est la référence des entrées — « ce groupe entre à une seconde, celui-là à deux, et tout recommence à douze » — et les pistes de temps se règlent alors sur cette durée, ce qui rend les entrées comparables d'une piste à l'autre d'un simple coup d'oeil.
- Laissée vide, le temps coule sans fin et chaque calque mène sa propre boucle : c'est le réglage d'origine, rien ne change pour les scènes existantes. La durée voyage avec la scène enregistrée et dans la page exportée, où le tour se referme au même instant qu'à l'atelier.
- LA PISTE SE RÈGLE À LA SOURIS : on attrape le pavé du premier passage et on le fait glisser pour décaler l'ENTRÉE du calque ; on attrape son bord droit — le curseur change de forme — et on étire sa DURÉE. Les repos et les passages suivants se replacent d'eux-mêmes, puisqu'ils en découlent. Les valeurs s'arrêtent au dixième de seconde : un réglage lisible vaut mieux qu'un réglage exact au millième.
- Les curseurs du bloc Temps montrent aussitôt la même chose, et l'inverse est vrai : la piste et les curseurs sont deux façons de régler UNE seule horloge. Le marqueur, lui, garde son geste — attraper le fond de la piste emmène la scène, attraper un pavé le déplace.
- LA VUE D'ENSEMBLE DES TEMPS, par le bouton à droite de la piste : toutes les pistes de la scène dans une même fenêtre, avec l'APERÇU VIVANT au-dessus. Un dossier de groupes séparés occupe sa colonne, ses pistes empilées dessous ; les calques ordinaires se rangent dans la leur. C'est là qu'on règle le ballet — ce groupe entre à une seconde, celui-là à deux — parce qu'on les voit tous en même temps. L'aperçu est un miroir de la scène, pas une seconde animation : rien n'est calculé deux fois.
- LE SURVOL DIT CE QUI JOUE : passer la souris sur un passage annonce ses secondes ET les effets actifs du calque — dégradé animé, rotation, orbite, illumination par groupes, biseau, halo, ombre, fondus… On sait ce qu'on va voir sans parcourir les blocs un à un.
- LA PISTE DE TEMPS, en bas du panneau du calque : sa vie en une ligne. On y lit son attente avant l'entrée, ses passages, ses repos, chacun survolable pour connaître ses secondes exactes — et une graduation donne l'échelle. Le bouton de lecture de l'aperçu y est répété, à portée de main.
- LE MARQUEUR EMMÈNE LA SCÈNE : on l'attrape et on le fait glisser, toute l'animation se transporte à la seconde qu'on désigne. À l'arrêt aussi — les calques en pause repeignent leur image pour suivre, ce qui permet d'inspecter une animation image par image sans la lancer.
- La piste MONTRE les réglages du bloc Temps sans rien décider : changer une entrée, une durée ou une pause la redessine aussitôt. Un calque sans fin s'affiche comme tel, un calque à trois passages montre ses trois passages et ses repos.
- CHAQUE CALQUE A SON HORLOGE — le nouveau bloc TEMPS. Un calque entre en scène à l'heure qu'on lui donne, joue le temps qu'on veut, se repose, et recommence autant de fois qu'on lui demande : Entrée à, Durée du passage, Pause, Passages, Fondu d'entrée, Fondu de sortie, et ce qu'il fait avant son entrée et après son dernier passage — absent, ou figé sur son image. C'est ce qui permet de lancer un groupe de formes à une seconde et le suivant à deux, chacun avec ses propres effets.
- Sans réglage — entrée à zéro, durée à zéro — rien ne change : c'est l'horloge de la scène telle quelle, le comportement de toujours. Les fondus se MULTIPLIENT à l'opacité du bloc animation au lieu de l'écraser, et tout est respecté à l'identique dans la page exportée comme dans les images animées, où chaque calque a bien son temps à lui.
- C'est la fondation de la TIMELINE : les réglages de temps existent désormais et voyagent partout ; la piste visuelle, son marqueur et la vue d'ensemble de tous les calques viendront s'appuyer dessus.
- LA PAGE EXPORTÉE QUI SEMBLAIT VIDE, RÉPARÉE. La mesure du mouvement introduite à la version précédente était prise dans le repère de l'ÉCRAN, alors que tout le reste de l'export passe dans le repère du gabarit — le carré de mille unités. Le déplacement se retrouvait donc multiplié par l'échelle de la scène, et un calque qui bougeait un tant soit peu partait hors du cadre dès la première image : la page paraissait vide. La mesure suit désormais exactement la même conversion que la matrice de pose.
- DEUX CEINTURES DE SÉCURITÉ pour que cela ne puisse plus jamais coûter le dessin : la mesure se protège et rend toujours le calque à sa place, même si la scène n'est pas prête ; et une valeur douteuse est écartée des deux côtés — la page préfère un calque immobile à un calque invisible. Le scénario « mesure folle » le vérifie à chaque livraison.
- L'ARBORESCENCE DANS LA PILE DES CALQUES : les groupes séparés ne s'y alignent plus à plat. Leur dossier s'annonce par un titre — icône, nom, compte des groupes — et ses calques se rangent dessous, décalés vers la droite. On lit d'un coup d'oeil ce qui appartient à quoi, et l'ordre se change toujours à la souris comme avant.
- SÉPARER LES GROUPES, AU CHOIX : la séparation demande désormais comment ranger — dans un DOSSIER, un seul onglet avec son sélecteur, ou UN ONGLET PAR GROUPE, tous côte à côte quand on veut les avoir sous les yeux.
- DEUX BOUTONS QUI PARLENT : « Détecter les formes et les contours » s'efface une fois les groupes définis — il a fait son office —, et le bouton des groupes annonce ce qu'il tient : « 12 groupes · 12 formes — les modifier… ».
- L'ORBITE EXPORTÉE, REMISE D'APLOMB — deux fautes qui s'additionnaient. D'abord la matrice de pose partait avec la position de l'INSTANT du figement : or à cet instant l'orbite est à son maximum, si bien que la page ajoutait un rayon entier au décalage et que le cercle tournait décentré. Ensuite le déplacement était posé APRÈS la matrice, donc dans le repère du calque : il tournait avec lui et changeait d'amplitude avec sa taille — un cercle devenait une ellipse qui pivote.
- Désormais la matrice se prend mouvement neutralisé, et le déplacement se pose EN TÊTE, dans le repère de la scène : comme à l'atelier, où les mouvements directionnels s'appliquent après la rotation et l'échelle. Ce que vaut une unité de mouvement dans la scène est MESURÉ au figement, pas deviné — l'orbite, le va-et-vient, les secousses et la respiration tombent donc juste quelles que soient la taille, l'inclinaison et la rotation du calque. Le sillage suit le même déplacement que le dessin.
- SOUS ÉPREUVE : le scénario « orbite » vérifie à chaque livraison que le mouvement précède la matrice dans la transformation exportée.
- LA FENÊTRE DES GROUPES PILOTE LES CALQUES DU DOSSIER : quand un dessin a été séparé, « Définir les groupes… » montre désormais la liste des CALQUES du dossier, et un bouton les supprime de la scène — un groupe séparé est un calque, on s'en défait là où on gère les groupes dont il est né. La suppression demande confirmation, retire les formes avec le calque, et un Ctrl+Z ramène le tout.
- Supprimer le calque qu'on est en train de régler ferme la fenêtre : son sujet n'existe plus. Les autres suppressions laissent la fenêtre ouverte, sa liste se met à jour. Sur un calque ordinaire, hors dossier, rien ne change : la section n'apparaît pas.
- UN DOSSIER, UN ONGLET, UN SÉLECTEUR : les calques nés d'une séparation de groupes ne font plus douze onglets — ils se rangent dans un DOSSIER qui n'en occupe qu'un, reconnaissable à son icône de dossier verte et au compte des groupes qu'il tient. En tête du panneau, un sélecteur unique « Groupe réglé » choisit celui dont on règle les paramètres : le panneau dessous est le sien, entier, tous blocs compris. Pendant ce temps les autres continuent de vivre leur animation dans la scène.
- LES SÉLECTEURS DE GROUPES PAR BLOC ONT ÉTÉ RETIRÉS : le dossier fait mieux et plus simple. Un groupe n'est plus une exception dans les réglages d'un calque, c'est un calque à part entière — donc tous ses réglages sont les siens, sans exception ni limite. Les scènes enregistrées avec des portées de blocs se rendent toujours à l'identique.
- LE RANGEMENT SE GARDE : le dossier voyage dans la scène. À la réouverture, les familles retrouvent leur onglet unique. Retirer un membre ne ferme pas le dossier tant qu'il en reste un ; le dernier parti, l'onglet se referme.
- SÉPARER LES GROUPES EN CALQUES — le geste qui ouvre les animations indépendantes. Un nouveau bouton, sous « Définir les groupes… », défait le calque en autant de calques que de GROUPES : chacun ne porte que ses formes, et gagne donc TOUS les réglages pour lui seul — sa palette, son effet, sa rotation, son ombre, sa lumière, son biseau, son placement, ses mouvements. Un dessin de dix formes devient dix animations indépendantes, superposées au même endroit : faire tourner un rond, en faire disparaître un autre, en recolorer un troisième.
- LA COMPOSITION NE BOUGE PAS : les calques nés héritent du repère et du cadre du dessin d'origine, donc chaque morceau reste exactement à sa place. Les formes qu'aucun groupe ne réclame partent dans un dernier calque « le reste », pour que rien ne se perde. L'opération s'annule d'un Ctrl+Z, et le bouton n'apparaît qu'à partir de deux groupes.
- CE QUE ÇA CHANGE POUR LES EXPORTS : rien à apprendre. Un calque séparé est un calque comme les autres — l'export JS écrit une fiche par morceau, l'APNG et le WebP capturent la scène entière, la scène enregistrée les retrouve tels quels.
- LE SILLAGE FANTÔME DE L'EXPORT, CORRIGÉ : la page montait les copies du sillage dès que le calque TOURNAIT, alors que l'atelier ne les peint que sous l'effet de lumière « Sillage » ou « Sillage et pulsation ». D'où la nuée de ronds pâles dans la page exportée quand l'effet de lumière était « Aucun » — l'écart atelier/export venait de là. La condition est désormais la même des deux côtés, et l'épreuve la garde : sans son effet, aucune copie ; avec, le sillage est là.
- LE BOUTON « GROUPES » DANS PRESQUE TOUS LES BLOCS : il s'ajoute au HALO (l'auréole n'entoure plus que les groupes cochés — sa silhouette se recalcule à la volée), au PLACEMENT (hors de ses groupes, une forme ne bouge plus, jeu par cible compris) et aux MOUVEMENTS DIRECTIONNELS (hors de ses groupes, une forme ne prend plus son tour dans le voyage). Avec le dégradé, la lumière et l'ombre, six blocs portent leur sélection de groupes, à l'atelier comme dans la page exportée.
- RESTE LA RETOUCHE COLORIMÉTRIQUE : elle est le seul bloc sans portée, et c'est technique — ses réglages sont CUITS dans les couleurs au moment de l'export (la page ne reçoit pas d'exposition ni de contraste, mais des couleurs déjà corrigées). Lui donner une portée demande d'exporter une seconde palette, non corrigée, pour les formes hors des groupes cochés : c'est le prochain chantier.
- L'OMBRE PORTÉE PAR GROUPES : le bloc Ombre gagne son sélecteur « Groupes : tous ». Posée par groupes, l'ombre quitte le calque entier et se pose PAR FORME — chaque forme des groupes cochés reçoit la sienne, les autres n'en ont pas. À l'atelier comme dans la page exportée, enregistré avec la scène. À savoir : l'ombre par forme s'applique aux formes peintes à l'ENCRE ; un path ne portant qu'un filtre, elle PRIME sur le biseau là où les deux se croisent — c'est la règle de la maison, l'ombre gagne toujours. Le scénario « ombre par groupe » entre dans l'épreuve des combinaisons : le groupe du calque reste nu, la seule forme en portée porte le filtre.
- L'EXPORT NE PEINT PLUS DE NAPPES : sur un dessin dont toutes les formes sont animées, la page exportée étalait le ruban — et découpait la « nature » — le long du guide, en NAPPES PLEINES sans rapport avec le dessin : ni la forme, ni la taille, ni les couleurs de l'aperçu. La cause était structurelle : à l'atelier, le ruban et la nature sont DÉCOUPÉS par la géométrie des zones animées, mais cette géométrie ne partait jamais avec l'export. Elle part désormais dans la fiche (règle paire comprise : les trous du dessin restent des trous), et la page découpe ruban ET nature exactement comme l'aperçu. Le scénario « ruban découpé » entre dans l'épreuve des combinaisons : le clip des zones doit être monté à chaque livraison.
- LA PORTÉE DES BLOCS PAR GROUPES : les blocs « Animation du dégradé » et « Lumière » gagnent un sélecteur « Groupes : tous » — son menu coche UN, PLUSIEURS ou TOUS les groupes, et le bloc ne s'applique qu'à eux. Le dégradé accroché ne peint que les groupes cochés, les autres formes GARDENT LEURS COULEURS D'ORIGINE ; l'illumination n'éclaire que les groupes cochés, les autres restent intactes. Aucune coche : le bloc s'applique à tout, comme toujours. Identique à l'atelier et dans la page exportée (les portées voyagent résolues dans la fiche), enregistré avec la scène, et le compte du sélecteur suit les groupes.
- À SAVOIR : la portée du dégradé joue sur les couleurs PAR FORME — le mode « Accrocher aux formes ». En mode ruban, le dégradé reste un fond qui traverse tout le dessin. Le bloc Placement, lui, cible déjà les groupes par ses selects « Cible ».
- SOUS ÉPREUVE : le scénario « portée des groupes » vérifie à chaque livraison que le cycle ne peint que sa portée, que la forme hors de toute portée reste exactement à sa couleur d'origine, et que la lumière n'éclaire que la sienne.
- LES GROUPES ENTRENT DANS LE DÉ : sur un dessin d'au moins deux formes, le tirage pose une FONDATION — un groupe par forme, par couleur ou par taille, au hasard — puis tire ce qui les CONSOMME : une fois sur deux, l'illumination compte PAR GROUPES (et si aucune illumination n'était choisie, le dé en tire une — « Les groupes » sans chenillard ne montrerait rien), et l'effet voyage du bloc Mouvements se tire de même. Le compte du bouton « Définir les groupes… » et la liste de la cible suivent le tirage, les blocs éteints restent hors jeu, et le dé mémorise avant de jouer : rien n'est perdu.
- SOUS LE CAPOT, une seule vérité : les trois fondations de la fenêtre des groupes sont devenues des méthodes communes — la fenêtre et le dé appellent le même code, y compris le seuil de coupure des tailles.
- L'ILLUMINATION PAR GROUPES : le bloc Lumière gagne un sélecteur « Illuminé » — LES FORMES (chaque forme brille à son tour, comme toujours) ou LES GROUPES : les groupes définis brillent l'un après l'autre, TOUTES LES FORMES D'UN GROUPE ENSEMBLE, et une forme sans groupe reste au creux. Le chenillard, l'aléatoire, la vague et le fondu enchaîné suivent tous — huit grands ronds et quatre petits en deux groupes, et la lumière passe de l'un à l'autre. Identique à l'atelier et dans la page exportée, enregistré avec la scène, neutralisé quand le bloc Lumière s'éteint. Le scénario « illumination par groupes » entre dans l'épreuve des combinaisons : les formes d'un même groupe doivent porter la même couleur, la forme sans groupe rester au creux.
- LE BLOC DU DÉGRADÉ ÉTEINT COUPE VRAIMENT LE DÉGRADÉ : l'interrupteur remettait l'accroché et la nature à zéro, mais le RUBAN FIGÉ restait peint — blocs tous éteints, on voyait encore le dégradé. Désormais l'extinction coupe tout : le porteur du ruban se cache, les zones animées reprennent leurs COULEURS D'ORIGINE, et l'export suit — atelier et page enfin d'accord, éteint comme allumé. Le rallumage rend le dégradé tel qu'il était, et le rechargement d'une scène rejoue la coupure.
- LES GROUPES SE MONTRENT : après Enregistrer, la cible du bloc Placement passe d'elle-même sur « Un groupe » et sa liste propose aussitôt les groupes créés — enregistrés puis invisibles, ils semblaient perdus. Le bouton dit désormais leur COMPTE : « Définir les groupes… (12) ». À savoir : les groupes servent aujourd'hui à la CIBLE des réglages par forme (bloc Placement) et à l'effet voyage (« Ce qui bouge ») — les autres blocs s'appliquent au calque entier.
- LA FENÊTRE DES GROUPES EN PLEINE HAUTEUR : la liste occupe tout l'espace disponible et les boutons touchent le bas — fini la liste à sept lignes dans une fenêtre à demi vide.
- LE COMPTE DE LA DÉTECTION RESTE AFFICHÉ : « 12 formes pleines · 0 contour — F1 à F12 » s'effaçait au bout de trois secondes, à peine le temps de le lire. C'est la carte d'identité du dessin, pas un toast : le résultat reste sur le bouton, et un nouveau clic recompte.
- « UN GROUPE PAR TAILLE », la troisième fondation : les formes de TAILLE VOISINE se retrouvent ensemble, classées du plus grand au plus petit — un écart de plus d'un quart ouvre le groupe suivant. Huit grands ronds et quatre petits font deux groupes, libellés « Taille 1 » et « Taille 2 ». Comme les deux autres fondations, elle REMPLACE les groupes en place — Annuler protège.
- L'EXPORT CORRESPOND ENFIN À LA SCÈNE : un dégradé posé SANS défilement — l'animation inactive, le ruban peint figé à l'atelier — n'était PAS exporté : les tranches ne partaient que si l'animation défilait, et la page montrait les encres nues, grises, sans rapport avec l'aperçu. Désormais le ruban part dès que l'ATELIER LE PEINT : les tranches arrivent figées (les couleurs gelées au temps zéro, le moteur savait déjà le faire), et le montage de la page les monte dès qu'elles existent. Le scénario « ruban statique » entre dans l'épreuve des combinaisons : ses tranches doivent se monter et ne pas bouger, à chaque livraison.
- LE BLOC CALQUE CONDENSÉ : « Définir les groupes… » et « Trier les blocs… » tiennent sur UNE ligne, deux colonnes égales, chacun avec son « i » — la détection garde sa pleine largeur (son résultat s'y affiche), et les marges se resserrent. Sur un calque sans détection, le tri reprend seul sa pleine largeur.
- LA DÉTECTION COMPTE ENFIN LES TACHES, pas les tracés : un même <path> porte souvent plusieurs sous-chemins disjoints — douze ronds dans deux tracés. Chaque tache devient désormais SA forme : la détection en compte douze, le picker des groupes les attrape UNE À UNE, les réglages par cible les visent une à une. Les TROUS restent soudés à leur contour — le O garde son trou, la règle paire ses îlots — et les tracés au trait ne s'éclatent jamais : un contour reste un contour. À savoir : sur un dessin multi-taches déjà réglé, la numérotation F change (F1-F2 deviennent F1-F12) — les jeux par cible et les groupes de ces dessins-là sont à re-poser une fois.
- DEUX FONDATIONS DANS LA FENÊTRE DES GROUPES : « Un groupe par forme » donne son groupe à chaque forme cliquable (douze formes, douze groupes — prêt pour l'effet voyage), « Un groupe par couleur » réunit les formes de même teinte (deux couleurs, deux groupes, libellés de leur hexa). Les deux REMPLACENT les groupes en place — Annuler protège.
- LA FENÊTRE RESPIRE : le champ Libellé s'élargit (170 points au moins), et les flèches de tri ▲▼ perdent leur excès de rembourrage — le triangle tient enfin dans son bouton.
- LES BOUTONS INVISIBLES, retrouvés : « Détecter les formes et les contours », « Définir les groupes… », « Trier les blocs… » — mais aussi « Comme tout le dessin », « Appliquer à tout le dessin » et « Couleur du fond… » — étaient créés à LARGEUR ZÉRO et s'affichaient... à zéro pixel de large : il ne restait que leurs « i » orphelins, alignés sur du vide. La fabrique des boutons traite désormais la largeur zéro comme AUTOMATIQUE, ce qui répare tout le lot d'un coup et tout bouton futur avec. Un garde-fou verrouille la règle.
- LE GLOW SEUL NIMBE LE DESSIN : le curseur Glow n'agissait qu'avec un effet de lumière ou un contour lumineux — seul, il ne montrait rien. Désormais, sans effet ni contour, la lueur se pose sur LE DESSIN LUI-MÊME, teintée comme la lumière (la teinte choisie plus bas la colore), à l'atelier comme dans la page exportée. L'ombre portée occupe la même place : quand elle est là, elle garde la priorité — c'est dit dans le « i » du Glow. Le scénario « glow seul » entre dans l'épreuve des combinaisons : son filtre de lueur doit être monté à chaque livraison.
- LE CLIC QUI TRAVERSAIT, corrigé : au démarrage, choisir « Projet loader » ouvrait aussitôt le premier SVG venu, sans laisser choisir. La porte du popup agissait dès le bouton ENFONCÉ — la bibliothèque s'ouvrait sous le curseur encore pressé, et le RELÂCHEMENT du même clic tombait sur la première vignette, qui se posait toute seule. Double correction : les portes du démarrage réagissent désormais au clic COMPLET (enfoncé puis relâché sur la même porte), et une vignette de loader ne se pose que si le clic a COMMENCÉ sur elle — un relâchement orphelin venu d'une autre fenêtre ne compte plus. Un garde-fou vérifie que la porte n'agira plus jamais au bouton enfoncé.
- LE VENT REVU DE FOND EN COMBLE — il ne servait à rien, il sert. Fini la respiration uniforme qui penchait tout d'un bloc : le souffle arrive désormais par RAFALES QUI TRAVERSENT LA SCÈNE — deux ondes décalées dans l'espace, un front après l'autre — et il pousse presque trois fois plus fort. La neige dérive vraiment, la pluie penche vraiment ; en vol libre, un grain sous vent plein part de plus de quatre cents points en deux secondes. Les fréquences des rafales sont entières par tour : un export en boucle se referme sans couture. Le champ est LE MÊME dans l'atelier et dans la page exportée (Souffle en C#, souffleDe au portage), et les mêmes constantes des deux côtés sont désormais sous garde-fou.
- LE CHAMP DE FILAMENTS, un nouvel effet vivant : un CHAMP TEXTE (avec police et gras, comme le texte en particules) dont chaque point devient le PIED D'UN BRIN — un filament effilé de cinq segments, raide à la base, souple à la pointe — et le champ entier PLOIE sous le vent, rafale après rafale. Trois variantes : PRAIRIE (les brins poussent droits), CHEVELURE (ils rayonnent du cœur du mot), ALGUES (plus longs, plus lents, plus amples, comme sous l'eau). Sans vent, un frisson propre garde le champ vivant ; la TURBULENCE l'agite davantage, la GRAINE tire les longueurs — les trois curseurs sortent de la matière pour lui. Morceaux règle la densité, Animation la souplesse, Épaisseur le grain des brins.
- SOUS ÉPREUVE, comme tout le reste : la nouvelle épreuve « filaments » vérifie que le vent change réellement les brins et les penche du bon côté, que le champ se referme en boucle propre (t = 0 et t = 1 rendent la même image), que les trois variantes sont distinctes, et que la matière dérive franchement sous vent plein. L'épreuve des figures joue d'office les trois variantes élaguées comme à l'export.
- L'AUDIT DES COMBINAISONS DE PARAMÈTRES, et son filet permanent. Le statique d'abord : tout champ que le moteur JS lit est bien émis dans la fiche (aucun manquant), toute clé écrite dans une scène est bien relue à l'import (les cinq restantes — programme, integre, module, colonne/rang par lecture indirecte — sont descriptives ou relues ailleurs, les fabriques reconstruisent les modules). Le dynamique ensuite : TRENTE scénarios croisant les quatre sections du moteur (vivant, accroché, fantômes, lumière), les jeux par cible, les groupes, « l'effet voyage » et une poignée d'extrêmes tournent au navigateur SANS UNE FAUTE, et la résolution à trois étages décide exactement qui bouge : le jeu individuel [0, 0] arrête sa forme même sous un groupe actif, le voyage met au repos toute forme hors groupe, et le voyage sans groupes met tout au repos — l'atelier et la page disent la même chose.
- NOUVELLE ÉPREUVE « combinaisons » : cette matrice rejouera à CHAQUE livraison — pages assemblées comme l'export (fiche, portage élagué, moteur découpé), zéro faute exigée et les verdicts « qui bouge » vérifiés à la forme près. Sans navigateur sous la main, elle se retire sans bruit, comme l'épreuve du portage sans node.
- LE MULTILINGUE, première tranche — la case 12 est cochée, et c'était la dernière de la feuille de route. Le principe qui rend le chantier tenable : LE FRANÇAIS EST LA CLÉ. Le code garde ses chaînes françaises, T() rend leur traduction quand le dictionnaire en a une — sinon le français lui-même : une langue incomplète n'a JAMAIS de trou.
- FRANÇAIS + ANGLAIS, GUI seule, comme convenu. L'anglais vit EMBARQUÉ dans le programme ; le choix se fait dans Paramètres, onglet « Langue », et prend effet au prochain démarrage (l'interface est bâtie au lancement). Déjà traduits : tous les libellés de réglages, les titres de blocs, les en-têtes d'onglets des paramètres — les pavés d'aide des « i » passent par le même mécanisme et suivront, ils restent en français d'ici là.
- LES LANGUES PERSONNELLES : le dossier Documents/Iridis/langues accueille des dictionnaires « es.json », « de.json »… (JSON { "texte français": "traduction" }) qui apparaissent dans le sélecteur. « Exporter le modèle de traduction » écrit le dictionnaire complet à remplir colonne de droite.
- LES CLÉS INTERNES RESTENT FRANÇAISES : l'ordre des blocs, les plis, la priorité du tri indexent les titres français — la traduction ne se fait qu'à l'affichage, une scène enregistrée en anglais se rouvre à l'identique en français.
- SOUS ÉPREUVE : le dictionnaire est refusé s'il contient de l'encodage double (le mojibake qui rendrait une clé à jamais introuvable — 93 clés en étaient atteintes et ont été réparées), et chaque libellé ou titre du panneau doit y être TRADUIT : un réglage ajouté demain sans son anglais fera échouer la livraison.
- LES « i » MANQUANTS — la case 11 est cochée. Tout le récent gagne son petit « i » épinglable : la détection des formes et des contours, « Définir les groupes » et « Trier les blocs » (leurs pavés quittent l'infobulle de survol pour une vraie bulle qu'on ouvre et qu'on lit), l'allure, le glow, le contour et les deux transparences de la lumière et de la retouche (chacune la sienne, ce sont deux réglages différents), l'amplitude du mouvement par forme — et, au passage, les six mouvements directionnels qui n'en avaient jamais eu : va-et-vient, orbite, profondeur, secousses, cadence.
- UN GARDE-FOU QUI SUIVRA : les contrôles recensent désormais CHAQUE curseur du panneau et exigent son aide — dans la table centrale, ou passée à l'appel pour les libellés en double. Un réglage ajouté demain sans son « i » fera échouer la livraison au lieu de rester muet.
- LA BASE EMBARQUÉE — la case 10 est cochée. Un seul fichier « iridis.db », posé à côté des derniers réglages (il voyage donc sur une clé avec le reste) : les scènes s'y rangent NOMMÉES et DATÉES, chaque écriture est une TRANSACTION — une coupure au milieu ne laisse jamais une scène à moitié posée — et le contenu est requêtable.
- LA BIBLIOTHÈQUE DE SCÈNES : un nouveau bouton dans la barre d'actions (le cylindre) ouvre la vitrine de la base — enregistrer la scène courante sous un nom (remplacée si le nom est pris, sa date de création survit), rouvrir d'un double-clic, supprimer, et REPRENDRE LE FILET : la sauvegarde silencieuse part désormais AUSSI dans la base, avec sa date.
- LE JSON RESTE LE FORMAT D'ÉCHANGE, comme convenu : exporter et importer des .json marche exactement comme avant, derniers-reglages.json continue de s'écrire (le secours lisible à la main), et la MIGRATION EST DOUCE — au premier lancement, un filet JSON déjà là est recopié dans la base, sans rien toucher au fichier.
- LE SQL SOUS ÉPREUVE : chaque requête de la base est extraite de la source et JOUÉE dans une vraie base SQLite à chaque livraison — l'upsert qui garde la date de création, le filet à une seule ligne, la liste datée, la suppression ciblée.
- LE PORTAGE ÉTAIT EN DOUBLE — la suite du chantier 9. Le fichier des figures vivantes vivait en DEUX COPIES INTÉGRALES collées bout à bout : quatre cents Ko dont la moitié ne servait jamais, dans chaque export avec un loader. Une seule copie part désormais, et un garde-fou veille à ce qu'elle le reste.
- LE MOTEUR AUSSI EST DÉCOUPÉ : quatre sections balisées — le rendu vivant, toute la lumière (dégradés, grains, glow, contour, pulsar, teinte, mouvement d'effets), le par-forme accroché (couleurs du cycle, illumination, mouvement, échos, miroirs, voyage) et le sillage — ne partent dans la page que si un calque s'en sert. Un dessin figé sans lumière n'emporte plus que le squelette : le moteur passe de cinquante-cinq à dix-sept mille caractères, avant même la minification.
- UN CRASH DORMANT ÉVITÉ : un calque FIGÉ dont l'effet de couleur ou l'à-coup vient du catalogue de courbes appelait une fonction qui ne partait qu'avec les figures vivantes — sans loader dans la scène, la page mourait sur « courbe inconnue ». Les courbes voyagent désormais dès qu'un calque, vivant ou pas, les réclame.
- L'ÉPREUVE QUI VEILLE : le moteur est ré-extrait de sa source à chaque livraison et ses SEIZE combinaisons de découpe sont exécutées — syntaxe vérifiée, aucune fonction orpheline, l'illumination garde son bruit. Vérifié en vrai navigateur sur quatre scènes (ruban nu, voyage de groupes, guirlande sous glow avec sillage, effet du catalogue sur calque figé) : rendus identiques, zéro erreur.
- LE JS EXPORTÉ ALLÉGÉ — la case 9 est cochée, et elle cachait un bug dormant : dans le portage des figures vivantes, une balise d'élagage « feu » n'était jamais refermée (deux fois — la fonction cercle() en dessous avait perdu son ouvrante). La découpe s'arrêtait là EN SILENCE après deux blocs, et les 400 Ko du portage partaient ENTIERS dans chaque page exportée, quel que soit l'effet. Réparé — et un contrôle d'appariement en pile surveille désormais chaque balise.
- L'ÉLAGAGE EST ACTIF MÊME SANS FIGURE VIVANTE : le court-circuit « pas de vivant, tout part entier » saute — l'élagage à vide ne garde que les outils communs. Sur une scène sans vivant : 479 Ko → 118 Ko, 75 % de poids en moins, rendu vérifié identique en vrai navigateur. Avec un vivant, seuls ses morceaux partent — pour la première fois réellement.
- LES DÉPENDANCES TENUES : la table des besoins corrigée (le battement emporte le cercle, le brasier la matière) et une table d'ENTRAÎNEMENTS entre morceaux (la matière trace au cercle, les croisements marchent aux carrés et particules), fermée jusqu'à stabilité — côté export ET côté épreuves, qui lisent la même table dans le même fichier. Les 46 combinaisons élaguées s'exécutent toutes.
- « CE QUI BOUGE » — la case 8 est cochée. Le bloc Mouvements directionnels gagne son select : « Les formes », le mouvement par forme anime tout EN CONTINU, comme toujours ; « L'effet, de groupe en groupe », les formes restent en place et c'est L'EFFET qui VOYAGE — chaque groupe s'anime à son tour, dans l'ordre du tri de « Définir les groupes », montée et descente douces (une fenêtre en sin² sur sa part du cycle), puis passe le relais au suivant. Les formes sans groupe restent au repos, et les échos suivent le voyage.
- MÊMES FORMULES PARTOUT : atelier et page exportée jouent la même partition — vérifié en vrai navigateur, deux groupes de quatre formes en ronde : au premier temps seul le premier groupe bouge, au second seul le second. Enregistré avec la scène, rechargé, éteint avec le bloc.
- Le TRI DES GROUPES prend ici tout son sens : réordonner les groupes réordonne le voyage.
- LA TRANSPARENCE DANS LA RETOUCHE — la case 7 est cochée. Le bloc Retouche colorimétrique gagne un curseur « Transparence » sous la couleur unique : à zéro elle est opaque et remplace tout, comme toujours ; au-delà elle devient un VOILE — le dégradé transparaît dessous, chaque couleur du cycle teintée par l'aplat. Les couleurs se COMPOSENT selon le tri des blocs : la retouche classée [1] est la couche du dessus ; le dégradé classé au-dessus reprend toute la place, comme depuis la 4.101.
- La palette composée est calculée une fois et périmée au moindre changement — teinte, palette, transparence — ; l'export reçoit les couleurs déjà composées, la page n'a rien à savoir. Enregistré avec la scène (dans l'objet couleurUnique), rechargé, éteint avec le bloc — dont l'interrupteur coupe désormais AUSSI la couleur unique elle-même.
- LE TRI DES BLOCS — la case 6 est cochée. Le bloc « Le calque » gagne « Trier les blocs… » : la fenêtre liste les blocs du calque dans leur ordre de PRIORITÉ — tirés à la souris (drag & drop) ou déplacés aux flèches, « Ordre d'affichage » rendant l'ordre naturel des colonnes. Chaque bloc porte désormais son INDEX — « [1] Retouche colorimétrique » — devant son titre ; l'ordre est enregistré avec la scène et rappliqué à la réouverture.
- LE BLOC SUPÉRIEUR PRIME — et ça mord dès aujourd'hui : classe « Animation du dégradé » AU-DESSUS de « Retouche colorimétrique » et le DÉGRADÉ gagne sur la couleur unique — à l'aperçu comme dans la page exportée, qui reçoit la palette déjà arbitrée. Les chantiers 7 (composition des couleurs) et 8 (« ce qui bouge ») s'appuieront sur ce même ordre.
- RÉPARATION discrète : les garde-fous de la 4.100 (projet Loader) n'étaient pas partis avec elle — un enchainement de commandes coupé en silence — ; ils sont là, avec ceux du tri.
- LE PROJET LOADER — la case 5 est cochée. La fenêtre de bienvenue gagne une quatrième porte, « Projet Loader » : la bibliothèque des cent dix anneaux s'ouvre, un clic pose le loader choisi, prêt à animer — sans aucune image à fournir. Le choix se retient comme les autres (« Se souvenir de mon choix », et le réglage « Au démarrage » des Paramètres a sa ligne « Repartir d'un projet Loader »).
- LE POPUP « NOUVEAU CALQUE » PASSE SUR DEUX LIGNES — sept cartes en quatre colonnes, la fenêtre respire et tient sur les petits écrans — avec la TUILE LOADER : la bibliothèque à portée de main depuis n'importe quelle scène en cours.
- LA TEINTE DE LA LUMIÈRE — le chantier 4 est COMPLET. Un select « Teinte » dans le bloc Lumière : « D'origine », chaque effet garde ses couleurs à lui — le laser rouge, la guirlande multicolore ; « Couleur propre », toute la lumière — grains, glow, contour, pulsar — prend la couleur du nuancier ; « Suivre la palette », la lumière prend les couleurs du DÉGRADÉ du bloc animation, qui défilent au rythme du cycle — la lumière et le dessin respirent ensemble.
- PARTOUT, PAREIL : à l'atelier les grains sont reteints à la volée (même ceux qui naissent en cours de route), le glow et le liseré suivent ; dans la page, un dégradé unique porte la teinte — posé au montage pour la couleur propre, ses arrêts mis à jour à chaque image pour la palette. Enregistré avec la scène, rechargé, éteint par l'interrupteur du bloc. Vérifié en vrai navigateur : dégradé qui défile → la lueur, le contour et les ampoules changent de couleur ensemble.
- LA CASE 4 EST COCHÉE : le bloc Lumière autonome a tout — seize effets, force, illumination, sillage, allure, transparence, glow, contour lumineux, mouvement d'effets, et ses couleurs.
- LA LUMIÈRE S'HABILLE ET SE DÉPLACE — la suite du chantier 4, trois réglages nouveaux dans le bloc Lumière. Le GLOW : une lueur chaude et diffuse autour des grains de l'effet et du contour lumineux — le rayon au curseur, zéro l'éteint. Le CONTOUR LUMINEUX : un liseré de lumière sur le tracé même des formes du dessin, son épaisseur au curseur — il profite du glow et de la transparence. Le MOUVEMENT D'EFFETS : la lumière se déplace SANS que le dessin bouge — orbite, balancement, ou une dérive lente — calée sur l'allure de la lumière.
- TOUT VOYAGE : les trois réglages s'éteignent avec l'interrupteur du bloc (le garde-fou les surveille), s'enregistrent avec la scène, se rechargent, et partent dans la page — le porteur de lumière y reçoit un filtre de lueur, les traits du contour (règles de remplissage retirées, comme l'encre), et sa translation propre au rendu. Vérifié en vrai navigateur : filtre posé, liseré présent, orbite vivante.
- Reste du chantier 4 : les couleurs propres de la lumière et l'accès aux dégradés du bloc animation.
- LE BLOC LUMIÈRE EST NÉ — le chantier 4 s'ouvre. Tout ce qui éclaire quitte « Mouvements directionnels » pour SON bloc : l'effet de lumière (les seize), sa Force, l'illumination des formes, le sillage (fantômes et étalement) — avec SON INTERRUPTEUR, qui éteint tout d'un coup, aperçu comme page exportée. Le bloc Mouvements directionnels ne garde que ce qui DÉPLACE : rotation, balances, orbite, profondeur, secousses.
- DEUX RÉGLAGES NOUVEAUX, propres à la lumière. L'ALLURE : la vitesse de l'effet, indépendante du tour — à deux le néon vacille deux fois plus vite sans que la rotation change. La TRANSPARENCE : l'effet s'efface sans se couper — à zéro entier, à un disparu — pour le doser par-dessus un dessin chargé. Les deux jouent sur les seize effets, sont enregistrés avec la scène, rechargés, et EXPORTÉS dans la page — vérifié en vrai navigateur (néon à l'allure triple, guirlande à demi voilée).
- Le garde-fou des interrupteurs suit désormais AUSSI les réglages de lumière : un réglage « …Lumiere » ajouté demain et oublié dans l'extinction fera échouer les contrôles.
- La suite du chantier 4 : le glow, le contour lumineux, le mouvement d'effets, et les couleurs propres avec les dégradés partagés du bloc animation.
- LES GROUPES PILOTENT LES RÉGLAGES — les chantiers 2 et 3 sont clos. La cible du bloc Placement gagne « Un groupe » : le choix liste les groupes du dessin (« [2] Anneaux »), et le groupe choisi édite SON jeu (mouvement + amplitude), rechargé au changement de groupe, écrit à chaque réglage — l'enregistrement est AUTOMATIQUE, et « Comme tout le dessin » retire le jeu d'un clic. Nouveau bouton « Appliquer à tout le dessin » : le jeu de la cible devient le réglage global.
- LA RÉSOLUTION, du plus précis au plus large — partout la même : le jeu de LA forme si elle en a un, sinon le PREMIER groupe du tri qui la contient et qui a un jeu, sinon le global. Une forme dans plusieurs groupes suit donc le groupe le plus haut — le tri des groupes est une priorité. Vérifié en vrai navigateur : un groupe F1-F6 en vague, F3 immobilisée par son jeu propre (le précis gagne), F9 seule en tourbillon, le reste immobile.
- Les jeux de groupe voyagent comme les autres : scène, réouverture, export JavaScript (la fiche emporte les groupes dans l'ordre du tri). Le sélecteur se repeuple dès que « Définir les groupes… » referme sa fenêtre.
- DÉFINIR LES GROUPES DE FORMES — le chantier 2 prend corps. Le bloc « Le calque » gagne « Définir les groupes… » : la fenêtre montre le dessin FORME PAR FORME — un clic prend une forme dans le groupe courant, un second l'en rend — avec les CONTOURS DE SÉLECTION à la couleur de chaque groupe (celui du groupe courant plus épais), huit teintes fixes tirées de l'identifiant. Les groupes ont un identifiant FIXE (1 à 99, jamais réattribué), un libellé libre (« Groupe N » par défaut), se créent, se suppriment, se trient (l'ordre, pas les identifiants) ; « Tout sélectionner » et « Vider » obéissent au filtre — formes et contours, formes seules, contours seuls — et une même forme peut appartenir à plusieurs groupes.
- LES GROUPES SUIVENT LE DESSIN : enregistrés avec la scène (et relus à l'ouverture), et pour un dessin de la bibliothèque — loaders comme SVG importés — écrits à côté du SVG (Documents/Iridis/groupes) : ils reviennent à CHAQUE pose du même dessin.
- La suite — chantier 3 — les branchera sur les réglages : le select des groupes dans chaque bloc, « Toutes les formes » par défaut, les paramètres rechargés au changement de groupe.
- CIBLER UNE FORME OU UN CONTOUR — la suite et fin du chantier 1. Le bloc « Placement et déformation » gagne deux selects : la CIBLE (« Tout le dessin », « Une forme », « Un contour ») et le CHOIX précis (F1, F2… C1, C2… — la numérotation du bouton de détection). « Tout le dessin » édite les réglages globaux, comme toujours ; une cible précise édite SON JEU (mouvement + amplitude) : chargé à la sélection, écrit à chaque réglage, retiré d'un clic (« Comme tout le dessin »). Une forme sans jeu suit le global — et une forme SEULE peut désormais bouger si c'est elle qu'on vise.
- LES JEUX VOYAGENT PARTOUT : peints à l'atelier (échos compris — chaque forme traîne dans SON mouvement), enregistrés avec la scène, rechargés à l'ouverture, et exportés dans la page JavaScript (la fiche porte l'étiquette de chaque forme et ses jeux). Vérifié en vrai navigateur : douze cercles, jeux sur F3 (ronde) et F7 (tourbillon), global à zéro — seuls F3 et F7 bougent.
- La case 1 de la feuille de route est cochée. Les groupes de formes (chantier 2) s'appuieront sur ces mêmes cibles — désignées à la souris au lieu d'un numéro.
- L'EXPORT D'UN CALQUE ACCROCHÉ RESSEMBLE ENFIN À L'ATELIER. La scène exportée n'avait « strictement rien à voir » : de grandes nappes arc-en-ciel à la place des formes. La cause — notée dès la 4.89 — : les formes ANIMÉES d'un calque animé étaient exclues de l'encre figée (« le ruban les peindra ») ; en mode accroché, la page recevait donc encre: [], le rendu par forme ne mordait jamais, et le ruban de tranches se peignait en NAPPES pleines — doublées par les cinq fantômes du sillage, clonés au montage.
- LE CORRECTIF, des deux côtés : en mode accroché, les formes animées partent AUSSI dans l'encre (c'est ELLES que la page peint aux couleurs du cycle, règles de remplissage comprises) ; et le ruban se tait DÈS LE MONTAGE (les tranches naissent à vide — les fantômes héritent du silence) au lieu d'être peint puis éteint à chaque image. Un calque accroché d'UNE seule forme est désormais peint aussi (la garde exigeait deux formes).
- Vérifié en vrai navigateur sur une scène équivalente (douze cercles accrochés, palette arc-en-ciel, chenillard, cinq fantômes) : les cercles portent les couleurs du cycle, zéro nappe. Détail connu : les fantômes du sillage traînent les couleurs figées du montage, pas celles du cycle — à affiner si ça se voit.
- LA DÉTECTION DES FORMES ET DES CONTOURS — la première pierre du chantier 1. Chaque tracé du SVG est désormais MARQUÉ à la lecture : un chemin AU TRAIT (stroke sans remplissage) est un CONTOUR, le reste est une FORME PLEINE — le rendu ne change pas (le trait reste rempli de sa couleur de contour, comme avant), mais le dessin sait maintenant ce qu'il contient. Le calque expose ses comptes, et le bloc « Le calque » gagne, pour un SVG hors matière, le bouton « Détecter les formes et les contours » : le recensement se lit sur le bouton (« 12 formes pleines · 3 contours — F1 à F12, C1 à C3 »), dans l'ordre du fichier, celui que suivront les réglages par forme.
- LA SUITE DU CHANTIER 1 : les deux selects dans chaque bloc — la cible (formes / contours / global) et le choix précis — avec les paramètres enregistrés par forme et par contour. La case ne sera cochée qu'avec eux.
- LE CHAMP « ASSIGNATION » EST RETIRÉ — le chantier C. La liste de codes tapée à la main n'était ni ergonomique ni fonctionnelle : elle disparaît de l'atelier, des scènes enregistrées, du calque figé et de la page exportée, avec les garde-fous qui la surveillaient. Les GROUPES DE FORMES prendront ce rôle, et bien mieux : on désignera les formes à la souris au lieu de compter des chiffres.
- Rien d'autre ne bouge : les dix modes de mouvement par forme — mélange, goutte et fusion compris —, l'illumination, les échos et les miroirs restent en place, pilotés par leur select. Une scène enregistrée avec une assignation se rouvre sans broncher : le réglage est simplement ignoré.
- Case C cochée. Le socle du grand chantier — détection des formes et des contours, puis les groupes — commence à la prochaine version.
- UN BLOC ÉTEINT NE FAIT PLUS RIEN — le chantier B. L'interrupteur coupait bien les réglages d'origine de chaque bloc, mais AUCUN de ceux ajoutés depuis : « Placement et déformation » laissait courir tout le par-forme (mouvement, amplitude, miroirs, échos, assignation) et « Mouvements directionnels » laissait courir l'illumination par forme, l'intensité de lumière, le sillage et les quatre déplacements (balance, orbite, profondeur, secousse). Tout cela est neutralisé avec le bloc — à l'aperçu COMME dans la page exportée, qui lit les mêmes réglages.
- UN GARDE-FOU QUI SUIVRA : le contrôle recense tout seul les réglages « par forme » du calque et exige que chacun soit éteint avec son bloc. Un réglage ajouté demain et oublié dans l'interrupteur fera échouer les contrôles au lieu de passer inaperçu.
- À SAVOIR : un bloc éteint est enregistré NEUTRE. Rouvrir un projet puis rallumer le bloc rend ses réglages à leur valeur de repos, pas à celle d'avant l'extinction — c'est le comportement de toujours, dit ici noir sur blanc.
- Case B cochée dans la feuille de route.
- L'EXPORT JS RÉPARÉ — le chantier A de la feuille de route. La page comptait ses formes et n'en montrait aucune, sans la moindre erreur dans la console : les chemins partaient avec le PRÉFIXE WPF de leur règle de remplissage (« F1M7.37,76.54L… »). WPF met cette règle en tête de la chaîne d'une géométrie ; le SVG ne connaît pas ce préfixe et refuse le chemin EN SILENCE. Le préfixe est désormais retiré au seul endroit qui écrit du SVG — tranches du ruban, formes d'encre, silhouette du halo — et la règle voyage à part : les TROUS des anneaux et des lettres restent creux à l'export. Les données figées gardent leur format d'origine pour le portage WPF, qui, lui, le comprend. Trois garde-fous veillent désormais sur ce préfixe.
- Case A cochée dans la feuille de route. # Feuille de route — le grand chantier des groupes (suivi de dev) Coché au fil des versions. L'ordre est l'ordre de chantier convenu.
- LE MORPHING — la dernière marche du chantier par forme, en deux modes. GOUTTE : l'étirement ANISOTROPE ondulant — chaque forme s'étire d'un axe pendant qu'elle s'écrase de l'autre, comme une méduse, phases décalées de forme en forme. FUSION : les formes CONVERGENT vers le cœur du dessin en se compactant, fusionnent un instant en une masse, puis repartent chacune à sa place — le morphing à la goutte d'eau, une fois par cycle. Les deux s'assignent par forme (codes 9 et « a »), traînent leurs échos, se reflètent dans les miroirs, et jouent à l'identique dans la page exportée.
- LE CHANTIER « CHAQUE FORME INDÉPENDANTE » EST COMPLET : illumination (quatre modes), mouvement (dix modes dont le mélange et le morphing), assignation manuelle par forme, échos, miroirs — le tout combinable librement, persisté avec la scène, et porté dans l'export JavaScript jusqu'au fond de page.
- L'ASSIGNATION MANUELLE PAR FORME. Un champ « Assignation » dans les réglages par forme : une liste de codes d'effets, UN PAR FORME dans l'ordre du dessin — « 1 4 2 » fait respirer la première, tourbillonner la deuxième, tourner la troisième en ronde. Si les formes sont plus nombreuses, la liste se répète en cycle ; zéro immobilise une forme ; vide, le mode global s'applique. Les codes : 0 immobile, 1 respiration, 2 ronde, 3 éloignement, 4 tourbillon, 5 bascule, 6 vague, 7 battement, 8 mélange. Séparateurs libres, seuls les chiffres comptent. Les échos suivent chaque forme dans son propre effet, les miroirs reflètent le tout, et la page exportée joue la même partition — la chaîne voyage dans la fiche, nettoyée. Persisté avec la scène.
- C'est la réponse à « combiner plusieurs effets différents à la fois par forme et sur plusieurs formes » : chaque forme a désormais SON effet, choisi à la main. Reste le morphing — la dernière marche annoncée du chantier.
- LES ÉCHOS DES FORMES. Un curseur « Échos » (zéro à quatre) dans les réglages par forme : chaque forme est suivie de copies en RETARD sur son mouvement, opacité dégressive — la traînée du geste. Une respiration laisse des ondes, un tourbillon une spirale de rémanences, une vague son sillage. Les échos sont dessinés SOUS les formes, suivent leurs couleurs et leur illumination, et jouent à l'identique dans la page exportée (même calcul, phase retardée). Sans mouvement des formes, ils restent superposés : ils suivent le geste, pas la forme immobile. Persisté avec la scène.
- Sous le capot, le calcul du mouvement d'une forme à une phase donnée est désormais une brique partagée — atelier et page — entre le lot principal et ses échos : la même formule sert plusieurs instants.
- Reste au chantier : l'assignation manuelle d'un effet par forme, et le morphing.
- LES MIROIRS DES FORMES. Dans la ligne des réglages par forme, un nouveau choix « Miroirs » DUPLIQUE chaque forme en réflexion autour du milieu du dessin : HORIZONTAL (la copie gauche-droite), VERTICAL (haut-bas), KALÉIDOSCOPE (les deux axes — quatre quadrants symétriques). Les copies suivent TOUT : les couleurs du cycle, l'illumination des formes, le mouvement par forme. À l'atelier, les réflexions sont dessinées sans cloner une seule géométrie ; dans la page exportée, les clones reçoivent couleur et mouvement précédés de leur réflexion — même rendu des deux côtés. Persisté avec la scène, comme le reste.
- Restent au chantier : l'assignation manuelle d'un effet par forme, les échos, le morphing.
- LE VECTEUR SE RECALCULE TOUT SEUL À LA POSE D'UN LOADER — le même geste que le bouton « Recalculer » du bloc Animation du dégradé : le vecteur est redéduit automatiquement de la forme des zones à colorer. Le vecteur générique d'import ignorait la géométrie du loader, les couleurs tombaient à côté ; désormais chaque loader arrive avec un vecteur épousé sur ses formes, et la ligne d'état du panneau le reflète.
- LE MÉLANGE — le neuvième mode du mouvement des formes : chaque forme tire SON effet parmi les sept (l'une respire, l'autre tourbillonne, la troisième bascule…). Le brassage est ARITHMÉTIQUE, identique à l'atelier et à l'export : même forme, même effet, des deux côtés. C'est la première forme de « plusieurs effets différents à la fois sur plusieurs formes » — l'assignation MANUELLE par forme, les miroirs et les échos restent les prochaines marches.
- L'EXPORT JAVASCRIPT DU « PAR FORME » — et la correction d'un manque plus ancien qu'il révélait : à l'export, un calque importé en mode « Accrocher aux formes » gardait ses couleurs D'ORIGINE — le loader exporté restait blanc, même animé à l'atelier. Désormais les couleurs du cycle peignent les FORMES elles-mêmes dans la page (la teinte voyage avec la forme, le ruban de tranches se tait), et par-dessus : l'ILLUMINATION DES FORMES (chenillard, aléatoire, vague, fondu enchaîné) et le MOUVEMENT PAR FORME (respiration, ronde, éloignement, tourbillon, bascule, vague, battement, avec l'amplitude) — les mêmes formules qu'à l'atelier, les centres mesurés une fois sur les boîtes réelles, tout boucle sur le cycle.
- Un loader exporté en fond de page vit donc maintenant exactement comme à l'atelier : couleurs, chenillard, mouvement des formes, effets de lumière.
- Reste du chantier, par étapes : l'assignation d'un effet différent PAR forme, les miroirs, les échos, le morphing. L'export C# (WPF) ne porte pas les réglages par forme : même limite connue que les effets de lumière, dite dans les contrôles.
- LE MOUVEMENT PAR FORME — la fondation du chantier. Dans « Placement et déformation », un nouveau réglage « Formes » anime chaque forme du dessin INDÉPENDAMMENT, quel que soit leur nombre : RESPIRATION ALTERNÉE (grossir, rétrécir, en quinconce), RONDE (chaque forme orbite autour de sa place), ÉLOIGNEMENT (les formes s'écartent du cœur puis se rassemblent), TOURBILLON (chacune tourne sur elle-même, sens alternés), BASCULE (le pendule, phases décalées), VAGUE (l'ondulation en chenille), BATTEMENT (le cœur, deux à-coups par cycle). Le curseur AMPLITUDE règle l'ampleur. Chaque forme reçoit sa propre matrice au rendu — aucune géométrie clonée — les centres sont mesurés une fois, et tout boucle sur le cycle du calque.
- Ça demande « Accrocher aux formes » (les formes peintes séparément), se COMBINE librement avec l'illumination des formes, la rotation continue et les effets de lumière, et c'est persisté avec la scène. Un loader posé arrive déjà accroché : choisis un mouvement, il joue.
- La suite du chantier, par étapes : un effet différent PAR forme (l'assignation individuelle), les MIROIRS pour dupliquer les formes, les ÉCHOS, le morphing — et l'export JavaScript du mouvement et de l'illumination des formes.
- LE LOADER ARRIVE VIVANT. Trois défauts de pose corrigés d'un coup : le bloc ROTATION + LUMIÈRE n'était pas activé pour les loaders — ni commande de rotation ni effets de lumière visibles, la rotation semblait venir du bloc dégradé — et les couleurs restaient blanches faute d'« Accrocher aux formes ». Désormais un loader posé tourne (commandes dans SON bloc), ses couleurs sont accrochées aux formes — le ruban le peint — et le CHENILLARD illumine ses formes par défaut. Les cases du panneau reflètent maintenant fidèlement l'état du calque à l'ouverture.
- L'ILLUMINATION DES FORMES — le début du chantier « chaque forme indépendante ». Quand les couleurs sont accrochées aux formes, un nouveau réglage du bloc Lumière fait briller chaque forme à son tour : CHENILLARD (la lumière parcourt les formes dans l'ordre — le loader classique), ALÉATOIRE (chacune clignote à son rythme, même séquence à chaque tour), VAGUE (une onde douce traverse), FONDU ENCHAÎNÉ (la moitié des formes respire ensemble et se passe le relais). Tout est calé sur le cycle — la boucle se rejoue à l'identique — le creux suit le curseur Force, et ça se combine librement avec l'effet de Lumière. Le réglage est persisté avec la scène.
- Note : la durée du tour (rotation) et le cycle des couleurs partagent le même tempo — c'est la boucle commune du calque, voulue pour l'export sans couture. Les COMMANDES, elles, sont désormais bien séparées : la rotation dans son bloc, les couleurs dans le leur.
- À VENIR (annoncé) : le mouvement PAR FORME dans Placement et déformation — agrandir l'une, réduire l'autre, éloigner, rapprocher, tourner, morphing, miroirs pour dupliquer, échos — combinables par forme et entre formes. C'est un chantier en plusieurs versions ; l'illumination des formes d'aujourd'hui en est la première pierre. L'export JS de l'illumination arrive avec ce chantier.
- LA BIBLIOTHÈQUE DES LOADERS EN VIGNETTES, comme celle des effets. Fini la liste de noms : chaque loader se MONTRE — dessiné petit dans sa carte, son nom dessous, les tiens dans leur rangée à part. Survole une vignette : le loader TOURNE (c'est un indicateur d'attente, le mouvement est sa raison d'être). Un clic le pose en nouveau calque, déjà en rotation dans la scène.
- L'EXPORT JAVASCRIPT DES LUMIÈRES EST COMPLET — le lot 2 porte les six effets à grains dans la page : PARTICULES, LUCIOLES, BOKEH, LASER, GUIRLANDE et CIEL ÉTOILÉ. Chaque grain est un disque au dégradé de son effet, monté dans le repère du calque — il suit sa matrice — et animé par les mêmes recettes qu'à l'atelier : errance des lucioles à vrais noirs entre deux éclats, dérive respirante du bokeh, vague de la guirlande, scintillement double des étoiles, traîne du laser.
- LE CONTOUR CÔTÉ PAGE : pour le laser et la guirlande, le navigateur marche lui-même le long des chemins du calque (longueurs cumulées, getPointAtLength) — mesurés une fois. Un calque VIVANT change de chemins à chaque image : ses grains suivent une orbite, comme à l'atelier.
- Les seize effets de lumière vivent désormais partout où la page vit — fond de page compris. Seul l'export C# (WPF) ne les montre pas encore : limite connue, dite dans les contrôles.
- LA LUMIÈRE PASSE DANS L'EXPORT JAVASCRIPT — premier lot. La fiche de chaque calque emporte désormais son effet de lumière et sa force, et la page les joue : NÉON (l'amorçage vacillant puis le ronron), STROBOSCOPE (huit éclairs par tour) et FILAMENT (la chauffe lente, la respiration, le rougeoiement d'extinction) modulent l'opacité du calque avec les MÊMES formules qu'à l'atelier ; le PULSAR monte ses quatre anneaux dans le repère du calque — ils suivent sa matrice, et le cœur comme la portée se mesurent sur la boîte réelle du dessin au premier rendu.
- Restent à porter (lot 2) : les effets à grains multiples — particules, lucioles, bokeh, guirlande, ciel étoilé, laser — qui demandent la fabrique de points et le contour côté page. L'export C# (WPF), lui, ne montre pas encore les effets de lumière : limite connue, dite dans les contrôles.
- LE BLOC LUMIÈRE EST COMPLET : les quatre derniers effets de la liste. GUIRLANDE LED — vingt-quatre ampoules de couleur (rouge, vert, bleu, jaune, rose) accrochées au CONTOUR du dessin, allumées en vagues qui font le tour, une veilleuse entre deux passages ; sans contour, elles se répartissent en orbite. FILAMENT — le dessin chauffe LENTEMENT (un quart du tour pour monter), respire une fois chaud, puis rougeoie avant de s'éteindre : l'inertie d'une ampoule à l'ancienne, l'anti-stroboscope. CIEL ÉTOILÉ — vingt-six étoiles fixes semées sur le dessin, chacune scintille à son rythme, un tremblement vif par-dessus un souffle lent. PULSAR — quatre ondes concentriques en quinconce partent du cœur, s'élargissent, s'amincissent et s'évanouissent, deux battements par tour.
- Seize effets de lumière au total désormais, tous calés sur le tour et réglés par le curseur Force. La guirlande partage le contour échantillonné du laser ; le filament partage le canal d'opacité du néon et du stroboscope.
- LE BLOC LUMIÈRE CONTINUE : trois effets, dans l'ordre annoncé. NÉON — le tube s'AMORCE en vacillant au début de chaque tour (des créneaux tirés d'un bruit haché : il claque, retombe, reprend, et la prise adoucit les creux), puis tient son éclat avec le léger ronron du transformateur ; le halo suit s'il est activé. STROBOSCOPE — huit éclairs nets par tour ; la Force creuse le noir entre deux flashs. LASER — un point chaud parcourt le CONTOUR du dessin avec sa traîne de rémanence, un tour de contour par tour d'animation : le contour est aplati et échantillonné une seule fois, la marche est à vitesse constante (longueurs cumulées, recherche dichotomique). Sur un effet vivant, sans contour fixe, le laser suit une orbite.
- Néon et stroboscope modulent l'OPACITÉ DU DESSIN lui-même — personne d'autre n'y touche, et elle revient à un dès qu'on quitte l'effet.
- Restent à venir, toujours dans l'ordre : guirlande LED, filament, ciel étoilé, pulsar.
- LE FOND DE PAGE. Une nouvelle case dans la fenêtre d'export JavaScript : « Fond de page — l'animation couvre tout le navigateur ». Cochée, demarrer() étale l'animation sur TOUTE la surface de la fenêtre, DERRIÈRE le contenu du site : le conteneur est fixé aux quatre bords et passé sous la page, le dessin COUVRE la fenêtre en gardant ses proportions, et le redimensionnement du navigateur est suivi tout seul — aucun code à écrire, aucun CSS à copier : le script style son conteneur lui-même, chez toi comme sur n'importe quel site (« demarrer('#logo', { fond: true }) »). Les clics traversent l'animation, la page reste entièrement utilisable. Les curseurs de taille sont alors sans effet, et l'export C# n'est pas concerné.
- LA BIBLIOTHÈQUE DES LOADERS. Cent dix indicateurs d'attente intégrés — anneaux, points qui tournent, barres, cœurs, engrenages, gouttes — accessibles par un nouveau bouton de la barre d'actions. Le choisi arrive en NOUVEAU CALQUE, déjà en rotation : ses animations SVG d'origine sont ignorées, c'est Iridis qui l'anime — rotation continue, ruban de couleurs (toutes les formes sont marquées animées), bloc Lumière. Les tirages « currentColor », noirs à la lecture, passent au blanc. Tes propres SVG déposés dans Documents/Iridis/loaders apparaissent dans la même liste.
- LE BLOC LUMIÈRE S'AGRANDIT : deux effets nouveaux. LUCIOLES — des points chauds errent autour du dessin sur des chemins qui ne repassent jamais exactement, s'allument et s'éteignent en douceur, chacun à son rythme. BOKEH — de grands disques flous et colorés (bleus, verts, un jaune) dérivent lentement et respirent, comme l'arrière-plan d'un objectif ouvert. Le curseur Force règle l'éclat des unes et la présence des autres. Particules, lucioles et bokeh partagent le même canvas, rebâti proprement quand on change d'effet.
- La suite du bloc lumière est engagée : néon, stroboscope, laser, guirlande, filament, ciel étoilé et pulsar viendront par lots — dis lesquels tu veux en premier.
- LE PREMIER AFFICHAGE D'UN ONGLET EST CHAUD. Le tout premier clic sur un onglet payait DEUX dettes d'un coup : la matérialisation de tous ses curseurs (gabarits, mesure — le système ne la fait qu'au premier affichage, d'où le deuxième clic instantané), et une construction partie sur UNE colonne faute de connaître la largeur, aussitôt reconstruite à trois. Deux réponses : le COMPTE DE COLONNES est désormais SAUVEGARDÉ d'une session à l'autre — la première construction part directement au bon compte — et les panneaux jamais montrés sont PRÉCHAUFFÉS à l'ouverture, mesurés hors écran quand le fil est calme : le premier clic les trouve déjà prêts.
- LE CHANGEMENT D'ONGLET NE TRAÎNE PLUS. Les colonnes de paramètres mettaient trois à cinq secondes à se poser : au changement d'onglet, QUATRE événements (le chargement, sa reprise au Dispatcher, la mise en page, le retour visible) reconstruisaient CHACUN le panneau entier — des dizaines de blocs de curseurs reparentés trois ou quatre fois de suite, chaque fois à une largeur différente, le tout entrelacé avec l'animation qui occupe le fil d'affichage. Ces reconstructions sont désormais COALESCÉES dans un même délai de cent vingt millisecondes : il n'en reste UNE, à la largeur définitive. La toute première construction d'un panneau et les étapes du glissement de blocs restent immédiates.
- LA FIN DÉCROÎT, UN POINT C'EST TOUT. Le va-et-vient des dernières secondes — l'effet s'estompe, reprend vie, s'estompe et refusionne — venait de l'extinction laissée OUVERTE en 4.68 : à côté de chaque blob qui fond, un blob NEUF naissait de la matière qui tombe encore, regrossissait par absorption, fondait à son tour, un autre naissait… Le verrou du rideau est de retour : passé 62 pour cent du cycle, plus rien n'entre dans le tas — la masse ne fait plus que fondre, chacun à son heure, jusqu'au fondu final. Mesuré sur un cycle réel : zéro remontée d'aire après le rideau.
- Et sans retrouver le fourmillement d'avant : les flocons qui tombent encore ne stagnent plus (leur repos ne recule plus pendant l'extinction depuis la 4.68), ils fondent au contact et se garent. L'étincelle d'impact se tait aussi passé le rideau — elle regonflait brièvement chaque flocon tardif, un battement de plus dans une fin qui doit décroître.
- Note : en boucle, « Durée au contact » ne pilote pas la fonte du tas — les heures de fonte sont celles du cycle. C'est pour ça que le réglage ne changeait rien au va-et-vient.
- L'ONGLET DU TITRE PASSE AU-DESSUS DE LA BORDURE. Il flottait juste au ras de la coque, laissant voir le trait supérieur du cadre sous son bord. Il descend maintenant de quelques pixels de plus et passe au premier plan : son fond recouvre le trait, l'onglet semble sortir de la coque d'un seul tenant.
- LA VARIATION EST LÀ : UN CURSEUR « GRAINE ». La graine du hasard existait, nourrissait la semence et partait à l'export — mais aucune commande ne l'exposait : la même chute retombait éternellement, le même ergot revenait toujours au même endroit. Le curseur (0 à 500, dans le bloc du vivant) tire une chute entièrement différente à chaque valeur — et la graine est désormais BRASSÉE : brute, ses coefficients étaient si petits que deux graines voisines se ressemblaient. La boucle, elle, rejoue la MÊME chute à chaque cycle : c'est ce qui rend l'export sans couture — si un détail déplaît, change la graine jusqu'à ce qu'il disparaisse. La bulle d'aide le dit.
- LA LIGNE DE BASE NE POMPE PLUS. Un dépôt du sol qui fondait à mi-cycle pendant que la neige tombe encore laissait un trou aussitôt rebouché par un blob neuf qui regrossit — les bulles qui disparaissent et réapparaissent. Au sol, la fonte est TARDIVE et resserrée (quatre-vingt-huit à quatre-vingt-seize pour cent du cycle) : la congère ne fait que croître, puis fond juste avant le fondu de fin. Sur les parois, la fonte échelonnée garde son charme.
- LA FIN DE BOUCLE, REPRISE À LA RACINE. Le tas fermé pendant l'extinction (4.57) laissait les flocons tardifs STAGNER en corps vibrants sur les lettres et la ligne de base — le fourmillement, et une ligne amaigrie puisque cette matière n'entrait jamais dans la masse. L'extinction ACCEPTE désormais la matière : ce qui touche entre dans le tas — dépôt neuf ou absorption — et la ligne de base garde sa fusion complète jusqu'au bout. Deux garde-fous font que la boucle se referme quand même : un dépôt né tard reçoit une heure de fonte bornée (au moins six pour cent du cycle de vie, mort avant quatre-vingt-seize pour cent — il était parfois MORT-NÉ, son heure tirée déjà passée), et un blob dont l'heure est passée n'est JAMAIS nourri — le clignotement des dernières secondes reste éteint.
- Le repos renforcé : pendant l'extinction, un flocon en CONTACT récent mûrit même s'il vibre — ce que le plafond du tas refuse finit quand même par fondre et se garer, plus rien ne stagne.
- La fusion disparaît progressivement, rien ne se retransforme en morceaux : la matière visible de fin de cycle est faite de dépôts soudés qui fondent chacun à son heure.
- LA BOUCLE INFINIE DE LA PAGE, ENFIN VRAIE. Au premier repli du cycle, le script appelait une fonction de resemis… qui n'existait pas : la page mourait net à la fin du premier tour — « pas de boucle infinie en javascript ». Le défaut dormait depuis la 4.55 : toutes les épreuves passaient par la branche de secours, jamais par le repli propre. La fonction existe désormais (fidèle au C# : anneaux ET dépôts vidés, sans semence on ne resème pas), la branche de secours l'appelle aussi, et une épreuve traverse trois cycles complets à cadence continue.
- LE FOURMILLEMENT DE FIN DE BOUCLE ÉTEINT. Après le rideau, les flocons qui tombent ne peuvent plus se déposer : entassés sur les lettres et la ligne de base, ils vibraient, et chaque secousse remettait leur repos en arrière — jamais fondus, jamais garés. Ce n'était ni la fusion qui « redevenait des morceaux », ni un amalgame fantôme : c'étaient ces flocons-là. Pendant l'extinction, le repos ne recule plus : tout ce qui touche finit par fondre — rétrécit en douceur — puis se gare. La fusion, elle, disparaît progressivement comme avant, rien ne se retransforme.
- LA PAGE EXPORTÉE ACCÉLÈRE : chaque disque de matière était tracé en quarante-huit segments — à deux mille cinq cents formes par image, ce seul formatage engloutissait plus de la moitié du temps de calcul et noyait le navigateur sous les caractères. Le pas suit désormais la taille : dix points pour les petits flocons, seize pour les moyens, quarante-huit pour les grands cercles qui gardent toute leur rondeur. Le chemin reste fait de PAIRES x y — transformations, symétries, perspectives et mesures le lisent exactement comme avant. Mesuré sur une scène de deux mille huit cents corps : le calcul d'une image passe de 226 à 143 ms, et la page envoie deux fois et demie moins de texte au navigateur.
- Ce qui reste lent à cette charge est la PHYSIQUE elle-même — deux mille corps entassés dans le tas se testent mutuellement à chaque pas. Le geler pour les morceaux posés de longue date est le prochain chantier de fond si la cadence ne suffit pas encore.
- Le nombre de boucles de la page est vérifié sain : à zéro — « à l'infini » — rien n'est écrit dans demarrer() et aucun gel ne se déclenche ; c'est la lenteur qui masquait le repli du cycle.
- LA LIGNE DE BASE SE SOUDE ENFIN. Trois limites bornaient la congère : un blob PLEIN (quatre fois le rayon du morceau) cesse d'absorber — c'est elle qui découpait la ligne en blobs séparés —, le sol ne garde que la moitié du plafond des dépôts, et l'absorption ne fouille que les deux cents derniers dépôts. La première suit désormais le curseur : à fusion quatre, un blob absorbe jusqu'à seize rayons — les congères se rejoignent en une ligne continue au lieu d'une file de blobs pleins. Les deux autres limites restent (elles protègent la mémoire et la fluidité), et la force de POSE reste bornée à un : la force pleine ne sert qu'au plafond.
- LES BULLES D'AIDE PARLENT AU PRÉSENT : les tournures qui racontaient l'histoire du logiciel sont réécrites — chaque bulle décrit ce que fait le réglage, rien d'autre. Celle de « Fusion ligne de base » explique aussi la force au-delà de un.
- Le popup d'aide s'ouvre dix points plus à droite : il ne recouvre plus le curseur qu'il décrit.
- CHAQUE DÉPÔT SUIT SON CURSEUR. L'arrondi des 4.61-4.62 prenait le MAXIMUM des six curseurs pour tout le tas : monter « Fusion ligne de base » arrondissait aussi les morceaux au contact du conteneur — les rôles étaient mélangés. Le dépôt porte désormais son drapeau SOL dans la photo (à côté du drapeau lisse), et le rendu choisit le curseur de CE dépôt : au sol, « ligne de base » ; contre une paroi, le plus fort des deux curseurs de paroi. La fusion pilote les lisses, l'amalgame les grains, chacun chez soi.
- Éprouvé sur le code réel, photo comprise : un dépôt lisse de paroi porte le drapeau lisse seul, un grain du sol porte le drapeau sol seul — contre-éprouvé.
- L'EXPORT DÉCALÉ, TROUVÉ : le gabarit de la page applique depuis toujours la translation « zone de travail » à tous les calques — et les matrices de la 4.61, déjà traduites en repère de scène, la recevaient EN PLUS : sur une scène de huit cents par six cents, tout partait de cent unités à gauche et deux cents vers le haut, le logo semblait trop grand et décentré. Les matrices sont désormais émises dans le repère attendu par le gabarit — le carré de mille unités centré — et le gabarit fait la conversion vers la fenêtre, comme il l'a toujours fait. La chaîne complète est vérifiée numériquement : le centre de la scène atterrit au centre du viewBox.
- « FUSION LIGNE DE BASE À 4 NE FAIT RIEN », résolu : l'arrondi de la 4.61 ne mordait que sur les dépôts ENTOURÉS — or la congère de la ligne de base est faite de GROS blobs isolés, zéro voisin, zéro effet. Désormais même un dépôt seul GONFLE avec la force, et la PORTÉE des voisins s'élargit avec elle : à quatre, les blobs espacés se comptent enfin voisins et se soudent en une ligne continue et ronde.
- LA FENÊTRE D'EXPORT PRÉREMPLIT largeur et hauteur à la taille de la scène réglée (zéro — « scène » — reste possible), et le lien des proportions suit le VRAI ratio de la scène au lieu du trois quarts figé.
- LE NOMBRE DE BOUCLES ENTRE DANS LA FENÊTRE D'EXPORT : un curseur « Boucles » (zéro : à l'infini) — c'est bien là qu'il se règle le plus naturellement — et son choix s'écrit directement dans l'appel demarrer() de la page produite ({ boucles: N }). Il reste modifiable après coup dans le HTML.
- LE FLASH DE FIN DE BOUCLE, TROUVÉ ET RÉSOLU. Quand la scène est vide — tout a fondu — le découpage du ruban devenait nul, et un vieux secours le remplaçait par les PAROIS entières : le dégradé peignait tout le dehors d'un aplat clair pendant quelques images. Scène vide = découpage vide, zéro pixel peint, comme la page exportée — le flash disparaît.
- L'EXPORT RÉPARÉ POUR DE BON : la 4.60 posait le bon viewBox mais laissait les matrices dans le repère du CANEVAS — d'où le logo coupé. Chaque matrice est désormais TRADUITE (origine ramenée au coin de la fenêtre de scène, échelle ramenée aux unités de scène) : la page montre la fenêtre, l'étendue est simulée au-delà du champ, les percussions restent hors de la vue.
- LE NOMBRE DE BOUCLES : la page accepte demarrer('#logo', { boucles: 3 }) — trois cycles de la boucle de matière la plus longue, puis GEL sur la dernière image ; zéro ou rien, à l'infini. Pour l'APNG, le curseur « Boucles » existait déjà dans la fenêtre d'export animé (deuxième ligne, 0 = à l'infini) : il est branché sur le compteur de répétitions du fichier.
- LA FORCE ARRONDIT AU-DELÀ DE 1 : les six curseurs de fusion et d'amalgame montent à 5. La matière reste bornée — monter le curseur ne multiplie pas les dépôts — mais la SOUDURE grandit avec la force : les creux entre disques se comblent, les angles et les pics s'effacent, la masse devient galet. La fusion arrondit les lisses, l'amalgame arrondit les grains.
- L'onglet du titre descend de deux pixels et passe au coloris #16161A.
- LA PAGE EXPORTÉE PREND LA TAILLE DE LA SCÈNE, PLUS CELLE DU CANEVAS. Le canevas de l'atelier s'agrandit avec la ZONE ÉTENDUE : la page exportée héritait de cette taille-là et montrait donc toute l'étendue — parois comprises, là où les morceaux butent, exactement ce que la zone agrandie devait cacher. La page reprend désormais la fenêtre de la scène réglée ; l'étendue reste entièrement SIMULÉE — le cadre de la matière la lisait déjà — mais elle déborde du champ comme à l'atelier : les percussions se font hors de la vue. Éprouvé sur la scène réelle : le bas de l'étendue (802) dépasse le bord visible (800).
- Le flash de fin de boucle est cherché : les sondes du repli sont plates (le monde se resème proprement, même quand une image lente saute le dernier pas). La cause n'est pas dans la matière — la question est posée pour situer l'endroit exact.
- LE TOUR DES COULEURS SE CALE SUR LA BOUCLE. Quand la boucle de l'effet est armée, un tour qui n'en est pas un diviseur entier fait sauter le dégradé au repli. Le tour réglé est désormais arrondi au diviseur le plus proche — dix-neuf secondes sur une boucle de vingt donnent vingt ; sept donnent trois tours exacts — et le recalage suit le curseur de la boucle en direct. Boucle coupée, le réglage s'applique tel quel.
- L'ÉTINCELLE D'IMPACT : le morceau qui vient de toucher grossit brièvement puis revient — la neige scintille là où elle se pose, sur les lettres comme sur la ligne de base. (Un vrai halo lumineux par flocon demanderait un pinceau par forme — hors de portée du calque monochrome ; le scintillement de taille en donne la sensation.)
- L'EXPORT D'UN CYCLE EXACT : « Durée qui ne saute pas » regarde d'abord la matière — un calque vivant en boucle ne se replie qu'à SA boucle, la durée du cycle exporté, c'est elle. Les couleurs étant déjà calées dessus, la vidéo boucle sans couture du premier au dernier pas. Le curseur de durée monte à soixante secondes, à la mesure de la boucle.
- LA PARITÉ DES COPIES DEVIENT UN CONTRÔLE PERMANENT. Le portage duplique ses fonctions et ses blocs de rendu dans deux modules, et une copie restée en arrière ne se voyait NULLE PART — c'est ainsi que la page exportée avec récipient a vécu neuf versions sur un rendu périmé. Désormais chaque livraison compare les copies de douze fonctions et des deux blocs de rendu : toute divergence est une erreur, contre-éprouvé.
- Audit complet mené sur le reste : les quatre fabriques posent des durées sans échelle mais l'ACCORD les écrase toujours (vérifié : quatre Obtenir, quatre enveloppés) ; les horloges de bascule et de délai des lettres vivent en temps de scène, hors du monde de matière — l'échelle ne les concerne pas ; les copies JS sont aujourd'hui toutes identiques.
- LA FIN DE BOUCLE EST UN FONDU ENCHAÎNÉ, PLUS UNE COUPE. Deux défauts faisaient le chaos des dernières secondes. D'abord le CLIGNOTEMENT : les blobs en train de fondre étaient encore NOURRIS — chaque morceau reçu les regonflait d'un coup. Passé l'heure du rideau, plus rien n'entre désormais dans le tas, ni dépôt neuf ni absorption : la fonte est un chemin à sens unique. Ensuite la COUPE : ce qui n'avait pas fini de fondre — flocons encore en vol compris — était tranché net par le repli. Sur les huit derniers centièmes du cycle, TOUT ce qui reste fond maintenant ensemble vers zéro : le dernier morceau disparaît en fondu pile à la fin, et la première image de la boucle suivante naît sur une scène vide.
- LA BOUCLE PREND TOUT EN CHARGE : « Durée au contact » n'a AUCUN effet quand la boucle est armée — inutile de la régler à la durée de la boucle, remets-la à sa valeur de goût (5,9 s), elle reprendra son sens dès que la boucle sera coupée. En boucle, c'est l'heure de fonte de chacun qui décide, et le fondu de fin éteint de force tout retardataire.
- Et une trouvaille au passage : la SECONDE copie du rendu du tas dans le portage — celle de la page exportée avec récipient — était restée à la 4.48 (champ de potentiel gonflé, usure précoce). Elle est remise au niveau : disques à taille réelle, soudure, usure tardive, fondu de fin.
- LE LAG DE L'INTERFACE, TROUVÉ ET MESURÉ. La grille des contacts se dimensionne sur la BOÎTE ENGLOBANTE des corps — or les dormeurs du lancer étalé et les flocons rangés par le rideau de fin de boucle vivent à cinquante mille unités sous la scène, étagés par rang. Avec eux dedans, la boîte mesurait jusqu'à cent quarante mille unités de haut : des CENTAINES DE MILLIERS de cases allouées et remises à zéro trois fois par image, soixante fois par seconde. C'était le lag — permanent dès que le lancer étalé est réglé, écrasant une fois la boucle finie quand tous les flocons sont garés.
- La simulation ne travaille plus que sur les corps EN SCÈNE : les garés, à cinquante mille unités du premier vivant, n'ont aucun contact à offrir. Et ils ne fabriquent plus de FORME non plus : deux mille géométries hors scène se mesuraient et se rastérisaient pour rien à chaque image.
- Mesuré : cent vingt pas avec cinq cents garés passaient de trois secondes trois à CENT SOIXANTE-SIX MILLISECONDES — vingt fois moins. L'épreuve chronométrée verrouille le gain : cinq cents garés ne peuvent plus coûter plus de trois fois la scène nue.
- LA BOUCLE DEVIENT UN CYCLE COMPLET. Le réglage « Boucle de l'effet » existait (famille Forces du calque, en secondes) mais ne faisait que replier le temps : le repli coupait au milieu de l'effet, et les tas fondaient PENDANT que la neige tombait — pas crédible. Désormais la boucle raconte l'histoire entière : la neige TOMBE et S'ACCUMULE — aucun dépôt ne fond tant qu'il neige — puis, dans le dernier tiers du cycle, le lancer S'ARRÊTE (chaque flocon qui touche se gare hors scène, le ciel se vide) pendant que le tas FOND, chaque dépôt à son heure propre ; tout est fondu au repli, et ça recommence du début, arrivée étalée comprise. La dernière image rejoint la première : l'export en boucle est sans couture.
- Hors boucle (curseur à zéro), rien ne change : la neige vit sans fin et la durée au contact garde son sens.
- La composition « Neige sur lettres » boucle désormais sur vingt secondes.
- Deux épreuves neuves qui traversent le code réel du pas de monde, chacune contre-éprouvée : un dépôt né tôt survit trois fois sa durée ordinaire sous la neige et rien ne survit à quatre-vingt-quinze pour cent du cycle ; dans le dernier tiers les flocons fondus se garent et plus aucun ne renaît.
- LA FUSION FUSIONNE, ENFIN. Elle n'avait pas de mécanique propre : lisses ou grains, tous les dépôts s'empilaient pareil — la fusion était un amalgame qui ne disait pas son nom. Désormais un morceau LISSE qui touche un dépôt lisse est ABSORBÉ : le blob enfle à aire constante avec chaque morceau, sans consommer une place — partout, plus seulement au sol. Les grains de l'amalgame, eux, s'empilent en butte et restent des grains : les deux effets sont enfin distincts.
- « ÇA SE PRODUIT UNE FOIS PUIS PLUS JAMAIS », résolu : le plafond était testé AVANT l'absorption. Une fois plein — vite, avec des flocons fins — plus rien ne bougeait. L'absorption passe désormais d'abord : un tas plein n'accueille plus de dépôt neuf mais continue de NOURRIR ceux qui existent, mesuré par l'épreuve.
- LE FOURMILLEMENT, résolu : l'usure maigrissait les disques dès la naissance — à mi-vie un dépôt était déjà réduit de moitié, et le mélange des âges faisait une poussière mitée. La neige reste pleine les trois quarts de sa vie, puis fond vite, chacun à son heure.
- PLUS DE STALAGMITES : LE TAS FAIT UNE BUTTE. L'empilement montait droit à l'aplomb — une tour d'un morceau de large par colonne d'arrivée, les pics disgracieux des captures. Comme la vraie neige, dont les flocons ROULENT au bas de la pente, un morceau dont la place est prise cherche désormais d'abord À CÔTÉ du dépôt qui bloque, au même niveau ; puis dans ses CREUX, une demi-hauteur plus haut ; et à son aplomb en tout dernier recours. Chaque morceau a son côté préféré, tiré de son rang, pour que la butte ne devienne pas un talus d'un seul bord. Le tas s'élargit avant de monter et s'arrondit en blob — mesuré : trente morceaux tombés au même point font une butte plus LARGE que haute, là où l'aplomb seul dressait une colonne.
- Les disques à taille réelle et la soudure aux voisins font le reste de l'arrondi ; l'absorption de la congère au sol est inchangée.
- LES COULEURS ROUVERTES NE SAUTENT PLUS. Le panneau tient SA copie de la couleur unique — c'est elle que la roue modifie — et l'application des couleurs pousse cette copie vers l'affichage. L'import posait la couleur sur le seul affichage : à la première application, déclenchée par la case elle-même à l'ouverture, la copie du panneau restée au vert d'origine ÉCRASAIT la couleur du fichier. Un projet rouvert perdait ses couleurs sur TOUS les calques — conteneur comme contenu — puis les réexportait fausses. La couleur va désormais au panneau AVANT la case, à l'import comme dans les compositions.
- L'audit demandé a débusqué le même défaut sur l'ENCRE personnalisée (écrasée de blanc au premier passage par la liste), corrigé pareil ; la couleur de l'anneau, elle, passait déjà par le bon chemin.
- Et un garde-fou permanent : toute copie privée du panneau poussée vers l'affichage doit déclarer son chemin d'import — une nouvelle couleur à copie double sans ce chemin fera crier la livraison.
- LA CONGÈRE DU SOL, ENFIN. Le plafond partagé limite le NOMBRE de dépôts, et de fins flocons n'en faisaient qu'une ligne granuleuse — deux cent vingt-cinq points d'un rayon ne feront jamais un amas, quel que soit le réglage. Au sol, un morceau qui arrive sur un dépôt existant est désormais ABSORBÉ : le dépôt grossit à aire constante, la congère gonfle avec CHAQUE morceau tombé sans consommer une place de plus, et une fois pleine l'empilement prend le relais et le tas monte.
- ET ÇA REPART EN HAUT : les durées réglées en secondes valent maintenant des secondes RÉELLES. Le repos se compte en pas de monde, et l'échelle de temps ralentit le monde — sans elle dans le calcul, la durée au contact de six secondes en durait DIX-SEPT à l'écran avec l'échelle à trente-cinq centièmes : la neige s'entassait au sol trois fois plus vite qu'elle ne repartait, et le ciel se vidait. La durée au contact, la vie du tas et la boucle de l'effet suivent toutes l'échelle.
- Mesuré sur la scène réelle : les retours vers le ciel passent de dix-sept à quarante et un sur la même durée, et le sol forme vingt et un dépôts dont seize gros au lieu de deux cent vingt-cinq grains. Deux épreuves neuves, contre-éprouvées — celle des durées appelle l'ACCORD réel du portage, pas une copie de sa formule.
- Les COULEURS de « Neige sur lettres » sont celles de la scène éprouvée : un texte pourpre profond sous une neige franchement blanche, sur le fond sombre déjà posé par la composition. Le bleu ardoise d'origine restait en place alors que tous les autres réglages avaient été repris.
- LE TAS EST FAIT DES MORCEAUX EUX-MÊMES, À LEUR TAILLE. Il passait par un champ de potentiel avec un plancher de deux points et un facteur d'une fois et demie. Or l'ÉPAISSEUR compte autant que la taille dans le rayon d'un morceau : à une demi-épaisseur et un quart de taille, un flocon mesure environ UN point — la masse sortait donc trois à cinq fois plus grosse que la matière qui la formait, et à son maximum dès les premiers arrivés. Pire : sous cette finesse, les bulles passaient entre les points de mesure de la grille et la ligne de base ne montrait RIEN, quoi qu'on règle.
- Chaque dépôt est désormais rendu tel qu'il est : un disque de SON rayon, à peine soudé à ses voisins quand il en a. Les contours tournant tous dans le même sens, ceux qui se chevauchent s'unissent d'eux-mêmes en une masse continue. Le tas occupe exactement la place des morceaux tombés, il grandit avec eux, et il suit l'épaisseur comme tous les autres réglages de taille — à toutes les finesses, la ligne de base comprise.
- Les réglages de la scène éprouvée deviennent ceux de « Neige sur lettres » : flocons à vingt-huit centièmes et demi-épaisseur, cinq cent quarante-six morceaux, viscosité pleine, virevolte douce, tas plus discret sur le texte que sur la base, six secondes de tenue, arrivée sur six secondes, et le cadre d'effets à sa mesure.
- LA MASSE NAÎT DU NOMBRE DE MORCEAUX. Un dépôt SEUL formait déjà sa bulle de deux rayons : dès les premiers flocons le tas paraissait à son maximum, et il n'avait plus nulle part où grandir. Chaque dépôt compte désormais ses voisins : au-dessous de trois, il reste un GRAIN distinct ; au-dessus, il entre dans la masse — quelques grains d'abord, une nappe ensuite, qui grossit à mesure qu'ils s'accumulent. Sa portée est resserrée d'autant : c'est l'accumulation qui fait la masse, plus la bulle d'un seul.
- ET LA LIGNE DE BASE SE FUSIONNE ENFIN : les masses de fins flocons passaient ENTRE les points de mesure de la grille et ne se voyaient pas du tout. La grille est presque deux fois plus fine.
- Le coût est tenu : le comptage des voisins ET le champ de la masse passent par une grille de cases. Mesurés contre tous les dépôts, ils auraient coûté des millions d'opérations par image dès que le tas grossit — le lag serait revenu par la fenêtre.
- Vérifié par la mesure, avec les réglages de la scène réelle : les morceaux posés au fond du cadre SONT bien recyclés et redeviennent des flocons — vingt et un retours pour dix morceaux en quatre cents pas.
- LE TAS MONTE AU LIEU DE S'ÉTALER. Un morceau qui arrivait sur une place déjà prise était simplement refusé : le tas restait une couche d'un seul morceau d'épaisseur — la ligne plate qu'on voyait sur la ligne de base. Il se pose maintenant SUR ce qui s'y trouve, d'un rayon plus haut, jusqu'à douze étages, dans la direction opposée à la pesanteur. C'est l'amoncellement, enfin.
- ET LE CIEL NE SE VIDE PLUS. Les morceaux recyclés renaissaient AU-DESSUS du cadre — or la paroi contient la matière : ils étaient donc aussitôt plaqués contre le bord, TOUS à un rayon de lui, comptés comme posés et refondus sur place. Ils ne redescendaient jamais et se relarguaient en boucle. La renaissance se fait désormais DANS le cadre, échelonnée sous son bord haut, comme le semis du début ; la hauteur de diffusion fait toujours partir de plus haut si on la règle.
- Deux épreuves de plus, chacune contre-éprouvée sur la mesure : sans l'empilement un seul dépôt tient la place, et sans la correction de la renaissance tous les relâchés sortent collés au bord.
- LES MORCEAUX POSÉS SONT ENFIN RECYCLÉS. Un corps arrêté ne s'enfonce plus dans le sol : il s'arrête pile à son rayon. Or le contact ne se marquait qu'à la PÉNÉTRATION — immobile, un morceau passait donc pour « en vol », sa durée au contact ne montait jamais, et il n'était JAMAIS recyclé : la matière s'agglutinait au sol pendant que le ciel se vidait, et plus aucun tas ne se formait ensuite. Le contact se marque désormais à PORTÉE, une marge d'un point et demi. C'est la cause commune de trois des quatre défauts signalés.
- LA BASE NE MANGE PLUS TOUT : large et plate, la ligne de base reçoit bien plus de contacts que les lettres et saturait le plafond à elle seule — une ligne de tas en bas, presque rien sur le texte. La moitié des places lui est réservée, l'autre au dessin, et les deux forces sont égales par défaut : même neige sur le conteneur et à la base.
- LA MASSE GROSSIT PLUS DOUCEMENT : sa portée se prend sur le rayon de CHAQUE morceau déposé, non plus sur la taille générale du calque. De fins flocons gonflaient aussitôt en gros paquets ; le tas monte maintenant à mesure qu'ils s'accumulent.
- « Durée au sol » devient « Durée au contact » — elle règle aussi bien la fonte d'un morceau posé que l'effacement d'un tas, morceau par morceau — et sa borne haute passe à trente secondes.
- Épreuve dédiée au recyclage, contre-éprouvée, et deux garde-fous de plus au contrôle statique.
- Les titres des groupes de réglages en accordéon prennent la teinte d'ACCENT, chevron compris, et un trait légèrement gras. Dans une colonne de curseurs, ces en-têtes sont les seuls repères de structure : en gris clair, ils se confondaient avec les libellés qu'ils regroupent.
- PLUS DE POINTS NOIRS SUR LA MATIÈRE. Les figures d'un calque sont réunies en règle « nonzero » : deux contours de sens OPPOSÉ qui se chevauchent s'y ANNULENT, et le chevauchement devient un trou — un point noir, comme un négatif. C'est ce qui se produisait quand un flocon retombait sur un tas déjà posé : les contours du tas et ceux des flocons ne tournaient pas dans le même sens. Tout contour fermé sort désormais dans le sens commun — la figure remplie est exactement la même, seuls les chevauchements changent, et ils s'unissent au lieu de se percer. Des deux côtés du miroir, avec son épreuve et son garde-fou.
- LE TAS RETOMBE SUR LES LETTRES. Le décalage entre le dessin et le conteneur qui reçoit la neige venait d'un REMONTAGE PERDU : le recadrage des calques se décidait en comparant la donnée à elle-même. Or la donnée était posée dès le premier appel, même quand le montage était sauté parce qu'un cadre était en train d'être glissé ; aux appels suivants elle était déjà à jour, le remontage n'était donc plus jamais demandé, et le calque gardait à l'écran sa vieille fenêtre pendant que sa taille, elle, suivait. Deux calques montés de part et d'autre d'un glissement se retrouvaient à deux échelles — d'où le tas qui ne tombait plus sur le texte, d'autant plus loin que la zone avait été agrandie ou réduite.
- Chaque calque retient désormais la fenêtre qu'il a RÉELLEMENT montée, et c'est elle qu'on compare. Les trois relâches du glissement — cadre déplacé, poignée tirée, fin du différé — recadrent avant de rejouer les mondes, si bien qu'un montage sauté est toujours rattrapé.
- Vérifié au passage, par la mesure : la paroi que voit la neige et le dessin rendu du conteneur coïncident au dixième de point près, à toutes les tailles de conteneur. Le défaut n'était pas dans le moteur.
- LA PAGE EXPORTÉE REMONTE. Dans le JavaScript livré, la boîte de découpe d'un calque portait le même nom que la zone de travail : « enveloppe ». Or un « var » remonte en tête de SA fonction — la locale masquait donc la zone pendant TOUT le parcours des calques, même quand sa branche n'était pas prise, et la page s'arrêtait au premier calque sur « enveloppe is undefined ». Les deux boîtes ont désormais chacune leur nom.
- ET UN CONTRÔLE VEILLE : le gabarit de la page exportée ne peut plus déclarer deux fois le même nom sans que ce soit nommé et justifié. Ce JavaScript-là n'est relu par aucun compilateur — le défaut ne se voyait qu'à l'ouverture de la page dans un navigateur.
- LE TAS DE NEIGE, ENFIN CE QU'IL DOIT ÊTRE. L'amalgame et la fusion changeaient l'état des morceaux eux-mêmes — la scène perdait donc du monde, et des masses volaient. Désormais, un morceau qui touche une surface y laisse une COPIE de lui-même et POURSUIT SA ROUTE : le tas est un surplus, personne ne quitte la scène.
- ET IL SE POSE SUR LE DESSUS, NULLE PART AILLEURS. La normale du contact décide : tournée contre la pesanteur, il y a dépôt ; sur un flanc ou sous une surface, rien. La direction du dessus suit la PESANTEUR réelle — gravité centrale comprise, le tas se pose du bon côté quel que soit le réglage.
- LE TAS EST BORNÉ par le curseur : tant de morceaux accumulés au plus, et pas deux dépôts au même endroit.
- LA DURÉE DE VIE, RÉPARÉE : chaque dépôt meurt à SON heure, comptée depuis SON arrivée. Le tas se creuse par endroits au lieu de disparaître d'un bloc — et le curseur mord vraiment, à toutes ses valeurs.
- LA BOUCLE DE L'EFFET : nouveau réglage. Passé le temps choisi, la matière repart exactement de son premier instant — l'animation se rejoue sans couture, ce qu'un export cyclable demande. À zéro, elle vit sans fin comme avant.
- L'AUDIT DES RÉGLAGES, en contrôle permanent : pour chacun des quatre-vingts et quelques réglages, il vérifie qu'il est lu par le programme, exposé dans l'interface, expliqué par son « i », enregistré dans la scène, relu à l'ouverture et reproduit par le portage JavaScript. Un curseur qui bouge sans rien changer ne passe plus la livraison. Les exemptions sont nommées une à une, avec leur raison.
- « Neige sur lettres » reréglée : le tas se forme sur le dessin et sur la ligne de base, aucun amalgame latéral, douze secondes de tenue, et une boucle de vingt secondes.
- LA FUSION VIT DU CONTACT, ET DE RIEN D'AUTRE. La boucle qui fait retomber la fusion n'était armée que par l'AMALGAME : un calque réglé en fusion seule ne passait jamais par là, si bien qu'un corps touché une fois restait fusionné à vie et emportait sa masse en plein ciel — les blocs blancs qui volaient loin de tout tas venaient de là. La fusion arme désormais cette boucle elle aussi, et une masse détachée de la paroi, de la base ou d'un voisin se sépare NET au lieu de s'affaiblir doucement.
- CE QUI MEURT QUITTE LA MASSE : un corps en train de s'effacer perd sa fusion au fur et à mesure du fondu, au lieu de tenir la masse jusqu'à sa dernière image. Le fondu s'applique là où le rendu lit la fusion — le contact la reposait à plein à chaque pas.
- PAS DE MASSE SOLITAIRE : un corps fusionné sans voisin fusionné à portée retourne à la pluie des pastilles au lieu de dessiner son propre petit losange. Une masse se fait à plusieurs.
- ET ELLE N'A PLUS D'ARÊTES : le contour d'une nappe passe par deux passes d'arrondi (procédé de Chaikin) sur une grille plus fine — un amoncellement de neige, pas un assemblage de carreaux. Le liquide, lui, garde son tracé d'origine.
- Épreuve dédiée en quatre points, chacune contre-éprouvée, et quatre garde-fous au contrôle statique.
- LA NEIGE TRAVERSE ENFIN LA SCÈNE. Un flocon était déclaré « posé » sur sa seule LENTEUR : avec une neige légère, visqueuse et qui virevolte, il l'est dès sa naissance — il fondait donc à mi-hauteur et renaissait en haut, et toute la matière s'entassait sous le bord supérieur en masse compacte sans jamais descendre. Posé veut désormais dire IMMOBILE ET AU CONTACT de quelque chose : le sol, une lettre, un tas, un voisin. Le contact est marqué aux trois sites de collision, des deux côtés du miroir, et une épreuve le tient : un corps lent qui ne touche rien ne fond pas, un corps posé fond toujours.
- LE MASQUE SUIT LA ZONE AU CHARGEMENT. En ouvrant une scène, le recadrage des calques vivants était demandé alors que les couches sortaient du rebâtissage : leur hauteur valait encore zéro, le recadrage renonçait, et les calques gardaient leur carré d'origine pendant que le cadre affichait la bonne étendue — d'où le masque du dessin qui ne suivait pas. Il est reposé après la mise en page, puis une seconde fois quand tout est chargé.
- UNE COMPOSITION RÉCLAME SA SCÈNE : fond et cadre des effets sont posés avec elle. « Neige sur lettres » arrive donc avec son fond sombre et un cadre qui monte bien au-dessus de la zone de travail — les flocons viennent de plus haut que le regard. Ses défauts reprennent les réglages de la scène éprouvée : texte à deux tiers, flocons plus fins et plus nombreux, et une arrivée progressive sur six secondes.
- LA MISE EN PAGE DES RÉGLAGES EST ENREGISTRÉE. Les blocs déplacés et les hauteurs tirées à la poignée mouraient à la fermeture : ils voyagent maintenant dans la scène, section « blocsGui », écrite à l'enregistrement et reprise à l'ouverture.
- LA MATIÈRE REVIT. La matière figée venait du moulin de fond réveillé en 4.35 : quand son fil trébuche — la paroi du texte traverse des objets du rendu —, l'exception était AVALÉE EN SILENCE, plus aucune photo n'était publiée, et l'écran gardait le semis immobile pour toujours. Le moulin est ÉTEINT par défaut : le banc donne 224 images par seconde au plafond avec la simulation sur le fil, il n'apportait rien à ces scènes. Son garde-fou est prêt pour le jour où on le rallumera : chaque trébuchement va au journal, et au troisième le moulin se replie de lui-même sur le fil unique.
- Le rapport du banc dit déjà, selon l'état réel du drapeau, si la simulation tourne sur ou hors du fil d'affichage.
- LE CADRE FAIT LOI : le semis de départ occupe TOUJOURS toute la largeur du cadre de l'étendue, comme la renaissance. Le paquet du démarrage venait du réglage « Largeur de propagation », né avant le cadre déplaçable et resté à son vieux défaut de quarante pour cent : il resserrait le semis à la moitié du cadre — exactement le paquet de la capture. Ce réglage contredisait le cadre, il est retiré : pour resserrer l'effet, on resserre le cadre lui-même, à la souris ou aux poignées. « Hauteur de diffusion » reste (étaler les départs au-dessus du cadre garde son sens). Les vieux réglages enregistrés se relisent sans bruit, la clé devenue muette est ignorée.
- LA VAGUE NE SE REFORME PLUS. Même lancée étalée, la chute sans fin resynchronisait tout : durée de chute identique, même durée au sol pour tous — les grains fondaient ensemble, renaissaient ensemble dans une ligne de trente unités, et la nappe revenait à chaque cycle. Deux désynchronisations, des deux côtés du miroir : chaque corps a désormais SON seuil de fonte (de soixante à cent quarante pour cent de la durée réglée, tiré de son rang), et les relâchés renaissent dans une vraie tranche au-dessus du cadre au lieu d'une ligne — les arrivées s'égrainent.
- L'étalement du lancer vaut quatre secondes par défaut pour les nouveaux calques (zéro restait la grappe) ; les calques existants gardent leur réglage.
- L'épreuve du lancer gagne un quatrième point : posés ensemble, les corps fondent à des pas distincts.
- LE MOULIN ÉTAIT MORT-NÉ : la condition qui l'activait portait « et le monde non ancré » — or l'ancrage est posé dix lignes plus haut, à chaque appel. La branche était morte depuis sa naissance : la simulation n'a JAMAIS quitté le fil d'affichage, pendant que le rapport prétendait le contraire. Corrigé — le moulin tourne, et le contrôle nº 26 interdit le retour de la branche morte.
- GARDER RATIO réparé : les bornes du suivi étaient restées à un cinquième quand les curseurs sont descendus à deux centièmes — sous ce seuil, le curseur entraîné butait sur son vieux plancher et hauteur et largeur divergeaient malgré la case. Et le ratio n'était relevé qu'au cochage : cochée d'origine, la case ne le relevait jamais. Les deux corrigés.
- LA SACCADE INSTRUMENTÉE : le rapport EN MARCHE donne désormais la cadence RÉELLE du compositeur (images vraiment composées par seconde, comptées une fois par image quel que soit le nombre de calques) et le nombre de relances du chien de garde depuis la mesure. Tous les chronomètres du fil d'interface sont au vert et ça saccade encore : ce chiffre-là dira si le goulot est le fil de RENDU (effets, découpages) ou une horloge coupée en boucle — redonne le rapport tel quel.
- LE LAG DÉBUSQUÉ : le banc EN MARCHE donnait 1211 ms par image pour un plafond de 13 — tout partait dans les enjolivures de Peindre. Deux coupables corrigés. Le HALO du calque vivant unifiait ses deux mille formes par tessellation (GetOutlinedPathGeometry) à CHAQUE image : il prend désormais la silhouette rapide, un simple groupement en règle Nonzero, visuellement identique pour un flou. Le découpage « contenu dehors » soustrayait le texte du rectangle par une opération booléenne tessellée à chaque image : un groupe PAIR-IMPAIR donne le même découpage — trous des lettres compris — pour le prix d'un groupement.
- Le rapport EN MARCHE détaille désormais les POSTES du cycle : figure, aplats, découpages, halo, couleurs des formes, et le reste — la prochaine lourdeur se lira directement.
- La durée au sol était bien prise en compte : à moins d'une image par seconde, la fonte était simplement invisible à l'écran. À rejuger une fois l'animation fluide.
- Les curseurs de l'effet vivant partent tous du MÊME bord : la colonne des étiquettes passe à 168 points, la plus longue (« Intensité de l'éparpillement ») ne pousse plus sa glissière.
- Dix « i » manquants ajoutés : Apesanteur, Vent, Turbulence, Gravité centrale, Durée au sol, Viscosité, Délai par lettre, Écart, Courbure, Limite de formes.
- LE LANCER PAR INCRÉMENTS : nouveau réglage « Étalement du lancer » (famille Forces, 0 à 30 secondes). À zéro, la matière arrive d'un coup comme avant — la grappe du démarrage ; réglé, chaque morceau reçoit un pas de naissance réparti sur la durée : avant lui il dort ancré, garé très haut hors de portée de tout contact, et à son pas il se pose sur son lit de semis avec son élan de départ. L'effet monte en filet au lieu de tomber en grappe. Miroir JavaScript complet, durée dans la signature des mondes, export et import du réglage.
- Épreuve dédiée (mesure directe au mini-monde) : à zéro tout arrive au premier pas ; étalée sur deux secondes la matière entre par incréments et les dormeurs ne bougent pas de leur garage ; passé le lancer, plus aucun dormeur.
- Les MORCEAUX peuvent redevenir fins : les curseurs Hauteur et Largeur de la matière descendent à deux centièmes (pas d'un centième) au lieu de planchonner à un cinquième, et l'écrêtage du moteur suit, des deux côtés. L'ajustement du calque à l'étendue avait grossi le rendu à l'écran, et les tailles n'étaient plus réductibles.
- LE CALQUE DES EFFETS ÉPOUSE L'ÉTENDUE. L'audit a montré la cause structurelle des dix échecs : chaque calque vivant était un carré de mille unités affiché à une largeur figée de cinq cent soixante points, centré — sa taille, sa position et sa fenêtre logique ne devaient rien au cadre de l'étendue, et toutes les corrections précédentes réconciliaient le cadre avec ce carré, jamais l'inverse. Désormais la fenêtre du calque DEVIENT le rectangle de l'étendue, sa taille à l'écran en est la traduction à l'échelle de la scène, et son décalage suit le cadre en direct pendant le glissement. Ce que le cadre montre est exactement ce que le calque rend.
- L'échelle de la scène redevient l'UNIQUE repère de l'atelier (mille unités de haut = la hauteur de l'aperçu) : la limite des calques aux largeurs de référence discordantes disparaît avec elle.
- La découpe du « contenu dehors » suit l'étendue au lieu d'un carré figé : une grande étendue n'est plus rognée.
- Le contrôle nº 25 veille sur le nouveau renversement (fenêtre, taille, décalage, découpe).
- LES DEUX RÈGLES ENFIN ACCORDÉES. Le cadre de l'étendue était tracé à l'échelle de l'aperçu tout entier, tandis que chaque calque loge ses mille unités dans SA propre largeur de référence — cinq cent soixante points pour l'un, six cent vingt pour l'autre. Les deux disaient bien huit cents unités, mais pas à la même taille à l'écran : la matière paraissait s'arrêter bien avant son cadre, alors qu'elle le remplissait déjà. Le cadre et le pourtour se mesurent désormais à l'échelle du calque vivant : ce qu'on voit tirer est ce qui contient.
- La LARGEUR DE PROPAGATION vaut un par défaut : la matière est semée d'un bord à l'autre du cadre, au lieu des quatre cinquièmes.
- Le contrôle nº 25 veille sur l'accord des deux règles.
- LA NEIGE FOND LÀ OÙ ELLE S'ARRÊTE. Le recyclage exigeait une HAUTEUR : trop basse, il ramassait les grains en plein vol ; trop haute — la correction précédente — les grains posés sur les lettres ne fondaient JAMAIS et toute la matière finissait entassée dessus, immobile. La condition de hauteur a disparu : la vitesse dit tout, et la durée au sol fait le reste. Le cycle reprend, la neige occupe enfin son cadre.
- LE PARTAGE DU FIL : l'affichage de WPF tient sur un fil unique, et une image trop coûteuse le prend à l'interface. Au-delà d'un budget réglable (7 ms par défaut), l'animation SAUTE des images et rend la main — elle tourne moins vite, mais les curseurs, les menus et les barres de défilement répondent. À zéro, l'animation passe avant tout, comme avant.
- LE BANC MESURE EN MARCHE : le chiffre à l'arrêt ne disait qu'un plafond théorique. Le cycle complet d'un calque — halo, ombre, sillage, découpages, couleurs par forme compris — est désormais chronométré image après image pendant que ça tourne : c'est CE temps-là qui prend le fil à l'interface, et l'écart avec le plafond dit ce que coûtent les enjolivures autour du dessin.
- LA SIMULATION QUITTE LE FIL D'AFFICHAGE. L'interface et l'animation ne se disputent plus le même fil : un monde en retard se rattrape sur un fil de fond, et l'affichage se contente de la dernière photo publiée. Une scène chargée retarde désormais l'animation, plus l'interface — les barres de défilement répondent pendant que la matière mouline. Un monde n'est jamais confié à deux fils à la fois, et le rendu lit un seul et même pas, positions et rayons ensemble.
- LA NEIGE ATTEINT ENFIN LE BAS DU CADRE : elle était considérée « posée » au tiers de la hauteur, donc ramassée et relancée bien avant d'être arrivée — la moitié basse restait vide quoi qu'on règle. Le seuil suit maintenant le bas de l'étendue.
- LE BANC DE MESURE est passé dans la BARRE DE ZOOM, sous la zone de travail : son rapport s'affiche en surimpression sur l'animation, sans fenêtre à ouvrir ni animation à couper. Un second appui l'efface. Il dit aussi où tourne la simulation.
- LA MESURE ÉCRITE EN DUR, débusquée : la matière qui tombe AUTOUR d'un dessin — la neige sur les lettres, le cas le plus courant — passait par un carré fixe au lieu du cadre de l'étendue. Le cadre avait beau grandir, la neige restait dans son bocal. Un SEUL endroit décrit désormais le cadre, des deux côtés, et le contrôle nº 25 refuse qu'une mesure en dur revienne.
- L'ÉTENDUE S'AGRANDIT À LA SOURIS : huit poignées de la couleur du cadre — quatre côtés, quatre coins. Un bord tiré déplace le centre de la moitié du chemin, si bien que le côté opposé ne bouge pas ; les mondes se rejouent à la relâche.
- LE BANC DE MESURE répond enfin : son rapport s'ouvrait DERRIÈRE la fenêtre des paramètres. Il s'affiche maintenant dans la fenêtre même, mesure le plus lourd des calques vivants — et non celui qui se trouve choisi, souvent celui des paramètres — et nomme le poste à attaquer.
- Épreuve « zone » complétée : la matière autour d'un dessin suit le cadre, de 600 sur 400 à 1600 sur 1200.
- LE CADRE EST LA PAROI : le cadre de l'étendue annonçait huit cents quand la paroi en faisait quatre cent trente — la neige se rassemblait au milieu au lieu de partir du haut. Réglée à 800 sur 640, l'étendue contient désormais 800 sur 640, au point près : le semis épouse toute sa largeur et son bord HAUT, la ligne de base est son bord BAS, le re-largage de la neige sans fin repart de son plafond.
- Les DÉFAUTS de l'atelier : zone de travail 800 × 600, étendue des effets 800 × 640 — légèrement plus haute, pour que la neige commence au-dessus du cadre et y entre en tombant — les deux cadres affichés d'emblée.
- Le POURTOUR grise intégralement, quel que soit le zoom : taillé à la fenêtre, il laissait reparaître le damier sur les bords dès qu'on dézoomait.
- Les FLÈCHES D'ACCORDÉON répondent de nouveau dans les paramètres : un enfant qui marquait le clic comme traité — un champ, une liste — le mangeait avant l'en-tête.
- Les pages déjà exportées gardent leur dessin au mot près : sans cadre annoncé, le semis et les parois reprennent exactement les mesures d'avant.
- REFONTE DU RENDU, première marche : LE RENDU NE LIT PLUS L'ÉTAT VIVANT de la matière. Rayons, formes, angles, amalgame, fusion et repos passent tous par la PHOTO du bon instant — le brasier et le fondu au sol de la neige allaient encore puiser dans les corps en train de bouger. Deux bénéfices : une image ne mélange plus deux instants, et la simulation POURRA quitter le fil d'affichage, ce qui était impossible tant qu'elle était lue pendant qu'elle avançait.
- Épreuve « decouplage » : on demande une image à un instant passé, on saccage volontairement l'état vivant de tous les mondes, et la figure ne doit pas bouger d'un cheveu. Contrôle nº 26 pour tenir la règle côté C#.
- BANC DE MESURE dans les paramètres de la scène : « Mesurer le rendu… » chronomètre séparément la mise en forme (simulation comprise), la peinture et la rastérisation du calque courant, et dit la cadence plafond. On saura où le temps part vraiment avant de déplacer quoi que ce soit.
- L'ÉTENDUE, de retour et enfin à sa vraie place : c'est le cadre où les effets VIVENT, distinct de la zone de travail, qui dit ce qu'on VOIT. Égale à la zone, l'effet naît et meurt à l'écran ; plus grande ou décalée, il COMMENCE DEHORS et n'apparaît qu'en entrant dans la zone — une pluie qui arrive du hors-champ.
- Son cadre TIRETÉ, d'une couleur différente de celle de la zone (réglable), se GLISSE à la souris tout autour de la zone de travail : les mondes se rejouent à la relâche, pas à chaque pixel. Largeur, hauteur, couleur, affichage et bouton « Recentrer » dans les paramètres de la scène. Le cadre ne s'exporte jamais.
- La paroi de la matière, la ligne de base, le semis et le re-largage suivent tous l'étendue et son décalage, à l'atelier comme dans la page exportée. Épreuve « zone » complétée (l'étendue se déplace en bloc, sans se déformer) et contrôle nº 25 élargi.
- LA ZONE DE TRAVAIL, comme dans Photoshop : une LARGEUR et une HAUTEUR en pixels, un vrai RECTANGLE — le curseur « Étendue » a disparu, il ne servait qu'à rétrécir le dessin. L'agrandir DÉGAGE de la place autour du dessin, qui garde sa taille : la matière s'étale sur toute la largeur, part de plus haut, et bute exactement sur les bords de la zone — la paroi de la scène entière épouse désormais le rectangle au lieu d'un carré.
- Le pourtour suit : le liseré entoure la zone à sa vraie forme, le fond d'atelier masque tout autour, et la taille de la zone est celle qu'exportent les exports par défaut. La page exportée recentre le dessin dans son canevas de la même façon.
- Épreuve « zone » et contrôle nº 25 au filet : la paroi épouse le rectangle des deux côtés, la matière s'étale avec la zone, et le canevas entre dans la signature des mondes — le changer les rejoue.
- LECTURE ET PAUSE : deux icônes à droite de la barre de zoom, EN PAUSE au démarrage. En pause, l'horloge commune s'arrête et plus aucun calque ne se repeint — le fil d'affichage est entièrement rendu à l'interface, et les barres de défilement répondent au doigt. La ligne de stats dit « en pause » pour qu'une cadence à zéro ne passe pas pour une panne.
- MONITEUR 2.0 : nouveau sous-effet de l'électrocardiogramme — le curseur tient le bord DROIT de la piste et écrit, le tracé déjà écrit défile derrière lui vers la gauche, plume comprise. Épreuve « moniteur » au filet.
- Les COLONNES, le filet qui ne rate rien : à chaque passe de mise en page, une largeur qui a changé fait recompter les colonnes. Un onglet bâti pendant qu'une animation monopolisait le fil d'affichage voyait sa largeur arriver après coup, sans qu'aucun événement ne reparte.
- Un BLOC ÉTEINT DISPARAÎT : ses réglages ne sont plus grisés à demi mais MASQUÉS, et le bloc se réduit à son en-tête — c'est de la place rendue.
- Les FLÈCHES D'ACCORDÉON dans le bon sens : vers le bas dépliées, à l'horizontale repliées, partout — les accordéons de WPF et leur flèche vers le haut ont disparu du logiciel.
- « Garder ratio » COCHÉ par défaut : déformer sans le vouloir était l'erreur la plus facile à faire.
- La FUSION : trois réglages jumeaux de l'amalgame — paroi intérieure, conteneur extérieur, ligne de base. Au contact, les éléments FUSIONNENT : plus aucun espace, ils se tracent en UNE MASSE (la nappe du liquide) ; dès qu'ils ne touchent plus, la fusion s'évente vite et la masse se désolidarise.
- Le POURTOUR façon Photoshop, corrigé : ce qui est visible, c'est L'ANIMATION — la scène logique, celle qui s'exporte par défaut. Autour, un FOND D'ATELIER gris clair (couleur réglable) masque le canevas étendu, et le liseré entoure l'animation, pas la fenêtre. Rien de tout cela n'est exporté.
- Les champs de taille PRÉREMPLIS avec la taille actuelle de l'animation.
- Les STATS déplacées en bas à GAUCHE du logiciel, à côté des icônes d'action.
- Les icônes de création de retour EN BAS du bloc des calques.
- La fenêtre « Paramètres de la scène » complétée et aérée : l'Étendue (appliquée en différé — tirée au fil du geste, elle resimulait toute la matière à chaque cran et gelait la fenêtre), la TAILLE EN PIXELS de la scène (reprise par les exports par défaut), et le CONTOUR DE LA SCÈNE : une case, une couleur au choix, un liseré d'atelier qui n'apparaît jamais dans les exports.
- Les ICÔNES DE CRÉATION passées EN HAUT du bloc des calques : dockées en bas, elles passaient sous la ligne de flottaison dès que le bloc était à l'étroit — en haut, elles sont visibles quoi qu'il arrive.
- Les COLONNES, le filet de plus : un onglet réaffiché sans être rechargé ne repartait ni Loaded ni SizeChanged, et la colonne unique restait — chaque retour visible recompte désormais la mise en page.
- Les MESSAGES D'INFORMATION qui restaient affichés : une rafale du même message repartait le compte à rebours à chaque rappel — la bulle s'efface maintenant au bout de son temps, même harcelée.
- La DIFFUSION de la neige et de la pluie : fini le seau de confettis du premier instant — deux réglages, « Hauteur de diffusion » (la matière est semée étalée au-dessus de la scène, hors fenêtre, et arrive en pluie continue — la boucle repart proprement) et « Largeur de propagation » (d'une colonne serrée à toute la largeur).
- La TAILLE DE LA SCÈNE : le calque « Paramètres de scène » règle désormais l'ÉTENDUE de l'espace de travail — le canevas, comme dans Photoshop — et non la dimension d'export (elle reste dans la fenêtre d'export). À 2, la scène double : le contenu paraît moitié plus petit, la matière part de plus haut, s'étale sur les côtés, sa ligne de base et ses parois suivent — la neige ne tape plus les bords.
- L'AMALGAME COMPACT : un corps agglutiné se rend GONFLÉ — les espaces du tas se comblent et le blob se voit enfin, à l'atelier comme dans la page exportée.
- Un peu d'huile : les pastilles rondes sont gelées — des milliers de grains par image, WPF n'a plus à les surveiller.
- L'ÉPARPILLEMENT : au choc contre le conteneur, un élément se multiplie en fragments plus petits — aire conservée, aucun fragment sous le pixel, boucles bornées (max 5), part des éléments réglable. Sept réglages dans la famille « Éparpillement » des matières libres (Avalanche et Brasier) : fragments, intensité, boucles, ratio, formes (rond, traits, polygones 3 à 8 angles, aléatoire) et vrille.
- Cinq SIMULATIONS d'éclatement à cocher — étoile, explosion, goutte d'eau, verre cassé, caoutchouc : le preset est tiré parmi les cases cochées et ne gouverne que le vol ; après, les fragments vivent comme les autres formes de la scène. Épreuve « eclat » et contrôle nº 24 au filet.
- Les COLONNES RETROUVÉES : les blocs s'affichaient parfois sur une seule colonne jusqu'au premier glissement — la mise en page se décidait sur une largeur transitoire. Elle se recompte désormais à l'exécution, et une seconde passe rattrape le chargement.
- Les ICÔNES DE CRÉATION toujours visibles : le bloc des calques a un plancher de hauteur — une hauteur mémorisée trop courte rognait la barre des trois créations et l'import.
- Le FILTRE DES POLICES : dans les paramètres, coche les polices à proposer dans les calques à texte — aucune cochée, toutes s'affichent ; la police d'un document ouvert reste toujours là.
- L'AMALGAME : la matière s'agglutine au contact. Trois nouveaux curseurs dans les Forces de l'effet vivant — « Amalgame paroi int. », « Amalgame conteneur ext. » et « Amalgame ligne de base ». Au toucher de la surface choisie, la matière devient collante : elle attire ses voisins, mélange les vitesses et mange son élan — le tas se forme comme un blob, à l'atelier comme dans la page exportée. À zéro par défaut : rien ne change sans le demander.
- Le calque « Paramètres de scène ». Une ligne engrenage TOUT en bas de la pile des calques ouvre les réglages globaux : la DIMENSION DE SORTIE des exports (à zéro, la taille de l'atelier — la fenêtre d'export peut toujours la préciser), l'habillage GPU, la couleur du fond. La dimension est enregistrée avec la scène.
- Les icônes de création retrouvées. Le bloc Habillage GPU, docké en bas de l'onglet Scène, mangeait la hauteur du bloc des calques : les boutons d'import et de création passaient sous la ligne de flottaison. Il vit désormais dans la fenêtre des paramètres de scène.
- La colonne unique des flancs réparée. Hors du mode « blocs en bas », le panneau des calques était FORCÉ à une seule colonne : un flanc élargi à la poignée étalait chaque bloc sur toute la largeur, en une pile interminable. Le nombre de colonnes suit désormais TOUJOURS la largeur réelle de l'hôte — un flanc étroit garde naturellement sa colonne, un flanc large en gagne, dans les quatre mises en page.
- La grande charge — le plafond de la matière saute : La grille spatiale. Entrechoquer comparait TOUTES les paires de corps — 400 corps, 80 000 paires, trois rondes, soixante fois par seconde : c'était lui, le plafond de charge. La matière passe à une grille de cases en tableaux plats, chaînées sans allocation par ronde : chaque corps ne regarde plus que sa case et les huit voisines. L'ordre des paires est CONSERVÉ — le relâchement de Verlet en dépend — et l'épreuve le prouve : mêmes positions que la double boucle à 1e-9 près sur 120 pas, écart mesuré 0.0. En deçà de 320 corps, la double boucle reste la plus rapide — mesuré, pas supposé — et c'est elle qui tourne.
- La grande charge — le plafond de la matière saute : Les plafonds levés. Avalanche et brasier montent de 400 à 3000 corps, le tissu de 240 à 720, la matière molle de 96 à 288 — des deux côtés, atelier et export. À 1500 corps la grille va deux fois plus vite que l'ancienne boucle ; à 3000 elle tient la cadence là où l'ancienne s'effondrait.
- La grande charge — le plafond de la matière saute : Le peintre des accroches. En dégradé accroché, chaque forme était un Path entier — mesure, agencement, test de souris — et l'arbre visuel croulait sous des milliers de nœuds. Un SEUL élément dessine maintenant toutes les formes d'un trait, pinceaux gelés, quel que soit leur nombre.
- La grande charge — le plafond de la matière saute : L'épreuve de la charge (epreuves/vitesse.py) : identité grille/double boucle à 1e-9, blindage de l'échange, gain mesuré à 1500 corps, budget tenu à 3000.
- L'habillage GPU — la scène passe au pixel shader : Quatre effets de post-traitement sur la scène entière, rendus par la carte graphique : le HALO fait déborder la lumière, le GRAIN pose un bruit de pellicule, l'ABERRATION CHROMATIQUE sépare les couleurs aux bords, l'ONDE fait passer l'image sous une eau calme. Le bloc « Habillage GPU » vit dans l'onglet Scène — effet et intensité — et les outils au-dessus restent nets.
- L'habillage GPU — la scène passe au pixel shader : Les shaders sont du TEXTE, embarqué dans le binaire et compilé au lancement par d3dcompiler_47.dll — cherchée d'abord à côté de l'exe, puis dans System32. Un fichier « shaders/(nom).hlsl » posé à côté du programme PRIME sur celui d'usine : retoucher un effet ne demande pas de recompiler. Un shader raté n'éteint pas la scène : l'échec est annoncé.
- L'habillage GPU — la scène passe au pixel shader : L'export porte le même habillage en WebGL : un canvas par-dessus le SVG, le fragment GLSL jumeau du HLSL — même calcul, mêmes constantes, nombre pour nombre. Sans WebGL, la page retombe sur le SVG nu.
- L'habillage GPU — la scène passe au pixel shader : L'habillage part et revient avec le document (« habillage », « habillageIntensite » dans la scène).
- L'habillage GPU — la scène passe au pixel shader : L'épreuve du miroir (epreuves/habillage.py) : 23 constantes confrontées entre HLSL et GLSL, uniformes, registres, capture et persistance — et le contrôle statique nº 22 garde le tout.
- LA MATIÈRE BUTE ENFIN SUR SON CONTENANT. Placée « à l'extérieur », elle tombait AU TRAVERS du dessin, et seul le découpage cachait ce qui passait dessus : on voyait de la pluie derrière un texte, jamais de la neige qui s'y pose. Le dessin est maintenant un vrai OBSTACLE — la matière le heurte, s'y pose et glisse dessus, à l'atelier comme dans la page exportée.
- Zigzag : le vent CHANGE de côté au lieu de pousser toujours dans le même sens. Chaque morceau garde sa cadence et sa phase — la bourrasque n'arrive pas sur tous en même temps.
- Virevolte : ce qui plane ne tombe pas droit. L'air freine la chute et fait balancer le morceau d'un côté à l'autre — un flocon, une plume, une feuille.
- Adhérence : posé sur le contenant, un morceau y TIENT — son élan est effacé net —, puis décroche et glisse. C'est la neige qui s'accumule sur une branche avant de tomber d'un coup.
- « Neige sur lettres » refaite : lente, légère, sans rebond, très visqueuse, elle virevolte, zigzague, se pose sur le texte et y tient avant de glisser.
- Nouvelle composition « Pluie sur lettres » : l'exact contraire — lourde, rapide, sans viscosité, elle ruisselle et repart.
- Les compositions livrées ne sont plus toutes en arc-en-ciel. Chacune reçoit ses couleurs : une teinte UNIE là où il en faut une — le blanc du flocon, le verre du sablier, le bleu de l'eau —, et le dégradé ACCROCHÉ là où chaque morceau gagne à garder la sienne et à la promener avec lui. Contenant et matière sont réglés séparément.
- Le REMPLISSAGE DES ESPACES. Un contenant à contours libres — les lettres d'un mot, les chemins d'un fichier SVG — délimite des espaces : le creux du verre, le ventre d'un O, l'intérieur d'un tracé. Une case les remplit tous d'une même couleur, et l'aplat se pose SOUS la paroi et sous ce qui vit dedans : la matière garde toute sa place, elle a simplement un fond.
- Un POT DE PEINTURE par espace. Chaque espace a sa puce — le pot et son échantillon — et reçoit la couleur qu'on veut, indépendamment des autres : un mot dont chaque lettre a sa teinte, un sablier au verre bleu. Le pot passe au vert quand l'espace a sa propre couleur, il reste discret quand il hérite de la commune ; « Transparent » laisse un espace nu, et la reprise les rend tous à la couleur commune.
- L'aplat ÉPOUSE la paroi au point près : c'est exactement la surface où vit la matière, trous compris, et il suit le contenant quand celui-ci change de taille, tourne ou se met à tourner lettre par lettre. La page exportée le rejoue à l'identique.
- Correctif : un contenant fait d'un mot ou d'un SVG produisait un fichier web qui s'arrêtait sur une fonction absente. Le morceau dont il a besoin part maintenant avec lui.
- La matière « à l'extérieur » est enfin VISIBLE. Dehors, la physique tombait encore DANS le dessin — que le découpage inversé cachait. La matière vit désormais dans le cadre, autour du dessin ; la composition « Neige sur lettres » est refaite dans ce sens.
- « Chute sans fin » : la matière tombe, se pose, S'EFFACE doucement au sol — « Durée au sol » règle le temps — puis renaît en haut, ailleurs : la neige, la pluie, les confettis. Rien ne s'entasse, ça ne s'arrête jamais. Atelier + page exportée, et tout suit le projet.
- Les réglages du vivant se rangent en FAMILLES repliables : Physique de la matière, Forces, Disposition et guide, Habillage — la forme reste sous la main, le reste s'ouvre d'un clic.
- Supprimer un calque rend la main bien plus vite : le rattrapage du monde simulé est borné à quatre secondes de mise en place au lieu de quinze.
- Le bloc « Contenant et contenu » se compacte : les deux liaisons tiennent sur une ligne.
- Plus de calque « Serpentin » intempestif. Quand la bibliothèque était ouverte depuis la fenêtre d'AJOUT et qu'on y choisissait une composition ou un effet perso, ceux-ci posaient leurs calques — puis la fenêtre d'ajout, restée ouverte, créait EN PLUS son calque par défaut. Elle se ferme désormais avec la bibliothèque dans ce cas : seuls les calques de l'effet choisi arrivent.
- LE BRASIER, REFONDU EN VRAIE MATIÈRE. L'ancien effet dessiné est parti ; à la place, de VRAIES braises simulées : la pesanteur est inversée — tout monte —, une turbulence de fond lèche les flammes, et les braises passées au-dessus du foyer RENAISSENT en bas, chacune à un endroit tiré de sa vie : le feu ne s'éteint jamais et reste exportable image par image. « Feu de camp » concentre le foyer, « Mur de feu » l'étale sur toute la largeur. Le brasier rejoint la famille de la matière : Morceaux règle le nombre de braises, Épaisseur leur taille, Animation la vivacité de la montée, et Vent, Turbulence, Poids, Apesanteur, Gravité centrale s'y appliquent — dans un contenant lié aussi.
- Les compositions se renouvellent — moins de carrés, plus d'idées :
- Billard céleste : le bol penche, les billes n'ont plus de poids — elles ricochent et se télescopent sans jamais se poser ;
- Drapeau au vent : un TISSU accroché qui claque dans l'anneau — le vent le tend, la turbulence le fait onduler, l'apesanteur l'empêche de pendre ;
- Neige sur lettres : les flocons tourbillonnent DANS le texte — chaque lettre est un enclos, la turbulence les garde en suspension. Le Sablier 2.0, la Petite planète et l'Eau vive restent.
- « Horloge propre », une case dans le bloc Effet vivant. Par défaut, deux calques au MÊME effet partagent le même monde simulé — même matière, mêmes mouvements, parfait pour multiplier un rendu en le superposant ; rien ne change là. Cochée, le calque tient SON propre monde, semé différemment d'un hachage de son nom : un autre contenu, une autre vie. À l'atelier comme dans la page exportée, et la case suit le projet.
- L'onglet-titre des popups descend de 2 px : il se pose au ras de la coque, sans le liseré qui le détachait.
- Supprimer un contenant ne gèle plus le contenu. Ses contenus sont DÉLIÉS à la suppression et sa fiche retirée : garder un nom de contenant mort changeait la signature du monde simulé, qui se resemait et rattrapait des milliers de pas au retour sur l'onglet — cinq secondes de gel et une interface bancale.
- Un bouton ✕ à côté de « Lié à » coupe la liaison d'un geste : le calque ne suit plus aucun contenant, ses autres réglages ne bougent pas.
- Le déplacement des calques REMARCHE. La liste envoyait aussi la ligne du Fond — qui n'est pas un calque — et le réordonnancement était rejeté en silence sur un simple comptage.
- L'import propose les « Mouvements directionnels » sous leur vrai nom — la case s'appelait « Mode spinner » et semblait manquer — et elle est cochée d'office.
- Les SVG de la bibliothèque des contenants sont APLATIS à l'import : tous les chemins fusionnent en une seule forme, puis les CREUX — les trous du dessin, l'intérieur du verre d'un sablier au trait — deviennent les enclos où la matière vit. Fini les doubles bords détectés dans l'épaisseur du trait ; une silhouette sans trou garde ses contours, comme avant.
- LE SABLIER 2.0 ET LES COMPOSITIONS LIVRÉES. Un nouveau groupe « Compositions » ouvre la bibliothèque : des couples contenant + contenu prêts à poser, vignettes VIVANTES, un clic crée les deux calques liés. Six pour commencer :
- Sablier 2.0 — le sablier historique, mais en vraies billes simulées qui coulent et se retournent avec lui ;
- Apesanteur — les billes s'envolent, se télescopent et rebondissent sans jamais se poser ;
- Grand vent — le sable dérive et s'accumule contre la paroi sous le vent ;
- Tourbillon — la turbulence remue tout, en continu ;
- Petite planète — la gravité vise le centre, une boule se forme dans l'anneau ;
- Eau vive — le liquide, viscosité au plancher : ça se nivelle et ça coule dans le bol qui penche.
- La barre du haut REVIENT à sa place d'origine, flottante sur la bordure transparente, l'onglet-titre au ras de la coque — le déplacement de la 4.6.1 partait d'un contresens.
- Le vrai overlay est corrigé : le VOILE des popups épouse la COQUE — même ligne, même marge, mêmes coins arrondis. Il assombrit le cadre intérieur et lui seul, plus jamais la bordure transparente ni la barre du haut.
- Ctrl+Z est INSTANTANÉ pour les réglages. Quand l'instantané à restaurer a la même ossature que la scène — mêmes calques, mêmes noms, même ordre — seuls des réglages ont bougé : ils se remettent SUR PLACE, curseurs relus, sans rebâtir un panneau ni recharger l'onglet. La reconstruction complète ne sert plus qu'au structurel — calque ajouté, supprimé, renommé — où elle est légitime.
- La barre du haut — titre, Tuto, Journal, pastilles — ne flotte plus sur la bordure transparente : elle vit DANS la coque, alignée sur le cadre intérieur, et suit la coque en plein écran. L'onglet-titre s'arrondit des quatre coins puisqu'il n'a plus de bord d'où sortir.
- L'HISTORIQUE, REFONDU une bonne fois. L'ancien mécanisme rangeait dans ses instantanés des RÉFÉRENCES vers les panneaux et visuels vivants ; dès qu'un calque avait été démonté puis recréé — une suppression annulée, par exemple — ces références pointaient des ruines, et le Ctrl+Z suivant laissait un écran noir. Le modèle est désormais celui de tous les logiciels : deux piles et une photo. La PHOTO est l'état stable courant, prise quand la scène se repose ; chaque action la pousse au PASSÉ ; Ctrl+Z la range au FUTUR et restaure le sommet du passé ; Ctrl+Y fait le chemin inverse. Et la restauration reconstruit TOUT à neuf depuis des copies mortes — plus une seule référence recyclée, plus de comparaison d'octets, plus de rang qui se promène. Quoi qu'il arrive, une restauration qui trébuche se contente de le dire : jamais d'écran noir.
- LES FORTES CHARGES NE TRAÎNENT PLUS. Le lag venait d'une intersection booléenne — silhouette des formes ∩ parois — TESSELLÉE À CHAQUE IMAGE sur des centaines de formes, un travail de processeur que rien ne montrait dans la charge globale. Elle est SUPPRIMÉE : le clip racine posé en 3.97.0 coupe déjà tout le rendu par les parois, et les deux découpages s'empilent gratuitement au moment du dessin. Le rendu lui-même était déjà composé par la carte graphique — c'est WPF — mais il attendait cette géométrie à chaque image.
- Les cinq forces agissent EN DIRECT. Le monde simulé, gardé en mémoire, conservait sa fiche de naissance : bouger Viscosité, Apesanteur, Vent, Turbulence ou Gravité centrale ne changeait rien tant que le monde vivait. Les forces sont maintenant reposées à chaque image — le curseur répond immédiatement, sans resemer la matière.
- La ligne de stats dit la vraie charge : « X formes · Y corps · Z i/s · M Mo ». Les CORPS sont ceux que la physique manie — pour un liquide, moins de formes que de morceaux est normal, les grains fusionnent en flaques. La MÉMOIRE est celle que Windows compte au programme. La barre d'essai de la page exportée perd son champ mémoire, approximatif et absent de la plupart des navigateurs.
- Les cinq forces récentes — Viscosité, Apesanteur, Vent, Turbulence, Gravité centrale — sont désormais VISIBLES dans le bloc « Effet vivant », entre Poids et Rayon de disposition : leurs curseurs étaient créés et câblés, mais jamais posés dans la pile.
- L'export du code ne pose plus la question de l'archive : le ZIP suit la case « Exporter en ZIP » des Paramètres, et elle seule.
- TROIS FORCES DE PLUS sur la matière simulée, toutes à zéro par défaut — rien ne change tant qu'on n'y touche pas :
- Le VENT : une poussée latérale qui respire doucement — négatif vers la gauche, positif vers la droite. La matière dérive et s'accumule contre les parois sous le vent.
- La TURBULENCE : un champ de remous déterministe qui agite en continu — la matière frémit, tourbillonne, ne se pose jamais tout à fait.
- La GRAVITÉ CENTRALE : la chute vise le CENTRE du récipient au lieu du bas — la matière s'y rassemble en boule, comme sur une petite planète, et tous les degrés entre les deux existent. À l'atelier comme dans la page exportée, et les valeurs suivent le projet.
- L'APESANTEUR. Un curseur sur la matière simulée : à 0, rien ne change ; en montant, la chute s'efface et tout S'ENVOLE — rebonds francs sur les parois, une agitation déterministe qui empêche la matière de s'endormir. Les LIQUIDES s'y agglutinent : les gouttes proches s'attirent, se déforment et se recombinent. Les SOLIDES se télescopent et repartent dans toutes les directions, sans coller. À l'atelier comme dans la page exportée, et la valeur suit le projet.
- LA VISCOSITÉ. Un curseur pour toute la matière simulée : à 1, le comportement d'origine, à l'identique. Vers 0 — l'EAU — le serrage des grains est répété et la séparation biaisée vers l'horizontale : les colonnes s'effondrent, le tas se nivelle, ça COULE. Au-delà de 1 — le MIEL — les vitesses des voisins en contact se mélangent : le paquet bouge d'un bloc. À l'atelier comme dans la page exportée, et la valeur suit le projet.
- L'aplat peut être TRANSPARENT. Le sélecteur de « Couleur unique » propose le transparent : l'objet est peint de rien — il disparaît en gardant sa place, son ombre et sa physique. La pastille montre un damier, et l'alpha survit à l'enregistrement du projet.
- LES EFFETS PERSO. La disquette en tête du bloc « Effet vivant » enregistre la position courante des paramètres de TOUS les blocs comme un effet de la bibliothèque : demande un nom, rend une vignette depuis l'aperçu, et si le calque est lié à un contenant, le couple entier part ensemble. Le nouveau groupe « Effets perso » ouvre la bibliothèque ; un clic pose l'effet dans la scène — calques recréés, jamais fusionnés, renommés si leurs noms sont pris, le lien contenant→contenu raccordé aux nouveaux noms.
- Ctrl+Z revient vraiment sur les réglages. Le premier tick d'un geste porte déjà la nouvelle valeur — un clic sur la piste y saute — et c'est lui que l'historique retenait : annuler ne changeait rien. L'historique retient désormais la FIN de chaque geste, déposée quand le suivant commence — ou quand Ctrl+Z arrive : chaque annulation retrouve l'état d'avant le geste, curseurs compris.
- « Masquer les réglages sans effet », dans les Paramètres : les curseurs que l'effet courant ne lit pas sont cachés au lieu de grisés — le panneau raccourcit d'autant. Décoché par défaut.
- Le marqueur de défaut se cale sur la VRAIE course du pouce, lue sur le Track du gabarit : aligné au pixel, quel que soit le thème.
- LA FORME FANTÔME EST MORTE. Le rayon des couleurs et la largeur des couleurs dessinaient une BANDE — le chemin du dégradé — et le ruban ne peignait QUE dedans : tout ce que la figure posait au-delà disparaissait, et cette frontière invisible bougeait avec les deux curseurs. Depuis le début. Pour un effet vivant, la bande est désormais élargie à la scène entière : les deux réglages pilotent le CHEMIN des teintes, plus jamais une emprise — c'est le découpage, zones et parois, qui borne, comme partout ailleurs.
- Ctrl+Z reste vraiment sur ton panneau. La resélection de l'onglet se faisait écraser par les ré-agencements du TabControl : elle part désormais en différé, après eux ; et un instantané sans onglet mémorisé garde celui d'où l'on vient au lieu d'éjecter vers la scène.
- Le marqueur de défaut se centre sous le pouce du curseur.
- « Modifier le vecteur… » fait défiler la barre de ses outils dans la vue : dans une petite fenêtre, elle restait hors d'atteinte en bas.
- La vignette des engrenages montre TROIS roues : dix roues dégressives débordaient la case de la bibliothèque.
- Le contenu suit ENFIN son contenant, partout, dans la page exportée. L'audit complet du couple : à l'atelier, la pose des deux calques passe par des matrices complètes — rien à redire. Dans le code JavaScript produit, en revanche, la paroi et la découpe appliquaient la pose du CADRE mais n'ôtaient JAMAIS la pose animée du CONTENU : sa rotation continue, ses va-et-vient, sa respiration s'appliquaient en double, et le contenu débordait dès que l'un des deux bougeait — la profondeur, entre autres. La fiche animée du contenu part désormais avec l'export, et la paroi la retranche d'avance, exactement comme l'atelier. Contre-épreuve au portage : reposer la pose du contenu sur la paroi produite redonne la paroi brute au dix-millième de pixel près.
- Les engrenages imbriqués vivent avec leur bloc. « Morceaux » compte les roues — jusqu'à seize —, « Hauteur » les grossit, « Épaisseur » creuse la denture, « Animation » accélère l'engrènement, « Décalage » monte ou descend le train ; et le train entier est CENTRÉ quel que soit son compte de roues, au lieu de fuir vers la droite.
- Chaque curseur montre son point de départ. Un petit cran sous la glissière marque la position par défaut — zéro, un, ou la valeur d'usine — pour les réglages dont le défaut est sûr. Survole-le : il dit la valeur.
- Le contenu ne sort JAMAIS de son contenant. Le rayon des couleurs, la largeur des couleurs, les axes de symétrie — et tout autre chemin de peinture : flaques gonflées du liquide, fantômes du sillage, copies des échos — faisaient déborder le rendu du récipient, chaque porteur étant découpé un à un et certains oubliés. Le clip des parois est désormais posé sur la RACINE du dessin : quel que soit le chemin, le contenu est limité au contenant, et le suit.
- Ctrl+Z reste sur ton panneau. Annuler un réglage renvoyait à l'onglet Scène — le contexte jeté avec le geste. L'instantané retient l'onglet ouvert et la restauration y revient. Les réglages étaient déjà mémorisés au fil des gestes, par paliers d'une demi-seconde : chaque Ctrl+Z remonte d'un cran de réglage, pas d'un chantier.
- Le dé du bloc vivant ne touche plus la Rotation : elle appartient au bloc « Mouvements directionnels », le tirage la laisse en paix.
- L'onglet-titre des popups passe DEVANT le halo de la coque.
- L'export web sait faire UN fichier. Dans les Paramètres : « Exporter en ZIP » — décoché par défaut — remplace les fichiers libres par un seul .zip : la page, le script, le mode d'emploi, tout dedans, rien d'autre à côté. « ZIP horodaté » nomme chaque export « nom_2026-08-10_17-42-05.zip » et rien ne s'écrase. Sans effet sur l'export C#.
- L'animation se centre dans la fenêtre du navigateur. La page centrait bien son cadre, mais le SVG y entrait à la taille de la SCÈNE, en pixels : plus large que le cadre, il débordait vers la droite — d'autant plus loin que la scène de l'atelier était grande. Par défaut, le SVG remplit désormais son cadre, qui garde les proportions RÉELLES de la scène ; une taille choisie à l'export ajuste le cadre à elle. Centré dans la fenêtre, quelle que soit sa taille.
- Le zoom d'écran se pose dès l'ouverture. Il attendait le premier rendu ; il s'applique désormais dès que la fenêtre connaît son moniteur, et suit d'un écran à l'autre — fenêtre principale et popups.
- La paroi rentre VRAIMENT sous le trait. L'intérieur se lisait à la direction du centroïde : sur les contours concaves d'une lettre — le creux du d, le ventre du s —, elle sortait du dessin et la paroi débordait le trait. L'intérieur se lit maintenant à l'AIRE SIGNÉE du contour : la matière s'arrête au bord intérieur du trait, partout.
- Le contour est un trait continu. Les tronçons étaient des blocs posés côte à côte, à crans dans les courbes. Les sommets du chemin sont offset une seule fois — bissectrice, comme un vrai trait — et chaque tronçon reprend les sommets du voisin : jonctions exactes, contour lisse, à la hauteur d'un SVG importé.
- Les colonnes reviennent avec l'onglet. Un onglet construit caché — à une largeur transitoire, une seule colonne — puis réaffiché à la même taille ne recevait plus d'événement : la grille restait sur sa colonne unique. Au chargement, elle recompte toujours d'après la largeur réelle.
- L'allure vaut pour TOUS les mouvements. Par crans, élastique, rebond, les courbes du catalogue : la rotation continue les suivait seule. Le va-et-vient, l'orbite, la profondeur battent désormais à la même allure — par crans, le calque saute de position en position ; élastique, il claque. À l'atelier comme dans la page exportée.
- La taille de sortie de l'animation se choisit à l'export. Deux curseurs dans « Exporter le code » — largeur, hauteur, « scène » par défaut — et demarrer() l'impose à la page. « Garder les proportions » attache les deux. Sans effet sur l'export C#, où le contrôle prend la taille qu'on lui donne.
- Le voile sous les popups s'assombrit, et leur onglet-titre prend la teinte #16161A.
- Les boutons de la barre du haut — Tuto, Journal et les trois pastilles — descendent de trois pixels : ils flottaient un poil trop haut.
- La forme fantôme des angles est morte. Le contour de simulation reliait les CENTRES des tronçons : aucun centre ne tombe pile sur le coin du carré, et le polygone chanfreinait chaque angle d'un demi-pas — les billes rebondissaient sur cette coupe invisible, l'espace « réservé » des coins. Aux tournants francs, l'intersection des segments entrant et sortant est INSÉRÉE : le coin revient, les déformations douces restent. À l'atelier comme dans la page exportée. L'épreuve pose un point à trois pixels du coin et exige qu'il appartienne à la matière.
- Le contenant fantôme réduit aussi. Hauteur et Largeur contractaient les POSITIONS des billes à l'affichage, pendant que la simulation vivait pleine taille : les billes dansaient dans un mini-contenant. Pour la matière, ces deux curseurs règlent désormais la taille des CORPS — des billes plus petites, plus nombreuses à tenir dans le même volume — et ne touchent plus aux positions : le tas repose toujours au fond du VRAI contenant. La signature du monde en tient compte : changer la taille refait le tas.
- « Garder ratio ». Une case sous Hauteur et Largeur du bloc vivant, et une sous Étire X et Étire Y du placement : cochée, bouger un curseur entraîne l'autre, la proportion du moment du cochage est gardée. L'export animé avait déjà la sienne.
- La page exportée revit. La figure des contenants libres poussait ses tronçons sous une clé que le rendu ne connaît pas — « f.d is undefined », et plus une image. Les épreuves ne regardaient que les centres ; elles exigent maintenant le tracé de chaque forme.
- La matière est de retour. Le correctif de la 3.90.0 découpait le contenu aux parois seules : le ruban du dégradé, que plus rien ne limitait, remplissait tout l'intérieur d'un aplat — plus de billes, plus de sable, et en mode police le texte plein en guise de contenu. L'INTERSECTION avec la silhouette des formes est restaurée : c'est par elle que le dégradé épouse chaque bille. La « forme fantôme » d'alors sera rechassée sur une autre piste.
- Les contours suivent enfin la police. Le tronçonnage rééchantillonnait le contour au pas : vingt-quatre jalons sur un O en faisaient un octogone — « tu as supprimé les arrondis ? ». La figure ET la paroi suivent désormais les traces ARÊTE PAR ARÊTE : chaque arête du contour aplati donne au moins un tronçon, la fidélité aux courbes prime sur le curseur Morceaux.
- Les trous des lettres sont des parois. Le o, les deux yeux du 8 : une lettre est UN enclos qui peut compter plusieurs boucles — son contour, et ses trous. La matière vit entre les deux et ne traverse ni l'un ni les autres ; un trou s'élargit de l'épaisseur au lieu de rentrer, la découpe passe en règle pair-impair pour percer, la rotation par lettre emporte les trous avec leur lettre. À l'atelier comme dans la page exportée.
- Le popup du départ devient « Nouveau calque ». Plus large — plus un titre tronqué à mi-mot —, et deux portes de plus : un CONTENANT seul, un CONTENU seul, liés à rien — le lien se noue dans le bloc « Contenant et contenu », quand on veut. « Importer un calque » a perdu son sous-texte et gagné son icône, la même que le bouton du bloc calques.
- Les popups se détachent du fond. Un voile sombre couvre la fenêtre d'en dessous tant que la question vit, et un halo blanc borde chaque popup — l'œil sait où regarder.
- Deux épreuves nouvelles : douze billes dans un carré troué, mesurées à deux instants — aucune dans le trou, toutes avec leur tracé — et un rond de vingt-quatre arêtes rendu arête par arête. Contre-éprouvées : parité cassée, deux billes s'installent dans le trou ; fidélité cassée, les carrés disparaissent.
- Un rang de contenants se compose. Dès qu'un contenant à contours libres en compte PLUSIEURS — plusieurs lettres, plusieurs chemins d'un SVG —, un sous-bloc apparaît sous la police pour mettre le rang en page. Seul, il reste caché : une lettre n'a personne avec qui s'aligner.
- La CHASSE, en trois icônes : naturelle, qui suit les avances de la police ; régulière, un pas fixe pour tous, où le point d'un i occupe autant qu'un M ; justifiée, qui pousse les contenants d'un bord à l'autre et partage les blancs.
- L'ALIGNEMENT, en quatre icônes : sur la ligne de base — la pose de la police, où le p descend sous le rang —, ou par le haut, le milieu, le bas, ce qui met toutes les boîtes au même niveau.
- L'ÉCART resserre ou étire le rang, en fraction de sa hauteur : négatif, les contenants se chevauchent. MÊME TAILLE les ramène tous à la hauteur moyenne, pour que la matière se répartisse également entre eux. LA COURBURE plie le rang en arc — vers le haut au-dessus de zéro, vers le bas en dessous —, chaque contenant tournant avec l'arc plutôt que de rester droit sur une ligne courbe.
- La mise en page se joue AVANT la normalisation, dans les unités de la police ou du fichier, et elle entre dans la clé du cache des traces : sans quoi changer une chasse aurait rendu les traces d'avant. Le code exporté n'a rien à faire — il reçoit les traces déjà composées.
- Un contrôle veille sur elle : chaque réglage du rang doit être lu par la disposition, entrer dans la clé du cache, être posé dans le panneau et enregistré dans le projet. Le contrôle miroir, lui, sait maintenant que ces réglages-là n'ont pas à se porter en JavaScript.
- Nouvelle brique d'interface : une barre de choix en ICÔNES, un bouton radio qui montre la forme au lieu de la décrire.
- Le JavaScript exporté sait se faire petit. Deux options dans les Paramètres : « Minifier » retire commentaires et blancs — un vrai petit lexeur, qui traverse chaînes, gabarits et expressions régulières sans les toucher — et « Packer » emballe le résultat dans le décodeur classique eval(p,a,c,k,e,d), tous les mots encodés en base soixante-deux. Sur une scène d'essai : 124 ko → 76 ko minifié → 54 ko packé, à figure STRICTEMENT identique.
- Les polices deviennent des contenants. Le récipient gagne le sous-effet « Texte (police) » : chaque lettre du mot est tracée, aplatie, et devient un enclos à part entière — la matière liée s'y verse, lettre par lettre. Le sous-bloc du panneau donne le texte, la police du système, le gras, et le mode « par lettre » : décoché, le mot tourne d'un bloc ; coché, chaque lettre vit la rotation continue du calque autour de son propre centre, décalée du « Délai par lettre » — la vague court le long du mot.
- Et les SVG aussi. Le sous-effet « SVG (bibliothèque) » prend ses contours dans Documents/Iridis/contenants : chaque chemin du fichier fait un enclos. La bibliothèque s'ouvre par le bouton à côté du select Sous-effet — les formes intégrées pour mémoire, « + » pour verser un SVG, « − » pour le retirer, « Utiliser » pour en faire le contenant du calque.
- Le moteur apprend les parois multiples. Chaque corps est confiné dans SON enclos ; les paquets d'un seul tenant — un blob, un fil de tissu — vont ensemble : les fils se répartissent entre les lettres, le blob se loge entier dans la première. La découpe suit, en autant de sous-chemins que d'enclos, à l'atelier comme dans la page exportée. Les traces partent dans les données du JavaScript : le navigateur ne trace pas de police. Les déformations et croisements du dessin ne se répercutent pas sur ces parois-là.
- Les épreuves mesurent tout ça : deux carrés imposés font deux groupes de tronçons, douze billes se répartissent six et six sans rien entre les enclos, le délai par lettre décale de 54 degrés exactement ce qu'il doit (0,3 s sur un tour de 2 s), et la découpe porte deux sous-chemins. Contre-éprouvé.
- La forme fantôme qui écrasait les billes est morte. Le découpage d'un contenu croisait ses parois avec les ZONES ANIMÉES du dessin importé — figées dans le repère de la figure. Dès que la paroi en sortait — contenu rapetissé sous 0,8, va-et-vient ou orbite du contenant, coins d'un cadre en losange —, les billes se faisaient couper à cette frontière invisible. Un contenu lié est désormais découpé par ses parois SEULES : les coins se remplissent, les mouvements n'arrachent plus le tas à son cadre.
- Une bille demandée, une bille rendue. Le plancher de huit corps transformait « Morceaux : 1 » en huit billes. Les billes et le gravier suivent le curseur tel quel ; le sable et le liquide restent en grains fins, quatre par morceau.
- Les crans sont revenus à la vie. Le curseur restait grisé tant qu'on n'avait pas deviné qu'il fallait choisir l'allure « par crans » : le régler CHOISIT maintenant cette allure, et il reste saisissable en permanence.
- L'objet exporté a une taille. Le SVG produit s'écrasait au gré du conteneur de la page hôte : il prend désormais la taille de la scène de l'atelier, et demarrer('#logo', { largeur: 320, hauteur: 240 }) impose la sienne — nombres en pixels ou chaînes CSS, le viewBox gardant les proportions. Le mode d'emploi joint le dit.
- Le menu contextuel des calques est réparé : le gabarit système gardait une colonne d'icônes claire qui chevauchait le texte sur le thème sombre ; le menu a maintenant son gabarit à lui.
- Les quatre boutons de création de calque font la même taille, et le bloc « Chevauchement des calques » a sa bascule, ÉTEINTE par défaut : sa mécanique — sélection animée, percée — ne travaille que si on l'allume.
- L'épreuve vérifie qu'une bille demandée en donne une (et sept pour sept). Contre-éprouvée.
- Le contenu ne bave plus sur la paroi dans la page exportée. Le découpage aux parois du contenant — présent à l'atelier depuis toujours — n'était pas porté dans le code JavaScript produit. Il l'est : le polygone de la paroi vraie, rentré au bord intérieur, découpe le contenu à chaque image, en dedans comme en « contenu dehors », et jusque sous les taches du dégradé en rond ou en nuage. La même paroi servant à la simulation et au découpage, une petite mémoire ne la bâtit qu'une fois.
- Le curseur « Morceaux » monte à mille, et sa butée se règle dans les Paramètres — de cent à trente mille, pour qui veut des parois de dentelle. Le récipient suit : sa borne interne de deux cent quarante tronçons sautait la finesse demandée. La matière monte plus prudemment — ses chocs coûtent le carré du nombre de corps : l'avalanche plafonne à quatre cents grains, le tissu à deux cent quarante maillons, la matière molle à quatre-vingt-seize points de peau.
- L'épreuve vérifie que la découpe existe, ferme son polygone, tient dans la scène et suit le récipient qui tourne — en mesurant un POINT du polygone, la boîte d'un carré étant la même à dix-huit et soixante-douze degrés. Contre-éprouvée.
- Le bloc « Rotation continue » devient « Mouvements directionnels ». Tout ce qui DÉPLACE le calque vit désormais là : la rotation continue, et six mouvements neufs, tous à zéro par défaut, tous fonctions du temps — l'export image par image les capture comme le reste.
- Va-et-vient X et Va-et-vient Y — le balancement, en points d'écran. Les deux ensemble suivent des cadences voisines : ils dessinent une courbe vivante, pas un rond.
- Orbite — le calque décrit une ronde autour de sa place.
- Profondeur — la respiration d'échelle : le calque s'approche et s'éloigne.
- Secousses — le shaker : des tremblements aléatoires, au bruit maison, reproductibles image par image.
- Cadence — les secondes d'un aller-retour de tout cela.
- La paroi suit désormais la POSE ENTIÈRE du contenant. La fiche à neuf nombres ignorait la penche, la cisaille, les étirements et les miroirs : une cisaille à −37° dessinait un parallélogramme dont le contenu débordait. La paroi et le découpage passent maintenant par la matrice complète du calque — placement, déformations et mouvements — et par l'INVERSE de celle du contenu : deux calques placés différemment restent liés. Secouer le récipient secoue ce qu'il contient.
- Les mouvements sont joués partout : l'aperçu, le code JavaScript exporté, le modèle WPF exporté — et la paroi que le contenu respecte, dans les trois.
- Deux nouveaux gardiens permanents : l'épreuve vérifie que le va-et-vient du contenant emmène bien son tas, et un contrôle relit la source de la pose — chaque réglage du placement doit y être consulté, sans quoi il redeviendrait invisible pour le contenu sans qu'aucune épreuve ne crie. Contre-éprouvés.
- La matière rebondit contre la paroi DESSINÉE, plus contre une formule. Le récipient creusé par sa répulsion, plié par son ondulation, secoué par son frémissement ou promené par ses réglages : tout ce qui déforme sa figure déforme désormais la paroi que son contenu heurte, et le découpage avec elle. Les billes tombent dans les creux au lieu de flotter dessus, et c'est la porte des contenants SVG — n'importe quel chapelet de tronçons fait un récipient. Le lien exporté emporte pour cela le contenant ENTIER, morceaux et graine compris ; et la paroi d'un pas sert de « paroi d'avant » au suivant, pour que la simulation n'en calcule qu'une par image.
- Les croisements n'ont plus de prise sur la matière simulée. La pesanteur du meneur — comme la répulsion, l'ondulation et l'aimantation — déplaçait les corps APRÈS la simulation : le rendu sortait du récipient que la simulation respectait. La matière est sa propre physique ; ces quatre curseurs sont grisés pour elle. La fonte reste : elle ne déplace rien, elle fusionne le dessin.
- Un vieux trou du portage rebouché. La rotation d'ensemble, la hauteur, la largeur et la perspective ne s'appliquaient plus aux figures exportées en disposition « Propre à l'effet » : l'appel s'était perdu, le commentaire était resté. L'aperçu et la page exportée montrent de nouveau la même chose.
- L'épreuve « matière » vérifie en plus que le tas épouse une paroi ondulée et que la pesanteur du contenu ne le fait plus bouger d'un point. Contre-éprouvée sur les trois fronts.
- La rotation appartient au calque, plus à l'effet. Le cadre et l'anneau du récipient ne tournent plus d'eux-mêmes : leur rotation vient du bloc « Rotation continue », comme pour n'importe quel dessin — et TOUT ce que ce bloc sait faire agit désormais sur le contenu : la durée du tour, le sens, l'allure, les crans. Un cadre qui tourne par crans secoue son sable cran par cran. Le sablier garde sa bascule et le bol son balancement, qui sont des mouvements d'effet, pas des rotations. Le couple créé coche la rotation du récipient, huit secondes par tour. Le curseur « Vitesse » de l'effet vivant fait ce que son nom dit : la vitesse de l'EFFET — pour la matière, celle de la simulation.
- Le contenu suit maintenant TOUT ce que le calque fait à son contenant. La fiche du calque — rotation continue, angle posé, échelle et position du placement — entre dans la paroi que la matière heurte, dans la pente que suit l'ancien « Grains et gravité » et dans le découpage. C'est tout l'intérêt du programme : chaque réglage du contenant est lié à son contenu, et le chemin est prêt pour des contenants SVG.
- Bord à bord. Le récipient peint sa paroi à cheval sur son contour, une épaisseur de chaque côté ; la matière qui s'arrêtait au contour mangeait donc la moitié intérieure de la bande. Elle s'arrête désormais au bord INTÉRIEUR — avec de vrais onglets dans les coins, où une simple bissectrice laissait encore quatre points de paroi se faire manger. Le découpage du contenu s'arrête au même bord.
- L'anneau serpentin a quitté le bloc « Rotation continue ». C'était un reste des tout débuts du programme ; c'est un effet à part entière, il n'a rien à faire dans la rotation d'un calque. Les vieux projets qui s'en servent se rechargent et se rendent sans heurt.
- Dans le code exporté, le lien porte la rotation continue du contenant et la matrice qui passe de son placement à celui du contenu : deux calques placés différemment restent liés jusque dans la page exportée.
- L'épreuve « matière » vérifie en plus le bord à bord au point près, et que l'allure du bloc rotation atteint bien le contenu. L'épreuve « contenance » suit le nouveau partage des rôles. Contre-éprouvées.
- Sept réglages pour la matière simulée, aux noms de Matter.js pour que sa documentation reste lisible. Tous NEUTRES par défaut : le caractère de chaque variante — Sable, Billes, Gravier, Liquide, Blob, Bulle, Gelée, Drapé, Corde, Chaîne — reste exactement ce qu'il était, et les curseurs jouent par-dessus.
- Vélocité — l'élan donné à la matière au moment où on la verse. À zéro elle tombe simplement ; poussée, elle gicle contre les parois.
- Échelle de temps — la vitesse du monde simulé, du ralenti au survolté. Le récipient, lui, garde l'heure de la scène : on peut donc faire couler du miel dans un cadre qui tourne vite.
- Contrainte — la raideur des liens. Molle, l'étoffe pendouille et la gelée s'étale ; raide, rien ne se déforme.
- Friction — l'accroche aux parois. À zéro la matière glisse comme sur de la glace ; forte, elle est emportée par le récipient qui tourne.
- Restitution — la part d'élan rendue au rebond, du mou au ricochet.
- Chanfrein — la rondeur des morceaux dessinés : à 1 des billes, à 0 des cubes, entre les deux des galets. La physique, elle, ne connaît que des ronds, et c'est ce qui la garde rapide.
- Poids — la notion qui manquait. Il n'entre pas dans la chute — une plume et une enclume tombent pareil —, mais dans tout le reste : ce qui est lourd rebondit moins, se laisse moins emporter par une paroi qui file, et garde davantage son élan.
- Les sept sont grisés hors de la matière simulée, où ils ne veulent rien dire ; la contrainte l'est aussi pour l'avalanche, qui n'a pas de liens, et le chanfrein pour la matière molle, dont la peau est déjà un contour lisse. Chacun a son « i ».
- Ils sont enregistrés, relus, et portés dans les deux exports — un fichier plus ancien qui ne les connaît pas garde ses valeurs neutres.
- L'épreuve « matière » vérifie qu'aucun des sept ne fait rien : sept curseurs inertes seraient pires que pas de curseurs du tout. Contre-éprouvée sur quatre d'entre eux.
- « Accrocher aux formes » laissait le contenu sortir du récipient. Ce mode peint la figure directement, une forme par tracé, dans un porteur à lui — et ce porteur-là n'avait jamais reçu de découpage. Le contenu débordait donc tranquillement des parois. C'est la même règle qu'en 3.78.1, appliquée une fois de plus : tout porteur nourri par la figure d'un vivant voit son découpage reposé à chaque image.
- Agrandir le récipient agrandit maintenant la place de son contenu. Le contour d'un contenant ne connaissait que l'angle de son corps, alors que sa figure passe ensuite par la hauteur, la largeur et la rotation d'ensemble : un cadre poussé à 1,35 se dessinait grand pendant que son contenu restait confiné dans le petit. Ce qui DESSINE la paroi et ce qui la fait RESPECTER — le découpage comme la matière simulée — passent désormais par la même formule. Pas de réglage à ajouter dans le bloc « Contenant et contenu » : la taille du récipient EST celle de sa paroi.
- Le portage JavaScript appliquait encore le curseur « Rotation » aux effets qui pilotent leur propre orientation — le sablier et le récipient en sablier —, que le programme ignore depuis toujours. Deux sabliers qui ne tournaient pas pareil : c'est réglé. Le contenant emporte aussi sa hauteur, sa largeur et sa rotation dans le code exporté.
- L'épreuve « matière » vérifie en plus, à chaque livraison, que la matière suit la TAILLE et la ROTATION de son récipient. Contre-éprouvée.
- Plantage corrigé : la matière n'avait pas de semence. Les trois fabriques de la 3.84.0 posaient leurs corps directement à la création du monde, sans confier la recette au moteur. Tant que rien ne le forçait à tout refaire, personne ne s'en apercevait ; au premier saut dans le temps — c'est-à-dire dès qu'un calque de matière apparaissait après quinze secondes de scène — le moteur rappelait une recette inexistante et la fenêtre tombait. La semence est désormais une vraie fonction, posée puis appelée, et le moteur ne resème plus dans le vide même si elle manquait.
- Plus de gel à la création ni sur les curseurs. L'horloge de la scène ne s'arrête jamais : un calque de matière posé au bout de dix minutes voulait rejouer trente-six mille pas de simulation, et le moindre cran de curseur — qui rebâtit le monde — figeait la fenêtre. Chaque monde compte maintenant SES pas depuis son propre début ; la paroi du récipient, elle, reste à l'heure de la scène. Une matière posée après quatorze minutes s'affiche en 9 millisecondes au lieu d'une demi-seconde.
- Nouveau contrôle permanent : tout monde de matière doit avoir une semence posée ET appelée, et le garde-fou du moteur doit rester en place. Contre-éprouvé en remettant le défaut d'origine.
- LA MATIÈRE SIMULÉE. Trois nouveaux effets ne se calculent plus : ils se déroulent. Un moteur de physique — Verlet, contraintes de distance, chocs entre pastilles, collision contre le CONTOUR du contenant — les fait tomber, rouler et s'écraser image après image, dans l'esprit des démos de Matter.js. L'interaction ne se fait pas à la souris mais avec la paroi du récipient : penche le cadre, la matière glisse dans l'angle bas ; fais-le tourner, elle est emportée.
- Grains et gravité 2.0 (simulés) — Sable, Billes, Gravier, Liquide. Rien n'est posé : le tas se forme tout seul. La variante Liquide ne montre pas les grains mais la nappe qu'ils dessinent, tracée en isolignes — un fluide qui gîte quand on incline le verre.
- Matière molle (corps souple) — Blob, Bulle, Gelée. Un anneau de pastilles tenues par des ressorts : ça s'écrase au fond, ça roule, ça reprend sa forme. La Gelée s'étale, la Bulle tient et montre sa paroi.
- Tissu et chaîne (accrochés) — Drapé, Corde, Chaîne. Les premiers maillons sont CLOUÉS à une arête du contenant et la suivent : basculer le cadre emporte l'étoffe avec lui, et elle retombe de l'autre côté.
- Matter.js n'est pas embarqué : c'est du JavaScript, or l'aperçu est en C#, et l'aperçu et le code exporté doivent montrer la même chose. Le moteur est donc écrit deux fois, à partir du même pseudo-code, et l'export JavaScript reste du JavaScript pur, sans dépendance.
- Le rendu reste une fonction du temps, mais plus SANS MÉMOIRE pour ces trois effets : le monde avance par pas fixes de 1/60 s et garde cinq secondes de passé dans un anneau. Deux fois le même instant donnent donc deux fois la même image, les échos relisent le passé au lieu de le recalculer, et l'export image par image reste fidèle.
- Créer l'un de ces effets pose comme pour la gravité DEUX calques liés : le récipient (cadre qui tourne) et la matière qu'il contient.
- Le contour d'un contenant — entonnoir, bol, cadre, anneau — n'est plus écrit qu'à UN seul endroit, d'où le tirent la figure du récipient, le découpage aux parois et désormais la matière qui les heurte.
- Nouvelle épreuve permanente « matière » : la matière tombe puis se pose, reste dans son contenant à toute inclinaison, redonne exactement la même image au même instant même après être allée voir plus loin, et suit le récipient qu'on penche. Contre-éprouvée sur ses quatre points.
- C'EST LE RÉCIPIENT QUI BOUGE, PLUS LA PESANTEUR. Le cadre restait droit et la gravité tournait dedans : un monde où la pesanteur fait le tour de la boîte pendant qu'elle ne bouge pas. C'est l'inverse désormais. Le cadre TOURNE, le bol SE BALANCE, et ce qu'ils contiennent retombe toujours vers le bas de l'image, glissant le long des parois qui passent. Le sous-effet « Gravité tournante » s'appelle donc « Cadre qui tourne ».
- Le mouvement du contenu est INDUIT par celui du contenant. Lié à un récipient, un calque « Grains et gravité » ne décide plus de rien : il prend la pente de son cadre, y compris si ce cadre a sa propre vitesse ou tourne à l'envers. Pencher le verre plus vite fait bouger le sable plus vite. Ses deux cases de liaison n'ont donc plus d'objet et sont grisées — il suit déjà son cadre, les cocher le ferait suivre deux fois.
- Le découpage aux parois tourne avec la paroi : un contenu confiné reste confiné quand le cadre penche.
- Les derniers grains ne s'échappent plus. La pyramide du tas s'arrêtait à la rangée de deux mais continuait d'y compter les grains restants : leur position montait à 3,75 fois la largeur d'une rangée, et ils partaient à mille points du cadre — un défaut qui traînait depuis l'écriture de l'effet. La pyramide finit maintenant en cheminée.
- Nouvelle épreuve permanente « contenance » : elle vérifie à chaque livraison que la paroi bouge, que le tas reste dans la moitié basse à toute inclinaison, et que la paroi du récipient se pose au point près sur celle des grains. Contre-éprouvée en cassant chacun des trois points.
- LE RÉCIPIENT : la paroi devient un effet à part entière. Un nouvel effet « Récipient (la paroi seule) » dessine le contenant — et rien d'autre : Sablier, Bol, Cadre ou Anneau. Le sablier se retourne tout seul, à sa cadence de bascule ; le bol et le cadre restent droits, c'est la gravité qui tourne autour d'eux. La paroi est débitée en tronçons réglés par « Morceaux » : le dégradé court le long du bord au lieu de teinter le cadre d'un seul bloc.
- Contenant et contenu, pour de bon : deux calques séparés. Un calque « Grains et gravité » déclaré CONTENU ne dessine plus sa propre paroi — il ne reste que le sable, le verre appartenant à son récipient. Chacun a donc ses couleurs, son épaisseur, son ombre et son halo.
- Création JUMELÉE. Choisir « Grains et gravité » pose désormais DEUX calques d'un coup, déjà liés : le récipient dessous (rôle Contenant, la variante qui correspond — sablier, bol ou cadre), le contenu dessus (rôle Contenu, lié au premier par son nom, mêmes vitesse, cadence et décalage). Un récipient choisi seul se déclare Contenant d'office, il n'attend plus que son contenu. Les noms de calques sont rendus uniques : le registre des contenants s'appuie dessus.
- Les deux calques basculent ENSEMBLE. Chaque calque comptait son propre temps depuis son premier affichage : un récipient et son contenu se retournaient avec une fraction de seconde d'écart, et le sable sortait du verre. La scène n'a plus qu'une horloge, commune à tous les calques.
- Le rôle, le lien, la place et les deux liaisons se RELISENT désormais dans le panneau : un projet rouvert affichait « Aucun » alors que le calque suivait bel et bien son cadre. Les paramètres par défaut ne défont plus la liaison d'un couple à peine formé.
- Sous le capot : une seule table dit la FORME d'un contenant (entonnoir, bol, cadre, anneau) pour les deux effets qui savent en tenir le rôle, et une seule formule calcule la bascule du sablier — la figure des grains, celle du récipient et l'angle du contenant la partagent, trois copies auraient fini par diverger. Miroir JavaScript complet, contrôles et épreuves au vert (32 effets distincts, 146 combinaisons élaguées).
- Version de clarification. Deux fichiers « 3.81.0 » différents ont circulé ; celui-ci est la version COMPLÈTE — contenant/contenu, onglet Scène réparé, infobulles, import déplacé, dé du bloc vivant et aides des réglages réunis. Aucun autre changement.
- CONTENANT ET CONTENU : deux calques liés. Certains effets gagnent à vivre en deux calques — le cadre (sablier, bol, carré de la gravité) et ce qui vit dedans. Un nouveau bloc « Contenant et contenu » type chaque calque : Rôle (aucun, contenant, contenu), « Lié à » (le nom du cadre), la Place (à l'intérieur — confiné aux parois — ou à l'extérieur — découpé hors du cadre), et deux liaisons : « Tourner avec le contenant » — le sable suit scrupuleusement le sablier qui se retourne, comme la gravité l'exige — et « Suivre la gravité du contenant » — le repère du contenu s'aligne sur le bas courant de la gravité tournante ou du bol.
- Sous le capot : l'angle et le bas du contenant se recalculent de ses seuls réglages — le rendu reste une fonction pure du temps ; la géométrie intérieure du cadre (entonnoir tourné de sa bascule, bol, carré, disque pour tout autre effet) DÉCOUPE le rendu du contenu à chaque image ; le tout est sérialisé, exporté et fidèle dans le code JavaScript (contenant résolu à l'export) comme WPF (registre rempli au montage).
- Les boutons de la barre du haut descendent de trois pixels. Tuto, Journal et les trois pastilles, tous alignés trois pixels plus bas.
- Le programme démarrait sur une erreur de ressource. Le cartouche des stats demandait un pinceau « Discret » qui n'existe pas — c'est « TexteDiscret ». Corrigé ; le crash au lancement de la 3.80.1 avec.
- La barre de titre respire. L'onglet du titre gagne cinq pixels de hauteur, la barre transparente extérieure autant, et les boutons Tuto, Journal et les trois pastilles descendent de deux pixels.
- Le groupe de la scène se déplace enfin dans une autre colonne. En disposition automatique, le plan ne comptait que les colonnes données par la largeur : une seule colonne, aucune cible de dépôt. Le plan gagne une colonne d'EXTENSION, fantôme pendant le glissement, réelle dès qu'un bloc y vit — l'onglet Scène y compris.
- Fini le scintillement et le lag des blocs au changement d'onglet. Trois causes, trois remèdes : la largeur oscille pendant le layout et chaque oscillation reconstruisait tout — le recalcul est COALESCÉ et n'a lieu qu'une fois la taille posée ; une reconstruction au même plan, aux mêmes places, ne touche plus l'arbre — une EMPREINTE la court-circuite, les blocs restent où ils sont d'un affichage à l'autre ; et une grille HORS ÉCRAN ne reconstruit plus rien — elle se note sale et se refait à son prochain affichage, au lieu de travailler pour un onglet caché.
- La LARGEUR rejoint la hauteur. Un curseur « Largeur » (0,2 à 2,5) étire la figure vers la gauche et la droite, dans le panneau comme dans la fabrique d'effets — il manquait au tableau. Promenable, exporté partout, fidèle dans le code JavaScript comme WPF produit.
- La PERSPECTIVE, de −100 à +100. Positif, les premiers morceaux rapetissent et les derniers grossissent — le petit devant, le grand derrière ; négatif, l'inverse. Chaque morceau reçoit sa propre échelle autour du centre de SA forme, avant les transformations d'ensemble. Promenable, sérialisée, portée dans les deux exports de code.
- Les STATS de l'effet courant en bas de l'aperçu. Le calque choisi, son effet et son sous-effet, le nombre de formes de la figure et la cadence d'images MESURÉE, recomposés deux fois par seconde dans un cartouche en bas à gauche. Une case des paramètres — onglet Fenêtre — les montre ou les cache, sans redémarrage.
- Les couleurs exportées sont enfin CELLES de l'atelier. L'export ne portait des effets de couleur que la phase du défilement : les bandes n'étaient pas multipliées, l'aurore n'avait ni sa vague ni sa respiration de clarté, la comète ni son fond assombri ni sa traînée. Le moteur du code produit embarque désormais la transcription EXACTE du calcul de l'atelier — cycles, vague, clarté, éclats, combinaison de deux effets, aller-retour, sens — vérifiée numériquement à l'octet près sur l'aurore. Tranches du ruban, formes vivantes, rond et nuage : tout passe par ce même calcul, et l'échelle du dégradé s'applique au rayon des taches comme dans le programme.
- Le code JavaScript exporté porte enfin le ROND et le NUAGE. Hors linéaire, l'export peignait chaque forme selon sa position sur la palette : rien à voir avec l'atelier, qui peint des taches radiales découpées par la figure. Le code produit monte désormais les mêmes taches — dégradés radiaux SVG, dérive du nuage, phase des couleurs, échelle du dégradé et transparences comprises — découpées par un CLIP : les quadrilatères d'un dessin, ou les formes du vivant réécrites à chaque image. Le ruban n'est monté qu'en linéaire, comme dans le programme.
- Les paramètres passent en ONGLETS. La pile unique cachait les blocs du bas dès que la fenêtre manquait de hauteur. Trois onglets — Au lancement, Fenêtre, Derniers réglages — chacun avec sa barre de défilement, le bouton Fermer toujours visible en bas, et la fenêtre se redimensionne désormais.
- Toutes les données vivent dans Documents\Iridis — plus d'emplacement caché. Les préférences de fenêtre (mise en page, largeurs des flancs, hauteur des onglets…) et les dégradés personnalisés vivaient dans %APPDATA%\Iridis : c'est lui qui « restaurait » l'interface après un nettoyage de Documents. Au premier lancement, ce qui s'y trouve — Iridis, ou Vitrail d'avant le renommage — est DÉPLACÉ dans Documents\Iridis, fichier par fichier sans rien écraser, et le dossier vidé est supprimé. Un seul endroit à connaître ; le supprimer remet tout à neuf, la racine du programme ne gardant qu'un params_defaut.json de secours.
- LE conflit du bloc « Animation du dégradé » est trouvé et réglé. Le rond et le nuage ne passent pas par le ruban : ils peignent un porteur à part, DÉCOUPÉ par la figure — mais son découpage n'était posé qu'au montage, quand celui du ruban est reposé à chaque image. Une figure vivante continuait donc bien de se régénérer, sauf que son nuage restait découpé sur l'instant du montage : l'effet semblait STOPPÉ dès que la nature quittait le linéaire, et reprenait en y revenant — pendant que les halos, rafraîchis, vivaient leur vie. Tous les porteurs découpés par la figure suivent désormais la MÊME géométrie, à chaque image : le bloc du dégradé ne touche plus qu'aux couleurs, comme il doit.
- Ctrl+Z annule enfin les changements DISCRETS. Un réglage à la liste ou à la case mémorisait l'état APRÈS application : l'annuler restaurait… l'état courant, et on ne voyait que l'onglet changer. L'annulation SAUTE désormais les instantanés identiques à l'état courant et remonte jusqu'au premier qui diffère vraiment — le paramètre revient. Un échec de restauration n'est plus silencieux : il s'annonce à l'écran et s'écrit au journal, avec le rang et le nom de l'instantané visé.
- Les blocs de la scène s'alignent en haut. Le bloc du chevauchement cumulait sa marge interne avec celle de sa colonne et démarrait plus bas que la pile des calques.
- Le journal dit OÙ il écrit. Sous la case « Journal de super débogage » des paramètres, le CHEMIN complet du fichier de la session s'affiche dès qu'elle est cochée — et si le fichier n'a pas pu s'ouvrir, c'est écrit là aussi, au lieu d'un silence.
- Les vignettes de la bibliothèque s'animent enfin FLUIDES au survol. Le battement passait par une minuterie à priorité basse : sous la fenêtre, la scène principale anime à soixante images par seconde et ne laisse presque jamais le fil d'exécution oisif — la minuterie ne passait que toutes les trois secondes. La vignette survolée est désormais branchée directement sur le RENDU, comme la scène : même cadence, aucune attente ; tout se débranche à la sortie, à la fermeture ou quand la fenêtre se cache.
- La fuite de mémoire est trouvée : c'était l'HISTORIQUE. Chaque geste mémorisait le projet ENTIER en JSON clair — un gros dessin, des mégaoctets par instantané, jusqu'à cinq cents instantanés : des gigaoctets, le programme qui rame, puis se fige. Les instantanés sont désormais COMPRIMÉS (dix à vingt fois moins), un instantané identique au précédent n'entre plus, et deux plafonds veillent : le compte choisi dans les paramètres (défaut ramené à 120) et un plafond de POIDS de 120 Mo qui purge les plus anciens quoi qu'il arrive.
- Les figures vivantes sont GELÉES après calcul. Une géométrie gelée n'a ni arbre de dépendances ni suivi côté rendu : nettement moins de mémoire et de travail par image, à soixante images par seconde et par calque.
- Le démarrage ne refabrique plus les défauts. Les trente et un calques de référence de params_defaut.json n'étaient regénérés que pour vérifier qu'il ne manquait rien : quand la version du fichier est celle du programme, il est relu tel quel, et la génération n'a lieu qu'aux changements de version.
- Le JOURNAL DE SUPER DÉBOGAGE — mode parano. Une case dans les paramètres, active immédiatement : un fichier par session dans Documents/Iridis/journal/, chaque ligne horodatée à la milliseconde et écrite sur disque aussitôt — un gel n'en perd aucune. On y lit chaque horloge d'animation démarrée ou arrêtée (avec leur COMPTE : les animations qui « tournent en arrière-plan » s'y verraient tout de suite), chaque relance du chien de garde avec l'état trouvé, les reconstructions de l'interface, le poids de l'historique, les survols de la bibliothèque, et toutes les cinq secondes un bulletin : mémoire gérée, mémoire privée, horloges abonnées, passages du ramasse-miettes.
- La bibliothèque a un filet de réveil. Si l'entrée de la souris sur une vignette a été manquée — fenêtre à peine ouverte, machine sous pression — le premier MOUVEMENT au-dessus la réveille quand même. Si l'inertie venait de la famine mémoire, la fuite colmatée la règle d'elle-même ; le journal le dira.
- Un bloc replié se replie EN ENTIER. La hauteur forcée à la poignée restait appliquée au bloc plié, qui gardait un grand cadre vide sous son en-tête. Replié, un bloc se réduit toujours à son en-tête ; sa hauteur forcée lui est rendue au dépliage.
- L'horloge du vivant a son CHIEN DE GARDE. Changer la nature du dégradé a encore trouvé un chemin pour couper l'animation de la figure. Plutôt que de courir après chaque chemin : un garde vérifie toutes les demi-secondes qu'un calque vivant affiché a bien son horloge, et la relance — le temps reprenant où il était — quoi qu'il se soit passé.
- Une colonne par flanc, la seconde À LA DEMANDE. Un flanc n'affiche que les colonnes où vivent des blocs : plus de couloir vide à demeure. Pendant un glissement, les colonnes encore vides apparaissent en FANTÔME — un couloir pointillé — et y déposer un bloc les rend réelles ; elles disparaissent dès qu'elles se vident. Gauche comme droite acceptent ainsi jusqu'à deux colonnes.
- Les blocs restent GROUPÉS avec leur onglet. La répartition automatique n'éparpille plus rien dans les flancs ni dans les colonnes d'appoint : seuls les blocs qu'on y dépose soi-même y vivent, les autres restent dans la colonne principale de leur panneau.
- Le glissement survit aux changements d'onglet. La grille s'abonnait à l'empoignage une fois pour toutes, et le TabControl la désabonnait en déchargeant l'onglet : au retour, plus rien ne se déplaçait. L'abonnement suit désormais le chargement. Le bloc des calques de la scène se déplace aussi : son en-tête empoigne comme les autres.
- La souris DIT le geste. Sur un titre de bloc, le curseur de déplacement ; sur le chevron de l'accordéon, la main. Pendant un glissement, tout le pointeur passe en déplacement.
- La bibliothèque ne rame plus : une vignette ne vit qu'au SURVOL. Les dizaines de figures étaient toutes recalculées vingt-cinq fois par seconde. Au repos, chaque vignette montre son premier instant, figé ; l'effet ne se calcule que sous la souris, repart de son début, et tout s'arrête dès que la fenêtre se cache ou se ferme.
- params_defaut.json : chaque effet a SES défauts. Un fichier rassemble, pour tous les effets, tous les réglages de tous les blocs — au format d'un calque exporté. Deux exemplaires : la sauvegarde à la racine du programme, et Documents/Iridis/params_defaut.json, qui PRIME dès qu'il existe. Tout nouveau calque vivant naît avec les défauts de son effet — le nom, l'effet et le sous-effet choisis à la création restant les siens. Le bouton « Enregistrer ces paramètres par défaut pour… » du bloc calque écrit les réglages courants comme nouveaux défauts de l'effet. À chaque démarrage, le fichier est FUSIONNÉ avec ceux du programme : les effets et paramètres apparus depuis s'AJOUTENT, rien de réglé n'est écrasé, et l'ancien fichier est d'abord copié avec la date dans son nom.
- L'animation de l'effet vivant ne s'arrête plus pendant les réglages. L'horloge du calque REPARTAIT DE ZÉRO à chaque redémarrage interne : tenir un curseur du bloc animation la maintenait au premier instant, et le sablier — dont la bascule n'arrive qu'en fin de cycle — semblait mort. Elle REPREND désormais où elle en était, quoi qu'il arrive.
- Le sablier tient dans son cadre et coule toujours dans le bon sens. Les tas de grains sont CONFINÉS par les parois en entonnoir — plus un grain dehors — et les cycles impairs inversent la verticale canonique : après une bascule, le sable ne saute plus d'un réservoir à l'autre et ne remonte plus un cycle sur deux. Sa CADENCE devient un réglage (0,05 à 1 bascule par unité de temps).
- Tout ce qui tourne vit dans le bloc « Rotation continue ». Le curseur « Rotation » de l'effet vivant et la nouvelle « Cadence de bascule » du sablier y sont déplacés, dans une section « Rotation de la figure » en tête de bloc : l'animation d'un effet et sa rotation ne se mélangent plus. Le grisage suit — la cadence ne s'allume que pour le sablier, la rotation s'éteint pour lui.
- Une barre de défilement par COLONNE, plus une par bloc. Chaque bloc se montre toujours en entier, à sa hauteur de contenu plus une marge de cinq points ; quand la colonne déborde, c'est ELLE qui défile. La poignée sous chaque bloc l'agrandit — jamais en dessous de son contenu — et un double-clic rend la hauteur automatique.
- Les blocs se déplacent à la POIGNÉE, avec la bande d'insertion. Saisir un en-tête et glisser : une bande bleue montre où le bloc tombera — entre deux blocs, dans n'importe quelle colonne, y compris les flancs et le bas quand la mise en page les ouvre. Le premier déplacement FIGE les places de tous les blocs affichés : plus aucun ne saute de colonne quand on en bouge un autre. Un simple clic sur l'en-tête plie et déplie, comme avant ; les flèches ◀ ▶ disparaissent.
- Quatrième mise en page : les TROIS emplacements. Le bouton mauve fait maintenant le tour de quatre dispositions — bas, flanc droit, deux côtés, et gauche + droite + bas : les onglets à droite, une colonne de blocs à gauche, deux en bas. Son icône montre la disposition courante.
- L'onglet Scène rejoint la grille commune. Le chevauchement et la pile des calques sont des blocs comme les autres : poignées de hauteur, déplacement à l'en-tête, défilement par colonne — et ils participent aux mises en page à flancs.
- La gravité, refaite d'après la page « Balls & Gravity ». Des BOULES rondes de tailles variées, et une gravité qui TOURNE : le tas roule le long des parois du cadre, chaque boule suivant le bas courant avec son propre retard — les grosses traînent. Trois sous-effets : « Gravité tournante », « Sablier » et « Bol ». Le SABLIER s'écoule puis BASCULE d'un demi-tour une fois les grains en bas : il pilote sa propre orientation, le curseur « Rotation » est donc ignoré — et grisé — pour ce sous-effet.
- Trois effets nouveaux, portés des pages d'exemple. « Attracteur (essaim) » : une grappe de corps agglutinés autour d'un meneur mobile, en essaim, en nuage orbital ou en comète. « Lignes souples » : des lignes — horizontales, verticales ou en cercles concentriques — qui s'écartent au passage du meneur et reprennent leur place. « Contour liquide » : un bouton, une pastille ou une goutte dont le bord se creuse ou se tend à son approche. Et un sous-effet de plus pour le texte vivant : « Champ de traits », un pelage planté sur les lettres qui se hérisse loin du meneur. Les pages en GLSL (Blob study, Shiny Blob, Liquid Rainbow) et l'animation d'état du bouton radio ne sont pas portables telles quelles.
- Les isolignes sont SUIVIES : le quadrillage du dégradé accroché disparaît. Les carrés marchants rendaient une forme PAR CASE de la grille — des centaines de petits morceaux, que le dégradé accroché peignait chacun d'une couleur : on voyait un damier au lieu d'un liquide. Les segments d'isoligne sont désormais ENCHAÎNÉS bout à bout en quelques contours fermés — un par goutte — et l'accroché donne une couleur par goutte, comme attendu. La fonte et les métaballes y gagnent aussi en fluidité de tracé.
- La lampe à lave ne clignote plus. La boule qui reboucle du haut vers le bas apparaissait d'un coup, plein rayon. Son rayon NAÎT et MEURT en douceur aux deux bouts de la montée, comme la goutte le faisait déjà.
- Les réglages sans effet sont GRISÉS. Chaque effet n'écoute qu'une partie des curseurs ; ceux qu'il ignore — l'« Animation » des métaballes, les « Morceaux » du contour liquide, le « Décalage du centre » du texte vivant — sont désactivés, avec l'infobulle qui le dit. La table suit le CODE des figures : l'épreuve « grisage » de controles.py la vérifie à chaque livraison, en relisant quelles propriétés chaque figure lit vraiment. La ronde et la portée du meneur se rallument dès qu'un croisement les convoque, et choisir un effet pose son nombre de morceaux CONSEILLÉ.
- Les blocs deviennent des ACCORDÉONS, et se déplacent de colonne en colonne. Une flèche devant chaque titre replie le bloc — l'état vaut pour la session, sur tous les calques. Deux flèches en haut à droite AIMANTENT le bloc dans la colonne voisine : l'affectation survit au redimensionnement et vaut, elle aussi, pour tous les calques.
- Trois mises en page, au choix d'un clic. Les blocs de réglages vivent en BAS (l'historique, en colonnes selon la largeur), dans un flanc à DROITE, ou répartis sur les DEUX CÔTÉS de l'aperçu — le panneau du calque courant pose alors sa première colonne dans le flanc gauche. Le bouton mauve de la barre d'actions fait le tour des trois ; son icône MONTRE la disposition courante, et chaque largeur se règle à la poignée et survit au programme.
- L'encre s'affiche en ÉCHANTILLON, transparent compris. L'ancien bouton « Couleur… » devient un nuancier — le carré de couleur et son code — et le sélecteur propose aussi le TRANSPARENT : une encre invisible, pour ne garder que les zones animées d'un dessin.
- « Limite héritée » rejoint son curseur. La case et le curseur de limite partagent une ligne : la case dit d'où vient la limite, le curseur la règle.
- Décocher « Accrocher aux formes » ne fige plus l'effet vivant. La case repassait par TOUTE l'application de l'animation — durée, opacités, marche des couleurs — au lieu de ne poser que son réglage ; elle ne touche plus qu'à lui. Et une figure momentanément VIDE — une fonte qui a tout dissous — vide le calque au lieu de le laisser figé sur sa dernière image.
- Les interrupteurs de blocs éteignent VRAIMENT, partout. Le bloc « Animation du dégradé » coupé neutralise aussi l'accroché, la nature, la couleur unique et les transparences — le dégradé ne s'affichait plus mais eux continuaient. Le bloc « Effet vivant » coupé FIGE la figure sur son premier instant sans écraser un seul réglage : l'ancienne extinction mettait deux curseurs à zéro et laissait courir tout le reste. Et un projet ROUVERT applique enfin ses blocs éteints : la liste était relue, rien n'était neutralisé ni montré.
- Les cinq nouveaux effets croisent les vingt-trois anciens. Chacune des mécaniques venues des pages de particules et de liquide sort de sa figure pour devenir un réglage GÉNÉRAL, appliqué à la figure déjà bâtie : elle vaut donc pour les vingt-huit effets, leurs sous-effets et leurs dispositions. Un effet de plus allonge le catalogue, un réglage général le MULTIPLIE.
- Répulsion, prise des traits fuyants : un point qui tourne écarte les morceaux dont il s'approche. La figure s'ouvre à son passage et se referme derrière lui.
- Ondulation, prise de la grille élastique : deux ondes croisées, de périodes différentes, soulèvent ce qu'elles rencontrent.
- Pesanteur, prise des grains : chaque morceau tombe vers le fond et y rebondit, de moins en moins haut, sur sa propre cadence. À un, la figure entière s'effondre.
- Aimantation, prise du texte vivant : les morceaux migrent vers la silhouette du mot. À un, n'importe quel effet se recompose en texte ; entre les deux, il est en train de le former.
- Fonte, prise des métaballes : les morceaux ne sont plus tracés tels quels, on trace le contour du champ qu'ils engendrent. Deux voisins ne se touchent pas, ils se REJOIGNENT — n'importe quel effet devient liquide.
- Les cinq partent au JSON, à l'export WPF et à l'export web, se promènent avec l'automatisation aléatoire, et sortent au dé — rarement, et jamais tous ensemble : cumulés, ils brouillent la figure au lieu de la transformer.
- Corrigé : l'export web était INCOMPLET pour les cinq effets ajoutés en 3.72.0. La table qui dit à l'élagage ce dont chaque effet a besoin ne les avait jamais reçus, si bien qu'un fichier contenant le texte en particules, les traits fuyants, la grille élastique ou les grains partait sans le meneur ni la silhouette du mot : la page du visiteur s'arrêtait sur une fonction inconnue.
- Les métaballes coûtent quinze fois moins. Leur contour et celui de la fonte passent par le même outil, qui calcule les valeurs de la grille UNE fois pour toutes au lieu de quatre fois par case.
- Le champ de texte se montre aussi dès que l'aimantation sert, quel que soit l'effet choisi.
- Cinq effets, deux familles. « Particules » : Texte en particules — le mot que tu écris est semé de points qu'un meneur bouscule —, *Traits fuyants*, Grille élastique. « Liquide et blob » : Métaballes, dont les champs s'additionnent pour ne faire qu'un seul contour, et *Grains et gravité*, qui coulent au fond d'un cadre qui tourne. Quatre sous-effets pour le texte, trois pour les autres.
- Les pages d'origine SIMULENT — une particule y garde sa vitesse, la souris la bouscule. Ici tout est calculé à l'instant voulu : la souris devient un meneur qui tourne, l'accumulation devient une formule, le hasard vient d'un bruit reproductible. On y perd la physique exacte, on y gagne un effet identique dans l'aperçu, dans l'image exportée et dans le code.
- Un champ texte dans le bloc « Effet vivant », avec sa police : il ne se montre que pour les effets qui s'en servent.
- La limite de formes est réglable. Quatre mille convenaient aux figures, pas aux nuées de particules, où le nombre EST l'effet. Le réglage général passe à « sans limite », et chaque calque peut poser la sienne — case « Limite héritée » cochée par défaut. Le dé n'y touche jamais : c'est un garde-fou, pas un effet.
- La page exportée porte une barre d'essai : images par seconde, nombre de formes réellement dessinées, mémoire de l'onglet quand le navigateur l'expose, et un sélecteur de couleur de fond avec sa case « transparent ». La couleur de départ reste celle de la scène ; la barre ne sert qu'à juger, et se retire en supprimant son bloc.
- Retiré : l'effet « Flamme dans le vent » et ses trois sous-effets — torche, bougie, colonne. Un projet enregistré avec lui retombe sur le brasier, qui repose sur le même feu de braises.
- Les effets gardent leur identité en anneau et en carré. La disposition posait un petit SYMBOLE à la place de la figure : une pastille, un carré, un anneau — et les vingt-quatre effets se ressemblaient tous. Chaque morceau est désormais la FIGURE DE L'EFFET en réduction, calculée à un temps décalé pour que l'onde se propage le long du contour. Le sonar reste un sonar, l'engrenage une roue, le tournesol un tournesol. Une épreuve compare les tracés des vingt-quatre effets et refuse que deux se confondent.
- Réparé au passage : le portage appliquait DEUX FOIS la rotation et l'étirement d'ensemble, alors que l'atelier ne les applique qu'une. Et un foyer étroit — la bougie — échantillonné sur quatre colonnes tombait entre les mailles : le feu ne s'allumait pas du tout. La finesse de la grille suit maintenant la largeur du foyer.
- Radial : le dégradé « en rond » porte son nom, et chaque entrée de la liste MONTRE le dégradé qu'elle nomme — un ruban, un disque, des taches mêlées.
- Lignes du dégradé : un curseur de 2 à 20 règle le nombre de couleurs de la palette aléatoire, donc le nombre de lignes du dégradé. Le dé le rebat comme le reste.
- Plafond de charge : cent morceaux, huit échos et vingt-quatre axes de symétrie demandaient vingt et un mille formes à rebâtir à CHAQUE image — de quoi bloquer la fenêtre, et la page du visiteur avec. Un plafond de quatre mille formes rabote maintenant ce qui se voit le moins : les échos d'abord, la symétrie ensuite, jamais la figure elle-même. Ces réglages gardent tout leur sens séparément. Le portage applique le même plafond, et une épreuve pousse les vingt-quatre effets à leur maximum pour le vérifier.
- Le portage sort des chaînes de C# : 1 426 lignes de JavaScript vivaient en @"...", guillemets doublés, sans coloration ni vérification — c'est là que se logeaient la moitié des erreurs de correctif. Elles sont désormais dans de vrais fichiers .js, embarqués comme l'était déjà le patron de code WPF. Le générateur passe de 2 333 à 907 lignes, et les épreuves lisent les fichiers tels quels.
- La sauvegarde garde une copie de secours : elle écrit à côté, décale l'ancien fichier, puis met le neuf en place. À aucun instant les deux ne manquent — une écriture interrompue n'emporte plus le filet avec elle.
- Les vérifications entrent dans le dépôt. Elles vivaient dans un dossier temporaire et disparaissaient à chaque séance : le filet qui avait attrapé un défaut ne le rattrapait plus le lendemain. Quatre épreuves tournent désormais avec les contrôles, à chaque livraison — les vingt-huit courbes comparées au C# sur 308 points, les 92 combinaisons d'effet, de sous-effet et de disposition exécutées telles qu'elles seront livrées, les lois de géométrie (engrenages, tournesol, électrocardiogramme, feu, nommage des copies), et les préférences écrites-relues. Elles lisent le JavaScript DANS le générateur, pas une copie qui aurait dérivé.
- Contrôle miroir : le moteur des figures existe en double, en C# et en JavaScript. Chaque effet, chaque sous-effet et chaque réglage du premier doit se retrouver dans le second — c'est de cet écart que venaient toutes les régressions de la semaine.
- Sauvegarde automatique : le travail s'enregistre tout seul à l'intervalle choisi dans les paramètres — jamais, ou d'une minute à une demi-heure. C'est un filet, pas un export : un plantage ne coûte plus que les dernières minutes au lieu de la séance entière. L'enregistrement se fait sans un mot, une annonce toutes les cinq minutes couvrirait celles qui comptent.
- Découpé : la fenêtre principale faisait 4 000 lignes où voisinaient la scène, les calques, l'historique, le dé, les exports et l'éditeur de vecteur. Elle est répartie en sept fichiers, chacun une PART de la même classe — le découpage sert la lecture, il ne change rien à l'exécution : bâti de la fenêtre, pile des calques, entrée-sortie, historique, dé, éditeur de vecteur, et le reste. Le plus gros fichier passe de 4 036 à 1 810 lignes. Vérifié membre par membre : cent neuf avant, cent neuf après, aucun perdu ni dupliqué.
- Contrôles ajustés : trois d'entre eux ne lisaient qu'un seul fichier et auraient crié au code mort sur du code parfaitement vivant. Ils lisent désormais toutes les parts d'une classe — et le XAML de chacune, où vivent les gestionnaires d'événements.
- Le code produit montre enfin ce que règle l'atelier. Sept réglages n'étaient portés dans aucun des deux gabarits : la retouche colorimétrique, les deux fondus, la rotation et l'échelle du dégradé, sa nature en rond ou en nuage, le sillage et le rythme des effets de couleur. Le logo exporté défilait à vitesse constante, sans fondu ni traînée, dans des couleurs non retouchées. Tout y est désormais.
- La retouche est CUITE dans la palette exportée plutôt que repassée aux gabarits : une seule application, et les deux exports en profitent.
- La rotation et l'échelle du dégradé vont sur un porteur INTERNE, jamais sur celui qui porte le découpage — sinon les formes tourneraient avec les couleurs.
- Un contrôle interdit que cela se reproduise : à chaque compilation, tout réglage figé pour l'export qui n'est employé par aucun gabarit est signalé. Deux limites restent, désormais déclarées noir sur blanc dans le contrôle et dans le mode d'emploi produit : l'anneau serpentin n'est pas porté en JavaScript, et des effets de couleur seule la phase l'est.
- Bibliothèque des effets : un bouton « Bibliothèque… » ouvre les quarante-six figures du catalogue, montrées EN MOUVEMENT et rangées par famille. Un clic choisit. Chaque vignette est un vrai rendu, calculé par le même moteur que la scène — ce qu'on voit est ce qu'on obtiendra —, et une seule horloge les anime toutes.
- Complété : l'export JavaScript ne rendait de la rotation continue que le tour lui-même. Son À-COUP — crans, élan, ressort, rebond, élastique et les vingt-huit courbes — et son SILLAGE manquaient : le tour y était toujours régulier et sans traînée. Les deux y sont, le sillage étant fait de copies du calque en retard d'un peu d'angle et de plus en plus pâles, comme à l'atelier.
- Enregistré : l'état des interrupteurs de blocs part désormais dans le fichier de réglages. Sans lui, un projet rouvert montrait ses réglages mais les appliquait tous, y compris ceux qu'on avait justement coupés. Un audit croisé confirme par ailleurs que tout ce qui s'écrit se relit : cent cinq champs, aucun oublié de part et d'autre.
- Nommé pour un serveur : le fichier de code prend le nom de la scène sans accent, sans espace et en minuscules — « Ma Scène » donne « ma-scene.js ». Un nom accentué déposé sur un serveur devient une adresse à échapper et casse au premier lien.
- Nature du dégradé : une liste dans le bloc de l'animation. « Le long du tracé » reste la façon d'origine, celle du ruban. « En rond » fait partir la couleur du centre vers le bord. « En nuage » pose plusieurs taches de couleur qui dérivent lentement et se mêlent — ce que fait un dégradé de maillage, sans en avoir le maillage. Les deux nouvelles natures peignent la vue entière, que les formes découpent comme avant ; le ruban reste en place, simplement masqué, si bien que changer d'avis ne coûte rien.
- Transparences à portée de main : les deux réglages de fondu sont aussi dans le bloc « Effet vivant ». C'est en réglant la figure qu'on veut la voir se fondre, pas dans un autre bloc. Les deux paires se suivent l'une l'autre sans jamais s'appeler en boucle.
- Réparé : demander un seul morceau en donnait deux. Quatorze effets imposaient un plancher de deux ou trois morceaux, hérité de leur écriture ; il n'avait aucune raison d'être.
- Trois réglages qui valent pour TOUS les effets. Ils multiplient le catalogue au lieu de l'allonger : chacun s'applique aux vingt-quatre effets, à leurs sous-effets et à leurs dispositions.
- Échos : des fantômes de la figure, telle qu'elle était il y a peu, posés dessous. Ils ne sont pas mémorisés mais RECALCULÉS à un temps antérieur — la traînée part donc à l'export, image par image comprise. Un second réglage donne leur retard : court, ils se serrent en sillage ; long, on les compte.
- Axes de symétrie : au-delà de 1, la figure est répétée en rosace ET miroitée. C'est le miroir qui distingue une rosace d'une simple ronde — n'importe quel effet devient alors un mandala.
- Frémissement : chaque morceau tremble sur place, d'un mouvement tiré du bruit, et jamais en même temps que ses voisins. Ce qui était mécanique devient organique.
- Les trois entrent dans l'automatisation aléatoire, dans le dé et dans les deux exports.
- Accrocher aux formes : une case dans le bloc de l'animation. Par défaut, le dégradé est peint DERRIÈRE les formes, qui y découpent des fenêtres — une forme qui tourne balaie le dégradé et change de couleur en chemin. Accrochée, chaque forme reçoit SA couleur, prise à sa place d'origine, et l'emporte avec elle : le dégradé devient une texture posée sur les éléments, et les couleurs tournent avec eux.
- Le mode part dans les deux exports : le code WPF peint alors un tracé par forme au lieu de découper le ruban, et le JavaScript prend la teinte au rang de la forme plutôt qu'à sa position.
- Refait : les flammes en langues ont été jetées. Les deux effets reprennent maintenant le principe du feu de DOOM, celui du dépôt filipedeschamps/doom-fire-algorithm : une grille de gros pixels qui montent en se refroidissant, le bord du feu s'effilochant en cases plus petites. L'algorithme d'origine fait évoluer sa grille d'une image à l'autre ; ici l'intensité se CALCULE, parce que le rendu doit rester une fonction pure du temps — sans quoi l'export image par image et le code produit ne montreraient pas la même chose que l'aperçu. La matière monte parce que le bruit est lu plus bas à mesure que le temps passe.
- Assorti : un feu créé reçoit d'office la palette « Braise », et l'électrochoc la palette « Laser ». Un feu vert ne se lit pas comme un feu ; seuls les effets dont la couleur fait la lecture en reçoivent une, et elle se change comme n'importe quelle autre.
- Rattrapé : les motifs des dispositions n'étaient pas passés dans l'export JavaScript en 3.59 — le code produit rendait encore des pastilles là où l'atelier montrait roues, carrés et anneaux.
- Unifié : le bouton « + » rouvre la fenêtre de l'ouverture, en mode ajout — mêmes portes, mêmes gestes. Elle se contente d'adapter ses mots et de retirer la case « se souvenir de mon choix », qui n'aurait aucun sens sur un ajout ponctuel. La fenêtre créée pour l'occasion en 3.47 est supprimée : un seul popup dans le programme, donc un seul geste à apprendre.
- Réparé : le programme tombait en bougeant le rayon des couleurs (MILERR_SCANNER_FAILED). Un secteur dont les deux bords se confondent est une géométrie dégénérée, sur laquelle Direct2D renonce à tracer un contour. Les secteurs gardent désormais une épaisseur et une ouverture minimales, à la source, et la silhouette rattrape l'erreur au lieu de laisser tomber le programme.
- Fondus : deux réglages « Transparence au début » et « Transparence à la fin ». À plat, ils effacent le bord gauche ou le bord droit — de quoi poser l'animation au milieu d'une page sans qu'elle s'y arrête net ; en rond, le cœur ou l'extérieur, qui se fond alors dans le vide.
- Reconnaissables : en disposition anneau ou carré, les effets ne se changent plus tous en pastilles. La flamme garde sa langue, l'engrenage sa roue dentée, le damier son carré arrondi, la spirale sa goutte effilée, l'orbite et le sonar leur anneau.
- Curseurs : le halo de la poignée tenait 26 points dans une ligne de 22, il était donc rogné — il en fait 20. Un curseur désactivé passe au gris clair, au lieu d'un vert pâli qu'on confondait de loin avec un curseur actif.
- Complété : le dé rebat maintenant les déformations, la direction et l'échelle du dégradé, ses fondus, la retouche colorimétrique et tous les réglages du spinner. Il laisse volontairement de côté la visibilité d'un calque, les couleurs d'origine d'un dessin importé et le placement : ce sont des décisions de composition, pas des variations de style.
- Renommé : le journal de plantage s'appelle iridis.log.
- Automatisation aléatoire : une case au bas du bloc « Effet vivant » fait apparaître une case devant chaque curseur. Celui qu'on coche ne garde plus une valeur — il VA ET VIENT tout seul entre les deux bornes affichées à sa droite, qu'on règle à la main. Chaque réglage promené reçoit sa propre allure, si bien que deux d'entre eux ne montent jamais ensemble et que l'ensemble ne se répète qu'au bout d'un temps très long. Le mouvement est un aller-retour, jamais un retour brutal au début : vérifié à la compilation, bornes respectées et sans saut. Tout part à l'export, code WPF comme JavaScript.
- Rotation du dégradé : un curseur de 0 à 360° fait pivoter le dégradé SOUS les formes. Elles ne bougent pas — c'est le ruban de couleurs qui tourne dans leur découpe.
- Échelle du dégradé : un second curseur l'agrandit ou le resserre. Au delà de 1 on n'en voit qu'une portion, donc des couleurs plus franches ; en deçà il se répète davantage.
- Deux flammes, dans la famille « Matière et rythme » :
- Flamme dans le vent — une langue dont la largeur suit un fuseau et dont l'axe est couché par le vent en carré de la hauteur : une flamme ne plie pas à sa base. Le vent lui-même ondule, et des cœurs plus courts s'empilent au pied. Trois sous-effets : dans le vent, droite, chalumeau.
- Brasier — plusieurs langues côte à côte, de hauteurs et de rythmes différents, les plus hautes au centre : le foyer a un cœur et ne s'éteint jamais tout entier. Le second sous-effet y ajoute des étincelles qui montent plus vite que la flamme et s'éteignent avant la fin de leur course.
- La turbulence vient d'un bruit fractal — trois octaves de sinus déphasés — qui reste une fonction pure du temps : les deux exports la rendent à l'identique, image par image comprise.
- Bouclé : une case « Boucler » referme le dégradé sur lui-même — la couleur de fin redevient celle du début. C'est ce qui supprime la couture qu'on voit là où la fin du dégradé rejoint son début, sur une figure circulaire ou à chaque tour d'un cycle. Le mécanisme est le même que pour la couleur unique : la palette gagne une entrée, et rien d'autre dans la chaîne n'a besoin de le savoir.
- Tiré plus loin : le dé rebat aussi la GRAINE de la palette, c'est-à-dire le nombre de couleurs d'une palette aléatoire — sans elle, le tirage rendait toujours la même. Il tente aussi le bouclage une fois sur trois.
- Recentré : l'export JavaScript rejetait le logo dans un coin. Son cadre était celui du plus grand calque, alors que les placements sont exprimés dans le repère de la SCÈNE : c'est donc la taille de la scène qui part désormais avec l'export. Sans elle, un repli calcule de quoi contenir chaque calque là où sa matrice le pose.
- Complété : le damier ignorait son sous-effet dans l'export — le retard de l'onde manquait au portage, et la grille qui respire s'y montrait en diagonale. Les trois allures y sont maintenant.
- Réparé : après un tirage au dé, toucher un seul réglage de l'effet vivant ramenait le spinner précédent. Le dé écrit dans les réglages, mais l'interface gardait ses anciennes valeurs et les réécrivait toutes au premier curseur touché. Elle se repose désormais après chaque tirage.
- Nommée : la scène a un nom. Un clic droit sur son onglet le change, et ce nom coiffe la pile des calques — « Calques de "Caméléonardo" » — et devient le nom de fichier proposé à chaque export : image animée, code, réglages. Les caractères qu'un système de fichiers refuse sont remplacés sans bruit, ce qui est vérifié à la compilation.
- Rangé : exporter et importer un calque ne sont plus deux boutons en tête d'onglet mais deux ICÔNES devant la corbeille, dans le bloc du calque — les mêmes que celles de la barre du bas, à ceci près qu'elles ne portent que sur ce calque. Les icônes de barre acceptent désormais une taille : la barre du bas garde la sienne, les blocs de réglages en veulent une plus sobre.
- Réparé : la fenêtre « Nouveau calque » se rouvrait sans fin. Le « + » était un onglet qu'on sélectionnait, et refermer une fenêtre modale rend le focus au dernier élément qui l'avait — donc au « + », qui se resélectionnait et rouvrait la fenêtre. Le « + » ne se sélectionne plus du tout : son clic est intercepté avant que la rangée d'onglets ne le voie, et il ne prend jamais le focus. Une garde interdit par ailleurs deux fenêtres empilées.
- Aplat : une case « Couleur unique » peint le calque d'UNE seule couleur, à la place du dégradé. Le mécanisme est le même — c'est la palette qui se réduit à une teinte —, si bien que le rendu, les exports et le fichier de réglages le suivent sans rien connaître de ce réglage. La palette et le dégradé ne sont pas perdus : décocher les retrouve tels quels.
- Interrupteurs : chaque bloc de réglages porte un petit interrupteur. Éteint, il ne fait plus RIEN — ses effets sont neutralisés sur le calque, ses réglages restent affichés en veille, et le dé ne les touche plus. Rallumé, le bloc réapplique ce qu'il montrait : on ne perd jamais un réglage en coupant un bloc pour voir ce qu'il donne.
- Rangé par familles : les vingt-deux effets se choisissent maintenant en trois listes — Famille, Effet, Sous-effet. Cinq familles : ondes et mesures, nuées de points, mécanique et grilles, matière et rythme, rubans et spirales. Une seule liste de trente entrées ne se lisait plus.
- Quinze sous-effets repris des pages fournies, chacun gardant l'esprit de son effet en changeant sa figure : rides d'eau et anneaux successifs pour la décharge, vagues circulaires et balayage rayonnant pour l'arc, orbites contrariées, pastilles pulsantes et trame de points pour l'orbite, galaxie spiralée, facettes cristallines, grille qui respire et matrice de blocs, lignes qui s'étirent et réseau à phases, bras logarithmiques, bandes d'énergie, et la vague de pendules — celle qui se désynchronise puis se retrouve. Tous les réglages valent pour toutes les variations, et le dé les tire aussi.
- Échangeable : chaque onglet de calque porte « Exporter ce calque » et « Importer un calque ». Un effet réussi s'enregistre en JSON avec tous ses réglages et se reprend dans un autre projet ; à l'import, un nom déjà pris reçoit un suffixe, exactement comme une duplication. Un calque bâti sur une image le dit franchement : le fichier ne porte que des réglages, pas le dessin.
- Quatre figures reprises des pages fournies, cette fois d'après leur code et non de mémoire :
- Balayage sonar : l'aiguille tourne et chaque écho qu'elle croise s'allume puis s'éteint. L'original garde la date du dernier passage sur chaque écho ; ici l'ancienneté se CALCULE par l'écart angulaire, pour que le rendu reste une fonction pure du temps — donc fidèle à l'export image par image.
- Hélice balayée : des points enroulés que le temps fait tourner, et qu'une ligne de balayage grossit au passage. La profondeur se lit à leur taille.
- Sphère de points : répartition en spirale de Fibonacci — la seule qui les espace régulièrement —, rotation sur deux axes et ligne de balayage.
- Tournesol : la phyllotaxie, des graines posées sur l'angle d'or à une distance en racine de leur rang. Vérifié à la compilation : aucune graine n'en recouvre une autre.
- Sept effets de plus, portés partout — aperçu, export WPF, export JavaScript :
- Damier : des carrés arrondis qui enflent et s'effacent, l'onde traversant la grille en diagonale ;
- Engrenages imbriqués : deux roues en prise tournent en sens contraire, et d'autant plus vite qu'elles sont petites — vitesse × rayon reste constant tout au long du train, ce qui est vérifié à chaque compilation ;
- Orbite : une pastille de tête et sa traînée, qui rapetissent en s'éloignant ;
- Couronne de barres : chacune s'allume net et s'éteint en s'amenuisant ;
- Carrés qui pivotent : un quart de tour chacun, puis l'attente qui fait le rythme ;
- Rubans croisés : des bandes qui ondulent sur deux périodes différentes et se recouvrent comme un tressage ;
- Spirale hypnotique : des bras qui s'élargissent en s'éloignant, d'où l'illusion de profondeur.
- Accordé : chacun reçoit d'office le sens de dégradé qui lui va — horizontal pour le damier, les carrés et les rubans, radial pour la spirale, circulaire pour le reste.
- Fermé : chaque onglet de calque porte sa croix, qui demande confirmation avant de supprimer. Le menu du clic droit propose la même chose.
- Ajouté : un onglet « + » au bout de la rangée pose la question du nouveau calque — figure vivante ou forme, calque animé, calque image — sans rien décider à ta place. Il ne s'ouvre jamais : il rend la main à l'onglet précédent et laisse la fenêtre faire son office.
- Dupliqué : « Dupliquer le calque » dans le menu du clic droit. La copie est conforme — formes, figure vivante, couleurs, ombre, halo, placement — et se pose juste au-dessus de l'original sous un nom suffixé « _copie1 », « _copie2 »… Dupliquer une copie ne produit pas « _copie1_copie1 » : le compteur repart toujours du nom d'origine.
- Rendu lisible : le menu contextuel prenait le thème de Windows — fond blanc et texte pâle sur une interface sombre. Il porte désormais celui du programme.
- Refait : l'électrocardiogramme est celui d'un vrai moniteur. La ligne reste PLATE et c'est l'impulsion qui la parcourt, monte et redescend, en laissant derrière elle la ligne de repos — au lieu du tracé entier qui glissait. À plat par défaut, enroulée sur le cercle en mode anneau, comme un moniteur courbé. Vitesse mène l'impulsion, Animation en donne l'amplitude, Épaisseur le trait, Morceaux le nombre d'impulsions en piste et Course leur largeur.
- Remplacé : « Cœur qui bat » devient « Électrochoc », et la silhouette de cœur disparaît — des ondes de choc qui partent du centre en s'affinant, et des éclats qui claquent au départ de chacune. Les projets enregistrés sous l'ancien nom restent lisibles.
- Réparé au passage : les balises d'élagage de l'export JavaScript étaient posées au mauvais endroit, et les branches formaient une chaîne if/else qu'on ne pouvait pas couper au milieu. Chaque effet est désormais autonome : l'export d'un seul effet pèse 68 % de moins que le catalogue, contre 28 % auparavant.
- Réparé : le tirage au dé faisait tomber le programme dès qu'il donnait une rotation. Les figures vivantes étaient GELÉES à leur construction, et une géométrie gelée refuse qu'on lui pose une transformation. Elles sont refaites à chaque image : le gel n'apportait rien et coûtait un plantage.
- Élagué : l'export JavaScript ne contient plus que l'effet employé et ses outils. Livrer les dix effets et les vingt-huit courbes quand un seul sert, c'était faire porter au visiteur du code qui ne s'exécuterait jamais. Chaque combinaison d'effet, de disposition et d'à-coup est vérifiée à la compilation : le fichier élagué s'exécute et rend des figures valides.
- Sorti : le script vit par défaut dans son propre fichier, hors de la page — le navigateur peut le mettre en cache et l'intégration à un site existant est immédiate. La case permet toujours de tout embarquer.
- Réparé : les couleurs de l'export JavaScript. Les réglages du cercle de couleurs manquaient aux données produites ; le calcul de la teinte tombait sur une valeur absente, rendait une couleur invalide, et le SVG la peignait en NOIR — un noir qui avait l'air d'un choix. Les réglages partent désormais avec le reste, et une couleur ne peut plus sortir invalide.
- Respecté : un fond transparent le reste. La page exportée ne s'invente plus un fond sombre là où la scène n'en a pas : elle reprend le damier de l'atelier, en CSS pur, qu'une ligne suffit à retirer pour un fond réellement vide.
- Renversé : une case « Sens des aiguilles d'une montre » fait repartir l'effet vivant à l'envers — le tracé défile dans l'autre sens, la couronne tourne à contresens, l'onde remonte la chaîne. C'est le sens de l'EFFET, distinct du curseur Rotation qui fait tourner la figure entière. Le dé le tire aussi, et les deux exports le suivent.
- Séparé : la case d'animation des couleurs ne commande plus la figure d'un effet vivant. Ce sont deux animations indépendantes — décocher fige le dégradé sur son premier instant, la forme continue de bouger à son rythme. La case s'appelle désormais « Animer les couleurs », puisque c'est ce qu'elle fait.
- Reporté : la séparation vaut aussi à l'export. Un calque vivant garde son ruban même dégradé figé — sans lui, le code exporté n'aurait plus rien à peindre —, et le WPF comme le JavaScript arrêtent la phase des couleurs sans toucher à l'horloge de la figure.
- Accordé : le dégradé et la figure allaient dans deux sens à la fois — les couleurs tournaient en rond pendant que les barres de niveau montaient. Le chemin du dégradé suit désormais l'effet : en rond pour ce qui tourne, de bas en haut pour ce qui monte, du centre vers le bord pour ce qui enfle. Un réglage « Sens des couleurs » permet aussi de l'imposer.
- Rayonné : « en cercle » veut bien dire que la BASE forme un cercle. Les barres, gouttes et rayons partent maintenant du contour et poussent vers l'extérieur — ou vers le centre —, comme les rayons d'une roue. Le carré suit la même règle : chaque motif sort perpendiculairement à son côté. Vérifié géométriquement à chaque compilation.
- Reporté : ces deux changements valent aussi dans l'export en code, WPF comme JavaScript.
- Réglable après coup : un calque à effet vivant gagne son bloc « Effet vivant » dans son onglet — effet, disposition, à-coup, changement de taille, vitesse, morceaux, hauteur, épaisseur, décalage, animation, rotation, rayon de disposition, course, et le cercle de couleurs. Ces réglages n'existaient qu'à la création, ce qui obligeait à supprimer un calque pour changer d'idée. La figure se refait à chaque mouvement de curseur, sans rien perdre des couleurs, de l'ombre ni du placement.
- Lisible : les noms de réglages ne finissent plus en points de suspension. La largeur de l'étiquette est un minimum, pas un couperet : « Rayon des… » redevient « Rayon des couleurs ».
- Reposé : « Nouvelle animation » rouvre la fenêtre de bienvenue, quel que soit le choix enregistré. C'est le moment où l'on décide du projet, et rien ne dit que le prochain ressemblera au précédent.
- Embarqué : l'export JavaScript propose de tout mettre dans une seule page HTML — un fichier à déposer, qui s'ouvre d'un double-clic. Décoché, le script reste à part pour s'intégrer à un site existant.
- Habillé : la page reprend la couleur du calque de fond de la scène ; le logo s'y voit sur le même fond qu'à l'atelier.
- Allégé : jQuery n'est chargé que si l'export l'utilise. Une page qui charge une bibliothèque pour rien est une page plus lente.
- Demandé : « projet spinner » n'impose plus une figure toute faite. La scène part vide et la fabrique s'ouvre : c'est toi qui choisis l'effet vivant ou la forme, et ses réglages. Vaut aussi pour « Nouvelle animation » quand le spinner est le choix de démarrage.
- Retiré : le réglage « Rouvrir les derniers réglages ». Tant que rien n'a été choisi, c'est la QUESTION qui l'emporte — le programme ne décide pas à la place de qui vient d'arriver. Les réglages de la dernière séance restent enregistrés dans leur fichier, mais ne se rouvrent plus tout seuls : on les importe quand on les veut, par la barre du bas.
- Décalé : l'onglet du titre des fenêtres secondaires glisse de 5 points vers la droite.
- Disposé : six façons d'étaler un effet — la sienne propre, en anneau vers l'extérieur ou vers le centre, sur le pourtour d'un carré dans les deux sens, ou en grille. L'effet ne fournit alors que son motif, la disposition décide du reste : le même effet ne se reconnaît plus d'une disposition à l'autre.
- Rythmé : les vingt-huit courbes d'à-coups des animations de couleur s'appliquent désormais AUSSI au mouvement des formes. Départ lancé, arrivée freinée, rebond, élastique — un seul catalogue pour tout le programme.
- Multiplié : le nombre de morceaux monte à 100, pour tous les effets. Les plafonds arbitraires — quatre ondes, six balles — ont sauté.
- Tiré : le dé du bas de la fenêtre rebat tout cela d'un coup — effet, disposition, à-coup, rythme, nombre, tailles, rayons et graine.
- Calculé : l'export JavaScript n'aplatit plus les effets vivants en chemins figés. Il exporte les FORMULES : les formes se recalculent, et leurs couleurs aussi — la position de chaque forme autour du centre donne sa place sur le cercle du dégradé. Les vingt-huit courbes sont portées à l'identique, vérifié sur 308 points à chaque compilation. Seuls les calques venus d'une image gardent leurs chemins, faute de formule pour un dessin quelconque.
- Déplacé : le message d'information se pose en bas de l'aperçu. Au centre, il masquait précisément ce qu'on venait de régler.
- Redressé : « Battement de cœur » est devenu ce qu'il devait être, un ÉLECTROCARDIOGRAMME enroulé sur un cercle — onde P, complexe QRS, onde T, tracés par des gaussiennes et non par des segments, dans un ruban fermé sans extrémité libre. L'ancienne figure garde sa place sous le nom « Cœur qui bat », pour qui la voulait.
- Recousu : la couture du dégradé. Il parcourt un chemin ouvert et, bouclé pile sur un tour, son début et sa fin se rejoignaient en laissant une épissure visible. Le chemin se prolonge désormais d'un dixième de tour pour passer par-dessus — et la case « Recouvrir la jointure des couleurs » le rend réglable.
- Comblé : le disque resté vide au milieu des spinners. Il venait de la largeur du cercle de couleurs, jusqu'ici figée ; deux curseurs, « Rayon des couleurs » et « Largeur des couleurs », en donnent la main. Les trois réglages suivent le fichier JSON et l'export en code.
- Accordé : le projet spinner de l'ouverture part des mêmes réglages que la fenêtre « créer un calque spinner ». Les deux chemins donnaient des spinners différents, sans aucune raison.
- Enregistré : les réglages d'un spinner vivant partent dans le fichier JSON, graine comprise. Mieux : un spinner absent de la scène au moment de relire des réglages est REFAIT à partir d'eux — il n'a rien à retrouver sur le disque, contrairement à une image importée.
- Programmé : l'export en code WPF n'aplatit plus les effets vivants. Le fichier produit emporte la source des figures et les REFAIT image par image, exactement comme l'aperçu. C'était le but du programme : exporter un logo qui reste du code, pas un décalque.
- Publié sur le web : nouvel export en JavaScript, au choix natif ou jQuery. Il écrit un SVG animé par requestAnimationFrame, avec les mêmes formules portées à l'identique — le bruit déterministe et le rythme des morceaux rendent les mêmes valeurs qu'en C#, ce qui est vérifié à chaque compilation. Trois fichiers : le script, une page d'exemple, et un mode d'emploi qui dit franchement ce que le portage ne reproduit pas (flous SVG plus doux, courbes d'à-coups partiellement portées).
- Vivant : dix effets de spinner dont la FIGURE elle-même bouge, et non plus seulement les couleurs — battement de cœur en deux coups avec ses ondes de choc, barres de niveau de musique, blob spongieux qui respire, goutte d'eau qui s'étire et s'écrase, cascade, balle qui rebondit en s'aplatissant au contact, ovni dont les ronds tournoient sur une ellipse vue de biais, vague à la manière d'Android, aléatoire qui invente chaque morceau, et le serpentin — l'ancien anneau segmenté, qui rejoint enfin ses semblables.
- Réglable : chaque effet a ses commandes — vitesse, nombre de morceaux, hauteur, épaisseur, décalage du centre, ampleur de l'animation et rotation d'ensemble — et quatre façons de changer de taille : tous ensemble, chacun pour soi, en chaîne comme une onde, ou au hasard.
- Fidèle : la figure reste une FONCTION PURE DU TEMPS. Aucune horloge interne, aucun état gardé d'une image à l'autre : le même instant rend toujours la même figure, à l'écran comme à l'export image par image.
- Relancé : compiler.bat lance de nouveau le programme à la fin de la compilation. Il cherchait l'exécutable à son ancienne place, au fond de bin/Release ; il le prend maintenant dans « dist », et le démarre depuis ce dossier pour que les bibliothèques natives se trouvent.
- Inventé : un mode spinner DYNAMIQUE — aucune forme à choisir, le programme en fabrique une, un anneau rompu en segments d'épaisseurs et de longueurs inégales, différent à chaque création. Recliquer « Créer le calque » en tire un autre. C'est désormais le point de départ du projet spinner et de la fenêtre de création.
- Décalé : l'onglet du titre glisse de 4 points vers la droite.
- Transformable : un clic droit sur un calque, dans la pile, ouvre un menu qui le change de genre — animé, image ou spinner, chacun vers les deux autres. Tous les réglages communs suivent : placement, couleurs, ombre, halo, déformation ; seuls disparaissent ceux qui n'ont plus de sens dans le genre d'arrivée. Ctrl+Z revient en arrière. Une image ou un dessin sans zone colorée ne peut pas devenir animé : le programme le dit au lieu de faire semblant.
- Dit autrement : l'annonce des réglages renvoyait vers un « 1 » qui n'était visible nulle part depuis l'onglet d'un calque. Elle nomme désormais ce qu'on a sous les yeux : l'onglet « Scène » pour revenir, les vignettes pour changer de calque. La pastille de retour porte une flèche à la place du chiffre.
- Rangé : le binaire sort dans « dist » à la racine du projet, et non plus au fond de src/Iridis/bin/Release. L'archive livrée porte son nom jusque dans son premier dossier.
- Étiré : les blocs se partagent aussi la HAUTEUR — une séparation sous le chevauchement le tire vers le bas, et le vide dessous rend ce qu'il prend.
- Trois portes : le bas du bloc des calques offre « créer un calque spinner », « créer un calque animé » et « créer un calque image ». Les réglages de la forme ont quitté la rangée serrée pour une fenêtre à eux — forme, copies, kaléidoscope et mode spinner. Le calque IMAGE ouvre le fichier en fixe : c'est ainsi qu'on force un SVG à rester un dessin qui ne bouge pas ; le calque ANIMÉ l'ouvre avec le dégradé animé déjà actif.
- Demandé : un fichier lâché sur l'aperçu ne décide plus seul. Quand un calque est choisi, une question propose de REMPLACER son contenu — à sa place dans l'empilement — ou d'ajouter un nouveau calque par-dessus. Sans calque choisi, rien ne change : un calque de plus, comme avant.
- Lié : les blocs se partagent la place au lieu de grandir chacun dans son coin. Une séparation se tire entre le chevauchement et la pile des calques — ce que l'un gagne, l'autre le perd —, comme le font déjà les blocs des onglets de calque entre eux. La poignée par bloc de la version précédente, qui laissait des trous et des chevauchements, est retirée.
- Annulable : Ctrl+Z revient en arrière, Ctrl+Y (ou Ctrl+Maj+Z) rétablit — toutes actions confondues : réglages, imports, suppressions, ordre des calques, tirage au hasard, nouvelle animation. Un calque supprimé revient entier. Les retouches rapprochées sont regroupées, pour qu'un curseur qu'on tire ne laisse qu'un point de retour par demi-seconde. La profondeur est réglable dans les Paramètres : 500 actions par défaut, jusqu'à 5000.
- Lancé : la fenêtre de bienvenue propose une troisième porte, le projet SPINNER — une couronne d'anneaux qui tourne, sans aucune image à fournir. Le réglage « Au lancement » et « Nouvelle animation » le connaissent aussi.
- Rendue : la fabrique de formes reste accessible sur un projet vierge — c'est souvent par elle qu'on commence. Seul le chevauchement des calques se retire, faute de calques à chevaucher.
- Recadré : un import derrière un calque de forme rebâtit l'empilement entier au lieu de le compléter — couches, onglets et pile ne pouvaient plus se contredire, la forme paraissait remplacée.
- Survolé : les pastilles « i » livrent leur explication AU SURVOL. Plus besoin de cliquer pour lire une phrase ; le clic épingle la bulle, qui ne se referme alors plus au départ de la souris.
- Redimensionnable : chaque bloc porte une poignée en bas à droite — tire pour lui donner la taille voulue, double-clique pour le rendre à sa taille naturelle.
- Déplié : la fabrique de formes se replie au lieu de tronquer son « + » quand la colonne est étroite, et le bouton « Importer une image ou un dessin » occupe toute la largeur, en bas de la pile des calques.
- Lâché : l'aperçu accepte les fichiers GLISSÉS dessus — image ou SVG part directement dans la fenêtre d'import.
- Retiré : un projet vierge n'affiche plus le chevauchement des calques ni la fabrique de formes — il n'y a rien à régler. Ils reviennent au premier import.
- Ajusté : la fenêtre d'import prend un onglet de titre comme la fenêtre principale, sa hauteur suit son contenu (fini les grands vides), et la phrase des réglages à activer dit enfin ce qu'elle fait.
- Enveloppé : le texte des infobulles ne se tronque plus — le style implicite n'atteignait pas le texte fabriqué par le présenteur, il fallait un gabarit de contenu.
- Unifié : le bloc « Au lancement » des Paramètres réunit les QUATRE façons d'ouvrir — demander à chaque ouverture, calques d'exemple, espace vierge (le nouveau), ou rouvrir les derniers réglages. Le réglage « Au démarrage » ajouté à part faisait doublon : retiré.
- Dévoilé au bon moment : plus de sélection affichée au démarrage — la case « Voir la sélection » part décochée, et rien n'est chargé derrière la fenêtre de bienvenue : la scène attend, vierge, que la réponse tombe. Le projet démo ne se charge qu'une fois choisi.
- Langueté : le titre vit dans un VRAI onglet, à la Calamarc — arrondi en haut seulement, posé au ras de la coque dont il semble sortir, même teinte que sa bordure. Tuto et Journal restent centrés à côté.
- Dénudé : la barre d'outils du bas perd son cadre, son fond et son rembourrage — rien que les boutons, agrandis de la place gagnée (46 × 42, icônes 25 % plus grandes).
- Épaissi : la bordure visible de la coque passe à 3 points, et le curseur devient la croix de DÉPLACEMENT sur son pourtour — l'intérieur repasse aussitôt en flèche.
- Pressé : les infobulles arrivent en 200 ms, et leur texte ENVELOPPE au lieu de se tronquer.
- Accordé : « Nouvelle animation » suit le choix de démarrage — qui a choisi l'espace vierge repart à vide, calques compris ; les autres retrouvent les deux calques de démo. La question posée et l'annonce le disent clairement.
- Accueilli : une fenêtre de bienvenue à l'ouverture propose l'espace de travail VIERGE ou le projet démo Caméléonardo, avec « Se souvenir de mon choix ». Le choix se grave dans les préférences, et le réglage « Au démarrage » des Paramètres permet d'en changer — demander, vierge, ou démo. Quand les derniers réglages sont rouverts, ils passent devant : on ne repose pas la question à qui a déjà répondu par son travail.
- Ancré : les pastilles de fenêtre se tiennent à 50 px du bord droit, une distance fixe — la position en pourcentage les faisait dériver avec la largeur.
- Étiqueté : le titre vit dans un onglet de la même teinte que la bordure extérieure de la coque, comme s'il en sortait ; Tuto et Journal restent dehors, à 20 px de son bord.
- Verrouillé : le reset, ceinture et bretelles. « Nouvelle animation » force désormais la mise en page en synchrone avant de reposer la base de sélection, et la remesure elle-même se défend : si la matrice du calque vers la scène sort à l'identité — impossible pour un calque réel, signe que le layout n'est pas passé — elle force le layout et remesure. C'est ce repère-là qui dessinait le contour fantôme géant.
- Nettoyé : recharger des réglages remet aussi à zéro le suivi de la forme posée dans la sélection.
- Réparé, cette fois : le reset. Les calques neufs n'étaient pas encore mesurés quand la base de sélection se reposait — leur matrice vers la scène était fausse et le contour se dessinait à une échelle absurde. La base et l'état attendent désormais la fin de la mise en page.
- Libéré : la corbeille supprime AUSSI les calques livrés (Caméléon, Logotype) — la garde qui les rendait insupprimables la laissait muette. Rien n'est perdu : « Nouvelle animation » les recrée.
- Réalisé : l'accordéon des réglages est un film d'animation. Le bloc Chevauchement se comprime en s'effaçant avant que sa pastille n'apparaisse en fondu, la colonne des calques glisse vers ses vignettes — la choisie RESSORT, plus grande que ses voisines —, et chaque changement d'onglet est un raccord : les blocs en place s'effacent en glissant, les nouveaux entrent par en bas. Le retour à la scène joue le film à l'envers.
- Vitré : le titre et ses boutons vivent dans un onglet de verre semi-transparent, décalé de 20 px du bord.
- Fabriqué : une fabrique de formes sous la pile des calques — étoile, anneau, engrenage, cœur, éclair, hexagone… — ajoute un calque tout fait, ANIMÉ, avec un guide circulaire. Le nombre à côté multiplie la forme en couronne autour du centre, chaque copie prend la teinte de sa position, et le mode Kaléidoscope met une copie sur deux en miroir.
- Sélectionné : le chevauchement sait poser une forme toute faite comme sélection — choisis-la, « Poser », puis règle Taille, Largeur, Hauteur, X et Y aux curseurs : la sélection suit en direct. Copies et Rayon l'étalent en couronne autour du point. « Retirer » ôte la forme posée sans toucher aux retouches peintes.
- Illuminé : deux lumières de spinner en plus — « Vague », le dessin flotte sur une houle calée sur le tour, et « Particules », douze étincelles qui orbitent et scintillent sur un aléa figé, fidèles image par image.
- Modulé : chaque calque animé gagne « Opacité de » et « Opacité à » — il apparaît ou s'efface au rythme du cycle, le from/to d'anime.js — et une case « Aller-retour » qui fait revenir l'effet et l'opacité sur leurs pas au lieu de sauter au début du cycle (le loop alternate). Le tout suit les réglages enregistrés et l'export en code WPF.
- Prévisualisé : une vignette trace le profil de l'effet sur un cycle à côté de chaque liste — Effet, Effet 2 et l'allure du spinner — comme sur l'éditeur d'à-coups d'anime.js : phase si elle bouge, clarté sinon.
- Tiré : le dé couvre désormais TOUS les paramètres — second effet une fois sur trois, allure et lumière du spinner libres, pulsation d'opacité une fois sur quatre, aller-retour aussi. Jamais d'opacité nulle des deux côtés : un logo invisible n'est pas un tirage, c'est une panne.
- Grésillé : un effet « Néon » rejoint la liste — la lueur d'enseigne qui grésille, micro-extinctions et sur-flashs sur un aléa figé, fidèle à l'export image par image.
- Réparé : « Nouvelle animation » remet vraiment TOUT à zéro. La base de la sélection n'était jamais reposée sur les calques neufs : le contour de l'ancienne sélection restait dessiné en travers de l'aperçu et le bloc Chevauchement gardait ses choix — tout était remis, sauf ce qui se voyait le plus. La sélection, le chevauchement et la ligne d'état repartent désormais avec la scène.
- Élagué : chaque ligne de la pile des calques porte une poubelle pour supprimer le calque directement. Le calque Fond porte un cadenas à la place : il fait partie de la scène, il ne se supprime pas.
- Évidé : le sélecteur de couleur du fond propose un échantillon « Transparent » en damier — le fond redevient transparent sans perdre la couleur unie mise de côté, et Annuler comme Échap savent y revenir si c'était l'état de départ.
- Complet : le catalogue entier des courbes d'anime.js rejoint le programme — huit familles (carré, cube, quarte, quinte, sinus, expo, cercle, recul) chacune en entrée, sortie et entrée-sortie, plus le rebond et l'élastique dans leurs variantes d'entrée et d'entrée-sortie : vingt-huit courbes. Elles s'appliquent aussi bien à la rotation du spinner (le tour suit la courbe) qu'au dégradé (la palette avance d'un tour par cycle selon la courbe), se combinent via le second effet, suivent les réglages enregistrés et l'export en code WPF.
- Enrichi : six effets d'animation rejoignent le dégradé — Ressort, Rebond et Élastique font avancer la palette d'un tour par cycle, chacun à sa façon de se poser (les courbes des éditeurs d'à-coups du web) ; Stroboscope éclaire par à-coups francs, Aurore déroule de grandes ondes lentes, Sursaut saute de teinte en teinte sur un aléa figé, fidèle à l'export. Le spinner gagne les trois mêmes allures de rotation.
- Combiné : le + à côté de l'effet ouvre un second bloc d'effet qui se COMBINE au premier — décalages additionnés, clartés multipliées, vagues cumulées, un seul éclat à la fois. Deux effets au plus par calque : le + disparaît quand le second est là, le − le retire. Le choix est enregistré dans les réglages et suit l'export en code WPF, allures du spinner comprises.
- Zoomé : une barre flotte en bas de l'aperçu — moins, l'échelle affichée, plus, et une reprise qui ramène à 100 %. Le zoom va de 25 % à 600 % par pas de 25 %, c'est une loupe posée sur la scène entière : la souris et les poignées restent justes, l'export et le rendu n'en voient rien. Le message central et la barre elle-même ne grossissent pas avec.
- Épuré : la barre de défilement d'un bloc n'apparaît plus que quand il y a vraiment quelque chose à faire défiler — l'arrondi de mise en page à 150 % la faisait surgir pour une fraction de point.
- Rangé : Neutraliser et Remettre à plat quittent le pied de leur bloc pour une petite vignette à côté du titre — l'action ne mérite pas une ligne à elle.
- Teinté : les pastilles « i » passent au bleu foncé, texte clair — le vert d'accent reste réservé aux actions et aux états.
- Rangé : l'export du logo en code WPF écrit ses fichiers dans un DOSSIER dédié, nommé comme l'espace de noms, au lieu de les poser en vrac dans le répertoire choisi. Une fois écrit, le programme propose d'en faire une archive .zip du même nom, posée à côté du dossier et prête à envoyer — une archive existante du même nom est remplacée.
- Stabilisé : la zone des onglets ne respire plus au gré de son contenu — elle a une hauteur FIXE, la même pour Scène et pour chaque calque. Une poignée entre l'aperçu et les onglets la redimensionne à la souris, la valeur est conservée d'un lancement à l'autre, et l'onglet Scène défile quand la zone est plus basse que son contenu au lieu de le rogner.
- Outillé : l'export du logo en code WPF livre désormais un compiler.bat à côté des sources — il vérifie la présence du SDK .NET, compile DemoLogo.csproj en Release et lance le résultat, messages en français avec leurs accents. Le fichier est écrit en CRLF et SANS marque d'ordre d'octets : cmd.exe ne reconnaît pas « @echo off » derrière une BOM. Le message de fin d'export invite à double-cliquer le .bat.
- Discret : les pastilles « i » passent de 18 à 12 points — le minimum où le i reste lisible et cliquable — avec des marges réduites à l'avenant.
- Dézoomé : dans les paramètres, une case « Ne pas tenir compte du zoom de l'écran Windows » rend l'interface à sa taille réelle, comme sur un écran à 100 % : le contenu des fenêtres reçoit l'échelle inverse du DPI. Effet immédiat sur les fenêtres ouvertes, la scène et les exports ne changent pas, et le choix est conservé d'un lancement à l'autre.
- Réactif : chaque clic sur une icône SE VOIT — elle passe au vert et grossit un instant avant de retomber. Le crayon de l'éditeur de vecteur, lui, RESTE vert et agrandi tant que l'éditeur est ouvert : l'état actif se lit directement sur l'icône. Les icônes multicolores de la barre d'actions gardent leurs couleurs et ne font que le rebond d'échelle.
- Généralisé : le programme ne parle plus « du caméléon » dans ses aides — les textes du chevauchement, du tuto et du dialogue de remise à zéro disent « le dessin SVG » ou « les calques d'exemple ». Le calque livré et la palette gardent leur nom : eux SONT un caméléon. Dans les paramètres, le texte « Repartir des calques d'exemple » nomme désormais les calques réellement ouverts, guillemets à l'appui.
- Rangé : le pavé de raccourcis de l'éditeur de vecteur quitte la grille et rejoint le « i » au bout de la barre d'icônes ; son contenu suit toujours l'état ouvert ou fermé de l'éditeur.
- Illustré, suite : les dix boutons du vecteur d'animation passent en icônes — crayon vert pour Modifier le vecteur, anneau de reprise ambre pour Recalculer, double flèche pour Inverser le départ, arc pour Lisser, trois barres égales pour Épaisseur uniforme, pointes vers l'extérieur ou vers la barre pour Élargir et Rétrécir, poubelle rouge pour Vider, flèches gauche et droite pour Annuler et Rétablir. Les infobulles portent les phrases complètes, raccourcis clavier compris, et une icône désactivée se grise au lieu de garder sa couleur.
- Illustré : les boutons texte des blocs de réglages deviennent des icônes — Remettre à plat et Neutraliser prennent l'anneau de reprise en ambre, Retirer ce calque une poubelle rouge, Relancer un dé à jouer. Les infobulles portent la phrase complète, l'icône ne fait que la résumer.
- Réordonné : la retouche colorimétrique se place sous « Le calque », et la répartition des colonnes devient PONDÉRÉE : chaque bloc annonce sa hauteur relative, les colonnes s'équilibrent dessus, et le placement — le plus grand de tous — obtient sa propre colonne dès que la place le permet. Halo et ombre restent l'un contre l'autre.
- Resserré : les champs texte perdent la moitié de leur rembourrage et passent en petit corps — champs de saisie moins hauts, listes déroulantes aussi, champs de valeur des curseurs plus étroits. Toujours pour les écrans à 150 %.
- Ancré : les onglets ne sont plus des pages mais des ANCRES dans la même interface. Cliquer un calque déplie ses réglages — exactement comme l'icône de la pile — et revenir sur Scène redéplie tout : pile complète, chevauchement, colonne large. Fini l'onglet Scène figé en mode compact.
- Rangé : les blocs se répartissent désormais en tranches CONTIGUËS, une par colonne, au lieu du tourniquet qui éparpillait les voisins. L'ombre portée passe sous le halo, les deux lueurs l'une contre l'autre.
- Serré : pour les écrans à 150 %, tout se resserre — lignes de curseurs sans marge, champs de valeur plus bas, blocs à plus petit rembourrage, poignées plus fines. Même contenu, moins de hauteur.
- Aligné : la barre d'actions du bas range ses icônes à droite.
- Réparé : compiler.bat repasse en fins de ligne CRLF, comme il se doit pour un fichier batch.
- Habillé : les fenêtres secondaires — dégradé, couleur, paramètres, journal, tuto, import, export — quittent le cadre système de Windows pour la coque du programme : bords arrondis, titre incrusté et pastilles posés sur la bordure, transparente ou opaque selon le paramètre. Les bords de redimensionnement restent actifs, la barre se tire à la souris, le double clic agrandit quand la fenêtre s'y prête.
- Illustré : dans le créateur de dégradé, Ajouter, Retirer, Monter et Descendre deviennent des icônes sous la liste des couleurs — le plus vert, le moins rouge, les flèches claires — rejoints par une reprise à neuf en ambre : un seul cadre de couleur, blanc, prêt à composer. L'aperçu montre alors une bande unie, et Enregistrer attend ses deux couleurs comme avant.
- Relié : le bouton + à côté du sélecteur de palette ouvre le créateur sur le DÉGRADÉ ACTIF du calque. Un dégradé perso repart tel quel, nom compris — l'enregistrer le met à jour ; une palette intégrée repart de ses couleurs sous un nom neuf, on ne retouche pas les palettes d'usine.
- Renommé : le programme s'appelle Iridis, d'après Iris, la messagère arc-en-ciel. « Vitrail » restait plat en anglais et évoquait un objet en deux dimensions ; Iridis se lit dans les deux langues et dit la couleur qui bouge. Exécutable, espace de noms et dossiers suivent. Le dossier de données %APPDATA%\Vitrail est déplacé vers %APPDATA%\Iridis au premier lancement, dégradés et géométrie de fenêtre compris. La palette « Vitrail » garde son nom : elle décrit des couleurs de vitrail, pas le programme.
- Refondu : les blocs de réglages d'un calque se répartissent en une, deux ou trois colonnes selon la largeur du panneau, et chaque bloc se redimensionne par les poignées qui le séparent de ses voisins — un bloc qu'on réduit rend exactement sa place aux autres, et inversement. Les proportions réglées à la main survivent au redimensionnement de la fenêtre.
- Condensé : dans les blocs Placement et déformation, Rotation continue, Animation, Ombre, Halo et Retouche colorimétrique, chaque curseur occupe désormais une ligne pleine largeur, étiquette alignée et glissière étirée. Fini l'espace perdu du remplissage en vrac. *Anciennement ApercuLogoCameleon. Le programme n'aperçoit plus un logo de caméléon : il empile des plans de couleur, y découpe des fenêtres et laisse passer ce qu'il y a derrière — puis il exporte le tout en image animée ou en code. C'est un vitrail, et la percée en est le plombage.* Aperçu du logo caméléon animé de Caméléonardo : contrôle WPF (.NET 9) avec sa fenêtre de réglage, ses exports (JSON, images animées, code) et ses rendus d'images. Toutes les versions ont été livrées les 30 et 31 juillet 2026, compilées sans erreur ni avertissement (hors CA1515, propre au mode aperçu). Les versions 2.x sont une refonte multi-calques : le format d'export change et les fichiers JSON des versions 1.x ne sont plus relisibles.
- Corrigé : la couleur du fond était inatteignable — le sélecteur se refermait dès qu'on s'en approchait. C'était une Popup à StaysOpen faux, qui se referme au premier clic tombant ailleurs, et je lui donnais la liste entière comme point d'ancrage : elle s'ouvrait donc loin de la pastille. Le sélecteur est désormais une petite fenêtre non modale — elle reste tant qu'on ne la ferme pas, se déplace, et ne dépend d'aucun élément qui pourrait disparaître sous elle. Échap ou Annuler rend la couleur d'avant, puisqu'on peint en direct.
- Ajouté : un nuancier — le carré de couleur et son code hexadécimal côte à côte. La pastille seule montrait la teinte sans dire sa valeur ni qu'elle s'ouvrait.
- Corrigé : l'engrenage des paramètres était biscornu, parce que je l'avais écrit à la main dans la syntaxe des chemins. Huit dents demandent seize points placés au degré près, et l'oeil voit le moindre écart. Il est maintenant bâti par une boucle qui pose des rectangles tournés autour d'un centre, percé d'un trou central — une construction qui ne peut pas se tromper.
- Modifié : les derniers réglages sont écrits à côté du programme par défaut, et non plus dans le dossier de l'utilisateur. On emporte alors le dossier entier sur une clé et on retrouve son travail ailleurs. Le dossier reste choisissable, pour une installation là où l'on n'écrit pas.
- Ajouté : l'accordéon. Chaque calque porte une icône de réglages ; elle replie le bloc Chevauchement en une pastille « 1 », réduit la pile de calques à ses seules vignettes avec un cadre d'accent autour du calque courant, et ouvre son onglet. Un clic sur la pastille ramène la scène, un clic sur une vignette change de calque sans quitter le mode.
- Régler un calque et régler la scène sont deux moments distincts du travail, et ils ne demandent pas la même surface : le premier a besoin de tout l'écran, le second de savoir où en sont les calques.
- Renommé : le programme s'appelle Vitrail. « Aperçu du logo caméléon » décrivait le premier jour, plus le travail : il empile des plans de couleur, y découpe des fenêtres et laisse passer ce qu'il y a derrière, puis exporte le tout en image animée ou en code. C'est un vitrail, et la percée en est le plombage. L'exécutable, l'espace de noms et le fichier de journal suivent.
- Repensé : le bloc Scène disparaît. Ses trois commandes sont allées là où elles avaient un sens — le fond est devenu une ligne de la pile de calques, la bordure transparente un paramètre du programme, et l'import avait déjà son icône dans la barre.
- Le fond est bien un plan de la scène, simplement le plus profond. Sa ligne est fixe — rien ne peut passer derrière — et porte une pastille de couleur à droite. Son oeil bascule entre transparent et couleur unie : masquer un fond n'aurait aucun sens, ce qu'on veut dire est « avec ou sans couleur ».
- Ajouté : une fenêtre de paramètres, derrière une icône d'engrenage. On y règle ce qui ne concerne aucun calque et n'entre dans aucun export.
- Ajouté : choix de l'ouverture — repartir des calques d'exemple, ou rouvrir les derniers réglages. La scène est enregistrée à chaque fermeture, sans rien demander. Ce n'est pas un remplacement de l'export : c'est un filet, pour qu'une fenêtre fermée par mégarde ne coûte pas une heure de travail.
- Modifié : la bordure transparente se bascule en direct — on juge un habillage en le voyant. Elle s'accompagne désormais de coins arrondis et d'une ombre portée, qui détache le programme du bureau là où des coins arrondis seuls n'y suffisaient pas. La marge de la coque est élargie pour lui laisser la place de se répandre.
- Le rendu matériel, lui, demande toujours un relancement : WPF n'accorde la transparence qu'à l'ouverture de la fenêtre. La fenêtre de paramètres le dit franchement plutôt que de laisser croire à un gain immédiat.
- Corrigé : les icônes de la barre étaient illisibles, et pour une raison simple — le tracé entier était rempli, cadre extérieur compris, si bien que les détails intérieurs se fondaient dans un pavé uni. Elles sont désormais dessinées au trait, avec seulement quelques éléments pleins là où il faut trancher : flèches, pastilles, points de dé. À vingt-deux points, c'est le vide à l'intérieur du trait qui donne la forme.
- Modifié : la barre d'actions passe en bas, à l'endroit où l'on va une fois le travail fait.
- Retiré : l'icône du journal des versions quitte la barre. On le consulte de loin en loin, il n'avait pas sa place au milieu des gestes quotidiens ; il rejoint le bouton Tuto, dans la barre de fenêtre.
- Modifié : la pile de calques occupe désormais toute la hauteur de la colonne de droite, les blocs Scène et Chevauchement s'empilant à gauche. C'est la seule liste qui grandit avec le travail — la laisser à hauteur fixe la mettait à l'étroit dès le troisième calque importé.
- Un bloc qui s'étire a demandé une variante : Bloc empile en StackPanel, lequel accorde à chaque enfant sa hauteur désirée et rien de plus.
- Corrigé : le quatrième panneau du tutoriel était faux. Il faisait repasser tout l'arrière-plan devant, ce qui illustrait une simple inversion d'ordre et non une percée. Seule la portion retenue à l'étape 3 passe maintenant devant, le reste demeurant derrière, avec un trait qui marque la limite. Les quatre panneaux partagent désormais une géométrie commune, et la part retirée à l'étape 3 est découpée dans le disque plutôt que posée par-dessus.
- Corrigé : la sélection et la percée ne rattrapaient le calque qu'à la fin du glissement, au lieu de le suivre. La cause venait du correctif de fluidité de la 2.10.1, qui reportait la découpe pendant le geste parce qu'elle coûtait une opération booléenne par mouvement.
- La sélection est désormais composée une seule fois dans le repère du calque, et non plus dans celui de la scène. Les opérations booléennes ne sont donc refaites qu'à une vraie modification de la sélection ; le placement se règle ensuite par une matrice vivante que le déplacement se contente d'écrire.
- La découpe emploie une CombinedGeometry plutôt qu'un Geometry.Combine : la première décrit l'opération et la laisse évaluer au rendu, la seconde la calcule immédiatement. La percée suit donc le calque au pixel près, sans qu'aucun calcul soit refait à chaque mouvement de souris. Le report est supprimé.
- Ajouté : bouton Nouvelle animation dans la barre — efface tous les réglages, retire les calques importés et recrée le caméléon et le logotype d'origine. Il demande confirmation : c'est le seul bouton de la barre qui détruit du travail, et une main qui glisse d'un cran ne doit pas coûter une heure de réglages. Les deux calques livrés sont recréés et non supprimés, sans quoi il ne resterait aucun moyen de les faire revenir.
- Ajouté : chaque onglet de calque porte une pastille de nature — anneau mauve pour la rotation continue, triangle ambre pour le dégradé animé, cadre bleu pour une image ou un dessin fixe. La nature décide de ce qu'on peut faire du calque, et il fallait jusqu'ici ouvrir l'onglet pour la connaître.
- L'anneau est bâti par objets, deux ellipses et un rectangle composés, plutôt qu'analysé depuis du texte : la mini-syntaxe des chemins n'exprime un cercle qu'avec des arcs, dont la lecture ne peut pas être vérifiée hors de Windows.
- Corrigé dans les contrôles statiques : la règle d'accents signalait « la calcule » en attrapant le « a » final de « la ». Il manquait une frontière de mot.
- Modifié : les onglets non sélectionnés portent désormais un fond à peine posé et une bordure discrète. Sans eux, ils ressemblaient à du texte flottant et rien n'indiquait qu'on pouvait cliquer dessus. Ils se devinent comme des onglets sans prendre autant de présence que l'onglet actif.
- Le survol renforce le fond et la bordure, ce qui donne un retour net avant même le clic.
- Modifié : la barre d'onglets est décalée de dix points vers la droite, pour s'aligner sur le contenu des blocs plutôt que de coller au bord du cadre.
- Corrigé : masquer un calque ne masquait rien, ni par l'oeil de la pile ni par la case Afficher de son onglet. Les deux gestionnaires se contentaient de lever l'événement de changement sans jamais poser la visibilité, laquelle n'était appliquée qu'à la synchronisation générale. Ils la posent désormais avant de prévenir.
- Modifié : carreaux de transparence réduits de moitié, et un damier deux fois plus fin encore pour les vignettes — sur trente-huit points de large, des carreaux de six étaient plus visibles que le dessin.
- Modifié : la barre d'actions quitte l'onglet Scène et devient permanente, sous l'aperçu. Exporter ou tirer au hasard n'a rien à voir avec le calque affiché. Le titre « Actions » disparaît, les libellés laissent place à des icônes colorées, une couleur par famille : vert pour ce qui entre, bleu pour ce qui sort en code, ambre pour l'image, mauve pour le hasard. Les icônes d'export d'image portent deux cadres décalés, l'idée de plans superposés que ce programme manipule.
- La couleur ne décore pas : sur sept boutons tous gris on relit chaque infobulle à chaque fois, alors qu'une couleur par famille conduit la main au bon endroit après deux usages.
- Un tracé d'icône mal formé retombe sur un carré au lieu de lever : une icône manquante est un désagrément, un programme qui ne s'ouvre pas est un échec.
- Modifié : les messages s'affichent maintenant dans une bulle au centre de l'aperçu, là où le regard se trouve déjà — en bas de fenêtre, ils passaient inaperçus une fois sur deux. Elle s'efface d'elle-même après trois secondes, en fondu de six cents millisecondes : une disparition franche donnerait l'impression que quelque chose a clignoté. Un message long allonge l'attente, sans dépasser huit secondes. La bulle ne reçoit jamais la souris et ne gêne donc aucun geste.
- Corrigé, à la racine cette fois : la barre de défilement surgissait encore en sélectionnant un objet à la souris. Les deux tentatives précédentes s'attaquaient à l'effet ; la cause était le changement d'onglet lui-même, qui affiche un panneau plus haut que la zone et fait donc apparaître une barre. Un simple clic désigne désormais le calque sans toucher aux onglets — rien ne saute pendant qu'on place un dessin. Le double-clic, sur l'aperçu comme sur la ligne de la pile, ouvre les réglages : c'est un geste délibéré.
- Ajouté : un bouton Tuto derrière le titre, qui ouvre un mode d'emploi en six pages illustrées — les calques, le chevauchement en quatre panneaux, la retouche de sélection, le vecteur d'animation, le mode spinner et les trois sorties.
- Les schémas sont dessinés, pas photographiés. Une copie d'écran vieillit à la première retouche de l'interface et ment ensuite sans prévenir, alors qu'un schéma vectoriel suit le thème, reste net à toute taille et ne montre que ce qui compte.
- Ajouté : boutons « i » derrière Percer, Inverser et Voir la sélection. Le premier explique pourquoi la sélection ne découpe rien tant qu'on n'a pas coché, le deuxième quand il vaut mieux décrire ce qu'on garde que ce qu'on enlève, le troisième que ces repères n'apparaissent ni à l'export ni dans le code produit.
- Modifié : la liste des calques est retournée. Le calque du haut est au premier plan, celui du bas tout au fond, comme partout ailleurs. L'ordre de dessin reste l'inverse, mais la conversion se fait à un seul endroit et aucun autre code n'a à y penser.
- Ajouté : chaque ligne porte une vignette du calque, posée sur un damier qui montre sa transparence, plus son nom, son rang et sa nature — dessin vectoriel animé ou image avec ses dimensions. La vignette vient du modèle et non d'une capture de l'écran : c'est un dessin, donc net à toute taille et sans coût de rendu.
- Ajouté : réordonnancement par glisser-déposer, avec un trait bleu qui montre où la ligne va tomber. Le trait colle au bord le plus proche, et un déplacement de moins de quatre points ne réordonne rien — un clic un peu tremblant ne doit pas bousculer la pile.
- Ajouté : un oeil par ligne pour masquer un calque sans rien perdre de ses réglages.
- Retiré : les boutons Monter et Descendre, qui demandaient un clic par cran et ne montraient rien du résultat.
- Modifié : les blocs Scène et Calques passent côte à côte, sur deux colonnes. L'aperçu gagne la hauteur qu'ils n'occupent plus l'un sous l'autre.
- La conversion entre l'ordre affiché et l'ordre de dessin a été vérifiée par simulation exhaustive avant livraison, de deux à six calques et pour toutes les positions de dépôt : aucun calque perdu ni dupliqué, et la ligne atterrit très exactement là où le trait bleu l'annonçait.
- Corrigé : déplacer un calque saccadait. Trois coûts se cumulaient sur le chemin de la souris.
- Le transport d'un contour vers la scène clonait la silhouette entière — des centaines de segments pour un dessin vectoriel — à chaque appel. Le résultat est désormais gardé tant que le calque ne bouge pas.
- Le survol interrogeait chaque calque à chaque mouvement en clonant sa silhouette pour y tester le pointeur. C'est maintenant le point qu'on ramène dans l'espace du calque : trois multiplications au lieu d'une copie complète.
- Poser une position écrit dans deux curseurs, donc deux compositions complètes par mouvement, chacune avec une opération booléenne sur tracés. Les deux écritures comptent désormais pour un seul déplacement, et la découpe est différée pendant le geste puis calculée exactement au relâchement.
- Ajouté : la bordure transparente devient un réglage, dans l'onglet Scène. Elle oblige WPF à rendre toute la fenêtre en logiciel, carte graphique mise de côté ; sur un programme qui anime des centaines de dégradés en continu, c'est la première cause de saccade. Le choix est conservé d'un lancement à l'autre et ne peut pas s'appliquer à chaud — WPF n'accepte la transparence que sur une fenêtre pas encore affichée.
- Sans bordure transparente, la coque occupe toute la fenêtre et le rendu repasse par la carte graphique.
- Corrigé : déplacer un calque à la souris ou au clavier laissait sa sélection sur place. Le contour de base suivait bien le dessin, mais les retouches — ce qu'on avait retiré au pinceau, au rectangle, au lasso — étaient ancrées au centre de la scène. La découpe n'avait donc plus aucun rapport avec l'objet dès qu'il bougeait.
- Les gestes sont désormais mémorisés dans l'espace du calque et non dans celui de la scène. Ils suivent le dessin en translation, en agrandissement, en rotation, en miroir et en cisaillement, puisque c'est le repère du calque lui-même qui les porte.
- Ils continuent de ne pas dériver au redimensionnement de la fenêtre : le repère du calque tient déjà compte du recentrage, la propriété est conservée sans traitement particulier.
- Export JSON format 10, avec un champ repere écrit en clair. Les fichiers antérieurs restent lisibles : leurs gestes, rangés par rapport au centre de la scène, sont convertis à la relecture. C'est le champ qui décide, pas le seul numéro de version, ce qui laisse la porte ouverte à un fichier retouché à la main.
- L'algèbre a été vérifiée numériquement avant livraison — aller-retour exact, et un geste subit très exactement la même transformation que son calque, y compris pour une rotation avec miroir ou un cisaillement. La première vérification a d'ailleurs échoué sur une erreur de ma part dans l'ordre de composition des matrices, pas dans le code.
- Ajouté : une poignée en bas à droite pour agrandir ou réduire la fenêtre. Trois traits en diagonale qui prennent la couleur d'accent au survol.
- Le geste est confié au WindowChrome par ResizeGripDirection plutôt que refait à la main : c'est lui qui gère les tailles minimales, la mise à l'échelle de l'écran et le bord actif, exactement comme pour une fenêtre ordinaire. Un Thumb maison marcherait à peu près, et se tromperait sur un écran à 150 %.
- Les bords de redimensionnement existaient déjà, mais invisibles : la poignée ne change pas le comportement, elle le montre.
- Elle se loge dans le coin arrondi de la coque, où aucun contenu ne vient — trois points plus à l'intérieur, elle serait tombée sur la barre de défilement des réglages. Elle disparaît en plein écran, où une fenêtre ne se redimensionne pas et où la promettre serait mentir.
- Le survol se lit sur le carré entier et non sur les traits, trop fins pour être visés. TargetName étant interdit dans un déclencheur de style, la couleur passe par une liaison au parent.
- Restauré : la fenêtre se déplace de nouveau par un clic-glisser depuis n'importe quel endroit vide, et plus seulement depuis la barre. Un double-clic agrandit ou restaure.
- La plupart des contrôles — bouton, curseur, liste, zone de texte — marquent l'événement comme traité, il ne remonte donc jamais jusqu'à la coque : régler une valeur ne déplacera pas la fenêtre. La scène fait exception, son fond transparent recevant la souris sans toujours consommer l'événement ; elle est écartée explicitement, sinon glisser un calque emmènerait la fenêtre avec lui.
- Ajouté : en plein écran, la bordure transparente disparaît. Elle n'a plus de sens quand la fenêtre occupe tout l'écran, où elle ne laisserait qu'un liseré de bureau autour du programme.
- Le remplissage est animé plutôt que brutal : la marge glisse en deux cent vingt millisecondes avec un amorti. L'arrondi, lui, ne s'anime pas — CornerRadius n'a pas de type d'animation en WPF — il est donc posé au bon moment, tout de suite à l'entrée en plein écran et à la fin du retour en fenêtre, pour ne jamais se voir changer sur une bordure encore ouverte.
- Corrigé, et c'était la vraie cause : Appliquer ne rappelait ni RetablirOrdre ni AppliquerScene. Le correctif de la 2.6.0 ne s'était jamais appliqué — le motif de recherche du patch avait une mauvaise indentation, le remplacement n'a rien fait, et rien ne l'a signalé. Les deux méthodes sont restées du code mort pendant trois versions, et la correction de la 2.8.1 était donc elle aussi inerte. L'ordre des calques, le chevauchement et les gestes de sélection sont enfin réellement appliqués.
- Ajouté : un douzième contrôle statique qui aurait attrapé cela — aucune méthode privée ne doit rester orpheline. Le compilateur ne dit rien d'une méthode privée jamais appelée. Deux passes ont été nécessaires pour le rendre utilisable : il comptait d'abord les appels avec parenthèses, ignorant les groupes de méthodes et les gestionnaires déclarés en XAML (24 faux positifs), puis son nettoyage des commentaires coupait à // jusque dans les chaînes, effaçant un appel réel. Il compte désormais les mentions du nom, lit le XAML jumeau, et respecte les littéraux.
- Modifié : interface condensée — marges et remplissages des blocs, curseurs, boutons, listes et onglets resserrés d'environ un tiers.
- Modifié : fenêtre sans cadre système, bordure entièrement transparente, et la barre d'actions posée au-dessus de la coque plutôt qu'à l'intérieur. Les icônes laissent place à trois pastilles de couleur — vert pour réduire, orange pour agrandir, rouge pour fermer — alignées à cinq pour cent du bord droit et qui grossissent au survol. Le titre et la version s'affichent à gauche, la barre entière sert de poignée de déplacement, le double-clic agrandit.
- La fenêtre agrandie se borne à la zone de travail : sans cadre système, plus rien ne l'empêcherait de recouvrir la barre des tâches.
- À savoir : AllowsTransparency bascule WPF en rendu logiciel pour cette fenêtre. Ce programme anime en permanence des centaines de dégradés ; si l'aperçu saccade, la cause est là, et le commentaire en tête de MainWindow.xaml indique quoi retirer pour retrouver le rendu matériel.
- Corrigé : après un import, la sélection et la percée n'apparaissaient pas — il fallait toucher un réglage au hasard pour les voir surgir. Le fichier était pourtant complet et le geste bien relu.
- La cause : ContourDansVisuel rend null tant que les deux visuels ne sont pas reliés, et son commentaire promettait que « l'appelant réessaiera ». Personne ne réessayait. Or l'import rebâtit l'empilement des calques, et WPF ne fait sa mise en page qu'au tour de boucle suivant : tout le calcul de la découpe se faisait donc sur un contour absent.
- Trois verrous plutôt qu'un : l'import force une mise en page avant de poser le contour de base, la composition se redemande d'elle-même après la mise en page quand le contour manque alors que la percée est active, et un rappel différé suit tout import. La promesse du commentaire est désormais tenue par le code.
- Ce défaut ne se voyait qu'à l'import, ce qui explique qu'il ait survécu aux contrôles : ni la compilation ni les vérifications statiques ne voient un ordre d'exécution.
- Ajouté : anneau serpentin, l'arc qui tourne en s'ouvrant et se refermant, comme l'indicateur de mise à jour d'Android. Rayon, épaisseur, couleur, durée du cycle et ouverture minimale. Il ceinture le dessin du calque.
- Ce n'est pas un effet de shader : le cercle est entier et figé, c'est le tireté qui n'en montre qu'un arc. La tête avance sur la première moitié du cycle, la queue la rattrape sur la seconde — c'est ce décalage entre les deux extrémités, et non une simple rotation, qui donne l'impression de serpentin. Rien n'est reconstruit d'une image à l'autre.
- Conséquence directe : l'anneau s'exporte en image animée et en code sans machinerie particulière, et se redimensionne sans perte. Vérifié par génération puis compilation réelle de la sortie.
- Modifié : la valeur de chaque curseur passe dans un encart bordé accolé au curseur, et devient une zone de saisie — on tape la valeur et on valide par Entrée. Attraper 0,1° à la souris sur une plage de 360 demanderait une main de chirurgien. L'analyse tolère l'unité, le point comme la virgule.
- Modifié : marges internes resserrées et marges entre groupes élargies. Auparavant dix-huit pixels seulement séparaient une valeur du libellé voisin, si bien qu'elle se lisait comme appartenant au curseur suivant.
- Corrigé : cliquer un calque sur l'aperçu faisait sauter la barre de défilement des réglages. Le changement d'onglet donne le focus au premier contrôle du panneau, et WPF demande alors à le rendre visible. Le défilement automatique est gelé le temps du geste, puis rendu, pour que la navigation au clavier continue de fonctionner.
- Export JSON format 9.
- Modifié : le curseur Rotation avance par pas de 0,1° au lieu de 1°, sur toute la plage de −180 à 180, et affiche la décimale. Il s'applique à tous les calques, quel qu'en soit le type.
- Ajouté : mode spinner, proposé à l'import — un bloc de rotation continue avec trois allures (vitesse constante, par crans à la façon d'une trotteuse mécanique, avec élan qui accélère puis ralentit à chaque tour), le sens, la durée du tour et le nombre de crans. Contrairement à l'animation du dégradé, il marche aussi bien sur une image que sur un dessin vectoriel.
- Ajouté : effets lumineux propres au spinner — pulsation calée sur le tour (c'est ce calage qui donne l'impression que la lumière suit le mouvement), sillage de copies fantômes qui traînent derrière en s'effaçant, et les deux ensemble. L'opacité du sillage décroît en carré : une décroissance linéaire laisserait la fin de traîne trop présente et brouillerait la lecture du sens de rotation.
- Les fantômes partagent un seul dessin figé, construit depuis le modèle et non depuis l'arbre visuel : un objet en mémoire quel que soit leur nombre, et un sillage qui reste net à l'export puisqu'il n'est pas rastérisé.
- La rotation est une fonction pure du temps, comme tout le reste du rendu. C'est la seule raison pour laquelle l'export image par image continue de la capturer fidèlement — une rotation confiée à un Storyboard n'aurait pas pu l'être.
- Export JSON format 8, et la rotation continue est emportée par l'export de code WPF (allure, sens, durée, crans), vérifié par compilation réelle de la sortie. Le sillage, lui, n'est pas encore reproduit dans le code exporté, et le LISEZMOI produit le dit.
- Les contrôles statiques ont rattrapé les neuf réglages neufs avant livraison : ils étaient réglables mais absents de l'export.
- Corrigé : l'export passait par un VisualBrush pour recadrer et mettre à l'échelle. WPF réalise un VisualBrush dans une surface intermédiaire dimensionnée sur la réalisation du pinceau et non sur la destination : exporter au-dessus de la taille d'écran revenait donc à agrandir une capture d'écran, et tout le détail des images matricielles y passait. La couche des calques est désormais rendue directement avec une transformation de cadrage, donc rastérisée à la résolution finale, chaque image étant rééchantillonnée depuis sa source entière.
- Corrigé : les images matricielles étaient échantillonnées en bilinéaire, le défaut de WPF, qui ne lit que quatre texels par pixel de sortie. Réduire une source de 2000 px vers 520 en jetant ainsi presque toute l'information donnait du crénelage et une impression de flou, à l'écran comme à l'export. Passage en HighQuality (Fant), qui moyenne toute la zone couverte. Le masque du halo suit la même règle.
- Ajouté : la fenêtre d'export indique, pour chaque calque matriciel, la largeur de sortie face à celle de sa source, et signale l'agrandissement quand il y en a — c'est la seule perte qu'aucun réglage ne rattrape, autant le dire plutôt que de laisser chercher.
- Vérifié dans le code : le modèle ne sous-échantillonne nulle part. Un calque matriciel garde le cadre exact de sa source, et la retouche colorimétrique préserve le nombre de pixels.
- Corrigé : l'export ne contenait que les réglages par calque. Tout le travail de sélection et de chevauchement était perdu au rechargement — c'était le défaut le plus coûteux du format, puisqu'une découpe au pinceau représente parfois des dizaines de gestes patients.
- Ajouté : section scene en format 7 — fond et sa couleur personnalisée, calque source de la sélection, calque percé, percée, inversion, visibilité, et la liste complète des gestes de sélection. Chaque geste est enregistré tel quel : les formes étaient déjà exprimées par rapport au centre de la scène, elles se relisent donc quelle que soit la taille de la fenêtre.
- Ajouté : l'ordre des calques est rétabli à l'import. L'ordre décide de ce qui passe devant quoi ; le relire sans le rétablir donnait une scène différente de celle enregistrée. Les calques absents du fichier restent au-dessus dans leur ordre courant.
- Les calques sont désignés par leur nom et non par leur rang, comme partout dans ce format : un fichier reste valable après un changement d'ordre. Un nom introuvable est signalé au bilan plutôt que d'être appliqué au hasard.
- Les fichiers en format 6 se relisent toujours ; le bilan indique alors que le chevauchement est resté en l'état.
- Vérifié par aller-retour complet sur banc : nom accentué, nom contenant guillemets et esperluette, décimales négatives dans les tracés, drapeaux d'arc collés, tous les booléens, et le cas de la scène vide.
- Ajouté : un calque s'attrape et se glisse directement sur l'aperçu, sans passer par ses curseurs. Le curseur de la souris change de forme dès qu'un calque est attrapable, Maj pendant le glissement contraint à un axe, et les flèches du clavier déplacent le calque choisi d'un cran, dix avec Maj. Changer d'onglet désigne le calque, cliquer sur l'aperçu bascule sur son onglet.
- Le clic prend le calque le plus haut dont le dessin passe sous le pointeur, pas son rectangle : cliquer entre les pattes du caméléon ne l'attrape pas. Un seul outil à la fois — le déplacement ne répond que si aucun outil de sélection n'est actif et que l'éditeur de vecteur est fermé.
- Le geste écrit dans les curseurs X et Y du calque, jamais directement dans l'affichage, pour que les valeurs montrées restent celles qui seront exportées. Butée annoncée quand les curseurs sont au bout.
- EcranVersPlacement inverse la partie linéaire du parent de la racine plutôt que de supposer un rapport de un : le glissement restera exact si une mise à l'échelle est intercalée plus tard.
- Corrigé avant livraison : les flèches auraient déplacé le calque alors qu'un curseur, une liste ou une zone de texte avait le focus. Ces commandes gardent désormais la priorité sur le clavier.
- Ajouté : ce changelog est désormais livré avec le projet et embarqué dans le binaire.
- Corrigé : Directory.Build.props annonçait encore 2.0.0 alors que les versions 2.1.0 à 2.4.1 avaient été livrées — le nom du zip était juste, la version du binaire non. Un onzième contrôle statique compare maintenant la version du projet à l'entrée la plus récente du changelog, et refuse le décalage. Contre-épreuve faite.
- Corrigé : contenu des champs de saisie rogné par le bas. VerticalAlignment="Center" posé sur PART_ContentHost dans un gabarit de TextBox coupe le texte ; l'hôte doit remplir la zone, c'est VerticalContentAlignment qui centre. Marge verticale annulée, hauteur minimale 30.
- Corrigé : liste de l'ordre des calques illisible — la ListBox n'avait aucun gabarit dans le thème et gardait le fond blanc de WPF sous un texte clair. Gabarits ListBox et ListBoxItem ajoutés. Un contrôle oublié dans un thème sombre ne se voit pas dans le code, seulement à l'écran.
- Corrigé : bouton d'aide « i » en cyan codé en dur, qui jurait avec l'accent vert ; il passe par les pinceaux du thème.
- Ajouté : fond de l'aperçu réglable — Sombre, Clair, Damier, Personnalisé, avec une pastille qui ouvre le sélecteur de couleur et applique pendant le choix. Utilitaires Ui.ChoisirCouleur et Ui.Pastille factorisés depuis le choix d'encre.
- Ajouté : choix du fond à l'export — Transparent, Garder le fond de l'aperçu, Blanc, Noir, Couleur choisie. Le damier n'étant pas une couleur mais la représentation de la transparence, l'entrée se renomme et rend une image transparente plutôt que des carreaux gris.
- Ajouté : historique du vecteur sur 80 niveaux — Ctrl+Z, Ctrl+Y et deux boutons, actifs seulement l'éditeur ouvert, l'historique étant propre à une session d'édition. Les piles gardent des copies, le guide étant modifié en place.
- Ajouté : clavier — flèches pour affiner (pas exprimé en coordonnées du dessin, non de l'écran), Maj+flèches pour un pas dix fois plus grand, Suppr sur le point choisi, Échap pour terminer. Notion de point choisi qui survit au relâchement de la souris, sans quoi le clavier n'aurait aucune cible.
- Ajouté : Ctrl+glisser déplace tout le vecteur d'un bloc, Maj pendant un glissement contraint à un axe, la poignée survolée grossit, la poignée choisie porte un contour blanc, les points sont numérotés jusqu'à quatorze.
- Optimisé : Ruban.Construire recrée plus de cent géométries et autant de pinceaux, et partait à chaque mouvement de souris pendant l'édition. Reconstruction temporisée à 45 ms, forcée au relâchement et à la fermeture — ce que l'oeil suit pendant le geste, c'est la courbe et les poignées.
- Optimisé : Composer() lançait une opération booléenne sur tracés à chaque cran de curseur. Sortie immédiate quand la percée est inactive et la sélection masquée, et mémorisation du résultat sur une signature incluant la matrice du calque source.
- Corrigé : l'historique survivait à la fermeture de l'éditeur — éditer un calque, fermer, ouvrir un autre calque puis annuler lui aurait collé le tracé du premier.
- Corrigé : Échap fermait l'éditeur en court-circuitant le nettoyage de la fenêtre (rubans à refaire, curseur à rendre) ; la touche est traitée en amont.
- Retiré : un contrôle statique qui prétendait vérifier que chaque écriture dans le vecteur est précédée d'une mémorisation. Il donnait deux faux positifs et, contre-épreuve à l'appui, ne voyait pas la faute introduite volontairement — une méthode contient plusieurs écritures et une seule mémorisation suffit à la faire passer. Remplacé par un contrôle étroit mais exact sur le vidage des piles. Un contrôle qui rate sa cible apprend à ignorer les sorties.
- Ajouté : bouton « Exporter le code WPF… » qui produit LogoAnime.cs (~840 lignes, autonome, rien d'autre que WPF) plus un projet de démonstration prêt à compiler. Un seul fichier à copier, puis <local:LogoAnime Width="420"/>.
- Le générateur travaille depuis un patron compilé avec le programme et embarqué en ressource : un patron qui ne compile pas ne peut pas passer inaperçu. EffetsLogo et AjustementCouleur sont recopiés depuis leur source embarquée, jamais réécrits, pour qu'aperçu et export ne divergent jamais.
- La géométrie est figée par CalqueVisuel.Figer : tracés, quadrilatères du ruban, palette en hexadécimal, matrice complète par TransformToVisual, découpe, ombre, halo, images en base64. Tracés émis en culture neutre.
- Corrigé pendant le développement, par compilation réelle de la sortie : dépendance manquante vers deux fonctions de PalettesLogo (extraites par signature), et RemplacerEntre qui rendait la source intacte sur marqueurs identiques — il lève désormais une exception quand un marqueur manque, un échec bruyant valant mieux qu'un export silencieusement faux.
- Ajouté : bouton « Exporter l'image animée… » — APNG ou WebP, taille en pixels, nombre d'images, cadence, nombre de couleurs, boucles, estimation du poids en temps réel par encodage réel de 4 images réparties sur le cycle.
- Bouton « Durée qui ne saute pas » : recherche d'un multiple commun des périodes actives, avec avertissement quand une boucle parfaite n'existe pas.
- L'animation est adressable image par image (PoserInstant), la pulsation du halo est recalculée analytiquement. Cadrage par GetDescendantBounds, qui inclut l'ombre et le halo.
- Détails durcis : UpdateLayout avant chaque capture, conversion de l'alpha prémultiplié en alpha droite, dernier instant à durée × (N−1)/N pour éviter le temps mort de boucle, nombre de boucles réécrit dans le morceau ANIM du RIFF (Skia ne l'expose pas), délais bornés à 10 ms.
- Ajouté : thème complet à coins arrondis en styles implicites (accent vert #3ECF8E), bulles d'aide persistantes.
- Ajouté : outils du vecteur d'animation — curseur du nombre de points (rééchantillonnage à l'abscisse curviligne, depuis une référence figée), lissage, largeur uniforme, élargir, inverser le départ (marqué d'un anneau pointillé). Fonctions pures, 60+ assertions.
- Pile d'encodage arrêtée après banc de mesures : SkiaSharp 4.151.0 pour le WebP animé (aller-retour à 0 écart), ImageSharp 3.1.12 pour l'APNG. Le WebP animé d'ImageSharp abîme l'alpha (confirmé par un décodeur tiers) et la 4.0.0 bloque la compilation par sa licence — tous deux écartés. Tout est embarqué, aucun binaire externe.
- Rupture : plus de caméléon ni de logotype en dur, uniquement des calques égaux. Le caméléon devient Assets/cameleon.svg, relu par le même lecteur que n'importe quel fichier importé. LogoCameleon et LogoTexte supprimés, remplacés par Calque + CalqueVisuel + PanneauCalque. Export XAML abandonné.
- Ajouté : import de plusieurs images (SVG ou matricielles), un onglet de réglages par calque, fenêtre d'import avec choix des modules et verdict d'animation expliqué.
- Ajouté : chevauchement repensé — sélection au contour réel du calque en pointillés animés, outils pinceau, rectangle, ellipse, polygone, en retrait et en ajout, retraits hachurés en rouge, ligne d'état permanente.
- Ajouté : vecteur d'animation proposé par analyse du nuage de pixels et éditable à la souris ; créateur de dégradés personnalisés avec sélecteur de couleur moderne.
- Export JSON format 6, multi-calques, appariement par nom, vecteur exporté point par point. controles.py livré avec 8 contrôles statiques.
- Corrigé : lecture des arcs SVG dont les deux drapeaux sont collés (0110 = 0, 1, 10) — le normaliseur compte le rang du paramètre.
- Ajouté : deux découpes de percée prises sur le dessin — Silhouette du caméléon et Tranche du caméléon (deux curseurs en % du parcours tête → queue, défaut 60–100 %, soit la queue enroulée).
- Ajouté : case « Retirer la zone » — le rectangle ou l'ellipse est soustrait de la découpe pour enlever une partie de la sélection.
- Conversion de repère par TransformToVisual : la découpe suit placement, taille et miroirs du caméléon sans recalcul manuel. Export JSON format 5.
- Modifié : nouveau SVG intégré — le même caméléon sans la branche. Zones claires identiques (vérifié par centroïdes), donc courbe de conduite conservée ; recadrage resserré à 823 × 650, silhouette du halo réextraite. Couverture revérifiée : 0 pixel clair sans couleur.
- Ajouté : chevauchement_explique.png, schéma en quatre panneaux du mécanisme de percée.
- Ajouté : quatre réglages sur chaque image — Exposition (multiplicatif), Luminosité (additif), Contraste, Éclat (saturation sur la luminance perçue) — appliqués dans l'ordre d'une chaîne photo, avec bouton « Neutraliser ». Export format 4.
- Caméléon : retouche posée sur la couleur sortante, sans toucher palette ni animation. Logotype : recalcul des 684 000 pixels en alpha démultiplié, différé de 40 ms, masque du halo aligné sur l'image retouchée.
- Modifié : fenêtre agrandie à 1320 × 1180, plafond de défilement des réglages retiré — tout tient sans scroll.
- Ajouté : entrelacement des deux logos par percée — une fenêtre ouverte dans le calque de devant laisse le dessous y repasser au premier plan. Plan de devant au choix, forme rectangle ou ellipse, X, Y, largeur, hauteur, rotation, option « Inverser », repère en pointillés.
- Chaque logo vit dans un calque qui remplit la scène, seul moyen d'appliquer un Clip dans les bonnes coordonnées. Zone calée sur le centre de la scène, recalculée au redimensionnement. Export format 3.
- Le contrôle de symétrie export/import a rattrapé avant livraison un bloc de lecture jamais inséré, qui aurait perdu la section en silence.
- Corrigé : un fichier exporté par une version antérieure perdait des réglages sans un mot. L'import liste désormais les champs absents en plus des illisibles, et compare le versionFormat du fichier à celui de la build, avec invitation à réexporter.
- L'encre est appliquée exactement depuis le fichier, la liste à deux entrées s'alignant sur la plus proche par la clarté.
- Ajouté : bouton « Importer des réglages… ». Lecteur tolérant sur System.Text.Json : champ absent = réglage conservé, champ illisible = noté au bilan, virgules décimales rattrapées.
- L'import écrit dans les commandes de la fenêtre, jamais directement dans les logos, pour que l'affiché reste l'appliqué. Les nuances relues priment sur le nom de la palette (ImposerPalette), garantissant la reproduction exacte d'un tirage aléatoire. La couleur d'encre entre dans l'export.
- Ajouté : « Miroir ↔ » (le caméléon regarde à droite) et « Miroir ↕ » (tête en bas), par facteur d'échelle négatif à origine centrée. Export et hasard complétés.
- Modifié : règle posée et vérifiée sur le C# livré — le canal le plus fort de chaque nuance vaut au moins 50 % (mesuré : 61 % minimum sur 175 nuances). 30 nuances corrigées, quatre palettes bâties sur le noir refondues : Or et ivoire, Flash, Rouge vif, Contraste reconstruit sur du blanc. Plancher de clarté 0,62 sur le tirage aléatoire.
- Corrigé : l'effet Défilement pulsait — EffetLogo.Defilement n'avait aucun case et tombait dans le default:, qui était Battement. Chaque effet a désormais son cas explicite, le default: retombe sur le défilement neutre, et un contrôle automatisé vérifie qu'aucun membre d'énumération n'est oublié.
- Modifié : les 9 palettes pastel sont supprimées (l'animation ne s'y voyait pas), remplacées par 28 palettes flashy et contrastées. Défaut : Arc-en-ciel. Tirage aléatoire plus saturé, avec une nuance sur trois assombrie pour le relief.
- Modifié : curseur de vitesse de 0,1 à 20 s (au lieu de 1 à 25), droite = rapide, défaut 3 s.
- Modifié : l'ombre est désolidarisée de l'animation — teinte figée à l'application, même en « Suit la palette ».
- Ajouté : DistanceOmbre séparée de l'intensité sur les deux logos (l'intensité = opacité seule, la distance = flou et profondeur). Distances du logotype divisées par deux : son ombre est en unités d'écran, celle du caméléon est réduite par son Viewbox.
- Ajouté : pulsation à 0 = halo fixe (libellé « fixe ») ; taille, X et Y pour le caméléon.
- Corrigé : le caméléon ne change plus de taille au redimensionnement de la fenêtre — largeur explicite posée, c'est le curseur Taille qui décide.
- Corrigé : le crash au lancement venait d'un Slider qui, recevant son Minimum, lève ValueChanged pendant l'analyse du XAML, alors que les curseurs déclarés plus bas sont encore nuls. Un drapeau unique _pret garde désormais les 25 gestionnaires, et Synchroniser() recopie l'état des commandes une fois la fenêtre construite. Contrôle automatisé : chaque gestionnaire câblé porte la garde.
- Ajouté : filet d'exception crocheté dans le constructeur d'App — journal vitrail.log, exceptions internes déroulées jusqu'au rang 5, boîte de dialogue. C'est lui qui a permis le diagnostic exact de la 1.8.2.
- Modifié : logotype chargé par le code en adresse pack absolue avec repli — un défaut d'illustration n'empêche plus le démarrage.
- Ajouté : contrôle LogoTexte affichant le logotype fourni (rogné et réduit à 2000 × 342, embarqué en ressource) avec 8 réglages de géométrie (taille, X, Y, rotation, étirements, penché, cisaille), les mêmes ombres et halos que le caméléon, et « Remettre à plat ». Le halo d'une image matricielle est un rectangle teinté masqué par l'image puis flouté.
- Réglages regroupés dans une zone défilante, aperçu clippé, export JSON et XAML étendus au logotype.
- Ajouté : 28 palettes figées + aléatoire (fichier généré depuis une table Python), 8 effets d'animation — Fixe, Défilement, Va-et-vient, Vague, Respiration, Scintillement, Comète, Battement.
- Ajouté : bouton « Tout au hasard » (qui passe par les commandes de la fenêtre) et bouton « Exporter les réglages… » en JSON et extrait XAML, avec les couleurs résolues en hexadécimal pour que les tirages aléatoires restent reproductibles ailleurs.
- Modifié : le curseur Intensité agit sur l'ombre en plus du halo — opacité et étalement de référence par forme, modulés ensemble.
- Ajouté : 33 teintes nommées pour l'ombre et le halo, plus « Suit la palette », avec pastilles de couleur dans les listes. Planche nuancier_ombre_halo.png livrée.
- Ajouté : 7 palettes cycliques + tirage aléatoire reproductible par graine, 4 formes d'ombre (DropShadowEffect sur la seule couche de dessin), halo en silhouette floutée à opacité pulsante, bouton « Relancer ».
- Corrigé : les stries entre couleurs — champ d'abscisse curviligne interpolé au pixel dans les rendus, et quadrilatères qui débordent d'un pas dans WPF pour que le lissage n'expose plus le fond entre formes jointives.
- Corrigé : l'espace sans couleur au bout de la queue — demi-largeurs terminales du ruban élargies, couverture 100 % des pixels clairs. Tous les rendus d'images refaits.
- Modifié : la teinte suit désormais une trajectoire tête → queue — courbe de Catmull-Rom sur 22 points relevés aux centroïdes des zones claires, peinte en 336 quadrilatères perpendiculaires, teinte = abscisse curviligne × cycles + phase. Bandes verticales à la tête, radiales dans l'enroulement.
- Animation par CompositionTarget.Rendering + Stopwatch. Remplace l'approche en spirale de la 1.1.0.
- Roue de 180 secteurs centrée sur la queue (centre mesuré par ajustement de cercle), motif découpé par les 19 zones claires — c'est la possibilité de découper par n'importe quelle géométrie qui a fait retenir WPF plutôt que WinUI 3.
- Contrôle LogoCameleon reproduisant le SVG vectorisé (11 tracés d'encre liés à une propriété Encre, 19 zones claires animées par un dégradé linéaire partagé), projet d'aperçu autonome avec compiler.bat, fenêtre de réglage de base.
Avis
Pour déposer un avis, saisissez le code affiché dans la fenêtre À propos du logiciel (il change toutes les cinq minutes).
Aucun avis pour le moment. Soyez le premier à donner le vôtre.