This is the changelog for the release of the 3.3.0 version of the G’MIC software, released on 2023/09/04.
It lists all new features and changes done since the previous minor version 3.2.
What is G’MIC?
G’MIC (GREYC’s Magic for Image Computing) is a full-featured open-source framework for image processing. It provides several different user interfaces to convert/manipulate/filter/visualize generic image datasets, ranging from 1D scalar signals to 3D+t sequences of multi-spectral volumetric images, thus including 2D color images.
- G’MIC main project page : https://gmic.eu
- G’MIC download : G'MIC - GREYC's Magic for Image Computing: A Full-Featured Open-Source Framework for Image Processing - Download
- G’MIC web service : https://gmicol.greyc.fr/
- G’MIC language tutorial pages : Start Here
- Support G’MIC development : G'MIC — Association LILA
What’s new in version 3.3?
New features:
Version 3.3.0:
-
[gmic-stdlib-330] Commands
displayanddisplay0have been recoded from scratch asstdlibcommands (not native anymore). Interactive image viewer usingdisplayhas been improved a lot. -
[gmic-stdlib-330] Command
printhas been recoded as astdlibcommand (not native anymore). -
[gmic-stdlib-330] Command
is_3drenamed asis_mesh3d. -
[gmic-stdlib-330] New command
strbufferreturns a string describing a buffer size. -
[gmic-stdlib-330] New command
rand_sumfills selected images with strictly positive, random, integer values, that sums to specified fixed value. -
[math-core-330] Starting a
fillexpression with+forces it to be evaluated in a single thread, but with an image copy (equivalent to*without multi-threading). -
[math-core-330] Allow
run()to be run in parallel in math parser.
Version 3.2.6:
- [gmic-qt-326] New filter Degradations / Sloppy Mess. Filter written by Prawnsushi, a new contributor to the G’MIC project.
- [gmic-stdlib-326] New command
imagealpha(shortcutja) draws a sprite into selected images, considering the last channel of the specified sprite represents an alpha-channel for the drawing.
Version 3.2.5:
- [math-core-325] Add predefined variable
id#indwhose value is the standard deviation of the image[ind].
Version 3.2.4:
- [gmic-qt-324] New filter Degradations / Huffman Glitches simulates the effect of bit-inversion noise on Huffman compressions of parts of the image. Nice filter to simulate various kind of transmission glitches.
-
[math-core-324] New function
unitnorm(V,_p)in math evaluator: return normalized version of the vectorVby the Lp norm. -
[math-core-324] New function
normp(V,_p)in math evaluator: return Lp norm of the vectorV. -
[stdlib-324] New command
fov3dsets and return the 3D focale associated to the specified angle of view, for selected image. -
[stdlib-324] New commands
compress_huffman,decompress_huffmanandhuffman_treeimplement Huffman coding for lossly compression/decompression of image data. -
[stdlib-324] New command
input_bytes(eq. toib) loads specified filename as a 1D array of bytes.
Version 3.2.3:
- [gmic-qt-323] New filter Patterns / Pack Ellipses packs colored circles or ellipses together in order to recreate the input image.
- [stdlib-323] New command
display_clut(shortcutdclut) renders a 3D color LUT as a colored 3D cube, that shows the RGB\rightarrow RGB color mapping.
- [core-323] Add functions
o2c()(offset to image coordinates) andc2o()(image coordinates to offset) in the math evaluator.
Version 3.2.2:
- [gmic-qt-322] New filter Colors / Random Color Transformation generates a random color LUT that transforms the colors of the image to give it another look.
- [gmic-qt-322] New settings allow the user to add external filter sources. This allows to get “non-official” additional filters in the plug-in.
- [gmic-qt-322] When clicking on “Apply” and when the selected filter finishes rendering, the Elapsed time is displayed on the plug-in window.
-
[stdlib-322] New command
random_clutgenerates a 33x33x33 random 3D color LUT. -
[stdlib-322] New commands
color2nameandname2colorconverts a R,G,B triplet to its color name (in English), and vice-versa.
Version 3.2.1:
-
[math-core-321] New function
csqrt()computes the square root of a complex number (commit). -
[stdlib-321] Add new command
line_aa: draws anti-aliased lines in images, using Xiaolin Wu’s line algorithm (commit).

