This is the changelog for the release of the 3.4.0 version of the G’MIC software, released on 2024/06/15.
It lists all new features and changes done since the previous version 3.3.0.
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.4.0?
New features:
Version 3.4.0:
- [source-340] Add
CONTRIBUTING.mdfile that explains how to contribute to the project.
Version 3.3.6:
- [gmic-qt-336] New filter Colors / Mixer [Generic] allows to apply linear and nonlinear transformations on color channels, for a wide range of different colorspaces.
- [gmic-qt-336] New filter Deformations / Distort [RBF].
- [gmic-qt-336] New button Randomize Parameters (dice icon) in the G’MIC-Qt plug-in, that randomizes parameters for filters that support it.

- [gmic-qt-336] New filter Rendering / Spline Spirograph, offers a range of settings to create intriguing, colorful textures, from spirograph-like process.
- [gmic-qt-336] New filter Rendering / Underwoods, by @prawnsushi .
- [gmic-qt-336] New filter Degradations / Blur [Motion] simulates motion blur on images, with user-defined trajectories.
- [gmic-qt-336] New filter Rendering / Color Wheel, by Claude Lion.
- [stdlib-336] New command
warp_seamlesswarps selected images by specified displacement field, using seamless blending.
Version 3.3.5:
- [gmic-qt-335] New filter Layers / Spatial Blend Multi-Layers takes a bunch of input layers and blend them all spatially, according to a user-defined orientation. Useful to quickly create intriguing images from timelaps frames !
- [gmic-qt-335] New filter Artistic / Stringify renders images with colored lines.
- [gmic-qt-335] New filter category Map Projection/, with 14 new filters to project equirectangular maps using various projection methods. This is a very nice contribution from Kristian Järventaus, a member of the Cartographers Guild forum, where he posted these filters for the community there.
- [stdlib-335] New command
lines3dtransforms a 3D mesh as a set of segments that can be modified afterwards (e.g. to display 3D normals, as in the example below).
- [stdlib-335] New command
colorize3dset the color of 3D object’s primitives according to a specified formulaf(x,y,z). Useful to view colored information on 3D meshes.
-
[stdlib-335] New commands
expandandshrinkreplaces deprecated commandsexpand_x,expand_y,expand_z,expand_xy,expand_xyz(and same forshrink_*). -
[stdlib-335] New commands
rescale2d(shortcutrs) andrescale3d(shortcutrs3d) perform 2D and 3D image rescaling with aspect ratio preservation. These two commands can replace the following commands (then leaving thestdlib):resize2dx,resize2dy,resize3dx,resize3dy,resize3dz,resize_ratio2d,resize2din,resize3din,resize2dout,resize3dout. -
[stdlib-335] New commands
compress_to_keypointsanddecompress_from_keypointsallow to apply a RBF/PDE-based compression algorithm, that is particularly efficient for images with very smooth content (such as 3D CLUTs or light leak images).
-
[stdlib-335] Command
edgelshas been recoded from scratch and can now return multiple lists of edgels, either starting from the same pixel, or from any shape pixel present in the image. -
[stdlib-335] New command
split_vectorsplit an image into several parts, where specified vector is the separator. -
[core-335] New concept of
subcommand: A subcommand of a commandfoois a command whose name starts with__foo(e.g.__foo_parse). Contrary to a normal command, a subcommand shares the variables it defines, with the calling command. Example:
__foo_define_var :
var=3.1415926
foo :
__foo_define_var
echo "var = "$var # Will print '3.1415926'.
- [math-core-335] New function
flood(_#ind,_x,_y,_z,_tolerance,_is_high_connectivity,_opacity,_color)performs a flood fill in image[ind](or in default image selected ifindis not specified) with specified coordinates. This is the math evaluator analog to commandflood.
Version 3.3.4:
- [gmic-qt-334] Filter Rendering / Quick Copyright has been recoded from scratch, with lot of new options.
- [gmic-qt-334] New filter Patterns / Random Rectangles creates a random partition of colored rectangles.
- [stdlib-334] New command
poincare_diskrenders an image of the Poincaré disk, and its associated filter Deformations / Poincaré Disk.
-
[stdlib-334] New command
count_colorsreturns the number of distinct colors used in selected images. -
[gmic-qt-334] New filter Patterns / Reaction-Diffusion creates reaction-diffusion patterns.
-
[math-core-334] New function
v(min,max,_include_min,_include_max)returns a random integer in specified range (similar to functionu()but returns an integer). -
[math-core-334] New pre-defined variable
epsreturns the machine epsilon, that is the difference between 1.0 and the next value representable by adouble. -
[math-core-334] Add support for specifying binary litteral, as
0b1010010. -
[math-core-334] New function
lcm()computes the least common multiple of specified arguments. -
[math-core-334] Function
gcd()now accepts multiple arguments.
Version 3.3.3:
- [gmic-qt-333] New filter Rendering / ABN Filigrees renders nice 2D closed curves with lot of controls. Filter done by @grosgood .
- [gmic-qt-333] New filter Rendering / CRT Scanlines simulates the CRT scanline effect.
- [gmic-qt-333] New filter Rendering / Random Signature.
- [gmic-qt-333] New filter Degradations / CRT Phosphors.
- [gmic-qt-333] New filter Deformations / Square to Circle [alt], that warps the image so that every centerted square (or rectangle) becomes a circle (or ellipse), or vice-versa.
- [gmic-qt-333] New filter Black & White / Filaments, that throws thousands of particles from the image borders and deform their paths according to the image geometry.
- [gmic-qt-333] New filter Degradations / Noise [Gradient] adds noise to image gradients (rather than image values) then reconstruct the corresponding image by solving the Poisson equation (with FFT).
- [stdlib-333] New command
canny, and the filterEdges (Canny)perform Canny edge detection on selected images.
-
[stdlib-333] New commands
clut2haldandhald2clutconvert 3D CLUT to 2D HaldCLUT formats. -
[stdlib-333] Command
displaygets a new mode to display a 1px outline around each primitives of a 3D mesh. It also now support setting/getting the 3D pose by the user through the variable$_display_3d_pose.
- [core-333] Command
randis now able to generate random values according to a user-defined probability density function.
-
[math-core-333] New function
warp(A,wA,hA,dA,sA,B,wB,hB,dB,sB,_mode,_interpolation,_boundary_conditions)returns the warped version of the imageA(viewed as a vector) by the warping fieldB. This is the math-evaluator analog to thewarpcommand. -
[math-core-333] New function
permute(A,wA,hA,dA,sA,permutation_string)returns the permuted version of the imageA(viewed as a vector). This is the math-evaluator analog to thepermutecommand. -
[math-core-333] New function
mirror(A,wA,hA,dA,sA,axes_string)returns the mirrored version of the imageA(viewed as a vector). This is the math-evaluator analog to themirrorcommand. -
[math-core-333] New function
cumulate(A,_wA,_hA,_dA,_sA,_axes_string)returns the cumulated version of the imageA(viewed as a vector). This is the math-evaluator analog to thecumulatecommand. -
[math-core-333] New function
normalize(A,min_value,max_value)returns the normalized version of the vectorA. This is the math-evaluator analog to thenormalizecommand. -
[math-core-333] New function
noise(A,amplitude,_noise_type)returns the noisy version of the vectorA. This is the math-evaluator analog to thenoisycommand. -
[math-core-333] New function
index(A,P,nb_channelsP,_dithering,_map_colors)returns the indexed version of the image ‘A’ by the colormap ‘P’. This is the math evaluator analog to commandindex. -
[math-core-333] New function
histogram(A,nb_levels,_min_value,_max_value)returns the histogram of the vectorA. This is the math-evaluator analog to thehistogramcommand. -
[math-core-333] New function
equalize(A,nb_levels,_min_value,_max_value)returns the equalized version of the vectorA. This is the math-evaluator analog to theequalizecommand. -
[math-core-333] New function
hypot()computes the length of the hypothenuse. -
[math-core-333] New function
isconst()returns1or0whether the given argument is a constant (value known at compilation time) or not.
Version 3.3.2:
- [gmic-qt-332] New filter Rendering / Warped Rays render a spiral-like shape on the image. It uses the new command
shape_raysadded to thestdlib.

-
[stdlib-332] New command
histogram_maskedcomputes the histogram on masked regions of an image. -
[stdlib-332] Command
dijkstrais now a custom command and has been recoded from scratch. This command computes the minimal path between two vertices of a graph.

-
[math-core-332] New functions
da_push_heap()andda_pop_heap()insert/remove elements in/from a dynamic array viewed as a min-heap structure. Useful to manage priority queues from the math evaluator.
Version 3.3.1:
- [gmic-qt-331] New filter Arrays & Tiles / Loose Photos simulates an effect of loose photos that are spatially arranged to recreate a global picture.
- [gmic-qt-331] New filter Details / Sharpen [Alpha] implements a new multi-scale image sharpening algorithm that produces very few halos. New associated command
sharpen_alphais also available for script developers.
- [stdlib-331] Command
fontreturns a font identifier that can be used in text drawing commands, to draw text with more various fonts than the default one.
-
[stdlib-331] Command
font2gmzconverts a.otfor.ttffont file as agmzfont file that can be used to draw text with custom fonts. -
[stdlib-331] Commands
split_alphaandmerge_alphasplit an image into several levels of details, that can be recomposed afterwards with alpha-blending.
- [math-core-331] New function
ispercentage(arg)returns1or0whetherargends with a%or not.
improvements / Modifications:
Version 3.4.0:
-
[stdlib-340] Command
blendhas been recoded to better mimic what is done in GIMP. -
[stdlib-340] Commands
select,graphandplothave been recoded as G’MIC stdlib commands (rather than native ones). It will be easier to maintain and improve them over time.
-
[stdlib-340] Commands
columns,rows,slicesandchannelsnow accepts aboundary_conditionsargument that tells how out-of-range geometry must be considered. -
[core-340] Command
mmulcan be now used for pointwise matrix-vector multiplication when specified right-hand image is vector-valued. -
[core-340] Command
polygonnow defines a way to also draw open polylines rather than closed outlined or filled polygons. -
[core-340] Command
polygonaccepts that polygon coordinates are provided as an image (e.g.polygon[canvas] [coords],1,255).
Version 3.3.6:
-
[stdlib-336] Command
input_objhas been improved to search for texture files also in current path, when wrong path has been specified in the.mtlfile. -
[stdlib-336] Command
plasmahas been implemented as a custom command. -
[core-336] Improved parsing of special input string
(val1,val2,...), so that the order of specified axes is taken into account when constructing the image. -
[math-core-336] Improved management of string literals and constant vectors, avoiding constructing them multiple times when they are used in loops.
-
[math-core-336] Improved management of hexadecimal and binary literals, as well as hexadecimal and binary number parsing from strings (function
s2v()).
Version 3.3.5:
-
[stdlib-335] Command
framehas been recoded from scratch and replaces commandsframe_x,frame_y,frame_xy,frame_xyz. -
[stdlib-335] Command
inpaint_pde: Allow ‘nb_scales’ to be determined as the minimal image size at lowest scale. -
[stdlib-335] Command
input_obj(import of Wavefront 3D meshes): Improved parsing speed of primitive materials. -
[math-core-335] Function
isint(x,_xmin,_xmax)has been extended to test if a numberxis an integer in specified range[xmin,xmax].
Version 3.3.4:
- [math-core-334] Removed pre-defined variable
vin math evaluator (useu(-1,1)instead).
Version 3.3.3:
-
[math-core-333] Function
permut()has been renamed asperm(). -
[core-333] G’MIC interpreter now discards possible comments passed in the
commands_lineargument of G’MIC API functions. -
[core-333] Community filters are now included by default in the CLI tool
gmicas well as in thelibgmiclibrary. -
[stdlib-333] Commands
display: When displaying 3D objects, pressing keyPnot print the 3D pose matrix onstdout.
Version 3.3.2:
-
[gmic-qt-332] When updating filters, the filter tree is refreshed before the dialog window saying the update has been done shows up.
-
[gmic-qt-332] Updated plug-in code to make it work with API changes introduced in GIMP development version v.2.99.12.
-
[gmic-qt-332] Windows installer updated to include missing DLLs from latest GIMP release 2.10.36.
-
[packaging] Put back the
CMakeLists.txtfile in the project root folder, to allow compilinggmicwithcmake.
Version 3.3.1:
-
[core-331] Removed possibility of having stand-alone
{ ... }blocks in scripts. Now{ ... }can be only used for constructs that require adoneending item. -
[core-331] Command
textcan now use a custom font defined as an image in the list, in addition to a image-valued variable name. -
[stdlib-331] Command
img2strhas been recoded from scratch. It returns the content of the selected images, as special G’MIC input strings. -
[stdlib-331] Command
display: Add forward/backward modes for 3D mesh animation. -
[stdlib-331] Command
text_outlinenow accepts a custom font as argument. -
[stdlib-331] Command
input_obj: Improve import of.objmesh with per-vertex defined colors. -
[stdlib-331] Command
xcrop: Single user-defined crop now applies on all selected images.
Bug fixes:
Version 3.4.0:
- [core-340] Fix slightly wrong texture offset when rendering 3D textured triangles and quadrangles. Particularly visible with smaller textures (like having a size of 3x3).
Version 3.3.6:
-
[math-core-336] Defining a binary litteral was limited to 32 bits on Windows (and 64 bits on Linux) , due to the fact that
long inton WIndows is 32 bits only. Now works with 64 bits for both systems. -
[core-336] Recoded line drawing functions to better manage cropping of large (out-of-bounds) coordinates.
Version 3.3.5:
-
[stdlib-335] Command ‘parse_cli_bashcompletion’: Fix parsing of choice-valued arguments.
-
[stdlib-335] Command
output_obj(export of Wavefront 3D meshes): Fix export of materials for segment primitives. -
[core-335] Fix: Conditions involving simple expressions inside double quotes and containing a
$were not evaluated correctly. -
[math-core-335] Fix: Function ‘isint()’ now works for integers larger than 64bits.
Version 3.3.4:
- [math-core-334] Fix possible side effects in math evaluator, that happened when math compiler was trying to optimize the use of some operator (e.g.
x=3; (x^1)=4was setting4to variablex).
Version 3.3.3:
-
[gmic-qt-333] Fix management of dynamic interfaces (for filters that use it) when the “Preview” box is unchecked.
-
[core-333] Fix wrong parsing of
xNrepetition suffix ininputcommand.
Version 3.3.2:
- [math-core-332] Fixed functions to remove elements from a dynamic array. When the array became too large, suppressing elements was not possible.
Version 3.3.1:
- [gmic-qt-331] Fix aspect ratio of preview error when using
gui_error_preview.




































