[Gimp-developer] GIMP and GEGL in 2014


We hope you had great winter holidays! Here's our slightly belated 2014 report.

Both GIMP and GEGL projects have been quite active. We didn't add any
new new tools in 2014, but you are going to _love_ how we improved
existing ones.

João Sebastião de Oliveira Bueno added "fill" arrange modes to the
Align Tool to evenly distribute items across an image or some other
reference object.

The Blend tool got a major redesign by Michael Henning, with
additional work by Michael Natterer and Simon Budig. Now you can tweak
the gradient's end points positions _after_ you created the fill. Much
like the rectangular selection and crop tools, the end points have an
active zone around them to allow easy grabbing and repositioning. The
active zone hihglights disappear when you move the mouse pointer away
which makes previewing your changes a lot easier. To finalize the
gradient fill, you need to press Enter.

The foreground selection tool now uses much improved algorithms for
separating objects, especial the complex ones like hair. One of the
algorithms (global) was earlier created by Jan Rüegg, the other
(Levin) -- by Danny Robson. Michael Natterer updated the tool's
options, made individual strokes undoable, and moved some of the
controls to the canvas. However, performance of the tool needs to be
improved. We'd appreciate some help here.

Speaking of selection tools, the ones like Select by Color and Fuzzy
Select now have a Draw Mask option contributed by Michael Natterer.
What it does is highlighting an area that will be selected when you
release mouse button. It's rather helpful if you need to e.g. evaluate
the area that will be added to an existing selection so that you could
make better choices at once, without going through the undo routine.
The color is currently hardcoded to magenta, but this design decision
is absolutely negotiable.

The Seamless Clone tool earlier created by Barak Itkin got some much
needed love from Jehan who made it a lot more responsive. Now you can
paste and seamlessly blend into the background pictures that are
larger that 100x100px.

Alexia returned to work on the brush engine again. As the result, all
brush-based tools now have a a few more options: locking brush size to
zoom (whether brush size should follow changes in zoom), configurable
hardness and force. There's also a new fallback brush cursor, a
crosshairs-shaped one, used only as last resort.

The text tool was updated by Mukund Sivamaran to use HarfBuzz library
directly instead of relying on deprecated Pango functions. This will
make sure we always provide excellent support for complex writing
systems such as Arabic, Devanagari etc.

To make things even more fun, we added 64bit per color channel
precision to GIMP. One part of GIMP that already uses it is the FITS
loader/saver for astrophysicists. But that bears the question: can
GIMP reliably perform when dealing with such resources-hungry images?

Well, we made quite a few changes to assist you there. First of all,
GIMP now has a switch in the Preferences dialog to enable/disable
OpenCL-based hardware acceleration globally (that is, including
plugins that can make use of this). When applying a preview to GIMP
will also start redrawing the visible part of the image first (the
viewport) and work on the rest next.

Finally, Øyvind Kolås worked on initial threading support in GEGL.
This is still a somewhat experimental feature. The team would happily
accept input from people who can give this thorough thoughtful

There have been some changes in file formats support too.

First of all, we finally merged the updated PSD loader/saver that
Simon Lui worked on in 2013. In a nutshell, Simon ported the plugin to
GEGL, added support for 16bit files and parsing of advanced features
such as text layers and adjustment layers. But since GIMP doesn't have
public API for handling text layers, the app still can't load text
layers as text. Somone would need to fix this. We also need
non-destructive editing implemented in GIMP to make use of the
ajustment layers parser.

Additionally, Mukund Sivamaran improved and fixed a lot of code to
support various file formats, and Roman Lebedev from the darktable
project added loading and saving of 32bit TIFF files.

Primary contributors to color management implementation in GIMP this
year were Elle Stone and Michael Natterer. They added automatic
generation of an sRGB color profile matching the one by ArgyllCMS, a
widget to display basic ICC profile metadata, and created a new image
profile API that is now used throughout GIMP.

A lot of work has gone into improving user interface and usability.
One notable fix is that now you can drag anything like a layer or a
channel between opened images in the single-window mode.

Michael Natterer introduced an important workflow change. Before, when
you switched tools in the middle of e.g. rotating or adjusting colors,
the change got lost. Now GIMP commits the change and _then_ switches
to another tool.

We also added TITO, a search system created in 2013 by Srihari
Sriraman. Since GIMP has so many menu items that new users can easily
get lost, by pressing the '/' key you can open a search dialog and
start typing a keyword that you think a certain feature should have in
its name or description, then (if present) select it in the list
below. Here's some more information about it:

