Deprecation of libgimp API. Some functions in libgimp need to be deprecated, and capable replacements need to be introduced. We started this shortly before WilberWeek, a lot more work needs to be done.

Introduction of the linear workflow. Currently GIMP has a few loose ends with regards to linear pixel data workflow introduced by Michael Natterer and Øyvind Kolås. The Linear switch in the histogram dialog is more of a prototype and needs a better implementation. Both the Curve and the Levels tools have to be adjusted to work on linear data and need a simple way to switch between linear/gamma-corrected modes. And there’s more work to be done here.

Rework of the layer modes. Michael and Øyvind introduced significant changes to how layer modes are stored in XCF. We now have legacy modes (from GIMP 2.8 and earlier), gamma-corrected modes and linear modes. We have a prototype UI to switch between these sets, but we need a more solid implementation that we’d be happy to ship in 2.10. And there’s more internal work to do.

Icon and UI themes. With dark themes, insensitive menu items are brighter than sensitive menu items. The problem may lie with the GTK+ pixbuf engine. We need to investigate that further. The new symbolic icon theme has design issues and is incomplete. Our current stance is that we may likely revert to color icons and a light theme as a default one (though we will still release symbolic icons and dark themes as alternatives settable in Preferences), unless dedicated designers step up to complete themes and icons.

Color management. While most of GIMP is now color-managed, the big missing bit is complete implementation of color management for GEGL-based filters. Currently it’s slow and clutters the UI. We need to fix that.

Warp Transform tool. The tool works well enough for small images, but lags on larger ones. We need to make it faster.

The usual bugfix routine. Currently, we have ca. 60 bug reports with the 2.10 milestone. Some of them are not essential and can be safely reassigned to the next milestone, but some definitey need our attention.

We have barely touched the ‘gtk3-port’ branch since 2012, while most of GIMP’s source code is actually related to UI.

The GTK+3 port compiles and appears to work at least for some users. However we need to sit down and do a complete code audit to figure out, how much work needs to be done to finish the port. We can’t provide any completion estimations at this time.

Depending on how much time this takes, we may end up switching to GTK+4 (we do like some aspects of the GTK+ Scene Graph Kit). This will be decided upon in due time.

We pride ourselves at releasing software that is very stable, although not state-of-the-art fast. This is because for stable releases, we have a policy of not introducing new features to keep the releases as bug-free as possible. Yet this policy proved a blocker for 2.10 since we have too many incomplete features, started by contributors, promising, yet not in release-shape.

We decided that these features should be disabled in 2.10, but can be added later in the stable branch, if they reach the stable state. This way, we don’t block exciting new features arrival for years, while still being able to ship regular releases. This would make our blocker list much smaller, and we could work in smaller steps.

Therefore if the GTK+3 port proves to be too long of a journey, we will start adding new features to 2.10 or launch a 2.11.x/2.12 series. This is too early to talk about it, but we think we need to be transparent about it.

One of the reasons development of GIMP isn’t moving as fast as we’d like to is that we are stuck with completing v2.10, and we have a mostly featureless v3.0 ahead of us. We realize that it doesn’t motivate new developers to join and work on new features, but there is no easy solution. 2.10 has to be released, and the GTK+3 port has to be done.

However we see some ways to help contributors making GIMP better without waiting for the opening of the 3.1/3.2 series. One of the most common questions we hear is how to find bugs that are easy to fix to get started with hacking on GIMP. To amend that, we are tagging such bug reports as ‘newcomers‘, following recommendations of the GNOME Newcomers Initiative. You are welcome to come on IRC to discuss patches directly with the GIMP team. Jehan is also available for questions as the mentor for newcomers, if you feel lost.

If you do not write code, we shall soon be releasing Flatpak builds of GIMP, so you can help testing and providing feedback. This is currently in works by Jehan Pagès.

We shall post a complete report on WilberWeek 2017 once the event is over.

Almost every new major feature people have been asking us for, be it high bit depth support, or full CMYK support, or layer effects, would be impossible without having a robust, capable image processing core.

Øyvind Kolås picked up GEGL in mid-2000s and has been working on it in his spare time ever since. He is the author of 42% of commits in GEGL and 50% of commits in babl (pixel data conversion library).

Thanks to his work, we shall be shipping GIMP 2.10 with 16/32-bit per color channel precision, linear pixel data workflow, and filters that have an on-canvas preview.

