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
display
anddisplay0
have been recoded from scratch asstdlib
commands (not native anymore). Interactive image viewer usingdisplay
has been improved a lot. -
[gmic-stdlib-330] Command
print
has been recoded as astdlib
command (not native anymore). -
[gmic-stdlib-330] Command
is_3d
renamed asis_mesh3d
. -
[gmic-stdlib-330] New command
strbuffer
returns a string describing a buffer size. -
[gmic-stdlib-330] New command
rand_sum
fills selected images with strictly positive, random, integer values, that sums to specified fixed value. -
[math-core-330] Starting a
fill
expression 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#ind
whose 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 vectorV
by the Lp norm. -
[math-core-324] New function
normp(V,_p)
in math evaluator: return Lp norm of the vectorV
. -
[stdlib-324] New command
fov3d
sets and return the 3D focale associated to the specified angle of view, for selected image. -
[stdlib-324] New commands
compress_huffman
,decompress_huffman
andhuffman_tree
implement 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_clut
generates a 33x33x33 random 3D color LUT. -
[stdlib-322] New commands
color2name
andname2color
converts 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_voxels3d
converts 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
subdivide3d
subdivides primitives of a 3D mesh into several sub-primitives.
- [stdlib-321] New command
extract_textures3d
extract 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
chainring3d
generate a 3D colored chain ring (commit).
-
[stdlib-321] New command
da_freeze
allows to freeze several dynamic arrays at the same time (commit). -
[stdlib-321] New command
lof
returns 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_menger
andshape_mosely
generate 3D voxelized representations of respectively, a Menger Sponge and a Mosely Snowflake.
- [stdlib-321] New commands
curve3d
generates a parameterized 3D curve (x(t),y(t),z(t)) with a possibly varying radius r(t).
- [stdlib-321] New commands
match_icp
implements 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_shadow
has 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
.bmp
loader 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 returnsnan
if second argument is0
. -
[gmic-qt-326] Allow string type for the
$_persistent
variable.
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
colorcube3d
gets 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 Denoise
gets improvements, with new options for tiled denoising and split preview mode.
-
[core-321] Command
foreach
: Add copymark to resulting image names when+foreach
is 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
eval
andfill
now 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
primitives3d
has 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
sphere3d
is now able to generate 3D spherical mesh using three different methods: icosahedron subdivision, cube subdivision and spherical angle discretization.
-
[stdlib-321] Command
boundingbox3d
now manage correctly 3D object containing sphere primitives. -
[stdlib-321] Commands
transfer_pca
,transfer_histogram
andtransfer_rgb
have been renamed tomatch_pca
,match_histogram
andmatch_rgb
.
Bug fixes:
Version 3.3.0:
-
[core-330] Fix scope management of ‘onfail’ block when error happens in a
repeat
,for
orforeach
block. -
[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_empty
when 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... done
block where an error occurred. -
[core-324] Fix path for
$_path_user
on 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
break
works 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
name
when empty argument is specified (commit).