Title bar and status bar can now additionally display layer dimensions
and the current ICC profile. Head over to 'Edit - Preferences - Title
& Status' and use codes %x, %y and %X, %Y for the former, and %o for
the latter. These features were added by João S. O. Bueno and Michael

In some cases it makes sense to have a dial-like widget to quickly set
rotation angle. Michael Natterer took the existing widget from the
Color Rotate plugin, modernized it and updated all (or nearly all)
relevant parts of GIMP's interface to use it, including filters based
on GEGL.

Speaking of which, we are now beginning to create custom user
interfaces for these filters. The first two to have those are
Convolution Matrix and Mono Mixer. They combine the old interafaces
with best bits of the generic GEGL tool like saving and restoring
presets and generating preview right on the canvas.

Smaller, but useful changes include, but are not limited to:
automatically updated Recent Colors palette, saving and restoring all
currently active tag filters for assets (brushes, gradients etc.)
between sessions, canceling ongoing operation such as transformation
by clicking on the title of the on-canvas progress indicator.

Many more existing GIMP filters have been ported to GEGL, and others
were improved, which does bring us closer to releasing v2.10, although
we are not there yet. Most work here was done by Thomas Manni, Michael
Natterer, Øyvind Kolås, Dimitris Papavasiliou, Daniel Sabo, Pascal
Giessler, Téo Mazars, Michael Henning, Mukund Sivamaran, and others.

Øyvind Kolås also added a new GEGL operation to perform a
equlinear/gnomonic or little planet/stereographic projection of a
equirectangular input image. You can find it in 'Filters - Map' under
'Panorama Projection' name.

We also continued to add compatibility code so that old scripts and
plugins would still work with new GIMP. This is also a work in

Throughout the year Ed J was working on the Perl bindings for GIMP
that had been abandoned. This code is in a much better shape now,
available on CPAN: https://metacpan.org/release/ETJ/Gimp-2.30_05.

Two work-in-progress projects that we consider important are advanced
metadata support and MyPaint brush engine support.

The former, worked on by Hartmut Kuhse, extends IPTC/XMP metadata
support to single layers and even channels. Here is the branch:
https://git.gnome.org/browse/gimp/log/?h=gimp-attributes-wip. Please
note that it requires bleeding edge build of the gexiv2 library.

Hartmut Kuhse started working on layer-level support for metadata.
This means, and in a way it brings the plan laid out by Commons
Machinery (http://bit.ly/1CTekPO) closer to reality. Previous work:

The latter, worked on by Michael Natterer and Jehan, adds a new highly
experimental tool that uses libmypaint to paint with MyPaint brushes.
It's another project we started after looking at what's been worked on
in the gimp-painter fork.

Some interesting changes have been landing to GEGL throughout the year
thanks to Jon Nordby who works on The Grid, an artificial intelligence
based web publishing tool. The part of The Grid that handles images
relies on GEGL, you can read more about that in this extensive
coverage: http://bit.ly/1wPIISJ.

While working on this project, Jon improved some existing GEGL
features and added new ones like the gradient-map operation, support
for CMYK JPEG files, and an image comparison command-line tool.
Shortly before the new year he started moving more features to GEGL
like .json graph serialization and meta-operation loading from such
graphs. What it means is that you will be able to visually program new
GEGL operations by connecting blocks in Flowhub (https://flowhub.io/)
and use these operations in GIMP.

A project we hold very high in regard, while not being all that much
affiliated, is GIMP Magazine started in 2013 by Steve Czaika. It's a
great resource for GIMP users who aspire to become better artists and
photographers. If you are not familiar with it, do check it out and
please consider financially supporting it: http://gimpmagazine.org/

Overall, the amount of changes in 2012-2014 does suggest that a new
release is overdue. However, being a team of volunteers, we cannot
estimate delivery date of v2.10 yet. Helping us to get v2.9 released
would be a major contribution though, and one of the ways you can do
that is by carefully testing all filters we ported to GEGL, then
telling us if they work differently, miss options, have bad default
values etc.

To that end, you can use nightly builds of GIMP:

Windows: http://nightly.darkrefraction.com/gimp/
Ubuntu Linux: https://launchpad.net/~otto-kesselgulasch/+archive/ubuntu/gimp-edge

And here's a wiki page to track the reviews:


Let us know if you are serious about this and need a wiki account.

We do humbly suggest to use IRC for more verbose communication with
the team though.

Alexandre Prokoudine
On behalf of the GIMP team

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]