But we always need more from both GEGL and babl:

better performance (always);

more sophisticated use of GPU;

support for arbitrary RGB primaries and TRC (think using wide-gamut RGB, like rec2020);

support for CMYK and spot colors;

more GIMP filters available as GEGL operations.

And the list go on.

Which is why we ask you to support Øyvind via his Patreon page, so that the development of new features requested by you, our community, could go faster.

When we released GIMP 2.9.2 in late 2015 and stepped over into 2016, we already knew that we’d be doing mostly polishing. This turned out to be true to a larger extent, and most of the work we did was under-the-hood changes.

But quite a few new features slipped in. So, what are the big user-visible changes for GIMP in 2016?

Michael Natterer eliminated one of the big issues with the clipboard: not having an easy way to copy/paste layers and layer groups from one project to another. Now you can just select a layer or a layer group in the ”Layers” dialog, press ”’Ctrl+C”’, switch to a different project and press ”’Ctrl+V”’.

The ”Layer Attributes” dialog, which hasn’t been very useful, now provides the single UI for setting layer’s name, changing blending mode and opacity setting offset in X/Y, toggling visibility, link status, various locks.

Newly added color tags improve layers management and can be set via ”Layers” menu, ”Layer Attributes” dialog. They are also accessible via shortcuts and available for channels and paths (we don’t expect people to use it a lot, but it was too easy to implement).

The color tags feature is currently not very useful without multiple layers selection. This is something we’ve been meaning to do for quite a while. Last year we did a basic research on that, but we don’t expect to accomplish this task in time for GIMP 2.10, unless someone contributes a very good patch. If you are interested in helping out, please talk to us.

Moreover, for people who use a lot of masks, the workflow has been streamlined. Now GIMP remembers the last type of mask initialization, and you can use key modifiers + mouse click on layer previews to create, apply, or remove masks. Additionally, there’s a new button for that as well.

We had to figure out a sane way for GIMP to remember last mask initialization settings, so we devised a whole new infrastructure to remember settings of various dialogs. The user interface to adjust those settings is now live on the new ”Interface -> Dialog Defaults” page in the ”Preferences” dialog. See the Making settings persistent in GIMP post for more details.

We also made various GIMP settings resettable in the ”Preferences” dialog. And since GIMP is a huge app, where settings tend to accumulate over the years, we added a vertical scrollbar to keep the height of the dialog sensible. Additionally, we reorganized some of the settings, e.g. on the ”Color Management” page.

We already introduced a handful of changes to the color management implementation in 2015, when the code was rewritten by Michael Natterer pretty much from scratch become a core feature rather than a plug-in. But there was more to follow.

Now everything is color-managed in GIMP: all sorts of previews, the Color Picker tool, the painting tools etc. The only missing bit is the on-canvas preview for GEGL-based filters. Color transforms are extremely slow with LittleCMS, so we shall need more time to figure this out.

On a related matter, the Color Management section of the Preferences dialog now features new options to toggle color transforms optimization, so that you could choose between performance and color fidelity.

Additionally, toggling soft-proofing is just a few clicks away in the ‘View -> Color Management’ submenu now, along with rendering intent settings.

Michael Natterer added a new on-canvas preview feature for GEGL-based filters: splitting the view to compare the image before and after applying the filter. You can drag the ‘curtain’ to adjust the view and use key modifiers to swap before/after sides and the direction of the split (horizontal/vertical).

Tobias Ellinghaus of the darktable project contributed a new plug-in to load raw files into GIMP by having them developed in darktable. This is only available on platforms supported by darktable, i.e. Linux and macOS.

Since there is more than one raw processing plug-in out there, we intend to eventually add a way to set preferred raw plug-in. You can contribute a patch for that.

In early 2016, we finally merged the branch by Jehan Pagès that introduces symmetric painting to all painting tools (Paintbrush, MyPaint Brush, Eraser etc.). The feature is available via a dedicated dockable dialog on per-image basis. Modes: Mirror, Tiling, Mandala (Kaleidoscope). The work on this feature was directly sponsored by the part of the community that uses GIMP for digital painting.

For bitmap brushes, GIMP now caches hardness and disables dynamic change of hardness to improve painting performance. Bitmap brushes also don’t get clipped anymore, when hardness is less than 100.

One of the most visible changes in GIMP is the new user interface themes along with new icon themes, available since v2.9.4 released last summer. We now ship GIMP with “Dark” theme and “Symbolic” icon theme enabled by default.