- [stdlib-321] New command
to_voxels3dconverts a 3D meshed object into a binary shape made of voxels in a 3D volumetric image.
- [stdlib-321] New command
display_voxels3d(eq. todv3d) displays a 3D view of selected volumetric images of 3D voxels.
- [stdlib-321] New command
subdivide3dsubdivides primitives of a 3D mesh into several sub-primitives.
- [stdlib-321] New command
extract_textures3dextract textures from 3D objects.
It can be used for instance to process and remap textures on a 3D object, like in the example below.
- [stdlib-321] New command
chainring3dgenerate a 3D colored chain ring (commit).
-
[stdlib-321] New command
da_freezeallows to freeze several dynamic arrays at the same time (commit). -
[stdlib-321] New command
lofreturns the list of specified features (separated by commas) for each selected images (commit). For instance:sp lena,eagle,cat,dog ${"lof [w,h]"}returns512,512,520,480,600,550,1024,685. -
[gmic-qt-321] New filter
Testing / Garagecoder / Upscale [Recursive2x], developed by long-term contributor Garagecoder upscales image using self-similarity, to preserve details as much as possible.
- [stdlib-321] New commands
shape_mengerandshape_moselygenerate 3D voxelized representations of respectively, a Menger Sponge and a Mosely Snowflake.
- [stdlib-321] New commands
curve3dgenerates a parameterized 3D curve (x(t),y(t),z(t)) with a possibly varying radius r(t).
- [stdlib-321] New commands
match_icpimplements the Iterative Closest Point algorithm for matching two sets of N-D vectors.
Improvements / Changes:
Version 3.3.0:
- [gmic-qt-330] Filter Light Rays: Add option to render color light rays.
- [gmic-qt-330] Command
drop_shadowhas been recoded from scratch, as well as corresponding filter Light & Shadows / Drop Shadow. It now better manages several isolated opaque components in a transparent image.
-
[stdlib-330] Command
projections3d: Improve object subdivision to allow better rendering. -
[stdlib-330] Fix possible issue when using ‘for…done’ in recursively called commands.
-
[core-330] Fixed issue in
.bmploader to prevent malicious files to make the loader crash. -
[core-330] Command
permute: Detect special cases that do not actually require pixel inversions in image buffer.
Version 3.2.6:
-
[math-core-326] Better determine if multi-threading must be enabled, in particular for volumetric images (favor parallelization).
-
[math-core-326] Modulo operator
%now returnsnanif second argument is0. -
[gmic-qt-326] Allow string type for the
$_persistentvariable.
Version 3.2.5:
- [math-core-325] Optimization of functions
norm()andnormp()in the math evaluator.
Version 3.2.4:
-
[core-324] Optimization of command parser: decrease number of string comparisons to detect the use of a native command name.
-
[core-324] Improve suggestion of command name when error occured (include ‘+commands’ as well).
Version 3.2.3:
-
[gmic-qt-323] Many improvements for more stability of the G’MIC-Qt plug-in. Better management of unfinished threads.
-
[core-323] On Windows, change path of G’MIC user file to
%USERPROFILE%/user.gmic. -
[core-323] - Make abort signal checked when using command
display.
Version 3.2.2:
-
[gmic-qt-322] Various optimizations for speeding up startup time: faster filter parsing, generation of a binary cache for parsed filter informations, etc.
-
[stdlib-322] Command
colorcube3dgets a new option for generating a wireframe object. -
[core-322] Make use of left/right braces more intuitive to start/end any kind of code block. So, they can be used in more various situations, like in C++. For instance:
repeat 3 { echo $> } # OK (3.2.1 && 3.2.2)
if (u<0.5) { echo "success" } else { echo "fail"} fi # OK (3.2.2), FAILED (3.2.1)
do { # OK (3.2.2), FAILED (3.2.1)
val:=u
echo $val
} while ($u<0.5)
Version 3.2.1:
- [gmic-qt-321] Filter
Repair / Banding Denoisegets improvements, with new options for tiled denoising and split preview mode.
-
[core-321] Command
foreach: Add copymark to resulting image names when+foreachis used (commit). -
[core-321] Parser for selections/subsets expressions has been written from scratch.
-
[core-321] Make dynamic arrays handle large number of elements (at least 2^31).
-
[core-321] Commands
evalandfillnow replace the status value by the result of theend()block, if any specified (status is emptied otherwise). -
[math-core-321] Optimize evaluation of empty boolean expressions (commit).
-
[math-core-321] Add detection of the not operator for faster pre-evaluation of some math expressions.
-
[stdlib-321] Command
primitives3dhas been recoded from scratch. It better manages texture → color transformation, as well as avoid duplicates of segment/point primitives when possible.
-
[stdlib-321] Convert commands
mode3d,moded3d,double3d,focale3d,specl3d,specs3d,split3d,color3d,opacity3d,reverse3d(akam3d,md3d,db3d,f3d,sl3d,ss3d,s3d,col3d,o3d,rv3d), as well assphere3d, as custom commands rather than native ones (commit). -
[stdlib-321] Command
sphere3dis now able to generate 3D spherical mesh using three different methods: icosahedron subdivision, cube subdivision and spherical angle discretization.
-
[stdlib-321] Command
boundingbox3dnow manage correctly 3D object containing sphere primitives. -
[stdlib-321] Commands
transfer_pca,transfer_histogramandtransfer_rgbhave been renamed tomatch_pca,match_histogramandmatch_rgb.
Bug fixes:
Version 3.3.0:
-
[core-330] Fix scope management of ‘onfail’ block when error happens in a
repeat,fororforeachblock. -
[core-330] Fix command ‘text’ when applied on empty image, without color specified.
Version 3.2.6:
-
[gmic-qt-326] Fix visibility after filter update when parameter count changes.
-
[gmic-qt-326] Fix bug with parameter visibilities when no ‘actual parameter’.
-
[stdlib-326] Fix command
remove_emptywhen no images have to be removed. -
[core-326] Fix selection parsing: selections starting with characters
,and%are considered as invalid.
Version 3.2.4:
-
[core-324] Fix bug that prevented accessing a G’MIC variable in a math expression after a
local... onfail... doneblock where an error occurred. -
[core-324] Fix path for
$_path_useron Windows.
Version 3.2.3:
-
[gmic-qt-323] Fix parsing of status returned by filters to set up the value/visibility of filter parameter widgets.
-
[core-323] Make command
breakworks properly when used in a{ code block }. -
[core-323] Add mutex to protect possible decompression of stdlib by parallel threads.
-
[stdlib-323] Fix computer player in command
x_connect4.
Version 3.2.2:
- [core-322] Ensure mutexes are active when compiling G’MIC without display support.
Version 3.2.1:
- [core-321] Fix command
namewhen empty argument is specified (commit).























