URL: https://linuxfr.org/news/g-mic-3-6-l-art-de-soigner-ses-images Title: G'MIC 3.6 : L’art de soigner ses images ! Authors: David Tschumperlé BAud, cli345, Benoît Sibaud et Ysabeau 🧶 Date: 2025-08-25T19:00:11+02:00 License: CC By-SA Tags: g'mic, greyc et traitement_d'images Score: 3 [_G’MIC_](https://gmic.eu), [cadriciel](https://fr.wikipedia.org/wiki/Framework) libre pour [le traitement des images numériques](https://fr.wikipedia.org/wiki/Traitement_d%27images), vient de proposer une mise à jour significative, avec la sortie de sa nouvelle version **3.6**. Une bonne occasion pour nous de vous résumer les activités récentes autour de ce projet, et plus précisément, ce qu’il s’est passé depuis notre [précédente dépêche](https://linuxfr.org/news/g-mic-3-4-0-le-traitement-d-images-a-la-fleur-de-l-age), publiée il y a un peu plus d’un an (juin 2024). [![G´MIC 3.6.0 Teaser](https://gmic.eu/gmic36/thumbs/gmic36_teaser_small.png)](https://gmic.eu/gmic36/img/gmic36_teaser.jpg) _N. D. A. : Cliquez sur les images pour en obtenir une version en pleine résolution, ou une vidéo correspondante lorsque les images contiennent l’icône ![Icône 'Play Video'](https://gmic.eu/gmic36/thumbs/icon_play_video.png)_ ---- [Le projet G'MIC](https://gmic.eu) [Série d’articles G’MIC sur LinuxFr.org](https://linuxfr.org/tags/g'mic/public) [Fil Mastodon du projet](https://piaille.fr/@gmic) ---- # 1. _G’MIC_ : Un cadriciel pour le traitement des images numériques [_G’MIC_](https://gmic.eu) (_GREYC's Magic for Image Computing_) est un projet libre dédié au traitement, la manipulation et la création d'[images numériques](https://fr.wikipedia.org/wiki/Image_num%C3%A9rique). Il est développé principalement au sein de l’équipe [IMAGE](https://www.greyc.fr/equipes/image/) du laboratoire de recherche [GREYC](https://www.greyc.fr/) de Caen (laboratoire [UMR](https://fr.wikipedia.org/wiki/Unit%C3%A9_mixte_de_recherche), sous triple tutelle du [CNRS](https://www.cnrs.fr/fr), de l'[ENSICAEN](https://www.ensicaen.fr/) et de l'[Université de Caen](https://www.unicaen.fr/)). La base du projet repose sur un interpréteur de langage de script spécifique, le [« langage _G’MIC_ »](https://gmic.eu/reference/overall_context.html), pensé pour faciliter le prototypage rapide et l’implémentation d’algorithmes de traitement d’images. Autour de ce noyau viennent se greffer plusieurs interfaces utilisateur, qui donnent accès à des centaines d’opérateurs de traitement d’images, mais qui permettent également d’intégrer des _pipelines_ de traitement personnalisés. _G’MIC_ est donc conçu comme un cadriciel ouvert et extensible. Parmi ses déclinaisons les plus utilisées, on retrouve : [`gmic`](https://gmic.eu/reference/), un outil en ligne de commande comparable et complémentaire à [ImageMagick](https://www.imagemagick.org/) ou [GraphicsMagick](http://www.graphicsmagick.org) ; le service Web [_G’MIC Online_](https://gmicol.greyc.fr/) ; et surtout le greffon [_G’MIC-Qt_](https://github.com/GreycLab/gmic-qt), intégrable dans de nombreux logiciels de création et d’édition d’images tels que [GIMP](https://www.gimp.org), [Krita](https://www.krita.org), [DigiKam](https://www.digikam.org), [Paint.net](https://www.getpaint.net), [Adobe Photoshop](https://fr.wikipedia.org/wiki/Adobe_Photoshop) ou [Affinity Photo](https://fr.wikipedia.org/wiki/Affinity_Photo). Ce greffon est l’interface de _G’MIC_ la plus populaire. Il donne aujourd’hui un accès rapide à plus de **640 filtres** différents, élargissant considérablement les possibilités de filtres et d’effets offertes par ces logiciels de retouche d’images. [![Aperçu du greffon G’MIC-Qt](https://gmic.eu/gmic36/thumbs/gmic_qt_360.png)](https://gmic.eu/gmic36/img/gmic_qt_360.jpg) _Fig. 1.1. Le greffon G’MIC-Qt en version **3.6**, ici utilisé au sein de GIMP 2.10, avec le filtre « Paint With Brush » activé._ # 2. Les nouveautés du greffon _G’MIC-Qt_ ## 2.1. Hommage à Sébastien Fourey, développeur de _G’MIC-Qt_ Avant de décrire la liste des nouveautés de cette version 3.6, nous souhaitons avant tout rendre hommage à notre collègue et ami, [Sébastien Fourey](https://foureys.users.greyc.fr/), qui était maître de conférence à l’ENSICAEN et qui était le développeur principal du greffon _G’MIC-Qt_. Le 6 octobre 2024, Sébastien nous a quittés. Tous ceux qui le connaissaient vous le diront : Sébastien était avant tout une personne profondément humaine, généreuse et particulièrement attentive à tous ceux qui l’entouraient. Il était aussi discret et modeste qu’il était doué avec un clavier entre les mains (et c’était quelqu’un de _très_ discret !). Et même s’il n’a jamais voulu être mis au-devant de la scène, nous voulons ici faire une exception pour mettre en lumière son travail et le rôle majeur qu’il a eu dans le développement du projet _G’MIC_ : c’est grâce à lui que _G’MIC-Qt_ est aujourd’hui un greffon utilisé et apprécié par des milliers de personnes à travers le monde. Il s’avère qu’il était un lecteur assidu de LinuxFr.org, et nous nous devions donc de lui rendre un hommage sur ce site. Sébastien nous manque profondément. Nous ferons notre possible pour que son œuvre perdure. Repose en paix, Sébastien ! Nous pensons à toi et à ta famille. [![Hommage à Sébastien Fourey](https://gmic.eu/gmic36/thumbs/gmic_tribute_sebastien.png)](https://gmic.eu/gmic36/img/gmic_tribute_sebastien.jpg) _Fig. 2.1. Texte hommage à Sébastien Fourey, auteur de G’MIC-Qt, visible dans la section « **About** » du greffon._ ## 2.2. Améliorations générales du greffon Comme vous vous en doutez, le développement spécifique du greffon _G’MIC-Qt_ a été à l’arrêt depuis octobre dernier. Néanmoins, les derniers ajouts de code réalisés sur le greffon ont rendu possible les choses suivantes : - Son code source est désormais compatible avec l’API de _plug-in_ de la nouvelle version majeure de GIMP (la **3.0**). Cela a permis d’offrir aux utilisateurs de GIMP un greffon _G’MIC-Qt_ fonctionnel dès la sortie de GIMP 3. Notons qu’assez peu de greffons ont proposé une mise à jour à temps ([Resynthesizer](https://github.com/bootchk/resynthesizer), greffon populaire, étant une autre exception). On remercie donc chaleureusement [Nils Philippsen](https://github.com/nphilipp) et [Daniel Berrangé](https://github.com/berrange) qui ont soumis les patchs activant cette compatibilité avec GIMP 3. Nous continuons en parallèle à maintenir notre greffon pour l’ancienne version (**2.10**) de GIMP, qui est encore beaucoup utilisée. - Le code de _G’MIC-Qt_ devient également compatible avec l’API de la bibliothèque [Qt6](https://www.qt.io/product/qt6), la dernière version majeure en date de ce _toolkit_ graphique. - L’interface du greffon propose maintenant un outil de prévisualisation des filtres avec séparateur intégré, de manière **native**. Cette fonctionnalité, accessible via le raccourci clavier `CTRL` + `SHIFT` + `P`, permet de comparer directement l’image avant et après l’application d’un filtre, en affichant les deux versions côte à côte dans la fenêtre de prévisualisation. Cette fonctionnalité existait déjà, mais elle est dorénavant utilisable de manière plus fluide, puisqu’auparavant elle était implémentée indépendamment par chaque filtre (le séparateur de prévisualisation était en fait vu comme un paramètre du filtre, ce qui impliquait un recalcul complet du résultat du filtre même lorsque l’on souhaitait seulement déplacer le séparateur). [![Prévisualisation avec séparateur](https://gmic.eu/gmic36/thumbs/gmic_split_preview.png)](https://gmic.eu/gmic36/img/gmic_split_preview.jpg) _Fig. 2.2.1. Prévisualisation native de filtres avec séparateur intégré dans G’MIC-Qt._ La vidéo suivante montre comment cette fonctionnalité améliorée se présente dans le greffon : [![Prévisualisation avec séparateur - vidéo](https://gmic.eu/gmic36/thumbs/gmic_preview_splitter.png)](https://gmic.eu/gmic36/img/gmic_preview_splitter.mp4) _Fig. 2.2.2. Prévisualisation native de filtres avec séparateur intégré dans G’MIC-Qt (vidéo)._ ## 2.3. Nouveaux filtres d’images Les nouveautés principales du greffon _G’MIC-Qt_ se matérialisent donc plutôt sous la forme de nouveaux filtres et effets accessibles pour les utilisateurs. À la sortie de cette version 3.6, c’est **640** filtres/effets différents qui sont proposés dans l’interface du greffon. En ce qui concerne le filtrage d’images, les dernières entrées ajoutées sont les suivantes : - Le filtre « **Déformations / Warp [RBF]** » propose de déformer localement une image en définissant dans un premier temps des points d’ancrage dans la fenêtre de prévisualisation. Puis, en repositionnant ces points de contrôle, on déforme l’image de manière intuitive et interactive, directement dans la fenêtre de prévisualisation. Idéal pour réaliser des retouches rapides ou créer des caricatures amusantes ! [![Filtre « Warp RBF »](https://gmic.eu/gmic36/thumbs/gmic_warp_rbf.png)](https://gmic.eu/gmic36/img/gmic_warp_rbf.jpg) _Fig. 2.3.1. Le filtre « **Deformations / Warp [RBF]** » en action dans G’MIC-Qt._ La vidéo suivante montre son utilisation en pratique au sein du greffon _G’MIC-Qt_ pour la déformation d’un visage : [![Filtre « Warp RBF » - vidéo](https://gmic.eu/gmic36/thumbs/gmic_warp_rbf_vid.png)](https://gmic.eu/gmic36/img/gmic_warp_rbf_vid.mp4) _Fig. 2.3.2. Le filtre « **Deformations / Warp [RBF]** » en action dans G’MIC-Qt (vidéo)._ - Le filtre « **Repair / Upscale [CNN2x]** » a pour but de doubler la résolution d’une image à l’aide d’un [réseau de neurones convolutifs léger (CNN)](https://fr.wikipedia.org/wiki/R%C3%A9seau_neuronal_convolutif), qui a été entrainé pour préserver les détails et les textures des images lors de l’agrandissement. Ce module offre une alternative simple et relativement efficace aux méthodes d’agrandissement plus classiques (en particulier celles qui sont implémentées nativement dans GIMP). [![Filtre « Upscale CNN2X »](https://gmic.eu/gmic36/thumbs/gmic_upscale_cnn2x.png)](https://gmic.eu/gmic36/img/gmic_upscale_cnn2x.jpg) _Fig. 2.3.3. Le filtre « **Repair / Upscale [CNN2X]** » en action dans G’MIC-Qt._ La figure suivante montre justement une comparaison des méthodes classiques d’agrandissement d’images, avec ce nouvel algorithme disponible dans _G’MIC-Qt_ (résultat obtenu en bas à droite) : [![Filtre « Upscale CNN2X » - Comparaisons](https://gmic.eu/gmic36/thumbs/gmic_upscale_cnn2x_comp.png)](https://gmic.eu/gmic36/img/gmic_upscale_cnn2x_comp.jpg) _Fig. 2.3.4. Comparaisons des méthodes d’agrandissement d’images avec notre nouvelle méthode « **Upscale [CNN2X]** »._ Notons que ce filtre illustre à lui seul quelques avancées récentes réalisées pour la [`nn_lib`](https://discuss.pixls.us/t/machine-learning-library-in-gmic), qui est la petite bibliothèque interne d’apprentissage machine intégrée à _G’MIC_ : _Clipping des gradients_, régularisation L2 des poids des réseaux, planificateur _Cosine Annealing LR_ pour le taux d’apprentissage, module de _Pixel Shuffling_, sont quelques-unes des nouvelles fonctionnalités qui y ont été ajoutées. Cette bibliothèque de gestion de réseaux de neurones n’est pas très puissante (elle n’utilise que le calcul CPU, pas GPU), mais elle offre néanmoins la possibilité de créer des filtres intéressants basés sur des techniques d’apprentissage statistique. - Le filtre « **Degradations / VHS Filter** », est un filtre créé par [Hazel Stagner](https://github.com/GlaireDaggers). Comme son nom l’indique, il cherche à recréer l’esthétique caractéristique des vieilles cassettes vidéo VHS : légères distorsions, bruit coloré, lignes parasites et saturation altérée. Ce filtre est idéal pour donner aux images un aspect rétro, évoquant le rendu des vidéos analogiques des années 80–90. [![Filtre « VHS Filter »](https://gmic.eu/gmic36/thumbs/gmic_vhs_filter.png)](https://gmic.eu/gmic36/img/gmic_vhs_filter.jpg) _Fig. 2.3.5. Le filtre « **Degradations / VHS Filter** » en action._ Ce filtre génère un bruit aléatoire, donc l’appliquer plusieurs fois sur une même image donne à chaque fois un rendu différent. On peut donc ainsi synthétiser de petites animations avec un look « analogique - années 90 » du plus bel effet. Les amateurs de [_Glitch Art_](https://fr.wikipedia.org/wiki/Glitch_art) apprécieront ! (voyez [l’image originale](https://pixabay.com/fr/photos/magn%C3%A9toscope-vid%C3%A9o-bandes-film-1221156/) à titre de comparaison). [![Filtre « VHS Filter » - vidéo](https://gmic.eu/gmic36/img/gmic_vhs_anim.gif)](https://gmic.eu/gmic36/img/gmic_vhs_anim.gif) _Fig. 2.3.6. Le filtre « **Degradations / VHS Filter** » appliqué plusieurs fois sur une même image, pour en faire une séquence vidéo de type VHS._ ## 2.4. Nouveaux effets de rendu De nouveaux effets font également leur apparition dans le greffon, non pas dans le but de modifier une image existante, mais pour créer une nouvelle image ou un motif à partir de zéro : - Le filtre « **Patterns / Organic Fibers** » synthétise des textures évoquant des entrelacements de fibres organiques, en s’appuyant sur l’algorithme de simulation du [_Physarum polycephalum_](https://uwe-repository.worktribe.com/output/980579/characteristics-of-pattern-formation-and-evolution-in-approximations-of-physarum-transport-networks) proposé par Jeff Jones en 2010, et décrit de manière remarquable sur [cette page](https://bleuje.com/physarum-explanation/) d’Etienne Jacob (allez voir, ça vaut vraiment le détour !). Nous reparlerons de cet algorithme un peu plus loin dans la dépêche (en section 4.2). [![Filtre « Organic Fibers » - 1](https://gmic.eu/gmic36/thumbs/gmic_organic_fibers1.png)](https://gmic.eu/gmic36/img/gmic_organic_fibers1.jpg) [![Filtre « Organic Fibers » - 2](https://gmic.eu/gmic36/thumbs/gmic_organic_fibers2.png)](https://gmic.eu/gmic36/img/gmic_organic_fibers2.jpg) _Fig. 2.4.1. Le filtre « **Patterns / Organic Fibers** » en action, avec deux jeux de paramètres différents._ - Le filtre « **Rendering / Speech Bubble** » insère une bulle de bande dessinée sur un calque d’image additionnel, avec une personnalisation possible de la forme de la bulle (rondeur, forme du pied de bulle, etc.), grâce à la présence de différents points de contrôle. Ce filtre offre un moyen rapide d’intégrer des éléments graphiques typiques de la BD dans une image quelconque, comme illustré ci-dessous avec, dans un premier temps, la vue du filtre tel qu’il se présente dans le greffon, suivi d’une vue du résultat dans GIMP où un texte a été inséré dans la dite bulle. [![Filtre « Speech Bubble » - 1](https://gmic.eu/gmic36/thumbs/gmic_speech_bubble.png)](https://gmic.eu/gmic36/img/gmic_speech_bubble.jpg) [![Filtre « Speech Bubble » - 2](https://gmic.eu/gmic36/thumbs/gmic_speech_bubble2_fr.png)](https://gmic.eu/gmic36/img/gmic_speech_bubble2_fr.jpg) _Fig. 2.4.2. Le filtre « **Rendering / Speech Bubble** » permet d’ajouter des bulles de dialogue dans vos images._ La vidéo ci-dessous présente ce filtre en action dans le greffon _G’MIC-Qt_ sur une photographie : [![Filtre « Speech Bubble » - vidéo](https://gmic.eu/gmic36/thumbs/gmic_speech_bubble_vid.png)](https://gmic.eu/gmic36/img/gmic_speech_bubble_vid.mp4) _Fig. 2.4.3. Le filtre « **Rendering / Speech Bubble** » en action dans le greffon (vidéo)._ - Le filtre « **Rendering / 2.5D Extrusion** » simule, à partir d’une forme binaire en entrée, un effet d’extrusion 3D. Il transforme donc rapidement des silhouettes ou des masques en objets visuellement plus consistants, avec un rendu qui évoque du relief, sans devoir passer par un véritable logiciel de modélisation 3D. Les figures suivantes illustrent son utilisation : On crée tout d’abord une forme opaque sur un fond transparent (ici un texte), puis on lui applique le filtre « **Rendering / 2.5D Extrusion** » de _G’MIC-Qt_ pour créer un rendu façon 3D extrudée. L’angle de rotation, la profondeur de l’extrusion, l’amplitude de l’effet perspective, ainsi que les couleurs des différentes faces sont réglables dans ce filtre. [![Filtre « 2.5D Extrusion » - 1](https://gmic.eu/gmic36/thumbs/gmic_extrusion_25D_1_fr.png)](https://gmic.eu/gmic36/img/gmic_extrusion_25D_1_fr.jpg) [![Filtre « 2.5D Extrusion » - 2](https://gmic.eu/gmic36/thumbs/gmic_extrusion_25D_2_fr.png)](https://gmic.eu/gmic36/img/gmic_extrusion_25D_2_fr.jpg) _Fig. 2.4.4. Le filtre « **Rendering / 2.5D Extrusion** » en action._ - Le filtre « **Rendering / Fluffy Cloud** » génére automatiquement de jolis nuages cotonneux dans vos images. Idéal pour créer des ciels synthétiques, du brouillard, des effets de vapeur éthérée, etc. Ce filtre a été créé par [Prawnsushi](http://prawnsushi.free.fr/), contributeur régulier de filtres G’MIC, dont certains filtres avaient été déjà présentés dans notre dépêche précédente. Voici comment ce nouveau filtre se présente lors son ouverture dans le greffon : [![Filtre « Fluffly Cloud » - 1](https://gmic.eu/gmic36/thumbs/gmic_fluffy_cloud.png)](https://gmic.eu/gmic36/img/gmic_fluffy_cloud.jpg) _Fig. 2.4.5. Le filtre « **Rendering / Fluffy Cloud** » dans le greffon _G’MIC-Qt_._ En jouant avec les différents paramètres du filtre, on peut obtenir des rendus variés et intéressants : [![Filtre « Fluffly Cloud » - 2](https://gmic.eu/gmic36/thumbs/gmic_fluffy_cloud2.png)](https://gmic.eu/gmic36/img/gmic_fluffy_cloud2.jpg) [![Filtre « Fluffly Cloud » - 3](https://gmic.eu/gmic36/thumbs/gmic_fluffy_cloud3.png)](https://gmic.eu/gmic36/img/gmic_fluffy_cloud3.jpg) _Fig. 2.4.6. Différents rendus de « **Rendering / Fluffy Cloud** » en faisant varier les paramètres du filtre._ - Le filtre « **Patterns / Stripes** » facilite la création de motifs à rayures simples ou complexes. Ce filtre offre de nombreux paramètres pour régler la géométrie des motifs synthétisés, en faisant varier le type de rayures (linéaires, radiales, concentriques), la taille, la couleur ainsi que l’opacité de chaque rayure indépendamment. [![Filtre « Stripes » - 1](https://gmic.eu/gmic36/thumbs/gmic_stripes.png)](https://gmic.eu/gmic36/img/gmic_stripes.jpg) [![Filtre « Stripes » - 2](https://gmic.eu/gmic36/thumbs/gmic_stripes2.png)](https://gmic.eu/gmic36/img/gmic_stripes2.jpg) [![Filtre « Stripes » - 3](https://gmic.eu/gmic36/thumbs/gmic_stripes3.png)](https://gmic.eu/gmic36/img/gmic_stripes3.jpg) _Fig. 2.4.7. Trois exemples de motifs à rayures générés par le filtre « **Patterns / Stripes** »._ - Le filtre « **Patterns / Gradient [from Curve]** » n’est pas à proprement parler un nouveau filtre, mais une évolution d’un filtre précédent « **Patterns / Gradient [from Line]** ». Cette version étendue extrait un dégradé de couleur en parcourant les pixels de l’image, non plus seulement le long d’un segment, mais le long d’une [courbe spline](https://fr.wikipedia.org/wiki/Spline) cubique par morceau, définie avec jusqu’à 6 points de contrôle, ce qui autorise le suivi de structures très incurvées dans les images, comme l’illustre la figure suivante : [![Filtre « Gradient From Curve »](https://gmic.eu/gmic36/thumbs/gmic_gradient_from_curve.png)](https://gmic.eu/gmic36/img/gmic_gradient_from_curve.jpg) _Fig. 2.4.8. Le filtre « **Patterns / Gradient [from Curve]** » extrait les couleurs d’une image localisées le long d’une courbe spline._ - Et pour en finir avec les nouveautés du greffon, mentionnons le filtre « **Rendering / Neon Carpet** », un filtre original réalisé par Claude (alias _Cli345_), contributeur régulier de _G’MIC_ qui avait été [interviewé en septembre dernier](https://linuxfr.org/news/interview-de-cli345-createur-de-filtres-pour-g-mic) sur Linuxfr. Ce filtre un peu psychédélique synthétise des motifs lumineux et colorés faisant penser à des tapis fluorescents, comme illustré sur la figure ci-dessous : [![Filtre « Neon Carpet »](https://gmic.eu/gmic36/thumbs/gmic_neon_carpet.png)](https://gmic.eu/gmic36/img/gmic_neon_carpet.jpg) _Fig. 2.4.9. Le filtre « **Rendering / Neon Carpet** », une contribution de Cli435._ Voilà pour ce qui concerne les nouveautés spécifiques au greffon _G’MIC-Qt_. # 3. Améliorations du cœur du logiciel et de sa bibliothèque standard Passons maintenant à la description du travail réalisé cette année pour l’amélioration du cœur du projet, à savoir l’interpréteur _G’MIC_ et sa bibliothèque standard d’opérateurs. Ce sont forcément des améliorations un peu moins visibles pour l’utilisateur final, mais elles sont toutes aussi importantes, car elles consolident ou améliorent des fonctionnalités qui peuvent ouvrir plus tard la porte au développement de nouveaux filtres originaux. ## 3.1. Optimisation de l’interpréteur Le moteur interne de _G’MIC_ a bénéficié d’une série d’optimisations notables. Plusieurs améliorations internes, concernant l’analyse, la détection et la concaténation de chaînes de caractères ou encore la recherche de valeurs min/max dans de grandes images (désormais parallélisée avec [OpenMP](https://fr.wikipedia.org/wiki/OpenMP)), ont permis d’augmenter légèrement les performances (gain moyen d’environ 2,5% sur le temps d’exécution de scripts _G’MIC_). Ce n’est pas un gain spectaculaire, mais ça se prend (et après 17 ans à écrire du code pour cet interpréteur, il aurait été presque inquiétant d’obtenir un gain beaucoup plus important ! 😊). Sous Windows, la compilation de l’interpréteur utilise désormais [Clang](https://fr.wikipedia.org/wiki/Clang) et sa _libc_ associée, ce qui produit des exécutables légèrement plus optimisés. ## 3.2. Améliorations du moteur de rendu 3D Le moteur de rendu 3D intégré de G’MIC a également été amélioré, avec l’ajout du z-clipping pour les primitives hors champ, un calcul d’éclairage affiné, la correction du rendu de normales 3D avec le mode d’éclairage Phong, et l’ajustement des paramètres de réflexion spéculaire. Une nouvelle commande [`multithreaded3d`](https://gmic.eu/reference/multithreaded3d) (raccourcie en `mt3d`) permet désormais d’activer ou désactiver le rendu 3D multi-threadé (là encore par OpenMP). Cela permet d’accélérer considérablement l’affichage de gros maillages. Mentionnons au passage l’apparition de la commande [`normals3d`](https://gmic.eu/reference/normals3d) dans la bibliothèque standard, dont le rôle est d’estimer les vecteurs normaux unitaires d’un maillage 3D, que ce soit au niveau des sommets ou des primitives. La figure suivante illustre par exemple l’utilisation de cette commande pour la visualisation de vecteurs normaux à la surface d’un tore 3D : [![Commande 'normals3d'](https://gmic.eu/gmic36/img/gmic_normals3d.gif)](https://gmic.eu/gmic36/img/gmic_normals3d.gif) _Fig. 3.2.1. La commande [`normals3d`](https://gmic.eu/reference/normals3d) permet d’estimer les vecteurs normaux 3D aux sommets ou aux faces d’un maillage 3D._ ## 3.3. Améliorations de l’évaluateur d’expressions mathématiques L’évaluateur d’expressions mathématiques intégré à _G’MIC_ est l’une des pièces maîtresses du projet (en traitement d’images, on doit souvent réaliser beaucoup de calculs…). Il continue lui aussi de s’enrichir et de gagner en efficacité. Sans rentrer dans trop de détails techniques, notons que l’analyse syntaxique des expressions a été optimisée grâce à une première passe dédiée à la détection de certains opérateurs, afin d’accélérer leur traitement ultérieur. De nombreuses fonctions font leur apparition, parmi elles, `epoch()` pour convertir une date en temps Unix, `frac()` pour extraire la partie fractionnaire d’un nombre, ou encore `wave()` qui permet de générer différentes fonctions ou images périodiques (sinusoïdales, triangulaires, etc.), comme illustré sur la figure ci-dessous : [![Fonction 'waves()' - 1](https://gmic.eu/gmic36/thumbs/gmic_waves1.png)](https://gmic.eu/gmic36/img/gmic_waves1.jpg) [![Fonction 'waves()' - 2](https://gmic.eu/gmic36/img/gmic_waves2.gif)](https://gmic.eu/gmic36/img/gmic_waves2.gif) _Fig. 3.3.1. La nouvelle fonction `waves()` permet de générer facilement des fonctions d’ondes, fonctions dont la fréquence d’apparition (hoho ! calembour de traiteur de signal !) est assez élevée dans les opérateurs de traitement d’images._ ## 3.4. Amélioration des entrées-sorties Quelques améliorations sont également à signaler au niveau de la gestion des entrées-sorties : - Le format [TIFF](https://fr.wikipedia.org/wiki/Tagged_Image_File_Format) bénéficie désormais d’une sauvegarde plus rapide pour les grosses images (par exemple, les images médicales volumiques). Un choix élargi de modes de compression de sortie est également disponible pour ce format d’images. - _G’MIC_ prend désormais en charge de manière native la lecture et l’écriture des fichiers au format [WebP](https://fr.wikipedia.org/wiki/WebP) (cette fonctionnalité étant activée par défaut sur les paquets binaires que l’on propose pour Linux). - Notons enfin qu’un travail de portage du code pour l’affichage des fenêtres de _G’MIC_, vers la bibliothèque [SDL3](https://www.libsdl.org/), a été amorcé. Cela devrait permettre à terme une meilleure compatibilité de _G’MIC_ avec le système d’affichage natif de chaque distribution Linux (en particulier celles tournant sous [Wayland](https://fr.wikipedia.org/wiki/Wayland)). ## 3.5. _Sprite Packing_ En ce qui concerne l’évolution de la bibliothèque standard de _G'MIC_, la nouveauté la plus significative concerne la réécriture de la commande [`pack_sprites`](https://gmic.eu/reference/pack_sprites.html), qui implémente un algorithme [d’«_empaquetage_» d’objets](https://en.wikipedia.org/wiki/Packing_problems). Pour rappel, ce type d’algorithmes permet de générer des visuels composés d’ensemble d’imagettes disjointes placées de telle façon à reproduire une forme binaire (un masque) de géométrie quelconque. Cette ré-implémentation est à la fois plus rapide et plus efficace (utilisant de meilleures heuristiques de placement), et permet d’optimiser l’agencement des imagettes à différentes échelles et orientations tout en réduisant le temps de génération. Une illustration valant mieux qu’un long discours, voici le genre d’images amusantes que cet algorithme est capable de produire facilement : [![Commande 'pack_sprites' - 1](https://gmic.eu/gmic36/thumbs/gmic_pack_sprites1.png)](https://gmic.eu/gmic36/img/gmic_pack_sprites1.jpg) [![Commande 'pack_sprites' - 2](https://gmic.eu/gmic36/thumbs/gmic_pack_sprites2.png)](https://gmic.eu/gmic36/img/gmic_pack_sprites2.jpg) _Fig. 3.5.1. Deux exemples de génération possibles utilisant la commande « `pack_sprites` »._ Les _sprites_ à empaqueter peuvent être de formes quelconques, comme des lettres (image du haut de la figure précédente), des mots entiers (image du bas), etc. Et quoi de mieux qu’un exemple concret pour montrer la facilité déconcertante 😉 d’utilisation de cette commande [`pack_sprites`](https://gmic.eu/reference/pack_sprites.html) ? Le but ici est d’écrire le texte « ♥LinuxFR♥ » de telle sorte que chaque lettre soit générée comme un empaquetage d’elle-même ! (idée suffisamment saugrenue pour qu’un filtre « clé en main » réalisant ceci n’existe pas déjà !). Le script _G’MIC_ suivant (fichier `test_pack_sprites.gmic`), une fois rendu exécutable, réalise cette tâche : ```sh #!/usr/bin/env gmic str="0LinuxFR0" repeat size(['$str']) { l:=['$str'][$>] 0 text. {`$l`},0,0,${"font titanone,480"},1,1 ==. 0 channels. -3,0 0 text. {`$l`},0,0,${"font titanone,64"},1,${"-RGB"},255 pack_sprites.. .,5,25,3,1 remove. } append x to_rgb output out.png display ``` La génération prend quelques secondes, et aboutit à une image de ce type : [![Commande 'pack_sprites' - 3](https://gmic.eu/gmic36/thumbs/gmic_pack_sprites3_fr.png)](https://gmic.eu/gmic36/img/gmic_pack_sprites3_fr.jpg) _Fig. 3.5.2. Résultat du lancement du script `test_pack_sprites.gmic`._ Amusant, n’est-ce pas ? Comment feriez-vous pour réaliser la même chose dans un autre langage (et combien de lignes de code cela prendrait-il ? 😉). # 4. Utilisation de _G’MIC_ pour le « Creative Coding » L’exemple précédent est réellement représentatif des possibilités d’écriture de scripts personnalisés permis par _G'MIC_. Saviez-vous, par exemple, que l’ensemble des 640 filtres disponibles dans le greffon _G’MIC-Qt_ sont justement écrits dans ce langage ? _G’MIC_ peut ainsi être considéré comme une boite à outils étoffée pour les personnes souhaitant se frotter au [code créatif](https://fr.wikipedia.org/wiki/Code_cr%C3%A9atif) et à l'[art génératif](https://fr.wikipedia.org/wiki/Art_g%C3%A9n%C3%A9ratif). Nous vous proposons ci-dessous quelques autres exemples simples de génération d’images par scripts _G’MIC_, afin de donner un aperçu rapide des possibilités et de la concision de ce langage. ## 4.1. Exemples de génération d’images - **Inversion d’un damier coloré** : On s’inspire ici de cette [excellente vidéo](https://www.youtube.com/watch?v=kGZZTR5CMkM) récente, réalisée par le vulgarisateur mathématicien Mickaël Launay ([_Micmaths_](https://www.youtube.com/channel/UC4PasDd25MXqlXBogBw9CAg)). En _G’MIC_, la fonction suivante permet de synthétiser une image équivalente à celle montrée dans la vidéo (mais en quatre couleurs au lieu de deux). ```sh invert_checkerboard : 4096,4096,1,1," L = clog(20*([x,y]/w - 0.5)); P = cexp([log(40/exp(L[0])),L[1]]); 85*xor(P[0]%4,P[1]%4)" map 6 rescale2d 50% ``` [![Inversion d’un damier coloré](https://gmic.eu/gmic36/thumbs/gmic_invR.png)](https://gmic.eu/gmic36/img/gmic_invR.jpg) _Fig. 4.1.1. Génération d’un damier inversé, avec la commande personnalisée `invert_checkerboard`._ - [**Cercles d’Apollonius**](https://fr.wikipedia.org/wiki/Cercles_d%27Apollonius_(fractale)) : Dans cet exemple, il s’agit d’empaqueter des cercles de plus en plus petits dans un cercle de base, pour générer des images fractales. La fonction _G’MIC_ réalisant cette tâche est la suivante : ```sh apollonian_gasket : # Init. siz=1280 rad:=$siz/2.2 $siz,$siz,1,2 circle {[$siz,$siz]/2},$rad,1,1 repeat 5 { circle {[$siz,$siz]/2+0.537*$rad*cexp([0,90°+$>*72°])},{0.316*$rad},1,0,{2+$>} } # Iterate. ind=4 e " > Computing" do { sh 0 +distance. 0 x,y,r:="x = xM; y = yM; [ x,y,i(x,y) - 1 ]" rm[-2,-1] circle $x,$y,$r,1,0,$ind ind+=1 e "\r > Computing "{`c=arg0(int($>/10)%4,124,47,45,92);[c,c==92?92:0]`} } while $r>3 # Decorate. k. channels 100% +n. 0,255 map. hot l[0] { g xy,1 a c norm != 0 * 255 to_rgb } max rs 80% ``` Et voici le résultat : [![Cercles d’Apollonius](https://gmic.eu/gmic36/thumbs/gmic_apollonian_gasket.png)](https://gmic.eu/gmic36/img/gmic_apollonian_gasket.jpg) _Fig. 4.1.2. Génération de cercles d’Apollonius, avec la commande personnalisée `apollonian_gasket`._ - **Gaussiennes 3D** : On cherche ici à dessiner de petites fonctions gaussiennes anisotropes 3D de différentes tailles, orientations et couleurs dans un volume 3D discret, en s’arrangeant pour garantir une périodicité de l’image suivant l’axe z (l’axe de la profondeur). Puis, on transforme les coupes de ce volume en _frames_ d’une vidéo, pour obtenir l’animation qui suit. ```sh gaussians3d : 180,180,160,3 2000,1,1,1,": draw_gauss3d(ind,xc,yc,zc,u,v,w,siz,anisotropy,R,G,B,A) = ( unref(dg3d_mask,dg3d_one,dg3d_rgb,dg3d_isiz2); dg3d_vU = unitnorm([ u,v,w ]); dg3d_vUvUt = mul(dg3d_vU,dg3d_vU,3); dg3d_T = invert(dg3d_vUvUt + max(0.025,1 - sqrt(anisotropy))*(eye(3) - dg3d_vUvUt)); dg3d_expr = string('T = [',v2s(dg3d_T),']; X = ([ x,y,z ] - siz/2)/siz; exp(-12*dot(X,T*X))'); dg3d_mask = expr(dg3d_expr,siz,siz,siz); dg3d_rgb = [ vector(##siz^3,R),vector(##siz^3,G),vector(##siz^3,B) ]; const dg3d_isiz2 = int(siz/2); draw(#ind,dg3d_rgb,xc - dg3d_isiz2,yc - dg3d_isiz2,zc - dg3d_isiz2,0,siz,siz,siz,3,A/255,dg3d_mask); # Trick: These two lines allow to generate a perfectly looping animation. draw(#ind,dg3d_rgb,xc - dg3d_isiz2,yc - dg3d_isiz2,zc - dg3d_isiz2 + d#0/2,0,siz,siz,siz,3,A/255,dg3d_mask); draw(#ind,dg3d_rgb,xc - dg3d_isiz2,yc - dg3d_isiz2,zc - dg3d_isiz2 - d#0/2,0,siz,siz,siz,3,A/255,dg3d_mask); ); X = [ u([w#0,h#0] - 1),u(d#0/4,3*d#0/4) ]; U = unitnorm([g,g,g]); siz = v(5); anisotropy = u(0.6,1); R = u(20,255); G = u(20,255); B = u(20,255); A = u(20,255)/(1 + siz)^0.75; siz==0?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],11,anisotropy,R,G,B,A): siz==1?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],21,anisotropy,R,G,B,A): siz==2?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],31,anisotropy,R,G,B,A): siz==3?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],41,anisotropy,R,G,B,A): siz==4?draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],51,anisotropy,R,G,B,A): draw_gauss3d(#0,X[0],X[1],X[2],U[0],U[1],U[2],61,anisotropy,R,G,B,A)" rm. rs 250%,250%,6 c 0,255 normalize_local , n 0,255 slices {[d/4,3*d/4-1]} ``` [![Gaussiennes 3D - vidéo](https://gmic.eu/gmic36/img/gmic_gaussians3d.gif)](https://gmic.eu/gmic36/img/gmic_gaussians3d.gif) _Fig. 4.1.3. Volume de gaussiennes 3D anisotropes, vues comme une séquence vidéo._ Regardez ça en plein écran pendant 20 minutes avant d’aller vous coucher, en écoutant du [Pink Floyd](https://fr.wikipedia.org/wiki/Pink_Floyd), et je vous garantis une bonne nuit de sommeil ! - **Cube roulant** : Comme mentionné en section 3.2, _G’MIC_ possède son propre moteur de rendu 3D, que nous utilisons donc ici pour générer cette animation simple et qui boucle parfaitement : [![Cube roulant - vidéo](https://gmic.eu/gmic36/img/gmic_rolling_cube_small.gif)](https://gmic.eu/gmic36/img/gmic_rolling_cube_small.gif) _Fig. 4.1.3. Animation d’un cube 3D roulant._ [Le code source de cet effet](https://gmic.eu/samples/cube3d.gmic) est un peu plus long que pour les exemples précédents, et nous ne l’intégrons donc pas directement dans cette dépêche. Mais en 47 lignes seulement, cela reste tout à fait raisonnable 😊 ! Et si comme moi, vous prenez plaisir à regarder ou réaliser des images ou animations amusantes/étranges qui sont générées en quelques lignes de code seulement, alors n’hésitez pas à aller jeter un œil au fil de discussion dédié, sur le forum officiel de _G’MIC_ : [_Creative Coding with G’MIC_](https://discuss.pixls.us/t/creative-coding-with-gmic/). ## 4.2. La série « G’MIC Adventures ». Les possibilités offertes par _G’MIC_ pour le code créatif nous ont récemment décidé à initier une petite série de dépêches, intitulées « [_G’MIC Adventures_](https://discuss.pixls.us/tag/gmic-adventures) ». L’idée de cette série est d’expliquer et d’illustrer les différentes étapes qui vont du concept à l’implémentation d’un effet de code créatif sous forme d’un script _G’MIC_. Aujourd’hui, cette série comporte seulement 4 épisodes, mais nous espérons l’enrichir dans le futur. Ces épisodes sont les suivants : - [G’MIC Adventures #1: **A fake 3D extrusion filter (2.5D)**](https://discuss.pixls.us/t/gmic-adventures-1-a-fake-3d-extrusion-filter-2-5d) : Cet épisode explique comment le filtre d’extrusion 2.5D présenté précédemment (Fig. 2.4.4) a été imaginé et implémenté. - [G’MIC Adventures #2: **Building 3D trees**](https://discuss.pixls.us/t/gmic-adventures-2-building-3d-trees) : Dans cet épisode, nous montrons comment implémenter la génération d’un arbre 3D fractal (plus précisément une variante 3D d’une [canopée fractale](https://fr.wikipedia.org/wiki/Canop%C3%A9e_fractale)), de manière procédurale, afin de produire des maillages 3D d’arbres aléatoires. [![Arbre fractal 3D](https://gmic.eu/gmic36/thumbs/gmic_adventures2.png)](https://gmic.eu/gmic36/img/gmic_adventures2.jpg) _Fig. 4.2.1. Génération d’un arbre fractal 3D par G’MIC, réimporté ensuite sous Blender._ [![Arbre fractal 3D - vidéo](https://gmic.eu/gmic36/img/gmic_tree3d.gif)](https://gmic.eu/gmic36/img/gmic_tree3d.gif) _Fig. 4.2.2. Exemple d’arbre fractal 3D généré par G’MIC (vidéo)._ - [G’MIC Adventures #3: **(Pseudo)-Diffusion-Limited Aggregation**](https://discuss.pixls.us/t/gmic-adventures-3-pseudo-diffusion-limited-aggregation/) : Cet épisode explore les processus d'[agrégation limitée par diffusion](https://fr.wikipedia.org/wiki/Agr%C3%A9gation_limit%C3%A9e_par_diffusion) et une de ses approximations rapides, utilisant un système particulaire pour synthétiser un amas en 3D, tel que celui présenté dans l’animation suivante : [![Mousse de forêt](https://gmic.eu/gmic36/thumbs/gmic_moss_ball.png)](https://gmic.eu/gmic36/img/gmic_moss_ball.mp4) _Fig. 4.2.3. Espèce de mousse de forêt synthétique, générée par agrégation de particules en 3D. L’inhalation volontaire de vapeurs provenant de cette mousse est fortement déconseillée !_ - [G’MIC Adventures #4: **Physarum Transport Networks**](https://discuss.pixls.us/t/gmic-adventures-4-physarum-transport-networks/) : Cet épisode explore la réalisation d’un autre système particulaire, l’algorithme _Physarum_ imaginé dans [ce papier](https://uwe-repository.worktribe.com/output/980579/characteristics-of-pattern-formation-and-evolution-in-approximations-of-physarum-transport-networks) de Jeff Jones, en 2010. Ici, on lance des millions de particules qui s’auto-organisent pour suivre un chemin qui devient commun à toutes les particules au bout d’un certain nombre d’itérations, ce qui permet de générer des animations 2D tout à fait étonnantes, comme celles-ci par exemple : [![Danse du feu - 1](https://gmic.eu/gmic36/thumbs/gmic_fire_dance.png)](https://gmic.eu/gmic36/img/gmic_fire_dance.mp4) [![Danse du feu - 2](https://gmic.eu/gmic36/img/gmic_fire_dance2.gif)](https://gmic.eu/gmic36/img/gmic_fire_dance2.gif) _Fig. 4.2.4. Danses de filaments enflammés, générées par l’algorithme Physarum en 2D._ Dans cet épisode, nous proposons également une extension 3D de cet algorithme, ce qui permet de générer ce type d’animation : [![Physarum 3D](https://gmic.eu/gmic36/thumbs/gmic_organic_fibers3d.png)](https://gmic.eu/gmic36/img/gmic_organic_fibers3d.mp4) _Fig. 4.2.4. Évolution de l’algorithme Physarum étendu en 3D._ Tous ces épisodes cherchent à montrer que _G’MIC_ est une boite à outils générique, plutôt sympa à utiliser, pour le prototypage créatif destiné à la génération d’images et d’animations ! # 5. Ressources additionnelles Nous voilà déjà arrivés à la cinquième section de cette dépêche, signe qu’il est probablement temps de la terminer au plus vite 😉. Pour finir, voici donc quelques informations et liens supplémentaires pour approfondir la découverte du projet _G’MIC_ : - Mentionnons tout d’abord la parution de la publication [« _G’MIC: An Open-Source Self-Extending Framework_ »](https://joss.theoj.org/papers/10.21105/joss.06618), de D. Tschumperlé, S. Fourey et G. Osgood, en janvier 2025 dans le journal JOSS ([The Journal of Open Source Software](https://joss.theoj.org/)). Dans cet article sont décrites les motivations générales du projet et une vue d’ensemble de son architecture globale et de quelques-unes de ses possibilités. Cela permet aussi au projet _G'MIC_ d’avoir son article « de référence » dans une revue scientifique (donc pouvoir être cité plus facilement). [![Article JOSS](https://gmic.eu/gmic36/thumbs/gmic_joss.png)](https://joss.theoj.org/papers/10.21105/joss.06618) - Mentionnons également que _G’MIC_ possède maintenant des comptes (clonés) sur les réseaux sociaux [_X_](https://x.com/gmic_eu) et [_Bluesky_](https://bsky.app/profile/gmic-eu.bsky.social), en complément du compte principal sur [_Mastodon_](https://piaille.fr/@gmic). Ceci tout simplement, car nous avons découvert l’existence d’outils de publications croisées 😊. Nous utilisons essentiellement ces réseaux sociaux pour donner des nouvelles fréquentes du projet et de son évolution. N’hésitez donc pas à vous y abonner si suivre les actualités du projet vous intéresse ! - Et pour finir, une liste de liens que nous avons trouvé intéressants : - Vidéo Youtube : [G'Mic In Krita a Beginner’s Guide](https://www.youtube.com/watch?v=1A6sYQyiLZw) par _MossCharmly presents_. - Vidéo Youtube : [Adding GMIC Plug-In for Photoshop & Affinity Photo 2](https://www.youtube.com/watch?v=qnQcsI7nj9Y&t=3s) par _Stephen - Photo Artist_. - Vidéo Youtube : [600+ Artistic Filters - GMIC Tutorial for Affinity Photo](https://www.youtube.com/watch?v=GTZamk_KGyk) par _Technically Trent_. - Tutoriel : [Compilation de G’MIC pour Android](https://discuss.pixls.us/t/tutorial-compiling-gmic-for-android-devices/) par _Hagar H_. # 6. Conclusions et perspectives La sortie de cette version **3.6** (et plus généralement l’année 2025) représente une étape importante dans la vie du projet _G'MIC_. Tout d’abord parce qu’on se rend bien compte qu’après 17 ans de développement, _G’MIC_ est maintenant stable, et qu’il est peut-être plus temps d’en valoriser les facettes existantes, plutôt que de chercher à implémenter à tout prix de nouvelles fonctionnalités. D’autre part, car la disparition de l’ami Sébastien, en plus d’avoir été un choc émotionnel majeur, risque de rendre difficile la maintenance et l’évolution future du greffon _G’MIC-Qt_. Et enfin, car avec la démocratisation de l’IA générative, les domaines de l’analyse, du traitement et de la génération d’images (notamment à des fins créatives) sont en profonde mutation, et que les fonctionnalités de _G’MIC_ pourraient très bien être considérées comme obsolètes d’ici quelques années (ou pas 😊). Au final, que d’incertitudes et de questionnements ! Cela rend floues les directions à prendre pour l’évolution de _G’MIC_, d’autant que s’occuper d’un tel projet requiert beaucoup d’investissements en temps, et qu’en même temps, sa valorisation financière est aujourd’hui inexistante. Actuellement, _G’MIC_ est téléchargé un peu plus de 1000 fois par jour depuis [la page web principale du projet](https://gmic.eu/download.html) (donc sans compter les installations tierces : via l’installation de Krita, via les paquets officiels des distributions, etc.). C’est un chiffre très honorable pour un logiciel libre de ce type, développé au sein d’un laboratoire public de recherche tel que le GREYC, et qui plus est, qui n’est plus maintenu que par une seule personne. À court terme, on se focalisera probablement sur la promotion et la visibilité du cadriciel, la maintenance du code et l’animation de la communauté, par exemple en écrivant quelques tutoriels illustrant ses nombreuses applications potentielles dans les domaines variés liés à l’imagerie numérique : retouche photographique, illustration, peinture numérique, imagerie scientifique (médical, astronomie, biologie, matériaux), création graphique, art génératif, etc. À long terme, peut-on raisonnablement espérer faire plus de _G’MIC_ avec ce peu de ressources ? L’avenir nous le dira !