GIMP ships with 5 new themes (lighter, light, gray, dark, darker) overall. For users who prefer the old UI, we still ship the old default UI theme along with old colorful icons. There’s also some ongoing work on vector-based icons for better Hi-DPI displays compatibility.

We also fixed a number of usability issues. E.g. toolbox buttons do not grab focus anymore, which used to break the use of the ”’Tab”’ key and other canvas-related shortcuts after changing tools with a pointing device click.

GEGL and babl got their fair share of development focus. We only added a handful of new operations (”Saturation”, ”Gaussian Selective Blur” etc.), because most work on GEGL was performance improvements, house cleaning etc.

One interesting change, though, is the new ”gegl_operation_progress” function to report processing progress. It’s useful for reporting processing progress to a GEGL-based editor such as GIMP. For now, we use it in ”cartoon” and ”distance-transform” operations, but expect to use it in many more ops.

For babl, most changes were about improving performance (creating fast pixel data conversion paths and caching them) and fixing bugs.

There are still many bugs to fix before we can release 2.10. In the mean time, we are planning to hold a week long developers meet-up in Barcelona at end of January. One of the topics will be cleaning up libgimp to get it into the releasable state for 2.10. We shall soon announce the full agenda for the Wilberweek.

Another upcoming major change is how linear/gamma-corrected workflows are implemented in GIMP. Since early January, Michael Natterer and Øyvind Kolås have been hacking on GIMP to make layer modes work on both linear and gamma-corrected image data correctly. This involved a lot of source code reorganization, and a major part of that work is already done.

Additional changes currently live in the ‘pippin/linear-is-the-new-black’ Git branch soon to be merged, and we hear good reports about it from some of our most sceptical users already.

Some other exciting news deserve a separate announcement.

We expect to ship GIMP 2.10 with 16/32-bit per color channel support, new color management implementation, and a great many improvements overall later this year. Our next focus will be completing the GTK+3 port to make the graphic tablets support fully functional on all supported platforms again and prepare GIMP for even more long overdue changes such as non-destructive image editing.

Until fairly recently GIMP didn’t do a very good job of remembering all the types of customizations. If you applied a filter to an image and liked the combination of options that you used, there was no way you could save that combination for a later use. If you carefully chose selection stroking options, the next time you had to stroke a selection, you had to define settings all over again.

Upcoming v2.10 has some major improvements in that department.

Early in the current development cycle we started porting existing GIMP filters to GEGL operations and using the GEGL tool skeleton to wrap their GUIs into. This made it possible to automatically save each used combination as preset with a timestamp for a name, or manually—as a named preset. If you’ve been using v2.9.2 or v2.9.4, you most likely benefit from that already.

The second part of improvements started with reviewing a patch submitted by Benoit Touchette. As a professional photographer, he regularly works on hundreds of photos daily and has an extensive use of masks, so he needs to get from A to B extremely fast. Benoit came up with a clever idea to simplify adding new masks: clicking on layers’ previews. Various modifier keys would additionally define whether you apply and remove the mask or just drop the mask entirely.

The difficult part was to come up with a way to remember the last used mask initiation setting not just within one session, but across sessions. So instead of creating a special case for just the Add Layer Mask dialog, Michael Natterer added a whole new infrastructure to automatically save and load the settings of dialogs.

All the dialog defaults are stored in the gimprc configuration file. To give you an idea, this is how stroking options are saved in gimprc:

The options are preserved for dialogs like New Channel, Feather Selection, Stroke Path and others. To give you visual control over the settings, Michael created a new page in the Preferences dialog called Dialog Defaults.

You may have noticed a few more new things about the Preferences dialog. There is now a scrollbar on large pages to make the dialog fit small screens like the still popular 1366×768 on lower-end laptops (quite a few GIMP users reported that Preferences was getting too big). Additionally, some pages now feature a reset button that restores default settings.

The dialog defaults feature will be available in GIMP 2.9.6 and, eventually, in GIMP 2.10.

The introduction of filter presets and dialog defaults gets us closer to resolving #63610, #120829, and #599573, filed in 2001, 2003, and 2009 respectively. If you think that more dialogs could benefit from either saving their settings as defaults or getting named presets, please drop by on IRC or the mailing list for developers and tell us.

If you are interested in helping out with getting GIMP 2.10 released, please check out the TODO page.