Vue lecture

GIMP 3.0.4 Released

Two months after releasing GIMP 3.0, we are delighted to announce the second micro-release, GIMP 3.0.4. This addresses bugs and also incorporates some of the fabulous and helpful feedback we have received.

Release Highlights

Micro releases like 3.0.4 are focused on fixing bugs and regressions, so there are no major new features to announce (though we continue to work on those! Just on separate feature branches for GIMP 3.2). However, we want to tell you about some major fixes that may have impacted your workflow.

General Bugfixes

There was a bug with pasting selections from GIMP into other programs, where the pasted section was padded to the original image size. This is now fixed thanks to work from Anders Jonsson, Aruius, and Alx Sa. If you notice any regressions or other issues after this fix, please let us know!

There were several types of crash reported to us, related to changing or turning off the main monitor. Jacob Boerema and Jehan worked together to diagnose this issue and make several necessary fixes. However, if you continue to have problems related to this, let us know so we can continue to work on it.

Idriss Fekir and Liam Quin, our resident font experts, have been busy making improvements to our text systems. In addition to general bug fixes with text layers, they’ve also greatly improved font loading speed on start-up. If you have a large number of fonts on your computer, GIMP should start much faster now!

Non-destructive filters received a number of bugfixes and improvements as well. The name of the filter is once again displayed in the undo history when added to an image. In addition, individual filter edits are now tracked in the undo history, thanks to work by Jehan and Alx Sa. We also resolved a few crashes, and we fixed some visual glitches when rotating layers with active non-destructive filters.

A few other small fixes of note:

  • New contributor Gabriele Barbero fixed a bug where the Help button on the About Dialog didn’t load the help page correctly.

  • New contributor Integral fixed a bug on KDE Wayland where the default Wayland icon was shown instead of our Wilber icon.

  • The ZDI-CAN-26752 bug for .ICO imports is now fixed.

Screenshot of GIMP splash screen with correct Wilber icon on KDE Wayland, by Integral
Screenshot of GIMP splash screen with correct Wilber icon on KDE Wayland, by Integral - GIMP 3.0.4

Regressions

Akkana Peck noticed that the Window Hint option in Preferences no longer allowed floating windows to stay in front of the main image window in multi-window mode. She found and implemented a fix using the updated GTK3 API.

Screenshot of Preferences Dialog with 'Hint for docks and toolbox' option highlighted
Screenshot of Preferences Dialog with ‘Hint for docks and toolbox’ option highlighted - GIMP 3.0.4

The space bar once again respects the action setting in Canvas Interactions. This means instead of always panning, you can set it to switch to the Move Tool instead - or even set it to do nothing at all!

The Difference Cloud filter once again has a GUI to let you adjust its settings. This actually fixes a regression from the port to GEGL in GIMP 2.8, so it’s a long-standing update!

Difference Cloud filter GUI
Difference Cloud filter GUI - GIMP 3.0.4

A few other small fixes of note:

  • The Plug-in Browser should now show all plug-ins again.

  • New contributor Aruius resolved a bug where the Sample Points display didn’t update when the image’s precision changed.

  • The Screenshot plug-in once again uses radio buttons rather than a drop-down menu for its options, reducing the number of clicks needed to change settings.

  • Rupert Weber fixed a bug on Linux where BMP format warnings didn’t display in some cases.

Create Screenshot plug-in GUI
Create Screenshot plug-in GUI - GIMP 3.0.4

UI/UX

Since this is a “bugfix” release, we didn’t want to make too many disruptive UI changes. However, Reju has identified and designed a few smaller updates to help make GIMP’s UI more consistent.

  • The MyPaint Brush tools options UI has been redesigned to match the layout of other painting tools.

  • The generic “Force” slider does not impact the Pencil Tool. This option is now hidden in that tool’s options rather than just marked inactive, to be less confusing.

  • The Device Status dock has been updated to show more clearly which input device is in use, and is closer to the GIMP 2.10 version.

The Path tool now automatically closes the path when you click on the starting point in Design mode, rather than requiring you to hold down the Ctrl first. This makes the Path tool more consistent with similar tools in GIMP, as well as in other software. If you need to move the starting point, you can deselect the current end point by holding Shift when you click on it, and then select the starting point to move it.

Jacob Boerema reviewed our brush size code, and found that different parts of GIMP set different limits for the maximum brush size. He defined a single maximum value and set it to be used throughout GIMP, to ensure there are no surprises when resizing your brush!

A few other small fixes of note:

  • On Windows, floating docks in Multi-Window Mode now also have their titlebars match the theme dark mode setting.

  • You can now press Enter to connect the start and end points in Scissor Select. Pressing Enter a second time will create a selection as normal.

Build

We received reports that GCC 15 could not build GIMP by default, due to some older areas of our codebase using now reserved keywords for variable names. Nils Philippsen located the problem areas and updated the relevant code to match current standards.

On macOS, we now have a developer version of the .DMG as first mentioned in the 3.0.2 news post. This means that creating plug-ins for macOS will be much easier and faster than before. Thanks again to Lukas Oberhuber, Peter Kaczorowski, Dominik Reichardt, and other contributors for their hard work!

Our resident packaging and build expert Bruno Lopes has been busy with more improvements to our processes. A few of these updates are listed below:

AppImage

The AppImage no longer contains Debug Symbols for dependencies (with the exception of babl and GEGL). This should significantly cut down on the file size, going back to the small size it had in RC3. Instead, if you need to debug the AppImage, follow our new debugging instructions.

Smaller and smarter Windows installer

To guarantee the best stability for future GIMP installations on Microsoft Windows, the installer’s Customize mode is now restricted to “clean” installations (a.k.a. when you first install GIMP). That’s because we need to adjust or even remove features from the .exe installer when they get too hard to maintain or become potentially broken (e.g. our custom file associations page was removed starting with GIMP 2.10.12 installer). In the Customize mode case, it was suppose to let you choose what GIMP components should installed, but unfortunately, it was not working like that at all.

Back then, to allow the Customize mode between GIMP installations (e.g. when reinstalling, updating), our Windows developers needed to 1) hardcode the components files almost twice and 2) code our own utility to do recursive uninstall of some complex components. All of that extra work to barely emulate how it (automatically) works on NSIS and WIX installers. Because of this, that feature became unmaintained without us noticing for many years and was silently breaking some GIMP installations. That said, you will still be able to use that feature with the command line - but keep in mind it is not properly working.

To be clear: that feature works perfectly on clean installs and, from 3.0.4 onward, also if the installer detects a broken install (e.g. when you installed GIMP in a external SSD but lost it). We call this much requested feature: Repair mode.

Also in the Customize mode, in addition to letting you choose what language packs are present, you can now also choose to install plug-in development files which work with our new plug-in tutorials.

As a bonus, even if you select literally all components available in the Customize mode, GIMP 3 is still more than 300MB smaller than GIMP 2.10 😉, that’s it.

GEGL and babl

GEGL version 0.4.62 brings several bug fixes to prevent crashes, courtesy of Øyvind Kolås. UI ranges were added by Budhil Nigam to some operations, which means our Fractal Trace filter now has more sensible number ranges on the slider.

babl version 0.1.114 contains some fixes from Øyvind to ensure TRCs are stored correctly from color profiles.

Internally, Bruno Lopes converted many scripts in both projects to use Python, making them easier to build on other platforms.

Release Stats

Since GIMP 3.0.2, in the main GIMP repository:

  • 90 reports were closed as FIXED.
  • 59 merge requests were merged.
  • 280 commits were pushed.
  • 15 translations were updated: British English, Bulgarian, Catalan, Chinese (China), Danish, French, Georgian, German, Norwegian Nynorsk, Persian, Portuguese, Slovenian, Swedish, Turkish, Ukrainian.

32 people contributed changes or fixes to GIMP 3.0.4 codebase (order is determined by number of commits; some people are in several groups):

  • 14 developers to core code: Alx Sa, Jehan, Bruno Lopes, Idriss Fekir, Jacob Boerema, Gabriele Barbero, Akkana Peck, Integral, Lukas Oberhuber, Nils Philippsen, aruius, Lloyd Konneker, mkmo, Øyvind Kolås.
  • 9 developers to plug-ins or modules: Alx Sa, Bruno Lopes, Jehan, Jacob Boerema, Anders Jonsson, Nils Philippsen, Rupert, Sabri Ünal, Lloyd Konneker.
  • 16 translators: Emin Tufan Çetin, Kolbjørn Stuestøl, Alexander Shopov, Anders Jonsson, Luming Zh, Martin, Yuri Chornoivan, Alan Mortensen, Andi Chandler, Dirk Stöcker, Ekaterine Papava, André Dazereix, Danial Behzadi, Hugo Carvalho, Jordi Mas i Hernandez, Philipp Kiemle.
  • 2 theme designers: Alx Sa, Bruno Lopes.
  • 7 build, packaging or CI contributors: Bruno Lopes, Jehan, Idriss Fekir, Integral, Lukas Oberhuber, lloyd konneker, Ondřej Míchal.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • GEGL 0.4.62 is made of 22 commits by 7 contributors: Øyvind Kolås, Bruno Lopes, Davide Ferracin, Jehan, Liam Quin, Muhammet Kara, budhil.
  • babl 0.1.114 is made of 24 commits by 5 contributors: Øyvind Kolås, Bruno Lopes, John Paul Adrian Glaubitz, lillolollo, sewn.
  • ctx had 88 commits since 3.0.2 release by 1 contributor: Øyvind Kolås.
  • gimp-data had 8 commits by 3 contributors: Bruno Lopes, Jehan, Lukas Oberhuber.
  • The gimp-test-images (unit testing repository) repository had 1 commit by 1 contributor: Jacob Boerema.
  • The gimp-macos-build (macOS packaging scripts) release had 4 commits by 1 contributor: Lukas Oberhuber.
  • The flatpak release had 15 commits by 3 contributors: Bruno Lopes, Ondřej Míchal, Jehan.
  • Our main website (what you are reading right now) had 44 commits by 4 contributors: Jehan, Alx Sa, Wiliam Souza, Bruno Lopes.
  • Our developer website had 63 commits by 5 contributors: Bruno Lopes, Jehan, Chas Belov, Lukas Oberhuber, Denis Rangelov.
  • Our 3.0 documentation had 75 commits by 13 contributors: Andre Klapper, Alevtina Karashokova, Jacob Boerema, Alan Mortensen, Alx Sa, Kolbjørn Stuestøl, Alexandre Franke, Chas Belov, Jordi Mas i Hernandez, Peter Mráz, ShellWen Chen, Takayuki KUSANO, Yuri Chornoivan.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Around GIMP

Team News

Reju, an active contributor to the UX design repository, has been recently granted “reporter” status. We appreciate their hard work developing designs and discussing UX improvements with developers and the community!

GSoC

We are once again participating in the Google Summer of Code internship program. We have three great project proposals from our summer students:

  • Ondřej Míchal is working on a redesign of our developer reference system in GIMP. They already have some early work done on a GEGL Filter Browser, which will be very helpful for plug-in creators looking to use the new Filter API.

  • Gabriele Barbero will be developing further improvements to the text tool, building on past work by former GSoC students and current contributor Idriss Fekir.

  • Shivam Shekhar Soy will be working on our online extensions repository. This is another step on our roadmap to allow you to easily download and install new extensions to GIMP, replacing the beloved GIMP Plug-in Registry.

Download Mirrors

Since the 3.0.2 news post, two new mirrors have been contributed:

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Downloading GIMP 3.0.4

You will find all our official builds on GIMP official website (gimp.org):

  • Linux AppImages for x86 and ARM (64-bit)
  • Linux Flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • Microsoft Store for x86 and ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc).

Note: The Microsoft Store release may be delayed as we wait for the certification process to finish.

What’s Next

Since GIMP 3.0.0 release, we focused on bug fixing. As could be expected after a 7-year development marathon, various issues have slipped through our testing and we had to deal with these. Though perfection doesn’t exist and we’ll continue to work on bug fixes, we believe we are in a saner state now, and therefore we are now going to enter a “Merge Window” period where we will allow new features and breaking changes in the code again. In other words, we are starting to move onto active GIMP 3.2 preparation! 😱

We won’t spoil 🤫 too much our feature list, also because it is possible that some of the features we are planning don’t make it (though development has already started in feature branches). But we can already tell you that we feel that GIMP 3.2 will be pretty awesome too, despite being much smaller than GIMP 3.0 was!

To be continued…

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger!

New Priorities for GIMP


Edit: this news was obviously a fun 🐠 April fool! 🐟

Nevertheless some people may have noted that the merge request for this image format is real. While supporting all kind of outdated and not-too-frequent file formats is certainly not our top priority, supporting as many image formats, past and present, is within our goals. Everyone who has old image archives they want to still be able to load would understand how important this is.

Not only this, our half-joke was a good reminder that our project is fully community-led, which means features happen because contributors want to work on them.

🐡 End of Edit 🦈


Hi! I’m one of the contributor for GIMP’s development. You might be familiar with my work on moving “About GIMP” to the bottom of the help menu and other vitally important improvements to GIMP.

GIMP 3.0 was a big release, and we’ve gotten a lot of feedback from users since then. While Jehan is busy with bug fixes, code review, and administrative work, he’s asked me to take over certain duties to ease the burden on him.

Therefore, I am proud to announce a new priority for GIMP 3.2: File Format support!

It’s true that GIMP already supports a wide range of images such as the very useful Esm Software PIX format. However, there are so many more types of images in the world that I believe GIMP should support. Supporting all image formats - no matter how supposedly “obscure” - is crucial to maintaining access to our shared digital culture. The first format in this new campaign is Jeff’s Image Format!

Image of icebergs, converted from .jif format with GIMP
Example JIF image from Jeff’s website, converted with GIMP - authorship and copyright unsure

Jeff’s Image Format is a variation of the GIF standard, created in the late 1990s. It was intended to get around potential legal issues with the patented LZW compression used in GIFs, by using a LZ77-derived compression instead. The format is otherwise nearly identical to GIF (save for the JIFF99a magic number), making it an easy target for import support in GIMP. Furthermore, it helps you to be right no matter how you pronounce GIF!

While you’ll have to wait until GIMP 3.2 to experience importing JIF images, you can check out the merge request for Jeff’s Image Format support in GIMP to tide yourself over until that glorious day! If you have any sample images you’d like to contribute, please share on the issue tracker.

I am so proud to lead this new initiative for GIMP, and I believe it will take us (and open source image editing in general) in an exciting new direction. I look forward to this journey with you all!

(At least until Jehan gets back and sees that I’ve posted this)

Example of Jeff's Image Format animation, converted from .jif format with GIMP
Example Animated JIF image from Jeff’s website, converted with GIMP - authorship and copyright unsure

GIMP 3.0.2 Released

We are happy to announce the first micro release for GIMP 3.0!

Bugfix Release

As we noted in the 3.0 release notes, we are returning to our pre-2.10 development process of only adding new features on minor releases. This allows us to respond more quickly to problems and bugs found by users.

Furthermore it’s a good opportunity to show off our streamlined release procedure, allowing us to make much faster releases in the v3 series than we used to be able to do with GIMP 2.10.

The initial release of GIMP 3.0 was great, and we deeply appreciate all the positive comments as well as the constructive feedback from new and existing users! You helped us uncover a number of bugs and regressions, and GIMP 3.0.2 provides fixes for several of them.

Here is a summary of the fixes:

  • macOS and flatpak users reported a crash when selecting a brush with the view set to Icon Grid. This was tricky to solve as it did not crash on every OS, but Jehan and Øyvind Kolås worked together to implement a fix.

  • Some packaging changes resulted in a few missed features, such as Python plug-ins and the auto-update check not running on Windows and some display filters and color selectors not appearing on macOS. Bruno Lopes and Lukas Oberhuber diagnosed and fixed these in revisions to 3.0, and these updates are included in the 3.0.2 release.

  • Different system themes had styles which our Default theme did not override, causing some UI glitches or odd coloring. Denis Rangelov worked to develop CSS rules to prevent these problems regardless of what system you’re on. Lukas Oberhuber fixed some additional macOS-specific issues with flyout menus on tool groups.

  • A patch to improve tablet support has been temporarily reverted. While it fixed an issue with detecting the eraser tip of some stylus, it seemed to cause a different issue with pressure sensivity on other tablets. We will review this patch and update it in a future release to fix the eraser bug without causing the other side effects.

  • Additional fixes were implemented throughout GIMP by Jehan, Jacob Boerema, Alx Sa, Idriss Fekir, Wyatt Radkiewicz, and Anders Jonsson.

We are continuing to review reports of bugs, UI glitches, and regressions, and are working on solutions for those. However, we believe GIMP 3.0.2 fixes some immediate problems for users, and we hope it makes using GIMP 3.0 a little smoother. Please continue to report any issues or feature request you have to our issue tracker so we’re aware of them!

macOS Plug-in Development

Lukas Oberhuber, Peter Kaczorowski, Dominik Reichardt, and others have been hard at work creating a new plug-in development package for macOS. Traditionally it has been difficult to develop GIMP plug-ins on macOS, so this is a great improvement! We’ll be updating our developer website soon with more information. For now, you can read the discussion on the tracking issue.

Windows Installer updates

Bruno Lopes has implemented more improvements to our Windows installer. It now sets up a Restore Point for system-wide installs. Also, if you uninstall GIMP via the installer, it will now prompt about removing your configurations. This allows you to make a truly clean uninstall and reinstall of GIMP if you installed as a normal user (not as an admin).

GEGL

GEGL received a small bugfix update as well. 0.4.58 includes a fix for Dither being applied to negative pixel coordinates, as well as additional translation updates.

Release Stats

Since GIMP 3.0.0, in the main GIMP repository:

  • 13 reports were closed as FIXED.
  • 15 merge requests were merged.
  • 54 commits were pushed.
  • 10 translations were updated: Bulgarian, Chinese (China), Dutch, Georgian, Icelandic, Slovenian, Spanish, Swedish, Turkish, Ukrainian.

20 people contributed changes or fixes to GIMP 3.0.2 codebase (order is determined by number of commits; some people are in several groups):

  • 7 developers to core code: Alx Sa, Jehan, Anders Jonsson, Denis Rangelov, Idriss Fekir, Jacob Boerema, Øyvind Kolås.
  • 6 developers to plug-ins or modules: Alx Sa, Jacob Boerema, Jehan, Jethro Beekman, Lukas Oberhuber, Wyatt Radkiewicz.
  • 10 translators: Luming Zh, Martin, Rodrigo Lledó, Yuri Chornoivan, Alexander Shopov, Anders Jonsson, Ekaterine Papava, Muhammet Kara, Nathan Follens, Sveinn í Felli.
  • 1 Theme designer: Alx Sa.
  • 1 Icon designer: Denis Rangelov.
  • 3 build, packaging or CI contributors: Bruno, Lukas Oberhuber, Jehan.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • GEGL 0.4.58 is made of 6 commits by 2 contributors: Øyvind Kolås, Kolbjørn Stuestøl.
  • ctx had 2 commits since 3.0.0 release by 1 contributor: Øyvind Kolås.
  • gimp-data had 2 commits by 2 contributors: Denis Rangelov, Jehan.
  • The gimp-macos-build (macOS packaging scripts) release had 13 commits by 2 contributors: Lukas Oberhuber, Bruno Lopes.
  • The flatpak release had 2 commits by 1 contributor: Bruno Lopes.
  • Our main website (what you are reading right now) had 50 commits by 5 contributors: Jehan, Bruno Lopes, Alx Sa, Michael Schumacher, lillolollo.
  • Our developer website had 18 commits by 3 contributors: Bruno Lopes, Jehan, Lukas Oberhuber.
  • Our 3.0 documentation had 22 commits by 8 contributors: Alan Mortensen, Andre Klapper, Jacob Boerema, Jordi Mas, Nathan Follens, Marco Ciampa, Tim Sabsch, Xavier Brochard.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Download Mirrors

Since the 3.0 news post, two new mirrors have been contributed by Shrirang Kahale:

  • Delhi, India
  • Mumbai, India

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Downloading GIMP 3.0.2

You will find all our official builds on GIMP official website (gimp.org):

  • Linux AppImages for x86 and ARM (64-bit)
  • Linux Flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • Microsoft Store for x86 and ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc).

What’s Next

Our immediate focus is fixing initial bug reports from users for GIMP 3.0. However, we are also starting to work on new features for the next minor release, GIMP 3.2. We look forward to talking more about that soon, but for now, you can check the roadmap to see where we’re headed!

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger!

GIMP 3.0 Released

At long last, the first release of GIMP 3.0 is here! This is the end result of seven years of hard work by volunteer developers, designers, artists, and community members (for reference, GIMP 2.10 was first published in 2018 and the initial development version of GIMP 3.0 was released in 2020). With GIMP 3.0 you can do more than ever before, more easily, more quickly!

GIMP 3.0: splash screen by Sevenix
GIMP 3.0 splash screen, by Sevenix (CC by-sa 4.0)

While we can’t cover every single change in GIMP from 2.10, we want to highlight some of the biggest ones as you start exploring this new release.

Highlights

  • Need to tweak a filter you applied hours ago? New in GIMP 3.0 is non-destructive editing for most commonly-used filters. See the changes in real time with on-canvas preview.

  • Exchange files with more applications, including BC7 DDS files as well as better PSD export and many new formats.

  • Don’t know how big to make your drawing? Simply set your paint tool to expand layers automatically as needed.

  • Making pro-quality text got easier, too. Style your text, apply outlines, shadows, bevels, and more, and you can still edit your text, change font and size, and even tweak the style settings.

  • Organizing your layers has become much easier with the ability to select multiple items at once, move them or transform them all together!

  • Color Management was again improved, as our long-term project to make GIMP an advanced image editor for all usages.

  • Updated graphical toolkit (GTK3) for modern desktop usage.

  • New Wilber logo!

GIMP 3.0: Wilber logo by Aryeom
New GIMP logo, Wilber, by Aryeom (CC by-sa 4.0)

Learn More

We’ve prepared release notes to go over all the changes, improvements, new features, and more. And if you’d like even more details, you can peruse the NEWS.pre-3.0 changelog for all 2.99 and 3.0 RC releases.

But to see it for yourself, you can get GIMP 3.0 directly from our Downloads page and try it out!

» READ COMPLETE RELEASE NOTES «

Other Releases in GIMPVerse

To accompany our release of GIMP 3.0.0, packagers should also be aware that we released:

We also advise all packagers to use the latest GTK version: GTK 3.24.49. It contains bug fixes for major issues (ranging from crashes to input devices’ grab issues, UI glitches with interfaces in RTL languages, and more…).

Enjoy GIMP 3.0!

GIMP 3.0 is a new milestone. The application is in active development and if you think this is awesome, wait until you see our plans for the future!

Download GIMP 3.0.0

Support GIMP development

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger!

Support us by
Donating

GIMP 3.0 RC3 Released

We’re excited to share the third release candidate of GIMP 3.0 for what (we hope) is the final round of community testing before the stable version! This release follows the recent GIMP 3 and Beyond talk by Jehan at FOSDEM 2025.

Important Bug Fixes and Changes

While resolving the last few major bugs for 3.0, we’ve made some changes that we feel need more community review. While trying out this release candidate, please keep an eye out for the following:

New GTK3 Version

Just in time for GIMP 3.0, a new version of GTK3 has been released! Among other changes, GTK 3.24.48 includes fixes for several bugs affecting GIMP with patches initially contributed by Jehan, such as a crash in Wayland when dragging layers and text glitches in certain widgets with Right-To-Left languages. We want to thank Carlos Garnacho and Matthias Clasen for their help on these respective patches.

GTK 3.24.48 also adds support to the version 2 of xdg_foreign for Wayland (v1 stays supported as fallback). Specifically the absence of this support was causing GIMP to freeze with certain actions on KDE/Wayland, which is now fixed.

As a consequence of these issues — some of them really making GIMP unstable on Wayland — we recommend packagers to update to the latest version of GTK3 when packaging our RC3. However, please let us know if you notice any regressions or other issues as a result of the new GTK3 version.

Image Graph Improvements

With non-destructive editing in GIMP, users can now stack multiple filters on top of each other. These filters usually work in high bit-depth format so image information is not lost. However, each filter’s output was converted to and from the original image’s bit-depth when stacked – so if the image was only 8-bit, a great deal of information was lost in these constant conversions. Jehan fixed this problem by only converting to the image’s format when the filter is meant to be merged in, rather than in non-destructive stacks. Since this is a big change in how filters work, we want to have more users test this change for any possible regressions.

Thread-safe Projection Changes

When changes are made to an image (such as painting), the image projection needs to be “flushed” to display new changes to the screen. Some aspects of this process were not “thread-safe”, which means that when your computer used multiple threads to speed up the work, they might conflict with each other and cause a crash. This was observed in our auto-expanding layer feature. Jehan fixed the function to be entirely thread-safe. However, changes to multi-threading can leave some well-hidden bugs, so more community testing would be helpful.

Private Procedures

The GIMP Procedural DataBase browser shows plug-in and script developers all the functions they can access. Until now, it also showed “private” functions that are only used internally. Jehan added a flag to hide these functions. We initially cast too wide of a net and hid some important public functions. While we fixed these instances, we’d like more review from the community to make sure we didn’t miss any mislabeled public functions.

Enhancements

While we are still in major feature-freeze until the stable release of GIMP 3.0, some small and self-contained enhancements have been made to plug-ins.

Script-fu

Filter API

The new (gimp-drawable-merge-filter) PDB call allows Script-fu writers to use labels to specify filter properties. This will give Script-fu users the same flexibility with calling and updating filters that C and Python plug-in developers have in the GIMP 3.0 API. As an example, here is a call to the Emboss filter:

(gimp-drawable-merge-new-filter mask-emboss "gegl:emboss" 0 LAYER-MODE-REPLACE 1.0 "azimuth" 315.0 "elevation" 45.0 "depth" 7 "type" "emboss")

You can see more examples in our Script repository.

New named-arguments syntax

In Script-Fu, all the functions generated from plug-ins’ PDB procedure must now be called with a brand new named-argument syntax, inspired by the Racket Scheme variant.

For instance, say your plug-in wants to call the Foggify plug-in, instead of calling:

(python-fu-foggify RUN-NONINTERACTIVE 1 (car (gimp-image-get-layers 1)) "Clouds" '(50 4 4) 1.0 50.0)

You should now call:

(python-fu-foggify #:image 1 #:drawables (car (gimp-image-get-layers 1)) #:opacity 50.0 #:color '(50 4 4))

This has a few advantages:

  • Much more self-documented calls, especially as some plug-ins have a lot of arguments (so we could end up having functions with a dozen of integers or floats and that was very confusing).
  • The order of arguments doesn’t matter anymore.
  • You can ignore arguments when you call them with default values.
  • It allows to improve plug-in procedures in the future by adding new arguments without breaking existing scripts.

This last point in particular is important, and orders of arguments did not matter anymore when calling PDB procedures from the C API, as well as all introspected bindings. Script-Fu was the only remaining interface we had which still cared about argument orders and numbers. This is not true anymore and is therefore a huge step towards a much more robust API for GIMP 3!

File Formats

All changes to image loading plug-ins are checked with the automated testing framework built by Jacob Boerema to prevent regressions.

PSD

In addition to bug fixes such as saving CMYK merged images properly, Jacob Boerema has added support for loading 16-bits-per-channel LAB PSDs. He also updated the PSD export dialog to use GIMP’s built-in metadata export features.

DDS

Much-requested support for loading DDS images with BC7 support has been implemented by CMYK Student. Jacob Boerema worked to fix compatibility with DDS files exported from older versions of GIMP.

AppImage is now Official

After nine months of incubation (the number is a mere coincidence 🙂), we present a “new” distribution format for Linux users: .AppImage. Initially we used it as an internal format for testing, as already covered in previous posts. Bruno Lopes‘ efforts have allowed us to improve the build process. We now feel confident with the generated AppImage and so we aim to make it official.

As an official upstream package, no fancy third party plug-ins or other arbitrary binaries that are not GIMP dependencies are added to “bloat” it. It is what some people call “vanilla” GIMP, a clean but complete GIMP for production (aka for general use).

Like any packaging format, it has its own characteristics and limitations. In the case of GIMP’s AppImage, included tools such as gimp-console* and gimp-debug-tool* require prior extraction of the .AppImage file with --appimage-extract command. Also, partly due to AppImage’s design, commands that points to $PWD will not work. These two are the only known feature limitations so far. So, if you find any others or even bugs, please report them on our tracker.

Miscellaneous

  • It is now easier to load images from Google Drive and other remote or cloud platforms without having to manually select a file format to try opening it with.

  • Our build process now generates additional icons with the -rtl extension, which are automatically used with Right-to-Left languages. An example of this is the left and right arrow icons; they now face the correct direction in both language types.

  • Plug-in developers no longer have to make custom file chooser buttons - GimpProcedureDialog now automatically creates them when a File type parameter is used. You can also specify whether the button is for opening or saving files and folders.

  • Rupert Weber continued his effects in cleaning up our BMP plug-in. Additionally, he has in-progress work to add support for importing color profiles in BMPs, which will hopefully be ready in a future release.

  • CMYK Student updated the ICNS plug-in with new support for ic05 icon types and ARGB icon formats. They also fixed a bug when loading older ICNS formats with no transparency mask. Lukas Oberhuber assisted with diagnosing and resolving a known bug in the ICNS format that caused our macOS icon to show garbled pixels at small sizes.

GEGL

The GEGL 0.4.54 release also contains some new enhancements and bugfixes. Thomas Manni updated the Noise Spread filter to prevent bugs when applied to empty layer groups. Jonny Robbie added new option and paper types to the Negative Darkroom filter, and optimized some floating point operations in GEGL as a whole.

Release Stats

Since GIMP 3.0 RC2, in the main GIMP repository:

  • 85 reports were closed as FIXED.
  • 56 merge requests were merged.
  • 335 commits were pushed.
  • 19 translations were updated: Basque, Bulgarian, Catalan, Chinese (China), Danish, Dutch, Finnish, Georgian, Italian, Norwegian Nynorsk, Persian, Portuguese, Slovak, Slovenian, Spanish, Swedish, Turkish, Ukrainian, Vietnamese.

33 people contributed changes or fixes to GIMP 3.0.0 RC3 codebase (order is determined by number of commits; some people are in several groups):

  • 13 developers to core code: Jehan, Alx Sa, Jacob Boerema, lloyd konneker, Anders Jonsson, Thomas Manni, Bruno, Daniele Forsi, Lloyd Konneker, Lukas Oberhuber, Rupert, cheesequake, Øyvind Kolås.
  • 10 developers to plug-ins or modules: Alx Sa, Jacob Boerema, Jehan, Rupert, lloyd konneker, Anders Jonsson, Bruno, Daniel Novomeský, Daniele Forsi, lillolollo.
  • 19 translators: Alan Mortensen, Alexander Shopov, Nathan Follens, Kolbjørn Stuestøl, Hugo Carvalho, Asier Sarasua Garmendia, Ngọc Quân Trần, Jordi Mas, Marco Ciampa, Sabri Ünal, Anders Jonsson, Danial Behzadi, Ekaterine Papava, Jiri Grönroos, Jose Riha, Luming Zh, Martin, Rodrigo Lledó, Yuri Chornoivan.
  • 1 Theme designer: Alx Sa.
  • 6 build, packaging or CI contributors: Bruno, Jehan, lloyd konneker, Alx Sa, Rupert, Jacob Boerema.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • GEGL 0.4.54 is made of 11 commits by 16 contributors: Øyvind Kolås, Alexander Shopov, Hugo Carvalho, JonnyRobbie, Alan Mortensen, Anders Jonsson, Asier Sarasua Garmendia, Bartłomiej Piotrowski, Jehan, Martin, Nathan Follens, Nils Philippsen, Rodrigo Lledó, Sam L, Thomas Manni, Yuri Chornoivan.
  • ctx had 233 commits since RC2 release by 1 contributor: Øyvind Kolås.
  • gimp-data had 6 commits by 4 contributors: Bruno, Jehan, Alx Sa, Andre Klapper.
  • gimp-test-images (new repository for image support testing) had 5 commits by 2 contributors: Jacob Boerema, Alx Sa.
  • The gimp-macos-build (macOS packaging scripts) release had 6 commits by 2 contributors: Lukas Oberhuber, Bruno.
  • The flatpak release had 12 commits by 3 contributors after RC2 release: Bruno Lopes, Jehan, Hubert Figuière.
  • Our main website (what you are reading right now) had 42 commits by 6 contributors: Jehan, Alx Sa, Bruno, Jacob Boerema, Andre Klapper, Petr Vorel.
  • Our developer website had 18 commits by 5 contributors: Jehan, Bruno, Lukas Oberhuber, Alx Sa, Anders Jonsson.
  • Our 3.0 documentation had 373 commits by 13 contributors: Andre Klapper, Kolbjørn Stuestøl, Nathan Follens, Jacob Boerema, Alan Mortensen, Yuri Chornoivan, Dick Groskamp, Jordi Mas, Alevtina Karashokova, Alx Sa, Anders Jonsson, Daniele Forsi, Hugo Carvalho.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Around GIMP

Download Mirrors

Since the 3.0RC2 news post, two new mirrors have been contributed:

  • Saswata Sarkar, Gurugram, India
  • Hoobly Classifieds, USA

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

How to Cite GIMP in Research

GIMP is often used in research, and therefore it is cited in various science publications. A researcher using GIMP for astronomical image processing approached us to know how to cite GIMP properly, even more as they say it is used to perform an important step in their algorithm.

Since it seems like an interesting question, we updated our “Citing GIMP and Linking to Us” page with a new “Citing GIMP in research” subsection containing the conclusion of this discussion.

In particular, a BibTex entry, for researchers using LaTeX to manage their bibliography, is available on this link to simplify your work. For instance, say you use this RC3 for your research, you may cite GIMP with this entry:

@software{GIMP,
    author = {{The GIMP Development Team}},
    title = {GNU Image Manipulation Program (GIMP), Version 3.0.0-RC3. Community, Free Software (license GPLv3)},
    year = {2025},
    url = {https://gimp.org/},
    note = {Version 3.0.0-RC3, Free Software}
}

Thank you to Cameron Leahy for this piece of BibTex code!

Downloading GIMP 3.0 RC3

You will find all our official builds on GIMP official website (gimp.org):

  • Linux AppImages for x86 and ARM (64-bit)
  • Linux Flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • MSIX package (GIMP Preview) for x86 and ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc).

What’s Next

We really appreciate all the community testing and feedback we’ve received during the last two release candidates! This will hopefully be the final release candidate before the stable 3.0 version. Our focus now is to finish resolving the few remaining bugs in our 3.0 milestone list, while keeping an eye out for any new reports resulting from the changes in RC3.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger!

GIMP team at FOSDEM 2025 (talk and keynote)

Several members of the GIMP team will be present next weekend (1st and 2nd of February 2025) at FOSDEM, a conference in Brussels, Belgium. This event describes itself this way:

FOSDEM is a free event for software developers to meet, share ideas and collaborate. Every year, thousands of developers of free and open source software from all over the world gather at the event in Brussels. You don’t need to register. Just turn up and join in!

GIMP team and ZeMarmot will be at FOSDEM'25 on Sunday, 2nd of February, for a talk and a keynote!

Needless to say, with over 8000 people expected, it is one of the biggest event in the Free Software ecosystem.

On Sunday morning, from 10 to 11:50 AM, we have 2 talks lined up, in the main track and biggest room (Janson in building J, with over 1400 people of capacity!), and one of these talks is in fact a keynote:

The keynote in particular will be a work-in-progress screening of ZeMarmot short animation film, which is worked on by 2 major contributors of GIMP (Jehan, maintainer, and Aryeom, designer for GIMP, and film director of ZeMarmot) within the non-profit production LILA which produces Libre Art movies.

Not only this, you may notice the presence of musicians, since the music will be played live by 3 musicians from the AMMD non-profit, producing Libre Art music, concerts and recording. The film is a short (about 10 minutes), then it will be followed by a talk presenting our work.

As for the GIMP talk, we will showcase the soon-to-be-released GIMP 3!

In the end of both talks, you will be able to ask questions.

We hope to see many people there. See you soon! 🤗

GIMP 3.0 RC2 Released 🎁

After the first round of community feedback, we’re happy to share the second release candidate for GIMP 3.0! People gave us really helpful feedback from the first release candidate and we were able to fix a lot of bugs.

It is our little under-the-tree 🎄 present for you all!

GIMP 3.0 RC2: splash screen
New release candidate splash screen, by Sevenix (CC by-sa 4.0) - GIMP 3.0 RC2

Important Bug Fixes

There have been a number of fixes since RC1. We want to highlight the most impactful bugs so that users are aware and can provide additional testing. For details on other bug fixes, please check our NEWS page in GitLab.

2.10 Settings Migration

During community testing, we discovered that user’s 2.10 settings were not being migrated to GIMP 3.0 due to some incorrect assumptions in the import code. Since most of the developers have been using GIMP 3.0 exclusively for some time, we did not notice this issue. The bug should now be fixed, so we ask for bug reports if any 2.10 preferences are not being imported correctly in RC2. Note that if you already used 3.0 RC1, you’ll need to delete those configurations first, as otherwise RC2 won’t try to import the 2.10 preferences (make sure you back up your settings of course!)

Windows Console

In the 2.99 development releases, the Windows versions automatically launched a console display in addition to GIMP itself. This is very useful for Windows developers to see debug messages, but the console was not intended to be shown during stable releases. Since we changed our build process to use Meson instead of Autotools, we learned we needed to make additional changes to stop the console from being displayed. This should be fixed now thanks to Jehan - if you still see the console on Windows, please file a new bug report!

Missing GUI Font issues on macOS

There has been a long-standing issue where some macOS users only saw “missing Unicode” symbols instead of menu text in GIMP (both in 2.10 and in 3.0). This was due to a bug in Pango, the library we use for text layouts. This was fixed with the recent Pango 1.55.0 release, so we encourage all third-party macOS packagers to update to this version as they build GIMP for distribution.

GIMP 3.0.0 RC2: official macOS package now has Pango with no broken fonts
If you had this issue of broken fonts on macOS (left), it is now fixed (right) - screenshots by reporters - GIMP 3.0.0 RC2

darktable Integration

After the 3.0 RC1 release, we received reports from some users that they still could not import and export images between GIMP and darktable. We worked with the darktable developers to iron out the remaining bugs, so integration between darktable 5.0.0 and GIMP 3.0 RC2 should be working for everyone now. However, please file a new bug report if you continue to have trouble connecting the two!

Enhancements

While the main focus of 3.0 RC2’s development was bugfixes and polish, some new features were also implemented.

GEGL Filter API

Many of the older API wrappers for GEGL operations were removed in RC1. While this reduced technical debt, it also caused issues for many third-party plug-in and script developers who wanted to port their plug-ins to 3.0. While our initial plan was to implement the new public filter API after the 3.0 release, the feedback from the community convinced us to add it in for 3.0 RC2.

Applying filters through libgimp 3.0.0 API (Script-fu et al.) - GIMP 3.0.0 RC2

Jehan‘s work allows developers to apply filter effects either immediately or as a non-destructive effect. You can see examples of how to do this in C, Python, and Script-Fu in the merge request, or by looking up gimp-drawable-filter in the Procedure Browser inside GIMP. We’ve also begun using the filter API in our Python scripts to automatically create blurred background effects for the Windows installer, and with this same API in C, Alx Sa added support for importing Photoshop’s legacy Color Overlay layer style.

We ask for feedback and bug reports from plug-in and script authors who utilize the new filter API in their work! We have more updates planned for it in GIMP 3.0 as well.

Layer blend spaces and compositing in XCFs

Discussions between color science experts Elle Stone and Øyvind Kolås revealed another area that needed improvement as part of our Color Space Invasion project. Specifically, images with color profiles that have non-perceptual TRCs might not be rendered correctly when set to certain layer modes.

Øyvind has implemented a correction for this problem by adding proper perceptual space as default to specific layer modes. While we believe this enhancement should not impact older XCF files, we of course want to hear from you if there are any backwards compatibility issues with 3.0 RC2!

Packages

AppImage

Thanks to the continued efforts of Bruno Lopes and with assistance from Samueru and the AppImage community, our experimental AppImage now works on most Linux distros. We want to encourage more testing of it, in hopes that we can offer it as another Linux release in addition to our Flatpak. You can see instructions to install experimental AppImage packages from our development download page.

Flatpak

Our nightly flatpak has now a dedicated App-ID org.gimp.GIMP.Nightly. This mostly means that it can be installed side by side with the stable flatpak while both are visible in your menus (no need to select which version is to be shown with flatpak make-current anymore).

Yet it also means that anyone who had the nightly flatpak until now won’t see any update coming anytime soon. In order to continue using the nightly flatpak, uninstall the existing one and install the new one with these commands:

flatpak uninstall org.gimp.GIMP//master
flatpak install https://nightly.gnome.org/repo/appstream/org.gimp.GIMP.Nightly.flatpakref

⚠️ Reminder: the nightly flatpak is current development code as it happens in source repository. At times, it may even be very broken or render your project files invalid. We do not recommend it for production! Use this version to help us debugging by reporting issues or if you really like risks to test latest features.

BMP Plug-in Improvements

New contributor Rupert Weber has been busy since the last update with more updates to our BMP plug-in. A few highlights of their work:

  • BMPs are now imported losslessly in their original precision, rather than being converted to 8 bit integer precision.
  • The plug-in now supports loading BMPs with RLE24 and Huffman compression.
  • We now load BMPs in chunks rather than trying to load the entire image at once. Related work also allows us to load much larger BMPs.
  • Rupert has also done a lot of code clean-up and maintenance, to make the plug-in easier to work on in the future.

Assorted Updates

  • Jehan made some quality of life improvements to the Python console. You can now use Ctrl+R and Ctrl+S shortcuts to search through your command history, and Page Up and Page Down now let you scroll history in addition to the Up and Down arrow keys.
History search in Python Console with Ctrl-R - GIMP 3.0 RC2
  • Alx Sa implemented loading CMYK PAM files in the PNM plug-in.

  • On Windows, we’ve also added the ability to open images through Windows Shortcuts (.lnk files) directly from the file chooser dialog. This is also work by Alx Sa.

  • More tweaks and improvements have been made to the theme. In particular, the slider styling has been substantially improved after feedback and work from Denis Rangelov. Denis also made new icons for the Navigation Dockable Dialogue, replacing duplicates with distinct symbols. Anders Jonsson has also been reviewing the theme and removing some workarounds which were required in GIMP 2.10, but no longer needed with our new 3.0 themes.

  • Idriss Fekir has made improvements to our XCF font loading code, to improve compatibility when importing older XCF files.

Overview of Changes since 2.10

For those who haven’t followed GIMP’s development as closely, these news posts only cover incremental changes since the last release. They do not list every change or improvements made for GIMP 3.0 - that would be a very long article indeed!

While we’ll have full release notes for the final 3.0, we thought it’d be helpful to summarize a few of the major changes made during the 2.99 development process:

  • The initial work to port GIMP to GTK3 occurred in 2.99.2. This release also introduced multi-layer selections, along with initial API changes and color space management improvements.
  • More API updates were made in 2.99.4, including the ability to auto-generate plug-in UIs based on user input. Various usability improvements were also made, along with the introduction of the experimental Paint Select tool.
  • 2.99.6 brought more API updates and internal work. More user-facing features included the ability to place guides outside the canvas, better touchpad support, and more support for different PNG color metadata.
  • The development pipeline was improved significantly in 2.99.8, allowing for faster build times and automation. Support for new file formats like PSB and JPEGXL were added in this release, along with Windows Ink tablet support.
  • 2.99.10 introduced “layer sets”, replacing the older concept of linked layers. Painting dynamics were streamlined in this release, along with the first version of the Welcome dialog.
  • Early-binding CMYK support was implemented in 2.99.12. The CSS GUI themes also received a major overhaul in this release, along with more file format supports and major improvements to Script-Fu.
  • 2.99.14 saw the introduction of non-destructive outlines for the text tool. The alignment tool was also revised, theme and icon scaling were improved, and floating selections were largely replaced in the workflow.
  • The GTK3 port was finally completed in 2.99.16. The / search pop-up was updated to show the menu path for all entries, as well as making individual filters searchable.
  • Non-destructive filters were first introduced in 2.99.18. Major color management improvements were also made, and new auto-expanding layer boundary and snapping options were also implemented.

GEGL

Similar to GIMP, there’s a number of bugfixes for the GEGL 0.4.52 release. Øyvind Kolås has fixed some generic “Aux input” labels to be more meaningful - this will be visible in GIMP’s filters as well. He also improved the accuracy of some filter’s color processing. Longtime contributor Thomas Manni also fixed crashes when some filters were run on very small layers.

Release Stats

Since GIMP 3.0 RC1, in the main GIMP repository:

  • 73 reports were closed as FIXED.
  • 71 merge requests were merged.
  • 277 commits were pushed.
  • 18 translations were updated: Bulgarian, Catalan, Chinese (China), Chinese (Taiwan), Danish, Finnish, Georgian, Icelandic, Italian, Latvian, Lithuanian, Norwegian Nynorsk, Persian, Portuguese, Russian, Slovenian, Swedish, Ukrainian.

35 people contributed changes or fixes to GIMP 3.0.0 RC2 codebase (order is determined by number of commits; some people are in several groups):

  • 12 developers to core code: Jehan, Alx Sa, Michael Schumacher, Anders Jonsson, Lloyd Konneker, Øyvind Kolås, Idriss Fekir, Andre Klapper, Jacob Boerema, Michael Natterer, Rupert Weber, Thomas Manni.
  • 11 developers to plug-ins or modules: Jehan, Lloyd Konneker, Alx Sa, Rupert Weber, Daniel Novomeský, Jacob Boerema, Aki, Bruno, Ryan Sims, Simon Munton.
  • 19 translators: Alan Mortensen, Cheng-Chia Tseng, Kolbjørn Stuestøl, Rūdolfs Mazurs, Jiri Grönroos, Sveinn í Felli, Alexander Shopov, Aurimas Černius, Marco Ciampa, Danial Behzadi, Hugo Carvalho, Jordi Mas, Anders Jonsson, Ekaterine Papava, Julia Dronova, Luming Zh, Martin, Michael Schumacher, Yuri Chornoivan.
  • 2 Theme designers: Alx Sa, Anders Jonnson.
  • 2 documentation contributors: Jehan, Bruno.
  • 5 build, packaging or CI contributors: Bruno, Jehan, lloyd konneker, Alx Sa, Jacob Boerema, Rupert Weber.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • GEGL 0.4.52 is made of 31 commits by 16 contributors: Øyvind Kolås, Sam L, Thomas Manni, lillolollo, Alan Mortensen, Anders Jonsson, Ekaterine Papava, Hugo Carvalho, Jordi Mas, Juliano de Souza Camargo, Kolbjørn Stuestøl, Lukas Oberhuber, Luming Zh, Marco Ciampa, Martin, Yuri Chornoivan.
  • ctx had 48 commits since RC1 release by 1 contributor: Øyvind Kolås.
  • gimp-data had 6 commits by 5 contributors: Anders Jonsson, Jehan, Sevenix, Alx Sa and Denis Rangelov.
  • gimp-test-images (new repository for image support testing) had 2 commits by 1 contributor: Rupert.
  • The gimp-macos-build (macOS packaging scripts) release had 5 commits by 1 contributor: Lukas Oberhuber.
  • The flatpak release had 4 commits by 2 contributors: Bruno Lopes, Jehan.
  • Our main website (what you are reading right now) had 29 commits by 3 contributors: Jehan, Alx Sa, Andrea Veri.
  • Our developer website had 16 commits by 2 contributors: Jehan, Bruno Lopes.
  • Our 3.0 documentation had 157 commits by 10 contributors: Andre Klapper, Kolbjørn Stuestøl, Jacob Boerema, Alan Mortensen, Anders Jonsson, Marco Ciampa, Jordi Mas, Yuri Chornoivan, Alx Sa, Jiri Grönroos.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Around GIMP

Download Mirrors

GNOME has moved away from using mirrors during their latest infrastructure update. As our download mirrors are hosted by them, we were asked if we wanted to move as well. As a community project, we value everyone who contributes a mirror to make GIMP more accessible in their area. Therefore, we have decided to stay with using mirrors to distribute GIMP.

If you are interested in contributing a mirror for your region, here is the new procedure:

How to be an official mirror (procedure update)

  1. Create a mirror request on the gimp-web tracker
  2. Tell us about why you want to mirror GIMP, which other Free Software you already mirror, what is your setup, the server’s location…
  3. Tell us about you: are you an organization or an individual? Give us the specific name and URL to be shown in the mirror sponsor list.
  4. Once we are done verifying your organization, rsync credentials will be exchanged securely, allowing you to sync your mirror with the source server
  5. There is nothing to do in particular to appear on the Sponsors page which will be updated regularly through scripts. Yet it may take a few days or even weeks at times. So don’t worry if your organization name does not appear immediately!

🛈 We programmatically check at random intervals that mirrors are updated quickly enough and that the data match for obvious security reasons.

Mirror changes

Also, since the 3.0RC1 news post, a new mirror has been contributed:

  • Sahil Dhiman, Mumbai, India

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Sponsoring GitLab Runner

GIMP’s code repository is also hosted on GNOME’s GitLab platform. Andrea Veri asked if we would be able to sponsor a runner on the platform, which allows any project on the platform to test building their software before, during, and after code changes are made. After a vote by GIMP’s committee, we agreed and are now the sponsors of an x86 CI/CD runner!

Downloading GIMP 3.0 RC2

You will find all our official builds on GIMP official website (gimp.org):

  • Linux flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • MSIX package (GIMP Preview) for x86 and ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc).

🛈 Notes:

  • The 2 macOS DMG packages will likely be late as we are waiting for Apple update’s validation by the GNOME Foundation before being able to sign our packages.
  • The MSIX package takes usually a few business days of validation by Microsoft.

What’s Next

Thanks to the huge amount of reports we got for our first release candidate, we are able to present you this second version which is all the more robust. As you saw, a few additional surprises 🎁 came together with bugfixes, in particular the new filter API, which triggered support of PSD legacy Color Overlay import, improved blend modes and compositing, and more. We thought that it was worth breaking the feature freeze for these changes and that this will make all the difference!

With this second release candidate, we are closer than ever to actual GIMP 3.0.0. As usual, we are looking forward to any new community issue reports allowing us to finalize the 3.0.0 release! 🤗

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

🎅🎄🎉 Oh and of course, the whole team wishes you all a happy holiday season! 🥳🥂🎆

GIMP 3.0 RC1 Released

We are very excited to share the first release candidate for the long-awaited GIMP 3.0! We’ve been hard at work since our last development update to get this ready, and we’re looking forward to everyone finally being able to see the results.

GIMP 3.0 RC1: splash screen
New release candidate splash screen, by Sevenix (CC by-sa 4.0) - GIMP 3.0 RC1

So, what exactly is a “release candidate” (RC)? A release candidate is something that might be ready to be GIMP 3.0, but we want the larger community to test it first and report any problems they find. If user feedback reveals only small and easy to fix bugs, we will solve those problems and issue the result as GIMP 3.0. However, we hope and expect a much larger audience to try out 3.0 RC1 - including many people who have only been using 2.10 up until now. If larger bugs and regressions are uncovered that require more substantial code changes, we may need to publish a second release candidate for further testing.

New Graphics

Wilber Icons

The current Wilber logo was created by Jakub Steiner for GIMP 2.6 in 2008! While it is still a fantastic logo, design trends have changed a bit in the last sixteen years and Wilber’s more detailed appearance sticks out on modern desktops.

Therefore in collaboration with other contributors, Aryeom developed our new logo for GIMP 3.0!

New Wilber Icon
New Wilber Icon, by Aryeom (CC by-sa 4.0)

If you’re interested in learning more about the design choices, usage, and design variants, please check out our logo guide. We also documented the history of the Wilber logo.

Splash Screen

Our wonderful new splash screen (shown at the top of this news post) was created by longtime contributor and artist Sevenix! You can see more of their work on their personal art page.

Going forward, we plan to change splash screens much more frequently to show off all the many kinds of art made with GIMP (photography, illustration, design…). Related to this, we have created an updated splash screen archive to highlight the work of current and previous splash screen artists.

Legacy Icon Theme Improvements

One of the major improvements from the GTK3 port is that the vector UI icons now scale more cleanly based on your preference settings. Our Legacy icon theme was mainly raster PNGs however, so it could not take advantage of the GTK3 scaling system. Contributor Denis Rangelov took on the extensive challenge of recreating the Legacy tool icons as SVGs. Now both of GIMP’s icon themes look great on HiDPI screens!

Vectorized Legacy Icon theme
Scaled Legacy Icon Theme Tool Icons by Denis Rangelov (CC by-sa 4.0)

The work is not finished, as many icons are still non-scalable and some icons are still missing. Denis has expressed interest in continuing to improve the Legacy icon theme, so we hope to rename it as Classic when this project is achieved, to show it is now well-maintained.

Color Space Invasion

One of the key changes in 2.99.18 was massive improvements to color management in GIMP. As this work was not fully finished in 2.99.18, it was a major blocker of the 3.0 RC1 release.

Since that release, we have found and fixed a number of bugs and missed areas that needed to be color space aware. We have also reviewed reports by color expert Elle Stone to make sure that the color values shown by GIMP are as accurate as possible. At the same time, it’s very important to ensure that XCF project files created in GIMP 2.10 and before will render the same when opened in 3.0. For instance, one of the first Google logos was created in GIMP - and if you open the original XCF project file in GIMP 3.0 RC1, it still appears the same as it did when it was created in 1998! Therefore, we have thoroughly reviewed the various layer modes to ensure that commitment to compatibility is retained for this release.

Color space invasion is a long-running project, which will continue after GIMP 3.0 is released.

Public API Finalization

Another task that had to be finished before the 3.0 release was finalizing the public API. Since our last news post, we finished the remaining major changes - replacing all instances of our custom GimpRGB color structures with the better color-managed GeglColor, and improving our array format so the number of elements does not have to be specified separately. This work was a long process by Jehan and Lloyd Konneker, with a great deal of bugtesting and feedback from Anders Jonsson.

In addition, a number of functions have been added, renamed, or removed from the public API compared to 2.10. For instance, an older patch by Massimo Valentini adds gimp-context-get-emulate-brush-dynamics and gimp-context-set-emulate-brush-dynamics, which allows script and plug-in developers to use the Emulate Paint Brush Dynamics setting when painting. On the other hand, the various gauss functions were all consolidated into a single function, plug-in-gauss. While this change will require some updates in existing scripts, developers now have more direct control over the Gaussian Blur effect rather than relying on hidden preset values.

Since the API is now stable, plug-in and script developers can begin porting their 2.10 scripts based on this release. You can find initial API documentation on our developer site. We intend to add more tutorials and porting guides here during the release candidate phase. We also encourage you to check out the Script-fu and Python plug-ins in our repository to see working examples of the new API.

Non-Destructive Editing Updates

Since our last update, we have continued to make improvements and bug fixes to our non-destructive filter code. Many of these issues were reported by Sam Lester during the developing and testing of his third-party GEGL filters.

While non-destructive filters have been a very popular addition to GIMP 3.0, some early adopters have requested that we provide a way to return to the original destructive workflow. Therefore, we have added an optional “Merge Filters” checkbox at the bottom of NDE filters. If enabled, the filter will be immediately merged down after it is committed. Note that filters can not be applied destructively on layer groups – in those cases, the option to merge filters is not available.

Example of Merge Filter checkbox
Example of Filter with “Merge Filter” checkbox - GIMP 3.0 RC1

On a related note, Jehan also implemented storing version of filters in GIMP’s XCF project files. This will allow us to update filters in the future without impacting how older project files look when they’re opened. Additional work will be needed in GEGL to fully implement this feature, but that can be done after 3.0 without impacting existing project files.

User Interface

GIMP 3.0 RC1 contains several updates to the user interface. For example, more aspects of the GUI are now able to take advantage of the multi-select features implemented by Jehan in earlier versions of 2.99.

We also restored the ability to use the mouse scrollwheel to flip through the different dockable dialogue tabs. This feature was built into GTK2 but removed in GTK3. Per user request, we reimplemented this feature in GIMP itself based on a similar implementation in geany.

During development, we received a report that the scrolling credits in our About Dialog could cause discomfort due to its motion. As a result we’ve added code to check your operating system’s “Reduced Animation” setting and turn off those animations in GIMP per your preference settings.

Plug-ins

As we have been in a feature freeze since the last release of 2.99, most of the changes to plug-ins have been API updates and bug fixes (some of them for issues that were quite old). However, a few smaller enhancements have been implemented.

BMP

The BMP format now supports 64 bits per pixel images. New contributor Rupert Weber assisted us with adding support for importing this BMP format correctly. They have also submitted patches with more fixes to our BMP plug-in and testing pipeline.

TIFF

Since GIMP 2.99.16, we’ve been able to import TIFFs with Photoshop format layers. However, the Alias/Autodesk Sketchbook program created their own standard to save layers which was not compatible. Since this was marked as a bug in our issue tracker, we added support for loading layers from TIFFs saved in Sketchbook format as well.

GEGL and babl

Both GEGL and babl have seen a number of updates since their last releases in February.

GEGL 0.4.50 introduces a number of new filters created by Sam Lester.

  • Inner Glow

  • Bevel

  • GEGL Styles

*GEGL Styles* effect - GIMP 3.0 RC1

These can all be accessed via the GEGL Operations tool, or by searching for them with the / search action shortcut.

Øyvind Kolås made a number of bug fixes and improvements to the stability of GEGL. Several changes were also made related to the color space invasion in GIMP, such as adding convenience methods for getting and setting GeglColors in HSV(A) and HSL(A) color models, implemented by Alx Sa. Jacob Boerema and his GSoC student Varun Samaga B L merged a number of improvements to the OpenCL version of filters. While GIMP still does not enable OpenCL by default, their work brings us much closer to being able to so. We will discuss these improvements in a future news post.

babl 0.1.110 also received some contributions during this cycle. Jehan implemented new conversion processes between RGB and HSL color models, which improves the performance of a number of filters compared to GIMP 2.99.18. He also fixed certain parts of the code that behaved differently depending on whether your processor supported SSE2. Øyvind Kolås improved the accuracy of several sections of code when converting from floating point to integer values. Additionally, Lukas Oberhuber found and fixed a memory leak and Jacob Boerema fixed an issue where images with NaN could cause a crash.

Release Stats

Since GIMP 2.99.18, in the main GIMP repository:

  • 384 reports were closed as FIXED.
  • 442 merge requests were merged.
  • 1892 commits were pushed.
  • 31 translations were updated: Basque, Belarusian, Brazilian Portuguese, British English, Bulgarian, Catalan, Chinese (China), Chinese (Taiwan), Danish, Dutch, Galician, Georgian, German, Greek, Hungarian, Icelandic, Italian, Korean, Latvian, Norwegian Nynorsk, Polish, Portuguese, Russian, Serbian, Serbian (Latin), Slovenian, Spanish, Swedish, Turkish, Ukrainian, Vietnamese.

72 people contributed changes or fixes to GIMP 3.0.0 RC1 codebase (order is determined by number of commits; some people are in several groups):

  • 27 developers to core code: Jehan, Alx Sa, Jacob Boerema, bootchk, Anders Jonsson, Øyvind Kolås, Cheesequake, cheesequake, Niels De Graef, Idriss Fekir, Simon Budig, lillolollo, lloyd konneker, Andre Klapper, Andrzej Hunt, Bruno, Joachim Priesner, Nils Philippsen, Alfred Wingate, Bruno Lopes, Elle Stone, Kamil Burda, Luca Bacci, Mark Sweeney, Massimo Valentini, Oleg Kapitonov, Stanislav Grinkov, megakite.
  • 15 developers to plug-ins or modules: Alx Sa, Jehan, lloyd konneker, bootchk, Jacob Boerema, Anders Jonsson, Nils Philippsen, Andrzej Hunt, Andre Klapper, Rupert, Bruno Lopes, Daniel Novomeský, Mark Sweeney, Stanislav Grinkov, lillolollo.
  • 42 translators: Martin, Yuri Chornoivan, Luming Zh, Rodrigo Lledó, Kolbjørn Stuestøl, Ekaterine Papava, Cheng-Chia Tseng, Sabri Ünal, Marco Ciampa, Tim Sabsch, Jordi Mas, Alexander Shopov, Anders Jonsson, Alan Mortensen, Asier Sarasua Garmendia, Sveinn í Felli, Andi Chandler, Balázs Úr, dimspingos, Juliano de Souza Camargo, Ngọc Quân Trần, Vasil Pupkin, Alexandre Prokoudine, Bruce Cowan, Jürgen Benvenuti, Nathan Follens, Милош Поповић, Balázs Meskó, Christian Kirbach, Daniel, Emin Tufan Çetin, Fran Dieguez, Guntupalli Karunakar, Hugo Carvalho, Jehan, Philipp Kiemle, Piotr Drąg, Robin Mehdee, Rūdolfs Mazurs, Seong-ho Cho, Víttor Paulo Vieira da Costa, ayesha akhtar.
  • 7 resource creators (icons, themes, cursors, splash screen, metadata… though a good part of there were moved to gimp-data repository): Alx Sa, Jehan, Bruno Lopes, Anders Jonsson, Jacob Boerema, bootchk, nb1.
  • 10 documentation contributors: Jehan, Bruno, Lloyd Konneker, Alx Sa, Bruno Lopes, Anders Jonsson, bootchk, Lukas Oberhuber, Andre Klapper, Jacob Boerema.
  • 11 build, packaging or CI contributors: Bruno Lopes, Jehan, bootchk, Alx Sa, lloyd konneker, Jacob Boerema, Niels De Graef, Alfred Wingate, Lukas Oberhuber, Michael Schumacher, Anders Jonsson.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • babl 0.1.110 is made of 22 commits by 7 contributors: Øyvind Kolås, Jehan, Bruno Lopes, Anders Jonsson, Biswapriyo Nath, Jacob Boerema, Lukas Oberhuber.
  • GEGL 0.4.50 is made of 204 commits by 33 contributors: Øyvind Kolås, Sam Lester, Martin, Varun Samaga B L, Yuri Chornoivan, Luming Zh, Rodrigo Lledó, Jehan, Jordi Mas, Anders Jonsson, Kolbjørn Stuestøl, Marco Ciampa, Sabri Ünal, Bruno Lopes, Alan Mortensen, Asier Sarasua Garmendia, Ekaterine Papava, Bruce Cowan, Lukas Oberhuber, Tim Sabsch, psykose, Alexandre Prokoudine, Alx Sa, Andi Chandler, Andre Klapper, ArtSin, Daniel Șerbănescu, Jacob Boerema, Joe Locash, Morgane Glidic, Niels De Graef, dimspingos, lillolollo.
  • ctx had 616 commits since 2.99.18 release by 2 contributor: Øyvind Kolås, Ian Geiser.
  • gimp-data (new repository holding images, splashes, icons and other binary data for the software) had 76 commits by 7 contributors: Jehan, Aryeom, Bruno, Alx Sa, Denis Rangelov, Anders Jonsson, Bruno Lopes.
  • The gimp-macos-build (macOS packaging scripts) release had 41 commits by 3 contributors: Lukas Oberhuber, Bruno Lopes, Jehan.
  • The flatpak release had 38 commits by 4 contributors: Bruno Lopes, Jehan, Hubert Figuière, Will Thompson.
  • Our main website (what you are reading right now) had 60 commits since 2.10.38 release by 5 contributors: Jehan, Alx Sa, Andre Klapper, Bruno Lopes and Denis Rangelov.
  • Our developer website had 33 commits since 2.10.38 release by 5 contributors: Bruno Lopes, Jehan, Lloyd Konneker, Alx Sa, Lukas Oberhuber.
  • Our 3.0 documentation had 928 commits since 2.99.18 release by 14 contributors: Andre Klapper, Kolbjørn Stuestøl, Jacob Boerema, Alan Mortensen, Yuri Chornoivan, Jordi Mas, Marco Ciampa, Anders Jonsson, Sabri Ünal, dimspingos, Alx Sa, Andi Chandler, Daniel, Nathan Follens.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Future changes to release process

We are well aware that the path to GIMP 3.0 has been a long one, and GIMP 2.10 users have not had access to all of the great new features we’ve been working on over the years. Going forward, we are restructuring our development process to decrease time between releases. As briefly mentioned in our post 3.0 roadmap, we want to focus on smaller, feature-focused releases. This means that we are aiming for GIMP 3.2 to come out within a year after the final release of 3.0, rather than in 2050 as is often joked! Micro releases with bug fixes may happen in-between.

Smaller releases with few “big” features will also allow us to more thoroughly test each change, further improving the stability of each release. During the 3.0 development process, developers like Jacob Boerema, Lloyd Konneker, Bruno Lopes, and Jehan have been creating and improving our automated testing processes to further catch and identify bugs early. We will talk more about these improvements in future news posts.

Around GIMP

Download Mirrors

Since our last news, 8 new mirrors have been contributed to GIMP by:

  • Sahil Dhiman, India
  • FCIX, in the Dominican Republic, Australia and 2 in the USA.
  • Taiwan Digital Streaming Co., Taiwan
  • OSSPlanet, Taiwan
  • Shrirang Kahale, India

This brings us to a total of 56 mirrors from all over the world!

World Map of GIMP Mirror locations
Map of GIMP Mirrors worldwide, generated from MirrorBits

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Platform Changes

Bruno Lopes has truly taken the lead to improve our build and packaging process on multiple platforms.

Over the summer, he created an experimental AppImage build (as detailed in a prior news post). If you are interested in improving it further and hopefully making it available as a standard download, please get in touch! Bruno has also created flatpak build scripts to make the process of creating your own GIMP flatpak much easier.

A lot of work was done to improve our presence on the Microsoft Store for 3.0. Our GIMP 2.10 app was not fully integrated into the store platform due to certain limitations - it is really just a wrapper for our existing GIMP installer. Therefore it did not automatically update for users and it was not possible to automate installations with tools like Microsoft Intune. Thanks to a lot of effort on Bruno’s part, we will have a new GIMP app in the Microsoft Store which resolves these issues (and many others) for the final GIMP 3.0 release. From now, we also have a separate GIMP (Preview) which allows you to install development versions in a similar manner to the Beta flatpak on Linux. You can try it out at this Microsoft Store link.

(For technical and maintenance reasons described here, 32-bit binaries will not be available in the new MSIX packages of GIMP, which unfortunately removes support for the legacy TWAIN plug-in in x64 and arm64 packages used for quick scanning. If you depend on these, the .exe installer still supports 32-bit processors. However, the support for this architecture is planned to be dropped in the future)

Additionally, the standard Windows installer has been updated to a more modern design. It also lets you install individual language packages and lets you start up GIMP immediately after the installer is finished. For the more technically inclined, the Windows build scripts have also been ported to use PowerShell, and the cross build scripts can now run locally.

Due to changes and updates in our software building infrastructure, we’ve had to raise the minimum OS requirement for MacOS to Big Sur (MacOS 11).

GNOME Foundation fiscal host agreement

Earlier this year, the GNOME Foundation announced a fiscal sponsorship agreement with GIMP. This is all thanks to a lot of hard work by Jehan over many, many months. Our goals with this agreement are to support stable funding for developers interested in working on GIMP for a longer term through grants, and to provide easier ways for people to contribute to GIMP’s development. This is still a work-in-progress, so we will make a more detailed announcement once everything has stabilized.

Translations

Thanks to volunteer translators, we now have a Bengali language translation of GIMP! If you are interested in translating GIMP into your own language or assisting with an existing translation, you can find out how here.

Downloading GIMP 3.0 RC1

You will find all our official builds on GIMP official website (gimp.org):

  • Linux flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • MSIX package (GIMP Preview) for x86 (64-bit only) and ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s Next

We are now entering the last stage of this major release: candidates for the final version! Though one can always hope to get a RC right the first time, experience tells us that this RC1 — which is the result of more than 6 years of work — will likely have problems, bugs, probably nasty crashes. This is where we need you all! We rely on everyone to find and report issues so that the actual 3.0.0 release can really be considered stable. 🤗

Some small bugs may be considered secondary (though we still welcome reports for all bugs, even smaller ones!), because perfection barely exists in software. There are other things in particular we really want to catch, such as:

  • any inconsistency or problem in the API (it will stay stable for the whole v3 series, so if there are problems to find, it’s now; we want a robust plug-in framework);
  • bugs when reading or rendering existing XCF made by former stable versions of GIMP;
  • crashes;
  • regressions;
  • proper migration of configuration from previous versions.

We are not giving out a date estimate for the actual 3.0.0 release, firstly because we can’t know for sure, secondly because each time we do, news outlets seem to just skim every warning out of our text and transform our words into unbreakable promises. Just know that we also want it to happen as soon as possible, i.e. when we can consider our software to feel stable enough.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

Development Update: Closing In on the 3.0 Release Candidate

This is a short development update on our progress towards the first release candidate for GIMP 3.0. We recently reached the string freeze milestone. What this means is that there will be no more changes in user-facing text (like GUI labels and messages) so that translators can work on the final translations for the 3.0 release.

Progress on completing the blocking issues for 3.0 slowed over the summer due to the maintainer and some of the main developers falling ill after the Libre Graphics Meeting conference. This is why we are “late” compared to our original estimated timelines. Thankfully everyone’s feeling much better now, and work has resumed in earnest! As of this writing, we’re currently at 96% completion for the 3.0 RC1 milestone, with 11 issues remaining.

We’ll have a lot more to share in the news post for GIMP 3.0 RC1. However, here are a few highlights to show what we’ve been working on the last few months:

API

Finalizing the API is a crucial task for GIMP 3.0. As we’ve added new features and improved existing ones during development, we’ve needed to make “breaking” changes to the public API. This means that if a third-party developer ported their 2.10 plug-in or script to use GIMP 2.99.16’s API, it might not work with the 2.99.18 API due to further changes. Once 3.0 is released however, any function that’s in the public API must continue to work for all future releases of GIMP 3. So we have to get it right before the first 3.0 release!

Most of the API changes are invisible to non-developers, so we won’t detail all of them here. However, we’d like to share a few to illustrate the on-going work:

Plug-in GUI Creation

Over several past releases, our internal plug-ins have been ported to the new GimpProcedure and GimpProcedureDialog API. This update automatically saves the last settings used, letting users reset to it or to the “factory default” values whenever they like. The GimpProcedureDialog API also allows developers to automatically create a GUI based on the settings they defined.

Until recently though, this GUI creation feature was only fully available to C plug-ins – other plug-in languages like Python couldn’t generate certain widgets such as dropdown boxes and radio buttons. Since the 2.99.18 release however, we’ve been able to make the full API available to all supported plug-in languages. Python plug-in developers can see more examples of how to use this new API in the Python plug-in section of our repository. Once the API is fully stabilized, we’ll update our developer website with more tutorials on how to use this and other APIs in your plug-ins.

Example of generated dialog (Palette Sort Python plug-in)
Example of generated dialog (Palette Sort Python plug-in)

Script-Fu Updates

Lloyd Konneker has been organizing and implementing many improvements to our Script-fu code library. For script developers, script-fu-register has been deprecated and replaced with two new functions: script-fu-register-procedure for general scripts and script-fu-register-filter for image-processing scripts. These two new script functions also use the GimpProcedureDialog API, so script developers will have access to the same automated GUI creation mentioned in the last section. You can look at our in-progress guide to see how you can use these new features when porting your 2.10 plug-in scripts.

Export Options

A long standing feature request has been exporting images with different settings, while leaving the original image unchanged. For instance, letting users export an image in several different sizes.

The new GimpExportOptions class sets the groundwork for us to implement this in future 3.x releases. We’ve simplified how images are exported using the plug-in API, and moved much of the export settings code to the GimpExportOptions parameter. This change will allow us to add new types of export settings and features after 3.0 without plug-in developers having to make changes to their own code. As a nice side-effect, this work also fixed some existing inconsistencies between exporting an image from GIMP’s GUI and exporting from a script.

Color Space Invasion

The second remaining area of work for 3.0 is finishing the color space invasion project. Our goal is for the color space and color profile information to be associated with the pixels in all aspects of GIMP, from the canvas to the GUI and everywhere in-between. This is important for artists to keep colors consistent on all devices and monitors they use. The first half of this work was completed by Jehan in the 2.99.18 release. Since then we have been fixing the inevitable bugs from such a large change while making the rest of GIMP color-space aware. This work overlaps with the API changes, as several of our code functions still assumed the colors were in the sRGB color space.

In addition, we’ve been reviewing the existing color algorithm to make sure they are correct and performing efficiently. Øyvind Kolås and Elle Stone have provided great insight and assistance with this process. We want to ensure that your GIMP 2.10 XCF project files look the same when opened in GIMP 3.0, but we also want to set up infrastructure to improve the accuracy of layer modes and other aspects of GIMP going forward.

Non-Destructive Editing Updates

Since introducing non-destructive filters in GIMP 2.99.18, we’ve received a lot of great feedback and bug reports from early adopters. Based on these reports we’ve fixed many bugs related to copying, pasting, and updating filters, along with improving the general stability of the effects code. The temporary filter icon has also been replaced by a more intuitive Fx design from new contributor Denis Rangelov (created with the vector art program Inkscape, another FLOSS project that we highly recommend).

In addition to on-going bug fixes, we’ve also implemented non-destructive filters on layer groups. Now you can add an adjustment filter like Brightness-Contrast (or any other layer effect) to a group and have it change the display of each layer inside it.

Example of Brightness-Contrast non-destructive editing filter being applied to a layer group
Example of Color Temperature non-destructive editing filter being applied to a layer group. Photos by Andrea Luck, Attribution (CC BY 2.0)

GIMP Family Libraries: ctx, babl and GEGL

Øyvind has also worked hard on ctx these last few months, including improving portability for various platforms (on all types of architectures, libc and OSes), improving performance and massively profiling and fuzz-testing the project. For reminder, ctx is one of the latest ambitious project in the GIMP family, for 2D vector rendering and serialization. Though it is not necessarily used a lot in GIMP itself yet, it may pave the way for future work on more vector abilities in our software.

Of course, all this happens while still maintaining babl and GEGL, our color conversion engine and graph-based pixel processing framework. These 2 libraries do not receive significant changes lately, despite all the work done with the Color Space Invasion and the non-destructive editing projects, which is quite a good sign of a stable software in good shape!

Build Process Improvements

Bruno Lopes has been working hard to improve our build processes on all platforms. His on-going work has helped reduce redundancies and inefficiencies in our development pipeline, Windows installers, and Flakpak distributions. He is also preparing a new version of our Microsoft Store installer that will be better integrated into the platform, and as noted in a prior news post, he’s experimenting with an AppImage version of GIMP. You can also thank Bruno for his work in updating the build documentation on our developer website.

darktable Integration

While GIMP does not natively process RAW images, we have plug-ins that allow sending and retrieving images with great FLOSS raw photo processing software like darktable and RawTherapee. Earlier this year, darktable updated their public API which GIMP uses to set up this connection - causing the plug-in to stop working. Fortunately Hanno Schwalm and other darktable developers worked with us to create a GIMP-specific API that should be more stable going forward. We really appreciate collaborating with darktable developers to restore this connection!

(Note that this updated API is not yet available in GIMP 2.10.38 or GIMP 2.99.18. For now, you can use darktable 4.6 and below with GIMP as a workaround)

Documentation

With all the new changes and improvements in GIMP 3.0, the help manual needs a lot of updates from 2.10. Jacob Boerema has taken the lead on this project to update screenshots and text as well as adding new sections. This is an area where anyone can help without needing to write a line of code! You can review the upcoming documentation on our help manual test site. If you notice something’s missing or outdated, you can post about it on our issue tracker. If you want to help further, you can also fix the problem yourself and submit a merge request.

Preview of GIMP 3.0 Help Manual
Preview of GIMP 3.0 Help Manual; illustration by Aryeom (CC by-sa 4.0)

Bug Fixes

Since the feature freeze milestone, we’ve been focused on fixing as many bugs as we can before the first release. These include everything from older bugs that existed in GIMP 2.10, to recent ones created as we implemented all the new features for GIMP 3.0. Special thanks to Anders Jonsson, Andre Klapper, Lloyd Konneker, and Sam Lester for their extensive work finding and fixing these bugs! Early adopters and testers have also provided valuable bug reports, so if you’ve come across a bug in the development releases, please report them on our issue tracker.

GSoC 2024

We once again participated in GSoC this summer. We were fortunate to work with three student contributors this time around. Due to the circumstances mentioned above, their projects were scaled back a bit compared to our initial plans. Still, all three students did great work!

  • Idriss Fekir continued his work on improving the text tool from GSoC 2023. His work also overlapped with the color space improvements, such as fixing issues with text color as we made it color-space aware.

  • Cheesequake did initial research and design for eventually porting our GtkTreeView GUI to GTK4. He also assisted with many bug fixes for our non-destructive editing code.

  • Varun Samaga B L worked on improving OpenCL code in GEGL. OpenCL speeds up the performance of filters and other aspects of GIMP by taking better advantage of your graphics card’s multi-processing capabilities. You can see a more detailed write-up from Varun on his GSoC report.

We really appreciate all the hard work from our GSoC students!

Design Team

One area we want to focus on after 3.0 is improving our UI/UX design process. We have set up a separate UX repository to report and discuss issues related to design. We are looking to build a team of designers to discuss and create design improvements to GIMP that also respect existing user’s workflows. Denis Rangelov has taken a strong interest in this area and has already done great work in identifying, categorizing, and moving design issues from the code repository to the dedicated design section. Some design improvements have already been implemented for 3.0, and we look forward to working with community designers to give people a better experience!

GIMP Usability

What’s Next

There’s a lot more work going on behind the scenes, and we look forward to sharing it with you soon in the 3.0 RC1 release news post! If you haven’t already, you can test out the 2.99.18 release from the development downloads page. It does not include any of the improvements we’ve made since its release, but it still gives a good preview of what 3.0 will look like.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger!

Experiments with AppImage

Par :Bruno

Earlier in April and May, we were working behind the scenes on improving our CI and build-related code. In this context, one thing that came up was: how easy it is to test a merge request on Linux? For example, on Windows, we have .zip files for each commit; on macOS, we have .app (inside .dmg). For Linux… well we had none (we have weekly flatpak builds but they are time consuming for testing purposes). So, after a brief consideration we decided to go with AppImages.

AppImage is a application package format, basically a bundle, that’s great for the development and testing workflow described above. To be clear, ⚠️ we’re not distributing AppImage as official packages yet ⚠️ (more about this later in this post). About the experiments…

Picking the “right” tool

AppImage doesn’t have a mandatory SDK. The creation process can be done using freely available tools, such as linuxdeployqt, appimage-builder and AppImageKit. But we decided to go with go-appimage, which is multi purpose and ours is to do a quick test build.

In our case, the tool is responsible for bundling almost every dependency and for squashing everything with proper ELF data to be executable in one click. But the tool, naturally, can’t guess the particularities of the different software (e.g. use of script interpreters), so we need to copy and set some things manually. By the way, we opened issues in the go-appimage repo in the hope of improving some things, one little example of FOSS collaboration.

Learning from past appimages

Of course, we didn’t start from scratch! We learned from other unofficial GIMP AppImage builds (a list of which can be found here). Maybe there are others, but we could only find these four.

We also contacted the developers of these unofficial builds for testing and feedback about a potential official appimage. Huge thanks to them! Also, other people contributed too (this info can be found in the merge request). Thanks to all people involved! 😄

Patching Wilber’s wisdom into appimage

We couldn’t simply take these unofficial appimages code and put it in our repo because this isn’t how software works. Our code, even the packaging code, preexists the new packaging (in this case, bundling) so the former needs to be considered in order to the proper adaptations be made into the later.

Considering our past packaging code and experiences, we defined some principles to be checked before approving a new package format. In short, the format needs to:

  1. Have its scripts inside GIMP repo and using GIMP/GNOME runners for better transparency (macOS is the exception right now for historical reasons, which should ideally be fixed in the future);
  2. Have its scripts building/packaging over official GIMP git source/binaries for better security;
  3. Have its scripts simplified and human-readable as much as possible for better maintenance.

The last point assumes that some person is maintaining the package, and this is the main reason our appimage (bundle) is not ready for distribution yet. No person volunteered to tackle this responsibility by following these principles. So, the best that we could do, staying compliant with the principles, was a testing bundle.

Actual use and future

Our appimage can be used, and it’s indeed being used right now to triage issues and test merge requests on the Debian version supported by the respective branch (on master branch it is Debian 12 currently), and that has been very handy. Let us explain:

Suppose that you don’t have a very powerful machine, which is very common. Normally, you will only build GIMP natively and contribute to this specific platform, since building inside a VM is quite clumbersome. But thanks to our testing AppImage:

  • a Windows user can just log into the VM, download the Debian artifact from the MR and test it. We have contributors that use Windows VM (and they can download the cross .zip artifact), now the inverse is possible;
  • And this is useful for issues too: triaging them recommends the latest master so constant local rebuilding. Fortunately, this isn’t needed since our CI auto generates an .appimage for every new commit.

Of course, this is a limited use case and makes our appimage unsuitable even for being linked in the dev version download page. Not every contributor uses Debian (12) nor does every Windows or Mac contributor have a Debian (12) VM. To be fair, if the appimage displays problems that we can’t fix, it can even be dropped at any time.

So, we welcome contributions to improve compatibility with other distros (at least the oldest supported Ubuntu and newest Fedora) in order to raise it to a package level. If you are interested, talk to us.

GIMP at LGM 2024 (Rennes, France)

The Libre Graphics Meeting (LGM) is the biggest international gathering of Free Software for graphics creation. Born in 2006 as an evolution of our GIMPCon, the event went on every year since then, thanks to the support of various major projects, such as Blender, Inkscape, Scribus… until 2019, because of a pandemic which everybody knows about!

After 2 years where the event went online, then 2 years without LGM at all, it is finally back, this time in France, Rennes, from Thursday, May 9 (French holiday) to Saturday, May 11, 2024!

Libre Graphics Meeting 2024 logo
Logo of Libre Graphics Meeting 2024

As every year, the GIMP team will be present. Three talks are presented by members of the team, one of them being prolonged through a standards-making workshop:

  • Friday, May 10 at 2:30PM: OpenType and the desktop by Liam Quin, one of our long term contributors:

    Proposing a cross-desktop font service (DBUS-based?) to support user interfaces for people to instantiate variable fonts, to edit colour font palettes, choose alternate glyphs, install/uninstall fonts, and that can return paths, or glyph lists, or font names, or rendered text, to any application.

  • Friday, May 10 from 4PM: workshop part of OpenType and the desktop talk by Liam Quin: hoping that the presentation will move on to a discussion so that Free Software projects can work together to propose a standard for font listing, selection, usage and more.

  • Saturday, May 11 at 2PM: GIMP 3.0 and beyond by the whole team:

    GIMP team will present the long-awaited new major version, GIMP 3.
    On the menu : non-destructive editing, multi-layer selection, color management improvements, brand new plug-in API, port to GTK3 (HiPPI, Wayland support, CSS themes, better tablet support, etc.) and more.
    We will also expose our plans for the future.

  • Saturday, May 11, at 3PM: Early screening with live music (cinema-concert): « ZeMarmot »

    Jehan (GIMP maintainer) and Aryeom (artist in residence, illustrator, designer…) will present their short animation film, ZeMarmot, produced by the non-profit film production LILA (Libre comme l’Art / Free as Art).
    The movie in its current state (color and background unfinished) will be screened with live music by 3 musicians (ORL, Pelin, Adrien) from our friend music collective, AMMD, which work with us on this movie and only produces Libre Music.

    The showing will take about 10 minutes, followed by a talk and questions with Aryeom (film director), ORL (film score composer, and musician) and Jehan (technical, development, organization, backend…).

We will await you!


Summed-Up Information

  • Event page
  • Location:

    Activdesign
    4A rue du Bignon
    35000 Rennes
    FRANCE

  • Libre Graphics Meeting: from May 9 to 11, 2024, doors opening at 9AM, then all day long!
  • Main GIMP talk: Saturday, May 11, 2024 from 2PM to 3PM (by the GIMP team)
  • OpenType talk: Friday, May 10, 2024 from 2:30PM to 3:30PM (by Liam Quin)
  • OpenType workshop: Friday, May 10, 2024 from 4PM to 6PM (by Liam Quin)
  • ZeMarmot musical showing and talk: Saturday, May 11, 2024 from 3PM to 4PM (by Aryeom, film director, ORL, composer, Jehan, developer, and Pelin and Adrien, musicians)
  • Full program
  • Online map
  • More info on how to reach the location
  • Event is recorded: yes

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

GIMP 2.10.38 Released

This (possibly last) GIMP 2 stable release brings much-requested backports from GTK3, including improved support for tablets on Windows. A number of bug fixes and minor improvements are also included in this release.

This news lists the most notable and visible changes. In particular, we do not list every single bug fix or smaller improvement. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

New features and improvements

Improved support for tablets on Windows

Before this release, GIMP only supported connecting tablets on Windows through WinTab drivers rather than the newer Windows Ink drivers. Because of this, we received a number of reports about tablets having issues with unresponsive buttons, incorrect pressure sensitivity, lagging brush movement, and mid-stroke position changes.

These problems were due to a limitation of GTK2, as support for Windows Ink was implemented in GTK3 by long-time contributor Luca Bacci. For this release, Luca was gracious enough to backport this support to GTK2. You can now switch between WinTab and Windows Ink drivers (if supported by your computer) in the Preferences dialog under the Input Device settings.

Windows Pointer Input API option in GIMP 2.10.38
Windows Pointer Input API can now be changed - GIMP 2.10.38

Backports of other GTK3 features

Luca also contributed a number of other features from GTK3 to GTK2. Some of the backported improvements include updating the size of the Print Dialog so buttons are not cut off, fixing issues with pop-up dialogs appearing behind the previous ones, and several fixes to keyboard input.

These improvements are primarily for Windows and are already included in the 2.99 development release. However, we are very happy that these quality of life improvements are now available in this stable release of GIMP 2.10!

Bugfixes

Recent crashes

Two commonly reported crashes have now been corrected. A change in GLib 2.80 exposed a bug in our closing process and caused a crash on exit. Luca Bacci once again devised a fix for both 2.10.38 and the upcoming 3.0 release candidate. Another crash that some users encountered when making very small selections was also fixed.

Other fixes

A number of other small bugs were fixed in this release. Among them:

  • Indexed PNGs with transparency are now exported with the correct colors
  • Anders Jonsson fixed the input ranges for several filters such as Waves and Distort
  • The titlebar customization field now supports UTF-8 characters
  • Existing image comments no longer “leak” into newly created images

Release stats

Since GIMP 2.10.36:

  • 16 reports were closed as FIXED in 2.10.38
  • 9 merge requests were merged
  • 81 commits were pushed
  • 1 new translation was added: Kabyle
  • 16 translations were updated: Belarusian, Brazilian Portuguese, British English, Danish, Georgian, German, Greek, Hungarian, Icelandic, Italian, Norwegian Nynorsk, Slovenian, Spanish, Swedish, Turkish, Spanish

25 people contributed changes or fixes to GIMP 2.10.36 codebase (order is determined by number of commits):

  • 7 developers: Alx Sa, Jehan, Luca Bacci, Jacob Boerema, Lukas Oberhuber, lillolollo, Øyvind Kolås
  • 19 translators: Kolbjørn Stuestøl, Sabri Ünal, Bruce Cowan, Yuri Chornoivan, Vasil Pupkin, Anders Jonsson, Rodrigo Lledó, Jürgen Benvenuti, Sveinn í Felli, Andi Chandler, Juliano de Souza Camargo, Ekaterine Papava, Balázs Úr, Martin, Philipp Kiemle, Alan Mortensen, Dimitris Spingos, Marco Ciampa, Yacine Bouklif

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • The gimp-2-10 branch of gimp-macos-build (macOS build scripts) had 30 commits since the 2.10.36 release by 2 contributors: Lukas Oberhuber, Bruno Lopes.
  • The flatpak release is made of 11 commits by 3 contributors: Jehan, Hubert Figuière and Bruno Lopes.
  • Our main website (what you are reading right now) had 42 commits since 2.99.18 release by 4 contributors: Jehan, Alx Sa, Andre Klapper and Lukas Oberhuber.
  • Our developer website had 34 commits since 2.99.18 release by 6 contributors: Bruno Lopes, Jehan, Alx Sa, bootchk, Alpesh Jamgade and Robin Swift.
  • Our 2.10 documentation had 35 commits since 2.10.36 release by 8 contributors: Alan Mortensen, Anders Jonsson, Rodrigo Lledó, Jacob Boerema, Kolbjørn Stuestøl, Marco Ciampa, Andi Chandler and Víttor Paulo Vieira da Costa.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Team news and release process

Idriss, 2023 GSoC contributor, has been recently granted “developer” access on the main source repository, for the awesome continued job since then.

Ville Pätsi, very long term contributor (more than 20 years!), on various topics (design, theming and more) got the “reporter” access to Gitlab to help with triaging and organizing directly in the tracker.

Around GIMP

Mirror News

Since our last news, 3 new mirrors have been contributed to GIMP by:

  • Clarkson Open Source Institute, USA
  • FCIX, Switzerland
  • Tomás Leite de Castro, Portugal

This brings us to a total of 49 mirrors all over the world.

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Infrastructure and Hardware Sponsors

We enhanced the sponsor page with 2 sections:

  • Infrastructure Sponsors” lists the sponsors who help GIMP with infrastructure:

    • CircleCI and MacStadium make our macOS continuous integration platform possible.
    • Arm Ltd. sponsors and administers several Aarch64 runners on Windows for our ARM 64-bit build for Windows; and Microsoft had given away the one-time fee for their Microsoft Store.
  • Hardware Sponsors” lists sponsors which donated some hardware to contributors to help with development:

    • Arm Ltd. recently donated a Windows Dev Kit 2023 to support our recent Aarch64/Windows support.
    • Purism donated a Librem Mini in 2021.

Downloading GIMP 2.10.38

You will find all our official builds on GIMP official website (gimp.org):

  • Linux flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s next

Clearly one of the smallest releases ever in the 2.10 series, and it might be our last. We’ll see, though we also know some people get stuck longer than others on older series (especially when using LTS distributions of Free Software operating systems), so we might do (if we feel like it’s needed) a 2.10.40 release with bug fixes only just before or just after GIMP 3.0.0 release, as a wrap up.

In any case, we are now stopping backporting features in the 2.10 series. These graphics tablet support improvements for Windows are huge enough that they had to get in; yet from now on, we want to focus solely on releasing GIMP 3.0.0.

Now you might wonder when that is? Very soon! We are on the last sprint towards the release candidate. This includes a lot of bug fixes, but also still some API changes going on. We will keep you updated!

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

GIMP 2.99.18 Released: The Last Development Preview Before 3.0!

Par :Wilber

At long last, we bring you the final development version before GIMP 3! While the release of 2.99.18 is a bit behind our intended schedule, there are a number of new features and improvements that we’re very excited to share with you.

⚠️ ☢️
We remind that a development version means that this is a release to show work-in-progress but also give an opportunity to the community to detect issues early and report issues. In other word, this is an unstable version and we do not recommend to use it in production. Use it because you want to help GIMP improve by reporting bugs.

This version 2.99.18 in particular might be one of the most unstable releases in the 2.99 series because of the space invasion. It is expected and normal.
⚠️ ☢️

This news post lists the most notable and visible changes. We do not list minor bug fixes or smaller improvements here. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

(Color) Space Invasion

We have been working very hard on the Space Invasion project, which is — as you might recall — our codename for the project of making GIMP more correct regarding colors.

Lately we have been porting older internal color structures (GimpRGB, GimpCMYK, GimpHSV…) which we used to carry color information to GeglColor. This generic object can contain any color data regardless of color model, precision or space supported by babl, our pixel encoding engine.

What it means for color correctness in particular is that we will now do color conversion only when needed (last-second conversion) and therefore won’t lose information when it could have been avoided. For instance, say you color-pick color from an image: if we were to convert to an intermediate format, before using it on a second image (which may or may not be in another color format), we’d do 2 conversions. Which means more possibility of precision loss. The issue is even more flagrant if the input and output formats are the same (i.e. no conversion should happen at all). And this will be even more a problem when we will have core CMYK backend (we really want to avoid doing a round-trip to an intermediate format with CMYK, which doesn’t have bijective conversion with most other color models, even when working unbounded and ignoring precision issues).

We are also slowly moving stored data to this generic color object. In particular it means that color palettes will be able to contain CMYK colors, CIELAB colors or in any other supported model (and not only these colors after a conversion to unbounded sRGB).

A consequence for code maintainance is that it makes it a lot easier to handle color conversions within our codebase, now that the structure embeds both the data and its “meaning”. It makes color handling a lot less bug-prone compared to when we had to keep track of both information as separate data.

Lastly we are working toward showing color space information in various parts of the interface, when relevant, such as when displaying or choosing RGB, CMYK, HSL or HSV data. Values in these color models without the associated color space are near-meaningless. Interface displaying values in RGB without further information are a remnant of the past when it mostly meant sRGB. This is clearly not true anymore in modern graphic work and the interface should make this clear.

The below video shows some of this interface work where RGB, HSV or CMYK models for instance are always displaying the color space the values are in (which very often means the name of the ICC profile). This is being done in the color picker tool, color samples, FG/BG Color dockable, “Change Foreground/Background Color” dialog and in more places.

Not only this, but when people select a soft-proofing profile and activate soft-proofing (e.g. through the nice new simulation toggle which was added in GIMP 2.99.12), we will also show out-of-gamut area not only within the image’s color space, but also the soft-proof space.

(Color) Space Invasion in the interface - GIMP 2.99.18

Very important warning: this is once again a huge port in our codebase, which impacted litterally thousands of lines of code. This work is unfinished though it will have to be finished before the first release candidate. Therefore unstabilities or bugs are to be expected in this update so if you encounter any issue, we recommend to report them.

Improved Color Algorithms

Øyvind Kolås improved a few internal algorithms:

  • Achromatic pixels in the Hue-Saturation tool are now special-cased so that grayscale pixels (saturation of 0) are only changed by the master adjustment, not by the red adjustment.
  • Grayscale gradients are now kept achromatic even with “Dithering” checked in the Gradient tool.

As the space invasion project goes on, getting things consistent is getting easier in various color-related algorithms, hence enabling us to discover issues quickly and fix them.

Initial Non-Destructive Layer Effects

One area we’re “ahead of schedule” on are the much-requested non-destructive layer effects! The foundation for these features has been laid by many developers over many years, since the introduction of GEGL into GIMP. Originally planned for the 3.2 roadmap, an initial implementation was made as a continuation of a Google Summer of Code project.

If you are not familiar with the term, “non-destructive editing” implies the ability of changing the output pixels while keeping the source pixels intact. For filter effects, such as Blur, it means that layer effects are kept separate from the layer’s pixels. This means that if later on you want to change a setting, rearrange, or even remove the filter, you can easily do so without affecting the rest of the image. Until now, GIMP has followed a destructive editing workflow where effects were immediately merged down onto the layer, so this is a major change!

Any GEGL operation that has a GUI is now applied to layers non-destructively (Non-destructive effects for layer masks and channels are planned for future updates.). This includes third-party GEGL plug-ins and custom operations created with our GEGL Graph tool. These effects can be saved and loaded in .xcf project files, although not all GEGL properties are supported in the current build.

Once a filter has been applied, you can interact with it further by clicking the filter icon in the layers dockable. This will open a pop-up that shows all filters currently applied to the layer. From here, you can toggle the filter’s visibility, edit the filter settings, re-order the filters, and delete individual effects. You can also merge down all filters to recreate a destructive workflow.

Non-destructive layer effects - GIMP 2.99.18

Note that this is only an early implementation, and much work remains to be done for a full-featured version of non-destructive editing. We will continue to refine the existing features for the 3.0 release based on user testing and feedback, and extend them further afterwards. The interface itself is not how we envision this feature ideally and a first specification draft was layed out for a much more integrated workflow.

The below screenshot is a mockup from this first specification which would show layer effects within the main layer list, sharing the same “eye” and “lock” buttons, but also with their own easily editable mask:

Non-destructive layer effect Specification mockup image
Specification mockup image: vision of layer effects directly in the layer list with their own mask

Nevertheless creating this new interface will be its own challenge so we decided to delay it to after GIMP 3 release and to propose this early implementation at first.

Please share your thoughts on the discussion forums and issue tracker!

Font Handling Improvements

Idriss Fekir, another GSoC 2023 student, has been working with long-time developer Liam Quinn to improve how GIMP handles fonts. A lot of this work was internal to improve GIMP’s ability to handle future font and text updates. Some of the more visible changes include:

  • GIMP no longer relies on font names being unique to distinguish between them. This means it won’t append “#1”, “#2” and so on but instead keep the original names in the font selection list. Despite the apparent name clash, both identically named font will now work properly.

  • GIMP can now load fonts using custom styles (bypassing Pango which is unable to load them).

  • We can now load more types of fonts than before. In cases where we don’t support a font yet (or the font is non-existent), we can better detect this and fall back to a default font. This also improves support when loading an .xcf file created on another computer to different fonts available.

  • On Windows, we force the Pango backend to always use anti-aliasing. This improves the readability of menu text on that operating system, especially with a dark theme.

  • The XCF-saving code now stores font information much more accurately which helps to avoid loading the wrong font when reopening some XCF.

  • Alignment of text in text layers for RTL languages is now more consistent with how it works in other software (such as LibreOffice or Scribus).

These changes are a lot less flashy relatively to some of the other features and therefore may feel less important, yet they are actually the foundation work on making text handling a lot more reliable in GIMP. We are envisionning a future where text editing will be simpler while much more powerful and featureful (in particular OpenType features are some of the big improvements we hope to get eventually).

Auto-Expanding Layers

The third GSoC project last summer by student Shubham Daule brought a long requested feature – auto-expanding layers! Brush tools now have an additional “Expand Layers” option. When checked, painting past the layer boundaries will cause them to automatically expand so you don’t have to manage the layer size yourself. If you want to expand the layer beyond the current size of the canvas, you’ll need to also check the “Show All” option in the View menu.

Auto-expanding layers - GIMP 2.99.18

The Expand Layers option also has additional settings when selected. You can decide how much you want the layer boundaries to expand by whenever the brush reaches them. There are also options to specify how the new areas of the layer and layer mask should be filled in when expanded.

New Snapping Options

New contributor mr. fantastic developed two new options for aligning layers on the canvas. With “Snap to Bounding Boxes” enabled, dynamic guides will now show when the layer you are moving is aligned with the center or sides of others. The active layer will also snap to those boundaries to assist you with arranging them properly. The second option, “Snap to Equidistance”, allows you to snap between three layers that are equidistant from each other.

New snapping options - GIMP 2.99.18

Themes

We continued to improve the user interface and style for this release. One of the biggest improvements was dealing with “system theme leaks”. There are styles that were not specifically defined in our themes, thus allowing different systems to supply their own (often conflicting) styles. With the help and feedback of several contributors and users, we’ve made a lot of progress in defining those styles so that everyone has a consistent experience!

Recently Jehan worked on re-organizing and simplifying our theme system. In past development versions we had five different themes: Default, Gray, System, Darker, and Compact (Each with light and dark options). These have been simplified into the System theme and a single Default theme with three possible states – light, dark, and gray. Similarly, our four separate icon themes were condensed into the Legacy set and a Default with Color and Symbolic options. We think these changes will reduce user confusion and make it easier for them to find their preferred interface appearance.

In addition, on Windows the main titlebar (and most dialog title bars) now adjust to light or dark mode depending on the selected theme.

Welcome Dialog

The Welcome Dialog has been expanded to provide quick access to a number of useful features and options. There are now four new sections:

  • Personalize: There are several customization options that require you to dig through the Preference Dialog to change. Now from this page you can easily change the color and icon themes, the user interface language and font size, and OS-specific settings.

  • Create: This page shows your eight most recently opened images and allows you to quickly reopen them. There are also buttons to create a new image or load an existing one. As with other programs, you can set this screen to automatically appear when GIMP starts for immediate access to these features.

  • Contribute: We consolidated some of the many ways you can be involved in GIMP’s development on this page. There are direct links to report bugs, write code, assist with translation or donate financially.

  • Release Notes: Originally these were shown on the lower half of the Welcome page. Now we have a full tab dedicated to them for easier reading.

File Formats

As in other releases, we have made improvements to existing file formats and added import and export support for some new ones.

DDS

A new contributor Stayd has been working with developer Jacob Boerema to make many improvements to the DDS plug-in. As a start, the import functions have been written to be simpler and easier to extend in the future. Some of the other additional updates include:

  • Loading 16 and 32 bits per channel RGBA DDS images is now possible.

  • The Catmull-Rom cubic filter has been added for mipmap generation, and all mipmap generation calculations are performed at 32-bit precision.

  • DDS images in the R8G8, R16, and R16G16 formats can now be loaded as well.

  • An option to flip DDS images vertical on import was added to mirror the existing export option, as some game images store their data this way.

GIF

In the past, overwriting a GIF rather than exporting would always convert it into a single frame image. Now we check to see if the GIF is an animation on load, so it will stay that way when overwritten.

HEIF and JPEG-XL

Both plug-ins now use their respective libraries (libheif and libjxl) to load metadata. As a result, we have removed our custom code to interpret the image orientation and rely on the information supplied from the library instead.

OpenEXR

OpenEXR allows for channels to have custom names besides the color type. In these cases we now treat any single channel image with an unconventional name as grayscale. On import, we also display a notification so that users are aware of the conversion.

PDF

The “Layers as Pages” export option now works even if there is only a single layer group. Previously this option was not available, as the plug-in only checked if there was more than one “layer” without considering if it was a layer group with multiple sub-layers.

PNG

Safe-to-copy PNG chunks are now preserved on import and included in the exported image. Additionally, an often-reported issue with exporting transparent indexed PNGs has been fixed. Now the exported indexed colors should be displayed correctly.

PSD

Jacob Boerema continued his work to improve the PSD plug-in. In addition to bug fixes such as correcting the layer order on import, he also clarified the export warning on layer mode compatibility between GIMP and Photoshop.

PSP

The Paintshop Pro plug-in now supports importing more features from the project file, such as the ICC color profile, guides, grids, and the active selection from when the file was saved. The ZDI-CAN-22096 and ZDI-CAN-22097 security vulnerabilities were also patched in this release.

New image format supports: Farbfeld, Esm Software PIX, HEJ2

We recently added import and export support for Farbfeld, an sRGB image format intended to be easy to parse, pipe, and compress externally.

We also added import only support for the following new file formats:

  • Esm Software PIX: A modified JPEG format used exclusively by the Esm Software company to store their customized images. This was implemented in response to a bug report that confused this format with our existing Alias PIX image support.

  • HEJ2: An addition to our existing HEIF plug-in by contributor Daniel Novomeský which allows importing JPEG 2000 compressed images.

New palette format support: Swatchbooker

Swatchbooker is a free/libre open source software that creates and converts color palettes in a variety of formats. While the software itself has not been updated in many years, its custom palette format .sbz is the most comprehensive of all the ones we currently support. Among its many features are allowing multiple color model definitions per palette entry, localizable names and descriptions, and support for per-entry ICC color profiles.

While working on our import support, we were able to contribute information that led to a bug fix in Krita’s support for Swatchbooker. It’s always great when projects can work together and help each other!

Wayland Tablet Pad Interactions

Long-time GNOME contributor Carlos Garnacho added support for interacting with GIMP via tablet pads. When a tablet is plugged in, you can now assign different actions to the tablet controls via the “Input Device” dialog under the Edit menu. In particular you don’t have to map keyboard shortcuts to the tablet’s buttons, system-side, then map the same shortcut to actions, GIMP-side. You can directly map the tablet’s buttons to actions without the intermediary of keyboard shortcuts.

Assigning actions to tablet pad buttons - GIMP 2.99.18
Assigning actions to tablet pad buttons - GIMP 2.99.18

This work also involved porting features to GTK 3, the GUI framework that GIMP is built on. Note that this feature is currently only supported on Wayland.

API Updates

The Application Programming Interface, for plug-in makers, is steadily being reworked as part of the GIMP 3 overhaul. Part of it is that when colors are involved, we are moving the API to use GeglColor as part of the more general Space Invasion project. Yet it’s only a small part of the whole API improvements.

We are also moving towards more classes to represent the various resources managed by GIMP (brushes, fonts, patterns, etc.) instead of only representing these by names (which was a historical limitation whereas it is absolutely possible for 2 resource makers to choose the same name and the fact is that we see such cases in the wild — for instance 2 fonts independently created may have the same name).

Another big move is replacing the GimpValueArray representing the ordered arguments of a plug-in procedure by a GimpProcedureConfig which contains arguments by name instead of by order. This allows much more semantic usage of plug-in procedures (especially when they have long list of arguments) but also will make it easier to enhance plug-ins in the future, with new or reordered arguments without creating new procedures because the order and number arguments matter a lot less. It means that adding new arguments in the future won’t break existing scripts depending on past versions of these plug-ins anymore (plug-in writers will still have to choose appropriate defaults for the new arguments in order for this to be true, of course).

In parallel, we continue to improve the ability of automatic GUI creation given to plug-ins, making creating dialogs more easy than ever. This includes (among many other enhancements) a new type of procedure argument named GimpChoice which is a string list of choices which can be displayed to creators as drop-down list widgets in your plug-in dialog.

We are planning to write and release tutorial for plug-in writers in the Resource Development section of our developer website in the same time as GIMP 3 release, or not long after.

GEGL and babl

This release of GIMP is accompanied by new releases of GEGL and babl, both of which assist with the color space invasion project.

babl 0.1.108 brings a new babl_space_is_rgb function to help us directly confirm a color space is RGB (rather than doing multiple tests to see if it’s not CMYK or grayscale). There were also several improvements to the build process and to the babl command-line interface tool.

GEGL 0.4.48 provides several updates to the GeglColor object which now supports much of GIMP’s color operation. Specific improvements include being able to directly get and set CMYK color values, as well as assigning the color space when setting RGB(A) colors.

A crash in the existing gegl:voroni filter was fixed, and a long-standing bug with the gegl:dropshadow filter which prevented the effect from shrinking was corrected too.

Last but not least, a new gegl:shuffle-search filter was added to the workshop. It shuffles neighboring pixels to create a more optimized dithering effect.

Release stats

Apart from the first version in the series (2.99.2), GIMP 2.99.18 is clearly the biggest update in most numbers. Since 2.99.16:

  • 238 reports were closed as FIXED.
  • 201 merge requests were merged.
  • 1358 commits were pushed.
  • 26 translations were updated: Basque, Belarusian, Brazilian Portuguese, Bulgarian, Catalan, Chinese (China), Danish, Esperanto, Finnish, Georgian, German, Greek, Hungarian, Icelandic, Italian, Lithuanian, Norwegian Nynorsk, Persian, Polish, Russian, Slovenian, Spanish, Swedish, Turkish, Ukrainian, Vietnamese.

60 people contributed changes or fixes to GIMP 2.99.18 codebase (order is determined by number of commits; some people are in several groups):

  • 23 developers to core code: Jehan, Alx Sa, Shubham, Jacob Boerema, Idriss Fekir, bootchk, Anders Jonsson, Carlos Garnacho, mr.fantastic, Stanislav Grinkov, lillolollo, Øyvind Kolås, Sabri Ünal, programmer_ceds, Lukas Oberhuber, programmer-ceds, James Golden, Luca Bacci, Massimo Valentini, Niels De Graef, Zander Brown, psykose, sonia.
  • 17 developers to plug-ins or modules: Jehan, Alx Sa, Jacob Boerema, bootchk, Anders Jonsson, Stayd, Zander Brown, Bruno Lopes, Daniel Novomeský, Sabri Ünal, programmer_ceds, Kamil Burda, Mark, Michael Schumacher, Stanislav Grinkov, programmer-ceds, sonia.
  • 31 translators: Yuri Chornoivan, Martin, Ekaterine Papava, Luming Zh, Sabri Ünal, Anders Jonsson, Rodrigo Lledó, Jordi Mas, Alan Mortensen, Vasil Pupkin, Asier Sarasua Garmendia, Kolbjørn Stuestøl, Boyuan Yang, Víttor Paulo Vieira da Costa, dimspingos, Alexander Shopov, Alexandre Prokoudine, Aurimas Černius, Balázs Úr, Marco Ciampa, Sveinn í Felli, Danial Behzadi, Ngọc Quân Trần, Jürgen Benvenuti, Piotr Drąg, Timo Jyrinki, Andre Klapper, Kristjan SCHMIDT, MohammadSaleh Kamyab, Rafael Fontenelle, Tim Sabsch.
  • 9 resource creators (icons, themes, cursors, splash screen, metadata…): Alx Sa, Jehan, Ferry Jérémie, Stanislav Grinkov, Anders Jonsson, Bruno Lopes, Jacob Boerema, Sabri Ünal, mr.fantastic.
  • 5 documentation contributors: Jehan, Bruno Lopes, Jacob Boerema, Alx Sa, Anders Jonsson.
  • 14 build, packaging or CI contributors: Jehan, Bruno Lopes, bootchk, Alx Sa, Zander Brown, Jacob Boerema, Jacob Boerema, Stayd, Carlos Garnacho, Heiko Becker, mr.fantastic, Daniel Novomeský, U-YGGDRASIL\ender, lillolollo.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • babl 0.1.108 is made of 17 commits by 6 contributors: Jehan, Øyvind Kolås, John Marshall, Andre Klapper, John, sid.
  • GEGL 0.4.48 is made of 77 commits by 20 contributors: Øyvind Kolås, Jehan, Anders Jonsson, Jacob Boerema, Yuri Chornoivan, Alan Mortensen, Sabri Ünal, Andre Klapper, Ekaterine Papava, Jan Tojnar, Jordi Mas, Luming Zh, Martin, Piotr Drąg, Víttor Paulo Vieira da Costa, Asier Sarasua Garmendia, Marco Ciampa, Rodrigo Lledó, dimspingos, woob.
  • ctx had 308 commits since 2.99.14 release by 1 contributor: Øyvind Kolås.
  • The gimp-macos-build (macOS packaging scripts) release is made of 32 commits by 1 contributor: Lukas Oberhuber.
  • The flatpak release is made of 15 commits by 3 contributors: Jehan, Daniel Novomeský and Hubert Figuière.
  • Our main website (what you are reading right now) had 31 commits since 2.10.36 release by 6 contributors: Jehan, Alx Sa, Sabri Ünal, Anders Jonsson, Bruno Lopes, Jonathan Demeyer.
  • Our developer website had 30 commits since 2.10.36 release by 5 contributors: Bruno Lopes, Jehan, Alx Sa, bootchk, Robin Swift.
  • Our 3.0 documentation had 247 commits since 2.99.16 release by 17 contributors: Andre Klapper, Jacob Boerema, Yuri Chornoivan, Alx Sa, Jordi Mas, Alan Mortensen, dimspingos, Anders Jonsson, Boyuan Yang, Sabri Ünal, Víttor Paulo Vieira da Costa, Juliano de Souza Camargo, Rodrigo Lledó, Kolbjørn Stuestøl, Marco Ciampa, Danial Behzadi, Emin Tufan Çetin.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Team news and release process

Access rights to the git repository were recently given to Bruno Lopes (who has been very active improving our build process and Windows packaging).

Several long term or recent developers or packagers who started to contribute to the new developer website were also given access to the associated git repository.

More contributors are now actively participating to testing releases and packaging, and this is the first news for years which Jehan has not written nearly entirely! Thanks a lot to Alx Sa (a.k.a. Nikc or CmykStudent) for taking up on collaborative news writing!

Clearly we are consolidating day after day a solid core team of contributors and this shows in our release process having more and more feedback at each release.

We are also particularly happy and proud that the 4 GSoC projects we had, since we started again subscribing to this mentoring program, were all successful and ended up being merged to the main code branch within half a year at most after the internship end.

Around GIMP

Mirror News

Since our last news, a new mirror has been contributed to GIMP by:

  • Sahil Dhiman, in Nürnberg, Germany, as a personal project.

This brings us to a total of 46 mirrors all over the world.

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

GIMP on Windows/ARM

Since our news for an experimental build on Windows for ARM 64-bit architecture, we received help from Hernan Martinez, well known contributor in the MSYS2 project, who hosted our first ever CI runner for Windows on Aarch64 architecture. Though this was only a temporary setup (literally a build machine in someone’s living room) until we get a more stable situation, we are extremely thankful to Hernan who helped us make our second step on this platform (the first step was done by Jernej, who made our first experimental installer), make sure our automatic build process worked there and more.

Since then, we got the stabler situation: Arm Ltd. themselves stepped up and contributed officially 3 runners for our Continuous Integration process in Gitlab! Arm Ltd. also sponsored a Windows devkit to one of our developers.

While we still do consider this build experimental, because of lack of testing and because only 2 contributors have a machine able to run it right now, the biggest blocker got removed and we are happy to announce that our universal Windows installer for GIMP 2.99.18 contains GIMP for all 3 platforms (x86 32 and 64-bit, and now ARM 64-bit)!

Downloading GIMP 2.99.18

You will find all our official builds on GIMP official website (gimp.org):

  • Linux flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s next

As we have now entered a feature freeze, our focus has shifted to bug-fixing, clean-up, and preparing for the first 3.0 release candidate.

We indeed think that this should be the last development release since no new feature will be introduced from now on, at least GUI features (the API is still evolving until the first release candidate). So what you see now is basically what you should get in GIMP 3.0.0, feature-wise.

This is why we released this version even though we know it is quite unstable. Now is the time for last minute comments! Also it’s the moment to report and fix bugs like there is no tomorrow. We hope to be able to deliver a RC1 soon and it should be as bugless as possible.

Our current expectation is to be able to release GIMP for the upcoming Libre Graphics Meeting in May 9-12. To be fair, this is not an easy goal and therefore we are not sure if we can make it. What is sure is that even if we did not manage this on time, it should not happen too long after. In particular we won’t release just because we set a deadline. We want to provide the best experience, which means that if we discover last minute blocker bugs, we will delay the release until they are fixed.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

GIMP 2.10.36 Released

Par :Jehan

This stable release of GIMP comes with a few security fixes, so we advise you to update even if you feel like your current version works fine for you. Apart from the many bug fixes and security updates, it also provides new support for palette formats and a new generated gradient.

This news lists the most notable and visible changes. In particular, we do not list here bug fixes or smaller improvements. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

New features and improvements

ASE and ACB palettes support

In addition to already supported palette formats, GIMP can now load palettes in the following formats:

  • Adobe Swatch Exchange (ASE)
  • Adobe Color Book (ACB)

This will make it easier to exchange palettes coming from other software.

New Gradient: FG to Transparent (Hardedge)

Everywhere a gradient option is available, the gradient list will now feature the additional “FG to Transparent (Hardedge)” option. It generates a gradient from the foreground color to transparency, with hard-edge transitions between the 2 colors.

In the Gradient Tool in particular, you can generate patterns very quickly with the “Repeat” option, alternating repetitive colored shapes with full transparency over a given background.

New FG to Transparent (Hardedge) gradient - GIMP 2.10.36

GIF: non-square ratio support

GIMP now loads GIF images containing the PixelAspectRatio header metadata by setting different resolutions per dimension, hence rendering the image correctly (instead of looking squashed on the screen).

Of course the option “Dot for Dot” in the View menu must be unchecked to see the image at its expected ratio.

More enhancements

A few more improvements were sprinkled across this update, such as:

  • Text tool: improved formatting behavior when selecting and changing text on canvas.
  • Theme: better feedback when hovering lock buttons (with a white frame) as well as when activating a lock (a small padlock shows up in the corner).
  • Help: The Help > User Manual submenu now features a “[Table of Contents]” link.

Security and bug fixes

Fixed Vulnerabilities

Four vulnerabilities were reported by the Zero Day Initiative in code for the following formats and fixed immediately:

  • DDS: ZDI-CAN-22093
  • PSD: ZDI-CAN-22094
  • PSP: ZDI-CAN-22096 and ZDI-CAN-22097

Additionally dependencies have been updated in our binary packages, and with them, some vulnerabilities recently reported in these libraries were fixed.

In any case, we recommend to update GIMP with the latest packages.

Broken Graphics Tablets with recent linuxwacom driver

We don’t usually mention bug fixes prominently but an ugly one happened recently after a change in the xf86-input-wacom (linuxwacom) driver, which provoked crashes of GIMP when using a graphic tablet on Linux.

Various distributions already downgraded the driver, or backported the fix, since a patch to the driver has been quickly pushed as well. Nevertheless if you are in the unlucky situation of using the non-patched driver, this version of GIMP also contains a workaround to the bug.

Release stats

Since GIMP 2.10.34:

  • 26 reports were closed as FIXED in 2.10.36.
  • 10 merge requests were merged.
  • 155 commits were pushed.
  • 20 translations were updated: Belarusian, Catalan, Chinese (China), Danish, Dutch, Georgian, German, Greek, Hungarian, Icelandic, Italian, Lithuanian, Polish, Portuguese, Romanian, Slovenian, Spanish, Swedish, Turkish, Ukrainian.

29 people contributed changes or fixes to GIMP 2.10.36 codebase (order is determined by number of commits):

  • 7 developers: Alx Sa, Jehan, Stanislav Grinkov, Jacob Boerema, Daniel Novomeský, Andras Timar and Gabriel Scherer.
  • 22 translators: Marco Ciampa, Sabri Ünal, Luming Zh, Anders Jonsson, Yuri Chornoivan, Martin, Rodrigo Lledó, Balázs Úr, Hugo Carvalho, Jürgen Benvenuti, Nathan Follens, Piotr Drąg, Alan Mortensen, Cristian Secară, Ekaterine Papava, Jordi Mas, Vasil Pupkin, Aurimas Černius, Danial Behzadi, Petr Kovář, Sveinn í Felli and dimspingos.
  • 3 resource creators (icons, themes, cursors, splash screen, metadata…): Stanislav Grinkov, Jehan, Daniel Novomeský.
  • One documentation contributor: Jehan.
  • 3 build or CI contributors: Jernej Simončič, Jehan and Stanislav Grinkov.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • babl, GEGL and ctx are actively developed, but no releases have accompanied this version of GIMP for once. So we will provide relevant statistics at next release.
  • The gimp-2-10 branch of gimp-macos-build (macOS build scripts) had 45 commits since 2.10.34 release by 1 contributor: Lukas Oberhuber.
  • The stable flatpak branch had 28 commits since 2.10.34, by 3 contributors (and a bot): Jehan, Daniel Novomeský and Hubert Figuière.
  • Our main website (what you are reading right now) had 165 commits since 2.99.16 release by 6 contributors: Sabri Ünal, Jehan, Bruno Lopes, lillolollo, Alx Sa and Robin Swift.
  • Our developer website had 17 commits since 2.99.16 release by 5 contributors: Jehan, Bruno Lopes, Aryeom, Jacob Boerema and Robin Swift.
  • Our 2.10 documentation had 138 commits since 2.10.34 release by 16 contributors: Andre Klapper, Jacob Boerema, Marco Ciampa, Anders Jonsson, Boyuan Yang, dimspingos, Yuri Chornoivan, Jordi Mas, Rodrigo Lledó, Martin, Alexander Shopov, Alx Sa, Balázs Úr, Piotr Drąg, Sabri Ünal and Tim Sabsch.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Team news and release process

Access rights to the git repository were recently given to Lukas Oberhuber (our maintainer for the macOS packages).

During the duration of GSoC, “reporter” rights on our Gitlab project were given to Idriss and Shubham, 2 of the GSoC contributors (the third one already had git access).

Robin Swift, who already helped with GIMP’s developer website has started working on a port of the main website (which you are reading right now) from Pelican to Hugo, a project which was long planned yet had stalled so far.

Finally we remind that we are actively looking for people helping us test packages before releases (especially for GIMP 3.0 and forward). This will help make GIMP releases much more robust. Since the last release, Anders Jonsson and Mark Sweeney were added as Flatpak testers. We also have several testers of the Windows packages, yet we still have no testers for macOS. Whatever your OS and the architecture you test on, we welcome your feedback to detect issues early! Together, the community is stronger! 💪

Around GIMP

Mirror news

Since our latest news, 4 new mirrors were contributed to GIMP by:

  • Silicon Hill, student club of the Czech Technical University in Prague, Czech Republic;
  • Lancaster-Lebanon IU13, an organization comprised of more than 20 public school districts and several non-public, parochial, and charter schools in Lancaster, Pennsylvania, USA;
  • the Moroccan Academic and Research Wide Area Network (MARWAN) in Rabat, Morocco;
  • Jing Luo, in Tokyo, Japan.

This brings us to a total of 45 mirrors so far, from all over the world.

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Book news

Sabri Ünal continued their 📚 bibliographic research, adding so many published books that we decided to completely reorganize the books as a structured file database, allowing us to easily process the information or change the page styling separately from the data.

This also triggered us to split the books page into 2:

As book descriptions don’t always clearly state the version of GIMP they pertain to, we used the release date of GIMP 2.10.0 (April 27, 2018) as the split date.

Last but not least, this new structure allows us to easily generate statistics, which we now show at the bottom of the books pages. At least 44 books were published after GIMP 2.10.0 release, and 305 were published before it. Therefore we are currently listing a grand total of 349 books about GIMP in 17 languages!

We remind everyone that we welcome book additions. If you know (or even are the author) of a not-listed-yet book about GIMP, please report the same information as other books in the list. Thanks!

Downloading GIMP 2.10.36

You will find all our official builds on GIMP official website (gimp.org):

  • Linux flatpaks for x86 and ARM (64-bit)
  • Universal Windows installer for x86 (32 and 64-bit) and for ARM (64-bit)
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Note: macOS packages are a bit late but will come shortly.

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s next

I believe it might be the next to last release in the 2.10 branch, though of course, this is still to be confirmed. What may happen in real life does not always align with plans.

In the meantime, we are working harder than ever to release GIMP 3.0. You will hear shortly about this in our next development release.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

GIMP now on Windows for ARM (experimental)

Par :Jehan

As architecture platform usage widens, Windows on ARM (64-bit) is now a thing. So we decided to support experimentally GIMP for Windows on ARM!

With the newly published revision 2, our universal installer of GIMP 2.10.34 for Windows (as found on our downloads page) will auto-detect the running platform and install the ARM build when relevant.

Thanks in particular to our Windows packager, Jernej Simončič, for his continuous work!

Future work

The “experimental” qualificative for this new support is for the following reasons:

  1. It is not as widely tested. We are aware of some issues already and hope that releasing this experimental build will help us get more feedback.
  2. Only Jernej has a machine with Windows on ARM so far. In particular none of the developers have such hardware, as far as we know. So we don’t expect to be able to fix issues for Windows/ARM as fast as for other supported platforms.
  3. Last, but not least, this additional build is not set up yet in our continuous integration platform, which means we cannot discover appearing issues as thoroughly and quickly as for other architectures, nor can we automatize builds as transparently as we wish.

How you can help

Aside from reports and patches, we really need to set up a Windows/ARM machine in our continuous integration platform. Indeed this is considered a blocker and may be cause for abandoning the experimentation when we release GIMP 3 since we don’t want to backtrack and get back to manual builds done by a single contributor on their personal machine for the 3.0 series.

This means that we are looking for anyone willing to help us set up a machine with Windows on ARM and configure it as a runner on our Gitlab project.

Because of obvious security requirements, such a volunteer would need to have sysadmin experience, willing to commit themselves in the long run (let’s not leave a Windows machine with holes on the internet) and have had some experience in FLOSS contributions.

It might also be interesting to coordinate with other cross-platform Free Software projects to share the administration burden of a CI runner which we can use together to build for Windows/ARM.

If you are interested, please get in touch on IRC or in the dedicated report.

GIMP 2.99.16 Released: Wilber Week 2023 edition!

Par :Jehan

Closer than ever to a release candidate for GIMP 3.0, we introduce the latest development version: GIMP 2.99.16!
This news covers some of the more noteworthy or interesting parts of this update and we are very happy to be able to showcase these.

GIMP 2.99.16: splash screen
New development splash screen, by Aryeom - GIMP 2.99.16

Note: the fun story behind this splash screen is Aryeom molding a pizza dough Wilber on the first evening at Wilber Week. The oven-cooked dough stayed with us during the whole stay. This release was dubbed the “Wilber Week 2023 edition” as a homage to our very successful contributor meetup.

This news lists the most notable and visible changes. In particular, we do not list here bug fixes or smaller improvements. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

GTK+3 port officially done

GIMP 3.0 has been known as the GTK+3 port version, so you will be happy to read that this port is finally over. To be fair, we still have a few minor deprecation warnings here and there, but nothing like the hundreds we used to have.

GimpAction infrastructure

Our last big work was to port how “actions” are handled, which in GTK vocabulary means shortcuts, their mechanism, but also how menus are handled and how generic widgets can be quickly assigned shared action code. Starting from GTK+3, actions moved to GLib (GtkAction became GAction) while losing a lot of features (everything user-facing basically, i.e. labels, descriptions, icons, and so on) or broken apart (the concept of shortcut itself stayed in GTK).
Therefore we had to reimplement the whole thing as a wrapper around GAction, called obviously GimpAction, because for us, these user-facing features are major parts of what makes an action (especially as we do a lot of GUI and code generation so things like labels or icons are not to be associated to a widget — be it a button, a menu item or anything else — but to the action assigned to this widget, for easy and generic reuse).

We also had to wrap a bunch of other widgets, such as our own menus (mostly because menus generated from menu models don’t have tooltips anymore in GTK+3, yet we make extensive use of tooltips) and menu models (GimpMenu and GimpMenuModel), our own toolbar and menu bar (GimpToolbar and GimpMenuBar) and more.

It took me about 2 months to finish while also having to take care of other code, maintenance and usual bug fixes. Boring and exhausting, but this is now done! 😅

It also gives us a whole new world of possibilities as we added new concepts which we wanted for a long time, such as the ability to associate a short and long label to an action (e.g. when it’s used in a contextual interface such as a menu vs. when it’s used without context, such as the action search). It is also the path for planned future improvements (e.g. for a future customizable toolbar).

We still have a bit more work to do to get our new menu and action code exactly how we want it, but we are in a good enough state to showcase it. It won’t feel very different to most of you (and you may also find issues), but not feeling too different was the point too.

Now there are much more immediate improvements which are worth noting.

Multiple shortcuts per action

The new Glib/GTK+3 actions make it possible to assign several shortcuts for a single action. For the time being, the shortcut dialog doesn’t allow you to do so, yet we already use this ability internally for default shortcuts. For instance number keypad keys are not the same as the ones from the number key row so we used to create a duplicate action doing the same thing to support both (because for most people Ctrl-1 should work the same whether from keypad or top row). Now we can just assign both variants to a same action.

As another example, it is now possible to support the special semantic media key (such as media key Copy, Cut and Paste which can be found on some keyboards).

An updated shortcut dialog allowing you to set your own multiple shortcuts might not come for GIMP 3.0, though hopefully not too long after.

Action Search improvements

Now that we have our own action wrapper, we made so that it also tracks its own menu position, so that we can show this menu path in the action search dialog. This will help people who prefer menus to better find their ways.

Action search dialog in GIMP 2.99.16
Action search dialog now showing menu paths - GIMP 2.99.16

You may also notice a small “Manual” 📓 icon in this screenshot. Clicking it will open the manual page for a given action (if no help section exists for this specific action yet, you will be redirected to the action search help page).

Alternatively, hitting the F1 key will open the help page of the selected action.

Improved GEGL operations’ GUI integration

GEGL is our image processing engine. Filters are implemented as separate modules, which we call “operations”. While it is released with a long list of default operations, third-party developers can implement their own filters, hence benefitting from automatic dialog generation, on-canvas live preview, curtain preview, preset saving, previous use settings history and more.

GEGL has been a major component since GIMP 2.10, yet we still needed specific code to place GEGL operations in menus.
As for third-party filters developers, they had to either implement a bogus plug-in to wrap their GEGL operation, or settle for being only visible in the long list of filters shown inside the GEGL operation tool.

Well this has changed as GEGL filters now have easy access to menus in their own right, just like plug-ins do.

From now on, GIMP reads the GEGL key "gimp:menu-path" to add an operation in menus. For instance, say that I wrote an artistic filter to stylize an image and I want it to be under the submenu Filters > Artistic. So my operation code could contain the following code:

  gegl_operation_class_set_keys (operation_class,
                                 "name",           "Jehan:my-style",
                                 "title",          _("My Super Cool Style"),
                                 "description",    _("Stylize an image the way I like it"),
                                 "gimp:menu-path", "<Image>/Filters/Artistic",
                                 NULL);

And here it is:

Easily adding a third-party filter to menus in GIMP 2.99.16
Easily adding a third-party filter to menus - GIMP 2.99.16

GIMP will generate automatically the GUI according to the properties declared in your operation.

Of course, you can also create your own menu folders. Say I create a bunch of filters which we use specifically for our movie project, I could create a submenu "<Image>/Filters/ZeMarmot" (or even a top-level menu. You’ll notice the “Girin” menu in my screenshot which is where we install our custom plug-ins already).

We will use this to simplify core GIMP code as well, even though for now, only two new GEGL filters use this feature.

ℹ️ About GEGL operation namespaces: you may notice that I prefixed my hypothetical filter name with “Jehan:”. This is a way to “namespace” your filters with a unique name and avoid clashes if someone were to implement a filter with the same name. Choose this namespace wisely, and in particular do not use “gegl:” or “svg:” namespaces which are reserved for GEGL core operations (and might even be forbidden some day to third-party operations).

The second big improvement is that your custom filters will now appear in the action search (/ key by default), whether or not you added them to a menu. It allows searching and running them very easily!

Third party filters are now searchable - GIMP 2.99.16
Third party filters are now searchable - GIMP 2.99.16

Tools

Text tool

While the on-canvas editor of the text tool is very practical, it was sometimes a bother as it is in your way. There are cases when you’d like to be able to see the bare canvas while editing text.

It is now possible thanks to the new option “Show on-canvas editor” to toggle its visibility.

Hiding the on-canvas text editor - GIMP 2.99.16
Hiding the on-canvas text editor - GIMP 2.99.16

Align and Distribute tool

The tool had been fully reworked in GIMP 2.99.14.

In this version, we modified the option “Use extents of layer contents” so that it applies to the alignment reference as well (not only the target objects).

Unified Transform tool

A patch was submitted to make the Transform Matrix selectable in the tool’s on-canvas dialog. This makes it easier to reuse the matrix in other software (while first testing in GIMP for immediate preview of the transformation, then copying and pasting the matrix).

Space Invasion

Space Invasion is our project to ensure color correctness everywhere we show or use colors, choose proper color defaults, propose relevant color options…

In this version, some work was done in internal code which was still assuming sRGB input or output and was used in a few situations. It is now possible to choose more easily out-of-sRGB foreground and background colors, and the Color Picker tool shows color values from the proper image space.

Still in the Color Picker tool (and the Sample Points dockable), a new “Grayscale (%)” display mode was added, which shows the pixel’s Grayscale value if the picked image were converted to Grayscale mode.

There is still much more work-in-progress regarding these interfaces, such as ensuring the colors are correctly displayed in the various color boxes (not only on canvas), that we get reasonable behavior on shared color widgets when switching from an image’s color space to another, and so on.

Also we plan to become more explicit on the color space currently in use on all these shared interfaces where you can choose or show colors (Colors dockable, Foreground/Background colors, Color Picker tool, Sample Points dockable…). This is going to be one of the biggest parts of the next development release.

Graphical User Interface

New option “Merge menu and title bar”

In the Preferences dialog, Image Windows settings, you will find a new checkbox titled “Merge menu and title bar“. This is basically an option to switch to Client Side Decoration for the image windows, which mostly means that the menu will be merged inside the title bar, hence saving vertical space.

Preferences settings
Preferences settings “Merge menu and title bar” - GIMP 2.99.16

Note: this option doesn’t work for macOS which always has its own platform-specific menu style.

Since the header bar is set to be hidden when maximizing, if you checked “Show menubar” for the “Default Appearance in Fullscreen Mode” in Preferences > Image Windows > Appearance, the menu will be temporarily moved out of the title bar. This makes the menu visible (if relevant option is checked, which is the default) even in fullscreen mode.

Now we know that client-side decoration is quite a controversial feature. You find people who love this with all their might as much as the opposite (in particular because you lose window styling consistency since decorations are not handled by the window manager anymore). Moreover we are being told that in some specific cases, the system refuses to drop its own window decoration and you may end up with 2 title bars (one drawn by the system and one by GIMP).

For these reasons, this option is disabled by default.

Themes

The dark variant of the Default theme has been reworked because it was a bit too dark. The older version has been moved temporarily as a new theme titled Darker, though we aren’t sure if we will keep it.

During our last in-person developer meeting, where this work happened, the concept of a “High Contrast” theme was also evoked. At some point, we even discussed the possibility to implement settings for color customization of the theme.

Now we are not sure which will happen for GIMP 3.0. It will really depend on whether we get more theme contributions by the time we release.

Fill and Stroke selection/path improvements

The “Stroke/Fill Selection Outline” or “Stroke/Fill Path” dialogs used to propose to stroke (respectively fill) either with a “Solid color” (in fact the foreground color) or with a “Pattern“. We split the “Solid Color” into “Foreground color” and “Background color“, so that you don’t have to constantly switch their positions.

Furthermore the “Stroke Selection” and “Stroke Path” dialogs in particular have been reorganized in a stack switcher making the 2 options “Line” and “Paint tool” easier to use.
As a result of saving dialog space, we don’t hide anymore the “Line Style” settings under an expander, in order to show more prominently the line rendering options.

Reorganized Stroke dialogs - GIMP 2.99.16
Reorganized Stroke dialogs - GIMP 2.99.16

Middle Gray (CIELAB)” layer fill option

When creating a new image or a new layer, there is this “Fill with” field where you can choose the created layer color among the FG/BG colors, white, black, transparency or a pattern. We added “Middle Gray (CIELAB)” which corresponds to 50% of perceptual lightness (the L* of CIELAB or CIELCh), or again 18.42% luminance.

Though the concept of “Middle Gray” may have different values depending on the chosen definition, this is one of the most common, considered as perceptually halfway between darkness and light to the average human observer’s eye.

File Formats

A major chunk of the work on file formats is from Alx Sa (known as Nikc in previous news), who has a knack for adding support for various formats and improving the existing ones. And that’s awesome work so bravo Alx! 👍

FITS

FITS is an image format most commonly used in astronomy.

While we used to embed our own code for FITS support, we now ported it to cfitsio, a library maintained by the NASA.

This allows us to import compressed FITS files (GZIP, HCOMP, PLIO, RICE) in 8/16/32-bit and float/double precision. As a general rule, it will greatly improve our support level for this format.

Since we now use an external library, FITS support becomes optional (especially relevant to Linux distribution packages; on our own packages, it is always present).

Additionally we would like to thank Siril (the astronomical image processing tool) whose developers exchanged with us to improve the support in GIMP.

PSD (and a bit of TIFF and JPEG)

Clipping paths can now be imported from and exported to PSD files!

If your image has any path, a PSD export dialog will propose you to “Assign a Clipping Path“, and a combo menu will allow you to select the path to use.

Exporting a clipping path - GIMP 2.99.16
Exporting a clipping path - GIMP 2.99.16

This clipping path can be used in programs which support clipping paths, e.g. Scribus (desktop publishing) already lists all the paths as usable as clipping path yet will highlight in green the selected clipping path hence allowing to better tag the path you want to use for this purpose.

Using a clipping path in Scribus - GIMP 2.99.16
Using a clipping path in Scribus (note in particular the path highlighted in green) - GIMP 2.99.16

Similarly, on import, any clipping path information stored in the PSD will be reused as default for export.

Another interesting change is that on import, if some PSD features are not supported, a compatibility warning dialog will be displayed, listing all the missing features:

PSD compatibility warnings when importing a PSD - GIMP 2.99.16
Compatibility warnings when importing a PSD - GIMP 2.99.16

This way, you can make an informed decision when working with exchanged PSD files.

Note that the export dialog also has a new “Compatibility Notice” regarding legacy layer modes, as some people have noted that they have better compatibility when exporting PSDs and reopening them in Photoshop.

Last but not least, a new PDB procedure "file-psd-load-metadata" was created to allow other plug-ins to delegate PSD metadata loading to the PSD plug-in. Indeed a common usage in various file formats is to self-extend by storing custom metadata in Photoshop proprietary metadata format. We already implemented 2 such usages:

  • TIFF images can contain image-level proprietary resources in the TIFFTAG_PHOTOSHOP metadata, as well as layer-level resources (e.g. PSD layers instead of TIFF pages) in the TIFFTAG_IMAGESOURCEDATA metadata. GIMP now supports both of these and will load what it supports.
  • JPEG images can contain PSD metadata on image-level only, such as paths. These will now be loaded as well.

Same as in the PSD plug-in itself, if some of these metadata are unsupported, a compatibility dialog will be raised.

These will enable a whole new world of support for JPEG and TIFF (relative to the specific proprietary PSD resources) as they will sync to the support level of the PSD plug-in instead of duplicating code.

JPEG

Additionally to the various metadata-related improvements, the option “4:2:2 horizontal (chroma halved)” got renamed to “4:2:2 (chroma halved horizontally)” and the option “4:2:2 vertical (chroma halved)” to “4:4:0 (chroma halved vertically)“.

Research indicates these to be the most usual notations for these options these days.

JPEG-XL

We added initial support for CMYK(A) export: Key and Alpha data is saved in extra channels and the simulation profile is saved as well.

Per the specification developers, the format does not support ‘naive’ CMYK conversion, so a profile is required for export. The option “Export as CMYK” will be disabled if no CMYK simulation profile is set.

DDS

We enabled OpenMP support when available on the build machine. This means in particular that parallel processing is enabled, which should improve processing speed in some cases.

New image format supports: PAM, QOI, Amiga IFF/ILBM, DCX

We recently added both import and export support for the following formats:

  • PAM (grayscale and RGB, with or without alpha): essentially PPM files with a different header format and alpha/16 bit support.
  • QOI: the funnily named “Quite OK Image” format for lossless image compression of color raster images (8-bit per channel), with or without an alpha channel.

We added import-only support for the following formats:

  • Amiga IFF/ILBM: initial support for importing indexed ILBM, Amiga PBM, and ACBM images.
  • DCX: containers that store up to 1023 PCX files.

Now it may seem useless to support weird, old if not sometimes forgotten formats but this is actually important (at least the import ability). This can be useful for archiving, being able to display old images one may have created years ago, reusing and work on existing data.

Ultimately GIMP aims at being able to load any format which has existed under the sun!

Note: some of these new supports might not be yet in our official packages (e.g. Amiga IFF/ILBM), though should be soon.

Plug-in API

The development interface for plug-ins continues to evolve towards its final state, though it is still one of the last big worksites now that the GTK+3 port is over.

Resources data get their own class

GIMP plug-ins used to refer to various resources (brushes, fonts, gradients, palettes, patterns, etc.) by name. We moved into creating specific classes (GimpBrush, GimpFont, GimpGradient, GimpPalette and GimpPattern respectively) in libgimp for these data, under a common parent class GimpResource. This moves this part of the API to an object-oriented interface (same as other existing types for images, layers…) which will be a lot nicer for bindings.

Moreover we move to unique IDs for each resource, which is not name-based. While this part is still mostly libgimp-side, we plan on making names less of an identifier in core code as well. This indeed creates name clashes much too easily, especially if you exchange data with other people (it is very easy to find custom brushes or fonts made by different people and using the same name). We are working on making GIMP much more robust to these kind of real-life name clashes.

Plug-in localization improved

Some work was done on reviewing our plug-in localization rules. While we used to have the menu strings localized by the core application itself, the rest was localized by the plug-in process. This has always been confusing to third-party developers (“Should I use _() or N_() to translate strings?“). Now it’s very simple: the plug-ins takes care entirely of their own localization, hence always send already translated strings to the core process. It also means that changing GIMP’s language settings triggers a reload of all plug-in registrations (to update strings).

Apart from simplifying the rule, it also prevents a possible clash for the gettext catalog names (in case 2 plug-ins were to use the same catalog name, it doesn’t matter anymore as each process handles their own).

And finally, even though we still recommend gettext (we also provide infrastructure functions for plug-ins to easily set up plug-in localization with gettext), it make third-party plug-in developers freer to choose their own localization infrastructure if they prefer something else.

All these changes are also part of a longer term work to move plug-ins to self-contained extensions which will be easily sharable and installable.

More specialized plug-in argument types

While GStrv was added in GIMP 2.99.10, it was not serialized into config files (our infrastructure to store plug-in settings across runs), until this version.
A very cool first usage of this ability is for the Script-fu console which now remembers the history of run commands.

Moreover plug-ins now have access to GBytes arguments for all the cases where we were misusing arrays of unsigned integers on 8-bit instead, in order to represent binary data (or more generally custom data, which can be anything, from text to binary). The GimpUint8Array type has been removed as a possible plug-in argument type and all its uses replaced.

And more…

More functions were added, for instance to enhance the capabilities of the GUI generation for plug-ins. Some encoding issues were handled and various functions’ annotations and usage have been clarified.

For a more exhaustive list of functions added, removed or changed, we advise to look at the NEWS file.

GEGL, babl

As usual, this version of GIMP is accompanied by new versions of babl and GEGL:

babl 0.1.104 and 0.1.106 improved the LUT code and provide faster startup by caching balanced RGB to XYZ matrices.

GEGL 0.4.44 and 0.4.46, in addition to the usual bug fixes, started to add the "gimp:menu-path" key to some operations, improved gegl:ff-load, gegl:ff-save to make them build with FFmpeg 6.0 (though gegl:ff-save still doesn’t work properly with this version of FFmpeg), and added 2 new operations:

gegl:chamfer
New operation in workshop that use gegl:distance-transform and gegl:emboss, based on LinuxBeaver’s research into modeling different bevels with combinations of blurs.

Applying gegl:chamfer to text for a bevel effect - GIMP 2.99.16
Applying “gegl:chamfer” to text for a bevel effect - GIMP 2.99.16
gegl:local-threshold
Neighborhood aware and optionally antialiased thresholding of an image. The operation is equivalent to doing an unsharp mask with a large radius, followed by scaling the image up applying threshold and scaling down by the inverse of the scale up factor.
If you have a photo and you want to make a decent highlights vs shadows threshold it gives a lot better results than the built-in threshold. It finds per-pixel adapted threshold levels for a gaussian average from the neighborhood radius. In addition it permits creating anti-aliased threshold masks (if the radius is set to 0, the behavior is similar to the built-in threshold op).
From a UX point of view, the only thing missing for this new filter taking over the current threshold filter is specifying the rgb⇒gray conversion, then the additional parts of the UI would be options for threshold.
Beware though that antialiasing is achieved by scaling the input up and down - so high settings make it churn with relatively little quality gain.

Left: original; top-right: current Threshold filter; bottom-right: new Local Threshold - GIMP 2.99.16
Left: original; top-right: result with current Threshold filter; bottom-right: result with new Local Threshold - GIMP 2.99.16

Release stats

Since GIMP 2.99.14:

  • 105 reports were closed as FIXED in 2.99.16.
  • 123 merge requests were merged.
  • 1115 commits were pushed.
  • 25 translations were updated: Basque, Bulgarian, Catalan, Chinese (China), Chinese (Taiwan), Danish, Esperanto, French, Georgian, German, Greek, Hungarian, Icelandic, Italian, Lithuanian, Persian, Polish, Portuguese, Romanian, Russian, Slovenian, Spanish, Swedish, Turkish, Ukrainian.

67 people contributed changes or fixes to GIMP 2.99.16 codebase (order is determined by number of commits):

  • 34 developers: Jehan, Alx Sa, Michael Natterer, Jacob Boerema, Simon Budig, Luca Bacci, Niels De Graef, Daniel Novomeský, Lloyd Konneker, Øyvind Kolås, Lukas Oberhuber, Ian Martins, programmer-ceds, Andras Timar, Andre Klapper, Carlos Garnacho, Idriss Fekir, Jordi Mallach, Sabri Ünal, Shubham, Stanislav Grinkov, Stephan Lenor, Venkatesh, kotvkvante, lapaz, lillolollo, programmer_ceds, valadaptive, 依云, Anders Jonsson, Jordi Mas, Richard Szibele, Tomasz Golinski and Florian Weimer.
  • 31 translators: Martin, Yuri Chornoivan, Ekaterine Papava, Alexander Shopov, Hugo Carvalho, Jordi Mas, Sabri Ünal, Rodrigo Lledó, Asier Sarasua Garmendia, Anders Jonsson, Alan Mortensen, Cristian Secară, Sveinn í Felli, dimspingos, Alexandre Prokoudine, Balázs Úr, Chao-Hsiung Liao, Piotr Drąg, Tim Sabsch, Kristjan SCHMIDT, Luming Zh, Marco Ciampa, Alexandre Franke, Aurimas Černius, Balázs Meskó, Christian Kirbach, Danial Behzadi, Emin Tufan Çetin, MohammadSaleh Kamyab, Zurab Kargareteli and حجت‌اله مداحی.
  • 10 resource creators (icons, themes, cursors, splash screen, metadata…): Jehan, Michael Natterer, Alx Sa, Stanislav Grinkov, Lloyd Konneker, Ville Pätsi, Aryeom Han, Daniel Novomeský, Anders Jonsson and Mark.
  • 5 documentation contributors: Jehan, Lloyd Konneker, Anders Jonsson, Corey Berla and Michael Natterer.
  • 15 build or CI contributors: Jehan, Alx Sa, Jacob Boerema, Michael Natterer, Daniel Novomeský, Lloyd Konneker, Michael Schumacher, Stanislav Grinkov, Niels De Graef, Simon Budig, Lukas Oberhuber, Florian Weimer, Luca Bacci, lillolollo and Jordi Mallach.

Contributions on other repositories in the GIMPverse (order is determined by number of commits):

  • 1 contributor to babl 0.1.104 and 0.1.106: Øyvind Kolås.
  • 13 contributors to GEGL 0.4.44 and 0.4.46: Øyvind Kolås, Marco Ciampa, Martin, Asier Sarasua Garmendia, Ekaterine Papava, Piotr Drąg, Yuri Chornoivan, Alexandre Prokoudine, Jan Tojnar, Rodrigo Lledó, Sabri Ünal, Tim Sabsch and dimspingos.
  • 2 contributors to ctx since 2.99.14 release: Øyvind Kolås and Carlos Eduardo.
  • 3 contributors to gimp-macos-build (macOS build scripts) since 2.99.14 release: Lukas Oberhuber, Kyungjoon Lee and Mingye Wang.
  • 2 contributors (and a bot) to the beta flatpak: Jehan, Daniel Novomeský and flathubbot.
  • 7 contributors to our main website (what you are reading right now) since 2.99.14 release: Jehan, Sabri Ünal, Jacob Boerema, Aryeom Han, Michael Schumacher, lillolollo and Tim Spriggs.
  • 9 contributors to our developer website since 2.99.14 release: Jehan, Bruno Lopes, Jacob Boerema, Krek Krek, Mark, Alx Sa, GoldenWon, Michael Schumacher and kotvkvante.
  • 16 contributors to our 3.0 documentation since 2.99.14 release: Andre Klapper, Jacob Boerema, Anders Jonsson, dimspingos, Yuri Chornoivan, Jordi Mas, Nathan Follens, Tim Sabsch, حجت‌اله مداحی, Alexander Shopov, Balázs Úr, Danial Behzadi, Hugo Carvalho, Martin, Piotr Drąg and Rodrigo Lledó.

Let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. Our community is deeply thankful as well to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Team news and release process

Our release procedure is getting much better at each new version. I would like to thank our testers who did an awesome job raising the few release-blockers we had for GIMP 2.99.16, as well as the people who followed up on these issues, handled technical responses, created or updated packages, and more.

In particular, a huge thank you to (by alphabetical order) Alx Sa, Anders Jonsson, Daniel Novomeský, Hubert Figuière, Jacob Boerema, Liam Quin, lillolollo, Luca Bacci, Lukas Oberhuber, Mark Sweeney, Sevenix, ShiroYuki_Mot and Uzugijin!

As a reminder, if anyone is willing to help us improve GIMP by participating to release testing, please open a report on the developer website tracker with the following information:

  • The Operating Systems (Linux, Windows, macOS, *BSD…) you will be testing on, with details if possible (which Linux distribution and version? Which version of Windows or macOS?…).
  • The architectures you will be testing on (x86, ARM… 32 or 64-bit).
  • If you will test our pre-built packages or from source (custom builds).

Then we will notify you in the next release testing phase (stable and development releases).

Our expectations from testers:

  • Make sure you receive Gitlab notifications when your nickname is cited (we advise to set your Global notification level to “Participate” or “On mention”).
  • Follow the release report to know what’s happening and when you are needed.
  • Release reports are not a place where we teach people how to use basic functions of a computer. Testers don’t have to be developers, but they have to be able to follow basic technical guidelines, give feedback more useful than “it doesn’t work” and be able globally to interact with developers.
  • Be nice and welcoming: everyone here is a volunteer, testers as much as developers. This is Community, Free Software, not a soulless job. 🤗

Around GIMP

Mirror news

The Fremont Cabal Internet Exchange contributed a new download mirrors to distribute GIMP, based in Sheffield, South Yorkshire (United Kingdom). With 11 mirrors out of 41 in total, they are clearly our biggest mirror sponsor! Thanks FCIX!

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Book news

Sabri Ünal did an awesome bibliographic research, added 39 books and updated even more in our “Books About GIMP” page. We won’t list all the changes as there are just too many, though you can read the detailed merge request descriptions (!93 and !98).

We are starting to get a more up-to-date books page with recent publications. Nice! 📚🤓

We remind everyone that we welcome book additions. If you know of a not-listed yet book about GIMP, please report the same information as other books in the list. Thanks!

Downloading GIMP 2.99.16

GIMP 2.99.16 is only available for Linux and Windows for now. Our macOS packaging is currently blocked by our inability to notarize the packages until the GNOME Foundation fixes their Apple account. We will keep you updated.

Update from July 11: GIMP 2.99.16 is now avalaible on Linux, Windows and macOS!

You will find all our official builds on GIMP official website (gimp.org):

  • Linux development flatpak
  • Windows installer
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s next

Though the roadmap shows a few more unfinished items, the 2 biggest workfields to come for the next release are the API redesign — which is well on its way but is important enough that we’ll need to really look into details —, and the Space Invasion project (making sure every existing color-related feature is reliable).

As we are really reaching the “stabilization” stage in our development, while our requirement rule was based on “Debian testing” (whichever it was), we recently froze our dependency bumps on the just released Debian 12 (bookworm). It means that we won’t bump any minimum requirement over what is in Debian 12 (except for optional dependencies, and even only so as exceptional cases and with very good reasons). This is because we plan to release soon enough that we need to make sure GIMP can be packaged on all reasonably recent distributions.
Of course, for our own packages (Windows, macOS and Flatpak), we will always use the latest dependency versions anyway.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

Wilber Week 2023: report

Par :Jehan

With the unfortunate health situation of past years, GIMP team had not been able to meet since 2019. This affected the software evolution (commit numbers have been divided by about half!) because for many of us, GIMP is more than a software: it’s people, it’s a community. So motivation shrank by lack of social encounter.

Therefore we are glad to announce the return of Wilber Week: our week-long meeting of GIMP contributors (started back in 2017 as a companion to the Libre Graphics Meeting).

A month ago, we had our second Wilber Week in Amsterdam!

Wilber Week 2023: GIMP team
Wilber Week 2023: GIMP/Inkscape contributors (from left to right: Niels, Mitch, Simon, Liam, Ville, Aryeom, Jehan, Øyvind, Chris and Schumaml) — photo by Niels, CC by-sa

Setting up

This year, 10 GIMP contributors showed up, by alphabetical order:

  • Aryeom: ZeMarmot‘s film director, 11-year contributor, graphics contributor, UI design, alpha-tester…
  • Carlos Garnacho: long-time contributor and advisor for anything input device, GTK or GNOME related, contributor and maintainer for various important bricks in GNOME.
  • Jehan: myself, 11-year contributor, GIMP co-maintainer, ZeMarmot technical side…
  • Liam Quin (demib0y): 15+-year contributor, community helper, working to keep GIMP community friendly and welcoming…
  • Michael Natterer (mitch): 26+-year contributor, my genius co-maintainer…
  • Michael Schumacher (schumaml): 20+-year contributor, administrator, brilliant triager, community helper and more…
  • Niels de Graef: 4+-years contributor, big contributor as well in GNOME, GTK and more…
  • Øyvind Kolås (pippin): 20+-year contributor, GEGL maintainer, digital media toolsmith…
  • Simon Budig (nomis): 25+-year contributor, cares about keeping GIMP a nice community forever…
  • Ville Pätsi (drc): 22+-year contributor, photographer, graphics contributor…

Additionally we invited 2 Inkscape contributors. What started as a simple toot on Mastodon transformed into a private discussion with Martin Owens from Inkscape who was hoping to discuss color management with us. So we invited them to enjoy our hacking retreat and discuss further!

In the end, Marc Jeanmougin, Inkscape developer, and Chris Rogers, graphics contributor, spent the week with us!

We were all lodged in a fricking century-old sailing boat. No joke! That was an insanely cool place where we could start hacking from day one!

Wilber Week 2023: hacking in a sailing boat
Wilber Week 2023: hacking in a sailing boat (from left to right: Schumaml, Mitch, Jehan, Carlos, Marc) — photo by Niels, CC by-sa

About the city itself, let me state for the record that, as a vegan and pro-soft transportation, Amsterdam seems like a very nice place to live in!

Blender Foundation headquarters

The Blender Foundation gracefully lent workshop and meeting rooms to our team.

Wilber Week 2023: GIMP contributors entering Blender headquarters
Wilber Week 2023: GIMP contributors entering Blender headquarters — photo by Schumaml, CC by-sa

Of course, having “desks” was not our real reason to choose this office. It was very cool to meet Blender teams. We were also able to have various interesting discussions. Quite notably, Nathan Vegdahl from Blender was extremely welcoming and showed us a lot of very cool stuff!

As was expected, we discussed about color management, in particular in Wayland as Sebastian Wick, major contributor for color management in Wayland was pulled in a few times (thanks to Niels!) through remote video calls. This was very constructive!

Wilber Week 2023: meeting with GIMP, Inkscape, Blender and Wayland contributors in Blender headquarters
Wilber Week 2023: meeting with GIMP, Inkscape and Wayland contributors in Blender headquarters (left to right: Liam, Øyvind, Nathan, Marc, Jehan, Mitch, Simon, Niels; and Sebastian on screen) — photo by Aryeom, CC by-sa

Bottom line: the interactions with Blender folks made the trip quite worthwhile!

In the same time, there were more things I was hoping to discuss, such as better file exchange and interactions between our programs (think Libre Graphics Suite, a major gripe we have at ZeMarmot project as we work with all these software and it’s not always easy!). There was already so much going on that this didn’t happen. Hopefully the opportunity will come again!

Immediate consequences

Bug fixing! Mitch is back!

This was a very packed week for hacking on GIMP, fixing bugs, improving long overdue code and so on. A huge part of this was thanks to the fact that we got our co-maintainer back, Michael Natterer, a.k.a. mitch!

We missed him dearly and it’s so good to have him looking over our code once more, as well as hacking frenziedly until late at night, like the old times!

Wilber Week 2023: the maintainer sleeps
Wilber Week 2023: where has been mitch for 2 years? Turns out he was just sleeping… — photo by Jehan, CC by-sa

Of course, a lot of other old-timers came back to code for the occasion, so let’s not forget them all!

Improvements

Among the many things which happened during this very eventful week (or as direct consequences), let’s mention:

  • Simon Budig should be commended for fixing warnings, cleaning code and updating code away from deprecated API!
  • Niels de Graef and Carlos Garnacho helped with various GTK- and Wayland-related fixes. This also resulted in patches in GTK or other dependencies, not only in GIMP.
  • The plug-in API got seriously worked on, adding support of GBytes as plug-in arguments, improving the new GimpResource class and subclasses allowing plug-ins to easily manipulate various data (brushes, dynamics, patterns…) and more.
  • Autotools is finally gone from our main repository! (though it is still present in the stable branch)
  • Our Continuous Integration now shows JUnit reports from meson unit tests.
  • Ville is getting used to improving our themes: he did the 2.10 ones, now again he helped on the Default 3.0 theme, improving work started by other contributors.
  • As a direct result of Wilber Week, Carlos implemented, soon after, pad customization ability to GIMP (with a very nice write-up on this work). As review will take some time, it won’t be in 2.99.16 though will definitely end up in GIMP 3.0!
  • Aryeom worked on an updated logo, with the help of various GIMP contributors (in particular Ville, Øyvind and Simon) as well as Chris from Inkscape. This is still work-in-progress.
  • Some improved GEGL integration discussion and work happened during the week, then continued after, allowing to easily add third-party GEGL operations in GIMP’s menu and search for them in the action search (note: implementation changed since these toots; not all operations end up in menus now, only when a specific metadata is present in the operation).
  • Aryeom updated the splash screen for the next development version (to be continued…).
  • While they couldn’t be present unfortunately, we shouldn’t forget Jacob Boerema, Alx Sa and others who continued to improve GIMP remotely in the same time!
  • Since we had 3 projects selected in GSoC 2023 with Liam and myself as mentors, we had GSoC meetings as remote calls with the students.

Dropping bitcoin donation method

We have had a bitcoin address on the website. Some people have asked for more crypto-currency options. With a rise in scams, high energy use and differing national tax implications, we have decided — after discussion and a vote during Wilber Week — to no longer feature a bitcoin donation link.

The donations in bitcoin have been received, some of them used, but we are still working on how to properly channel these funds towards our expenses.

Making plans

A foundation?

It turns out that we have been interviewed by Pablo Vazquez while in Blender’s, so the cat is out of the bag in a quite public way now: we have been trying to set up our own entity. But first, since I teased you, here was the interview:

Wilber Week 2023: GIMP’s Wilber Week 2023 at Blender HQ, by Pablo Vazquez (featuring Simon, Jehan and Mitch)

In case you wonder, the slides can be found here, they were taken from a end-of-event presentation I gave to Blender folks.

Wilber Week 2023: the EOF talk
Wilber Week 2023: the EOF talk — photo by Aryeom, CC by-sa

Making a proper entity for GIMP is something which has been on my mind for many years and which I started to discuss with others of the team, and with friends from other non-profits to help me find the best way, since 2019! After some hiatus on this project, I revived my work on it late 2022, and we are actually quite advanced, though I will refrain on giving too much details now in order not to jinx it.

Let’s see how it pans out!

Now something to be clear about: GIMP has always been a bit of a messy and friendly community project. And that’s part of what I like about it: this bit of anarchy. Whatever we build to support the project, I will always fight for this spirit to live on. This was in fact one of the difficult part of setting up an organization and why it took so long: doing so without the organization taking over the project, but instead as a support to the community.

GIMP 3 and onward! ⛵

Clearly this Wilber Week made me trust that my initial plan (outlined in the 2022 report as hoping to have GIMP 3.0 release candidates this year) should be possible. If we can keep the community as lively, there is high chance to see this happen.

We are clearly sailing in exciting times, right now, toward a very cool future! 😄

What’s next

For anyone interested, the meeting page on the developer website gives a bit more details on what happened, what was actually discussed, meeting notes, etc.

Right now, we are deep into preparing the release of the next development version of GIMP (GIMP 2.99.16). And while it’s not even out, we are already quite excited about the next one (which might even be a release candidate in the best case!).

In the meantime, do not forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

GIMP in GSoC 2023

Par :Jehan

This year again, GIMP project got selected as mentor organization in the Google Summer of Code.

Applications by contributors are opening today (Monday, March 20, 2023) and will close on Tuesday, April 4, 2023.

Project ideas

On our new developer website, we listed a few ideas which might be suitable for a GSoC. These range from core color science projects to UX improvements, build system updates or even making a website for our future extension platform.

Obviously this list of ideas is far from exhaustive and we definitely welcome your propositions. Even better, if you have great ideas of your own, it may play in your favor, as long as they are realistic projects which can be finished within GSoC timeframe, or at least broken down in usable parts.

Requirements

As already explained last year, and again in our internship page, if you want to participate, some of the most important requirements are:

  • Get familiarized with our code by fixing a few patches beforehand. You don’t have to work on extra-complicated bugs or features at first (reports labelled “Newcomers” are probably good first-patch targets), nor does it absolutely need to be related to the topic of your planned project. We mostly need to interact with you on a technical topic as a first approach.
  • Communicate! Don’t just drop your project out of the blue on the GSoC interface (several people did this last year). Come and discuss your project ideas with us on IRC. You may also open a report on our issue tracker detailing your proposition.

GIMP Help Manual 2.10.34 Released

GIMP Help Manual 2.10.34 is finally out, with many documentation improvements and more supported languages.

This news lists the most notable and visible changes. In particular, we do not list here the bug fixes. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Introduction

The release of a GIMP Help manual has been long overdue. We published a 2.10.0 test release, but that was never meant to be an official release. Due to the lack of volunteers and the amount of documentation needing updates, this test release eventually became the de facto first 2.10 release, although it was outdated in a lot of places and missing documentation for newer features.

There still is more work to be done, but after a long period of hard work, the manual is finally in a state where we can present you a new official release.

Online Manual

Not that we want to discourage you from using this release version of the manual, but the online manual is being updated daily. It should generally be your first choice, unless you have limited internet bandwidth or other reasons to prefer the offline version.

We modernized our website to be more in line with the main GIMP website and improved the information about our manuals. New automated builds are published to our website once a day. Even better, our website now shows the completion status for each language. A lot of languages still need considerable work. If you would like to help improve that, please visit https://docs.gimp.org/help.html for more information.

Translations

Several new translations are being worked on: Czech (restored), Hungarian, Portuguese, Ukrainian. In addition to these, installers are now also available for Slovenian and Swedish, which were missing from the 2.10.0 test release. Persian was added too, but since no actual translations for the 2.10.34 manual were made yet, we do not supply an installer for that. Almost all other languages were updated to some degree.

Documentation Updates

A large part of the manual has seen updates. In some cases only small updates, but many pages have seen considerable changes.

Some highlights are:

  • All GEGL filters, some of which were not documented at all, are now covered.
  • The new layer modes introduced in GIMP 2.10.0 are finally documented, including examples of each mode.
  • The getting stuck section was updated and extended to cover more problematic situations.
  • Missing preferences were added, others that are no longer there were removed.
  • The Script-Fu tutorial got revised.
  • Context sensitive help ids in GIMP were synchronized with the manual. This means that it is now a lot less likely you will encounter a missing help page.

Most parts of GIMP’s interface should now be documented. If you see anything that is still missing or that could be improved, don’t hesitate to open a documentation issue.

Downloading GIMP Help Manual 2.10.34

GIMP Help Manual 2.10.34 is available on GIMP’s documentation website (docs.gimp.org) in two formats:

  • A source distribution
  • Windows installers for each available language

What’s next

Since GIMP is getting closer to a 3.0 release, we need to update our documentation to add all changes that have been made compared to GIMP 2.10, and of course we will also keep updating the 2.10 manual. To make this effort more manageable, we would really welcome more helping hands.

GIMP 2.10.34 Released

Par :Jehan

GIMP 2.10.34 is finally out, with fixes and some improvements backported from our development codebase.

This news lists the most notable and visible changes. In particular, we do not list here the bug fixes. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

File Formats

TIFF

Apart from various bug fixes, the TIFF import dialog now gets a new option labelled “Show reduced images“, which is backported from the development release GIMP 2.99.14.

Here is what we said about this option when initially announced:

The TIFF format has a concept of “reduced page”. Until now, we were assuming pages tagged as “reduced” to be thumbnails. Yet this is not always the case. For instance we had feedback from makers of medical devices which were using “reduced pages” as sub-sampled images generated by said devices. They needed GIMP to be able to load all the pages as layers (the main images and the sub-sampled ones).

GIMP 2.10.34: importing reduced pages of TIFF files
Importing reduced pages of TIFF files - GIMP 2.10.34

This is why we added a new option called “Show reduced images” which lets you decide whether you want to load these or not. The option will be checked by default through a small heuristic: if there is only 1 reduced page and it’s in the second position, then it’s probably a thumbnail (as per common usage across software); in which case we disable the checkbox by default. Still in the end, the choice is yours!

PSD

We also backported a bunch of features from the development branch to improve PSD support.

In particular:

JPEG XL

While JPEG XL import has been possible in the stable branch since GIMP 2.10.32, export support has now been backported too in this version, though it is limited to 8-bit lossless.

Additionally, metadata support on import (only) has been backported, making this version of GIMP much more useful for anyone working with this format.

Note for packagers: metadata support in JPEG XL requires libjxl 0.7.0 or over.

PDF

Our code for PDF import and export was pretty oblivious of the ability to have transparency in PDF. This is now changing.

From GIMP 2.10.34 and onwards, the PDF import dialog will propose an option labelled “Fill transparent areas with white“. It will be checked by default (thus providing the old behavior) because most office software seem to create PDF files assuming reader software will fill the background with white. Unchecking the box would not render the expected result. This is likely why our code was historically doing the same as other reader software. Nevertheless for the cases where you were actually intending transparent background upon loading, it will now be possible.

Import a transparent PDF in GIMP 2.10.34
PDF import in GIMP 2.10.34: new “Fill transparent areas with background color” option

Symmetrically when exporting a PDF, we now propose an option labelled “Fill transparent areas with background color“, letting you decide whether or not you want to add an opaque background, hence getting rid of transparency, or leaving your image with transparency, exactly as you see it in GIMP canvas.

Export a transparent PDF in GIMP 2.10.34
PDF export in GIMP 2.10.34: new “Fill transparent areas with white” option

Of course note that, as said above, not all PDF readers handle transparency. Very often, many readers (including web browsers’ readers) will fill the background with white. Yet if you have a more compliant PDF reader or editor, this new usage can be of interest.

Raw data

🛈 We are talking here of “raw data” where you export your pixels as contiguous or planar data directly, without following a specific file format, and not RAW file formats as are usually called formats used by digital cameras (for these, we still prefer to pass through good raw developer software, such as darktable or RawTherapee).

As a partial backport from GIMP 2.99.12, GIMP will now export your image to raw data at the precision used by your image backend. In other words, you can export high bit depth raw images.

Note though that improvements to this plug-in in the development version were not fully backported. In particular, you may not be able to load back the high bit depth images that you exported. The reason is that the changes required for this would modify considerably the PDB procedure tied to this plug-in, which would break third-party scripts relying on this procedure to load raw data as images.

Template selector in Canvas Size dialog

The template selector introduced in the development version GIMP 2.99.6 has now been backported, allowing you to resize your canvas more easily when using common image formats.

Template selector in Canvas Size dialog - GIMP 2.10.34
Template selector in Canvas Size dialog - GIMP 2.10.34

Item dockables with “Visibility” and “Link” headers

As a very partial backport of the many usability changes which happened in the development version 2.99.10, the Layers, Channels and Paths dockables now feature a small header above the items list, containing the “eye” and “chain” icon, hence making the columns more discoverable.

Icon header in Layers dockable in GIMP 2.10.34
“visibility” and “link” icon header

Note: the outline effect when hovering the visibility and link columns was already backported in GIMP 2.10.32.

Improved desktop color-picking (Windows, X11)

GIMP has 2 color-picking features: the Color Picker tool which works only within the opened images yet with greater color management and the color picker button in the Colors dockable, which can color pick anywhere in the display and relies on the infrastructure allowed by the OS or desktop you are currently running on.

On Windows, the color-picking feature has been entirely rewritten with OS-dedicated code which works much better with multiple monitors, even when using different PPI scales, for instance when mixing high and low pixel density displays (this fixes some coordinates mistracking bug our previous implementation had).

On Linux/X11, we are backtracking to fix a regression in desktop color-picking. We used to follow recommendations for the new Wayland path, which is to favor color-picking “portals” when available. Unfortunately most (if not all?) these portals still don’t give any color-management information about the returned color. As graphics work requires accurate color management, we decided to get back using full old-style X11 code.

Note that since the stable branch of GIMP is still using GTK+2, even if you run on Wayland, GIMP itself would use XWayland. In other words, GIMP 2.10.34 now runs the X11 code path whatever windowing system is in use.

Remembering color scale and model preferences

In “Change Foreground|Background Color” dialogs or in the Colors dockable, you have the option to view your colors in a 0..100 or 0..255 scales. You can also see your color in alternative LCh or HSV color models.

These 2 settings are now stored and remembered across sessions so that you don’t have click them again each time for your usual and preferred workflow.

macOS improvements

This version comes with a few bug fixes dedicated to the macOS builds. The most noteworthy one is that we implemented HTTPS support (since our I/O backend library, GIO, is lacking proper macOS support for this protocol) for 2 features in particular:

  • Check for updates: unless you disable the option in “Preferences”, you should now be notified of new versions of GIMP.
  • Help system: it is now possible to read the remote documentation from within the Help Browser in GIMP.

Plug-in API

Two new functions were added, wrapping basic color processing filters, making it easy to call them from third-party plug-ins:

  • gimp_drawable_shadows_highlights(): function performing the “Shadows-Highligths” filter in the “Colors” menu.
  • gimp_drawable_extract_component(): function performing the “Extract Component” filter in the “Colors > Components” menu.

GEGL, babl

As usual, this version of GIMP is accompanied by new versions of babl and GEGL:

  • babl 0.1.100 comes with bug fixes in the recently added LUT creation and usage code. It also better supports non-ASCII characters in file paths on Windows.
  • babl 0.1.102 disabled the LUT usage by default depending on the environment variable BABL_LUT, leaving us some time to iron out a few more issues we discovered at the last minute.
  • GEGL 0.4.42 adds conditional support for libraw 0.21.0, while also improving the following operations: rgb-clip, perlin, mosaic, c2g, long-shadow and gif-load.

Various build improvements also happened in both babl and GEGL.

Release stats

35 people contributed changes or fixes to GIMP 2.10.34 codebase:

  • 13 developers: Jehan, Jacob Boerema, Alx Sa, Daniel Novomeský, Lukas Oberhuber, Luca Bacci, Ian Martins, Nyári-Kovács, Dávid Tamás, Simon Budig, Stanislav Grinkov, valadaptive and Øyvind Kolås.
  • 22 translators: Sabri Ünal, Anders Jonsson, Martin, Yuri Chornoivan, Marco Ciampa, Cristian Secară, Rodrigo Lledó, Tim Sabsch, Alan Mortensen, Chao-Hsiung Liao, Ekaterine Papava, Milo Ivir, Piotr Drąg, Zurab Kargareteli, Jordi Mas, Luming Zh, Luna Jernberg, Balázs Úr, Hugo Carvalho, Jürgen Benvenuti, Kristjan SCHMIDT and Sveinn í Felli.
  • 19 translations were updated: Catalan, Chinese (China), Chinese (Taiwan), Croatian, Danish, Esperanto, Georgian, German, Hungarian, Icelandic, Italian, Polish, Portuguese, Romanian, Slovenian, Spanish, Swedish, Turkish and Ukrainian.

Contributions on other repositories in the GIMPverse:

  • 4 contributors to babl 0.1.100 and 0.1.102: Luca Bacci, Jehan, Øyvind Kolås and Ulf Prill.
  • 7 contributors to GEGL 0.4.42: Øyvind Kolås, Alan Mortensen, Jehan, Michael Drake, Sabri Ünal, Chris Mayo and Jordi Mas.
  • 2 contributors to ctx since 2.99.14 release: Øyvind Kolås and Carlos Eduardo.
  • 3 contributors to gimp-macos-build (macOS build scripts) since 2.99.14 release: Lukas Oberhuber, Kyungjoon Lee and Mingye Wang.
  • 4 contributors to our main website (what you are reading right now) since 2.99.14 release: Jehan, Aryeom Han, Michael Schumacher and Tim Spriggs.
  • 3 contributors to our developer website since 2.99.14 release: Jehan, Krek Krek and kotvkvante.
  • 9 contributors to our documentation since 2.99.14 release: Jacob Boerema, Anders Jonsson, Jordi Mas, Yuri Chornoivan, Andre Klapper, Danial Behzadi, Hugo Carvalho, Martin and Nathan Follens.

Then let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss possible improvements with us. And of course, our community is deeply thankful to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Improved Release Procedure and Call for Testers

As far as I remember, GIMP has had a very accurate release procedure, with step-by-step TODO items listed in a long file.

Lately I have been working on improving it further, making a public report, actually checkable bucket list items… and in particular, I would like the source and binaries to be thoroughly tested by as many people as possible. 👩‍🔬🧪👨‍🔬

This version is the first time we try this new release procedure (the procedure worked fine: the release was delayed by us finding some last-minute issues which is actually a good thing!).

We already have a few people testing GIMP on Windows, though the more the better.
On the other hand, we have nearly nobody testing the macOS builds or the flatpak (apart from developers and packagers of course). 😢

Note that we don’t have our own packages for every OS out there, but we definitely welcome people willing to test GIMP on *BSD, Haiku or whatnot, as long as you can build GIMP on your own on your system of choice.

For these reasons, if anyone is willing to help us improve GIMP by participating to release testing, please open a report on the developer website tracker with the following information:

  • The Operating Systems (Linux, Windows, macOS, *BSD…) you will be testing on, with details if possible (which Linux distribution and version? Which version of Windows or macOS?…).
  • The architectures you will be testing on (x86, ARM… 32 or 64-bit).
  • If you will test our pre-built packages or from source (custom builds).

Then we will include you in the next release testing (stable and development releases).

Our expectations from testers:

  • Make sure you receive Gitlab notifications when your nickname is cited (we advise to set your Global notification level to “Participate” or “On mention”).
  • Follow the release report to know what’s happening and when you are needed.
  • Release reports are not a place where we teach people how to use basic functions of a computer. Testers don’t have to be developers, but they have to be able to follow basic technical guidelines, give feedback more useful than “it doesn’t work” and be able globally to interact with developers.
  • Be nice and welcoming: everyone here is a volunteer, testers as much as developers. This is Community, Free Software, not a soulless job. 🤗

Around GIMP

Mirror news

2 organizations contributed more download mirrors to distribute GIMP.

Thanks to Artfiles New Media GmbH (Hamburg, Germany), which has actually been a long-term mirror sponsor and recently came back by updating their settings to our new mirror system; and the Fremont Cabal Internet Exchange which added 2 more mirrors in the United States and one in Bogotà, Colombia (our second mirror in South America).

Mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Book news

A new “Czech” section was added to our books page, with 4 books which got reported to us. These books are a bit old and all seem to be targetting GIMP 2.8. So let’s hope for a lot of GIMP 2.10 (and soon 3.0) coverage in Czech in the future!

We remind everyone that we welcome book additions, especially newer books for latest versions of GIMP (which would be most useful to everyone). Whether you wrote it or just read it, if you know of a book about GIMP, just report the same information as other books in the list. Thanks!

Downloading GIMP 2.10.34

As usual, GIMP 2.10.34 is available on GIMP official website (gimp.org) in 4 package formats:

  • Linux development flatpak
  • Windows installer
  • macOS DMG packages for Intel hardware
  • macOS DMG packages for Apple Silicon hardware

Other packages made by third-parties are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s next

These days, we are mostly focusing on the development version, especially since we have big plans for 2023, as was outlined in our 2023 plans (2022 annual report). For anyone interested in the future of GIMP, I highly recommend reading this report.

Nevertheless bug fixes in particular, and maintenance in general, still need to get out for the stable branch. We will likely release at least one, possibly more, stable versions before GIMP 3.0 release.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

2022 annual report

Par :Jehan

Pursuing the newfound tradition started a year ago, here is my report for past year 2022.

Go 2023 - Wilber and co. comics strip by Aryeom
“Go 2023” by Aryeom, Creative Commons by-sa 4.0 - GIMP’s 2022 annual report

Statistics

In 2022, we had:

  • 1 stable releases (GIMP 2.10.32)
  • 3 development releases (GIMP 2.99.10, 2.99.12 and 2.99.14).
  • 1461 commits on the unstable development branch (2.99.x, future 3.0) and 276 commits on the stable development branch (2.10.x) of the main repository.
  • 87 contributors on the main repository, including (some people belong to several categories):
    • 35 developers
    • 47 translators
    • 26 contributors to resources (icons, themes, in-code documentation) or build improvements
  • 7 core developers contributed 10 or more commits in GIMP’s main repository:
    • Jehan: 649 commits
    • Jacob Boerema: 64 commits
    • Nikc: 50 commits
    • Daniel Novomeský: 25 commits
    • lloyd konneker: 25 commits
    • Lukas Oberhuber: 18 commits
    • Niels De Graef: 15 commits
  • 115 commits to babl by 10 contributors, with 3 developers contributing 10 or more commits:
    • Øyvind Kolås: 86 commits
    • Axel Viala: 10 commits
    • Jehan: 10 commits
  • 138 commits to GEGL by 32 contributors, with 5 developers contributing 5 or more commits:
    • Øyvind Kolås: 47 commits
    • Behnam Momeni: 9 commits
    • Michael Drake: 7 commits
    • Thomas Manni: 7 commits
    • Jehan: 5 commits
  • 1042 commits to ctx by 2 contributors (mostly Øyvind Kolås).
  • 492 commits in gimp-help (our manual) by 29 contributors, with 11 people contributing 10 or more commits (this list mixes documenters, build maintenance and translators):
    • Jacob Boerema: 229 commits
    • Anders Jonsson: 47 commits
    • Rodrigo Lledó: 38 commits
    • Jehan: 28 commits
    • Jordi Mas: 25 commits
    • Tim Sabsch: 19 commits
    • Nathan Follens: 17 commits
    • Marco Ciampa: 16 commits
    • Yuri Chornoivan: 15 commits
    • Andre Klapper: 13 commits
    • Hugo Carvalho: 11 commits
  • 178 commits in gimp-macos-build (our macOS build) by 3 contributors (mostly Lukas Oberhuber).
  • 33 commits in the stable branch of our Flathub/Flatpak package and 23 commits on the beta branch by 6 contributors, including 4 core contributors: Jehan, Ondřej Míchal, Hubert Figuière and Daniel Novomeský.
  • 227 commits to GIMP’s website (gimp.org, i.e. right here) by 10 contributors (mostly Jehan).
  • 158 commits to our new developers website by 4 contributors:
    • Jehan: 104 commits
    • Pat David: 38 commits
    • Robin Swift: 15 commits
    • Lukas Oberhuber: 1 commit
  • 178 reports fixed and 206 merge requests integrated in our 2022 releases. Hundreds more reports handled, triaged, answered to, worked on…
  • Many patches contributed by GIMP contributors in various other projects we use (at least GLib, GTK, Cairo, meson, Mirrorbits…) and an uncountable number of issues reported by our contributors to other projects.
  • And more!

Compared to last year:

  • The total amount of work is quite similar, and while that tendency had already started a year ago, the work has clearly been shifting even more towards the development branch (future 3.0), which nows accounts for 84% of commits (against 74% last year), while the stable branch is really getting into maintenance-only mode.
  • Less work on GEGL happened but more work on babl. The recent work on automatic LUT creation and SIMD optimizations explains it.
  • ctx stays heavily developed.
  • While Øyvind and myself still remain the 2 heavy-lifters, we get more people around clearly pulling their weight. It is exciting to see more contributors stay.
  • Jacob is working more on the documentation which is really increasing in quality.

Outstanding evolution in 2022

babl and GEGL

On the side of our graphics engine, the automatic LUT creation for color conversion in babl is clearly a big step forward, introduced in GIMP 2.99.10 (then in the stable version 2.10.32).

At the same time, all babl, GEGL and ctx got nice SIMD optimization which allowed nice performance boosts.

Øyvind Kolås is really doing an amazing job, as usual.

It is also interesting to note how the concept of “GEGL plug-ins” took off in 2022. It in fact just refers to third-party GEGL operations which you simply install in a folder and GIMP will see them at next restart, including all the fancy UI, such as on-canvas preview with split view (and when we’ll have non-destructive layer effects, these operations will also be usable!).
Among people spearheading such community development, we should cite LinuxBeaver and Liam Quin. For anyone interested, I suggest to read the 3-part tutorial written by Liam (“Using GEGL Plug-Ins”, GEGL Graph” and “Writing C Plug-Ins”).

Checking items ✅ in GIMP roadmap

We proudly checked-off several items in the GIMP 3.0.0 roadmap.

Amoung 2022 achievements, we indeed…

  • ✔ ported away from intltool to gettext only (technical debt cleanup);
  • ✔ finished the meson build: the autotools build still exists but is now considered secondary;
  • ✔ finished the last pieces for multi-layer selection (a move started early 2020). including rewriting completely the interaction in the formerly terrible align and distribute tool.

These are 3 huge pieces in our roadmap which we happily marked as completed (apart from probable bugs).

On the getting closer side:

  • We nearly finished the “Less floating selection” move (some use cases remain, which we need to think about more).
  • The Wayland support is still kinda wonky at times (even disregarding all the issues we cannot do anything about — such as color management not implemented yet in Wayland —, we have weird windowing issues), but it improved in 2022.
  • The API work is really moving forward; Lloyd Konneker helped a lot on this.
  • The GTK+3 port is nearly finished, as we are handling these days the last annoying warnings (though it’s more a January 2023 thing!).
  • Space invasion: good parts of it were done since the CMYK push made us look at specific pieces of code more in details. Though a lot still needs to be done and color science is at times a very head-scratching part of the work.

Now anyone following our development news knows that a lot more happened. This report is not going to repeat what we already wrote about in various news items.

One particular contributor to encourage this year is Nikc who came to us with a few patches at first then proposed a Google Summer of Code project, and decided to stay around. Thanks to them, a lot happened for CMYK support in GIMP and our “Space Invasion” project also moved forward further. They are now a very prolific core contributor. This can only mean good stuff for the future!

Packaging

Clearly our macOS support has never been better: good continuous integration, automatic DMG package creation, and now we even got an Apple Silicon package! The quality of maintenance and updates for this package is outstanding. Lukas Oberhuber is the one to thank for this. Yet the bus factor for our macOS package remains extremely low so we always welcome more contributors.

On Windows side, GIMP is now officially distributed on the Windows Store, after getting contacted by a developer relations team at Microsoft. This is great as too many non-trusted packages used to be distributed there and now they seem to have mostly disappeared with the official one eclipsing them with its very good rating.

On Flathub (GNU/Linux), the burden is getting lightened as we now got automation in dependency version check, thanks to Ondřej Míchal. The flatpak package team is also getting bigger, with 4 recurring contributors.

Infrastructure

We also got some infrastructure changes, such as our mirroring system, now based on Mirrorbits. This is something I am planning to talk again about soon, so I won’t go into details.

On community side, our mailing lists have been discontinued, together with all of GNOME mailing lists whose infrastructure we are on. We now recommend 2 forums for the community:

Websites

Our documentation website is getting a lot of love, thanks to Jacob Boerema, with automatic updates, statistics showing… and of course, the contents is getting serious scrutiny to improve documentation quality. Compared to 2021, there has been nearly double the number of commits in 2022, which is revealing of the big step up.

Meanwhile we revived the developers website which was in a dire state for over 10 years.

We still have a pending project to port the main website to the Hugo framework as well. Unfortunately this could not happen in 2022.

Plans for 2023

GIMP 3.0.0?

I should not give dates, so don’t take it as a promise. Maybe it’s just a foolish dream by a foolish man: I am currently planning GIMP 3.0.0 release in 2023, or at least our first release candidates.

Here. I said it. If it doesn’t happen, remember that it was not a promise. 😜

There is still a lot to be done, so I hope I’m not making a fool of myself. But at some point, not being able to release just gets frustrating. Of course, we are still within acceptable development durations (GIMP 2.8 to 2.10 took 6 years; we are still in the 5th year since 2.10) but I really want to get it over with.

Now to get this deadline to work, I have decided to delay some elements out of our 3.0 roadmap. In particular:

  • Extensions management: project dear to me as I started it and developed what is already implemented, yet to get a safe online infrastructure to handle extension search and download, we will need time.
  • Paint Select tool: very awesome tool, but its contributor, Thomas Manni, is not happy with the performance (it requires instant canvas feedback to be usable) and is currently investigating alternative algorithms.

In the same time, I have been pushing aside some nice new code contributed to us when I realize reviewing it and making back and forth corrections will take us weeks. For instance, some of you may have seen the nice “vector layers” demo by Nikc (based on work by Hendrik Boom and Jacob Boerema) on social networks. This won’t make it to GIMP 3.0.

This is a rule which I apply to my own code. Some people might indeed remember my own link layer experiments for instance, which I stopped working on 2 years ago, already for the same reason.

These will still happen, I’m only moving these targets away into further releases, which I’m explaining in the next section.

Rethinking our roadmaps

This leads me to an organizational work I’ve been doing lately on our roadmaps and on planification of releases. Up to this day, you must have read a lot about our bi-version planification: GIMP 3.0 for GTK+3 port then 3.2 for advanced non-destructive editing.

While this second target is still definitely a big plan in our roadmap, I don’t think that making it again a huge development cycle with dozens of features and taking several years is the wisest thing. This old development model made sense back in the day, but less nowadays in my opinion.

My goal for GIMP is to release more often, with faster development cycles, maybe less features at once, yet nice features at each release. This is something I had been pushing for, ever since 2014, when I was still a newcomer (I first evoked that we should be able to publish new features even in micro versions in a meeting during LGM 2014). This ultimately led to our release policy change, starting from GIMP 2.10.0. And this is what I want to continue pushing further.

So my point is that targetting for a “GIMP 3.2” somewhere in the distant future doesn’t make sense anymore. The non-destructive editing features, such as non-destructive layer effects, will happen, but will it be GIMP 3.2.0? Or some 3.0.x version instead? We’ll see. It’s all just numbers anyway. We may likely break this down in smaller releases in the end.

With this in mind, I reviewed our after-3.0 roadmaps into smaller pieces, per logical categories of projects we want and which will definitely happen.

  • Link and vector layers are now into a new “non-destructive layer types” category. The code is so well advanced that it would be a waste and while these won’t make it to GIMP 3.0.0, it will definitely become one of the prime targets immediately after release. Maybe in GIMP 3.0.2?
    By the way, this also opens the door to the long-awaited shape features: with vector layers, we could have non-destructive shape drawing. I mean, on-canvas shapes should be a vector features to make it right!
  • Non-destructive layer effects (formerly the main target for 3.2) is obviously a project on its own.
  • Macro support is also something we’ve wanted for a long time and with GIMP 3.0, we have started to lay the foundations for this feature. This should hopefully soon become a reality.
  • Animation support, which as most of you know is something I’ve worked on for years, will have to be in GIMP someday. So it’s also its own category. It will also bring multi-page support (not just layers as pages).
  • Our extension platform is still very much planned!
  • The Space Invasion project will continue: for 3.0, we focus on correctness of color models we already support; after 3.0, we might look into going further with new color models backends, such as core CMYK or L*a*b* support, but also spot color channels and whatnot…
  • We have now a bunch of unfinished tools in our playground area and it would be good if we took the time to finish them. Of course, we also have ideas for nice new tools. And finally there are tools which we really want to improve, such as our Text tool which deserves more love.
  • Finally we have started to enhance the concept of “canvas“, with the “Show all” feature since GIMP 2.10.14. We always wanted to go further, and also to rework the concept of layer dimension (e.g. with auto-growing layers, or even infinite layer abilities).

And this is how I completely rewrote our roadmap page. Hopefully some people will enjoy reading the new page and will find it exciting. Note that contents didn’t change that much, except that it has been reorganized to put more emphasis on the bigger strokes for GIMP evolution after GIMP 3.0 release, making it more obvious (hopefully) which direction current contributors are pushing GIMP to go.

Conclusion

This is where we are at. I’m expecting 2023 to be an eventful year. 2022 has been quite awesome too, but also tiring to the point that there were weeks when I couldn’t work on anything, especially soon after coding bursts for releases. I also focused a bit more on getting healthier work habits, such as working with a height-adjustable desk (for sitting and standing work sessions) and doing regular walks.

This is also why I work on procedures to get faster releases, better infrastructure and better documentation for onboarding new contributors. I am aiming for a more organized path while keeping the slightly 🌪️ chaotic ❤️‍🔥 core which really makes working in our team so enjoyable. ☺️

As I was saying in last year’s report, GIMP is not only a Free Software, it is also a Community Software: random human beings doing something nice together and sharing it with everyone. Why? Because we can, because we want. And that’s why I love our small community, with just the right amount of chaos and insanity, sparkled with just the right amount of organization!

Finally don’t forget you can 💌 donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, myself as maintainer of GIMP (through “ZeMarmot” project) and Øyvind as maintainer of GEGL are crowdfunding the work this report is about. Any support is appreciated to help us succeed in such endeavour.

I wish you all a happy, funny 🥳 and healthy year 2023 and/or year of the rabbit 🐇!

GIMP 2.10.32 on Apple Silicon

Par :Jehan

It is a bit of an early Chistmas 🎅 for people using Apple Silicon machines (Apple M1, M2…) as we release for the first time ever a stable version of GIMP for this architecture!

It is a revision package for GIMP 2.10.32, already released a few months ago, re-built with our new MacPorts-based infrastructure on both x86_64 (“macOS on Intel” architecture) and AArch64 (“macOS on Apple Silicon”).

Note that we provide 2 DMG packages now, one for each architecture, not a single universal package. The website will try and detect which architecture you are on, but if it fails to detect properly (detection is not as easy on some browsers), be careful to choose the version for the correct hardware (“for Intel” or “for Apple Silicon“).

Additionally in this revised package, dependencies have been updated, in particular babl and GEGL. It means that even for macOS on Intel, you will get the recent fix to the race condition bug which was sometimes causing crashes of GIMP (somehow we mostly saw it happen on macOS).

This is why we recommend every person on macOS (whichever your hardware) to update GIMP with this revision 1 of GIMP 2.10.32.

As usual, get these updates on GIMP’s download page!

Happy 27!

Par :Jehan

Today, on 21st of November 2022, the GNU Image Manipulation Program turned 27 (cf. the first release announcement on 1995-11-21).

To celebrate, Aryeom (ZeMarmot‘s director) drew this nice birthday illustration (fully drawn within GIMP, and under Creative Commons by-sa 4.0 license, of course!):

Happy 27th birthday! - Wilber and co. comics strip by Aryeom
“Happy 27th birthday!” by Aryeom (also a Wilber-less version as temporary gimp.org header), Creative Commons by-sa 4.0

For both Aryeom and I (Jehan), this is our tenth year of continued contribution, since a first commit in September 2012 (basic icon-changing patch in the animation playback plug-in, soon followed by more… many more patches…). Back then, never would we have imagined sticking for so long around this nice core community (regarding this point, we thank the other contributors for their welcomeness, and in particular the wonderful mitch) and contributing litterally thousands of patches in GIMP! So it’s also a pretty big personal milestone.

It is also my second year maintaining GIMP. And to be fair, Aryeom has a huge role in my maintenance with constant reviewing, testing my code (and other contributor’s code), following up with feedback, specifying behaviors (while always caring about others’ usage! One of her main rule when she helps designing changes is researching and wondering what worflows others have). So much is being done in the shadow to keep it all together.

But GIMP is not only us. What would we do without Øyvind Kolås in particular? Nowadays he is carrying most of our core flow-based graphics engine maintenance, GEGL, and its sister projects (babl and ctx).

Of course, I can’t forget all other awesome contributors: developers, packagers, community support, translators (GIMP is more than 90% translated in 27 languages among 84 languages we currently support!), documenters, website contributors, tutorial writers… We should also thank the GNOME Infrastructure team for being so helpful of course. And many many more! What would GIMP be without all of you? 💌

I will likely do a more detailed report later (like I did last year) to sum up 2022 events, so I’ll stay short in this news. For once!

All in all, we wish to remind that GIMP is Community, Free Software. It is what we make of it together. We welcome contributors very warmly 🤗!

Finally if you can’t contribute your time, in these year-end times of giving, don’t forget that you may support financially GIMP developers. GIMP project actively supports its contributors willing to make a living with their Free Software contribution. Right now it means 3 people: Aryeom and myself (through ZeMarmot project) as GIMP maintainers and Øyvind as GEGL maintainer. If you appreciate what we do and wish to give back, funding us is an excellent way. It is part of what makes GIMP development sustainable.

And for everyone who is really eager to see GIMP 3.0 out, it should go without saying that funding developers is what accelerates the development of GIMP.

🎁 So GIMP, and Wilber, we wish you a very happy 27! 🎂

And to every member of the community: thank you all for sticking with this project for all or part of these 27 years! GIMP would not be where it is today without all of you! 💌

Development version: GIMP 2.99.14 Released

Par :Jehan

The GIMP team is happy to release GIMP 2.99.14 with a lot of nice milestones on the route to GIMP 3.0.

We are getting into deep changes, so we hope you will all test thoroughly and we remind you that it is an unstable version meant for testing and reporting issues.

To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Tools

Align and Distribute tool: fully reworked interaction

The Alignment tool was very hard to use, with complicated on-canvas interaction to select the target items (and never being too sure if we selected right!). Thanks to the core multiple layer selection which GIMP is now capable of, we greatly simplified the tool:

  • Target items to align or distribute are now the selected layers and/or paths in their respective dockable, as set in the “Targets” section in tool options.
GIMP 2.99.14: alignment tool target selection
Targets in alignment tool options - GIMP 2.99.14
  • For layers in particular, a new option “Use extents of layer contents” allow to align or distribute target layers based on their pixel contents, not the layer bounds (which typically might be bigger than the pixel data). This is similar to running “Crop to Content” before aligning, except that we don’t actually crop.
  • Guides still need to be selected on-canvas if you want to align or distribute them. The tool options hints at the modifiers: Alt or Shift-Alt. Moreover the selected guide color will change, giving a visual feedback of selected guides.
GIMP 2.99.14: aligning and distributing guides (screencast)
Aligning and distributing guides - GIMP 2.99.14
  • Simple clicks (no modifiers) in the canvas is now only used to pick the reference object for alignment, if “Picked reference object” is set in the “Relative to” dropdown menu. In such case, you can pick as reference any layer, path or guide. The 2 other dropdown choices are “Image” and “Selection” in order respectively to use the current image or selection as alignment reference.
  • Your reference object shows on-canvas handles as visual feedback.
  • In the “Targets” section of the tool options, you can also choose your item anchor points: left, right, top, bottom and center. Therefore if you align 2-dimension targets and reference, you may align e.g. the left side of targets to the left, middle or right side of your reference. Any combination is possible.
  • The distribute actions do not use the reference object anymore. Instead they use the leftest/rightest or top/bottom object as reference (i.e. that the 2 extreme position targets don’t move). This is consistent with how other software, e.g. Inkscape, handle distribution.
  • 2 types of distribution actions are proposed:

    • Distribute anchor points evenly in the horizontal/vertical: the distance between the anchor point of each target stays the same, e.g. the distance between the left side of each object.
    • Distribute horizontally/vertically with even horizontal/vertical gaps: the distance between the right side of one object and the left side of the next (in horizontal distribution) statys the same.
GIMP 2.99.14: aligning and distributing layers (screencast)
Align Wilber and ZeMarmot relatively to Wilber’s center point, then objects tops under Wilber, before distributing them - GIMP 2.99.14

Text tool: new outline options

The Text tool now gains non-destructive outline and fill options.

This is implemented as a new “Style” setting in the tool options, with 3 choices:

  • Filled: the original style;
  • Outlined: you can choose an outline color or pattern, antialiasing, a line width and style. The character inside will be see-through.
  • Outlined and filled: identical to “Outlined” except for the fact that characters inside will be filled by the text color.
GIMP 2.99.14: outline feature in text tool options (screencast)
Outline feature in text tool options - GIMP 2.99.14

Transform tools activated automatically

All transform tools (Unified Transform, Rotate, Scale…) needed an explicit click on canvas before their handle showed up on the canvas when activated with the tool box or shortcut, which was not consistent with their activation through the Tools menu, and with how some other tools worked.

As this change was requested, we decided to experiment with directly activating the handles as soon as the tool is selected.

Usability and User Interface

Floating selection concept reviewed

The “Floating selection” concept has been a huge topic across the years, especially because it was quite unexpected by many people.

After discussing the matters, we came to the conclusion that we should experiment limiting its usage.

Nevertheless we are also deeply aware that this feature can be a huge time saver and a much better interface for some types of interaction. In particular, the quick on-canvas copy|cut-paste with the Alt modifier (Ctrl-Alt to cut-paste or Shift-Alt to copy-paste) heavily relies on the floating selection to extremely quickly move bits of a layer. Obviously the explicit “Float” action (equivalent to a cut-paste) is in a similar situation.

For pasting inside a layer mask, it is even mandatory because it allows to edit the pasted data — e.g. positioning appropriately, transforming it… — before actually merging into the mask which may already contain mask data. Note that if some day, layers were allowed to contain several masks, this would not be necessary anymore.

For this reason, the 3 cases where we still have floating items are:

  • when pasting into a layer mask;
  • when doing quick copy|cut-paste on canvas with the Alt modifiers;
  • when floating layers explicitly with the “Float” action.

There is still a case which we need to discuss as it also creates floating selections: transform tools when there is a selection. For other common types of data pasting, they will now create new layers directly.

As a side change, when the “floating selection” happens on a layer mask, we now call it “floating mask” and shows it above the mask in the Layers dockable (it used to be above the layer at all times). This should make this specific case less confusing.

Copy-paste re-specified

In the light of multi-layer selection, we have been wondering how the various types copy-paste cases should work. In particular when copying several layers, should you paste several layers or a merged copy? And when copying pieces (through a selection) of several layers?

This is still a work-in-progress but we are trying to properly specify consistent and reasonable behavior for the many sub-cases. In particular now, we always paste as many layers as was copied, even when we copied from a selection (in which case, the new layers will be the size of the selection bounding box).

For the merging case, we add 2 new actions called “Paste as Single Layer” and “Paste as Single Layer in Place” in the Edit > Paste as submenu. As the names imply, they paste the merged down version of your copied contents. It’s a bit similar to “Copy Visible”, except that it only applies to the selected layers and can be chosen at paste time.

New “Gray” theme

GIMP now comes with a “Gray” theme based on a 18.42% luminance middle-gray background, which should be a good neutral environment for professionnal color work.

GIMP 2.99.14: gray theme
Focusing on your artwork color with a middle-gray 18.42% luminance theme - GIMP 2.99.14

Theme override icon size settings

We now provide a theme-override icon size selection in Preferences > Themes with conceptual sizes: small, medium, large and huge. The following widgets are so far modified: toolbox icons, fg/bg editor in toolbox, foreground/background editor in Colors dockable, dockables tab icons, bottom buttons (in the button box) of dockables, header eye and lock icons above item trees, and eye and lock icon switches in item tree cells.

GIMP 2.99.14: override theme icon sizes
Overriding theme-set icon sizes - GIMP 2.99.14

You may recall that we have a similar setting in GIMP 2.10 stable branch, which was initially removed for GIMP 3.0, because our updated toolkit has high-density display awareness and will already resize all the interface following your “scale factor” settings (as set in your system). Nevertheless we realized it was not enough. First of all, because this single settings cannot take all special cases into consideration and some people still wanted even bigger icons because they were watching their display from far away, or simply prefered small icons, or any other reason.

This is the rationale for adding this override of icon size, thus bypassing the system settings. As a nice aside, it will work with any theme. So you don’t have to discard a theme you appreciate just because the chosen icons are not the size you want.

Core changes

Much faster XCF save

Saving with RLE (default) and zlib (the “better but slower compression” checkbox in the Save dialog) is now multi-threaded (following the settings in Preferences), which makes it a lot faster.

In the best case scenario, we saw up to 70% save time (e.g. a 276-layer, 115MiB, was reliably saved in about 50 seconds before, and 15 seconds after the change, on the same test machine), though other tests would be around 1/3 save time (another 180MiB XCF was saving in 1m30s before and 1min after the change on a same machine). On any case, it’s a great news for people working on big images, who hopefully won’t have to wait so long. Or even small images anyway!

This work was initially contributed by suzu_11 and further improved upon.

Vectors (paths) structure in XCF

A further change in the XCF format, which warranted bumping the format version, was that paths now have a proper structure in the XCF specification instead of just being “properties” on images.

What it means especially is that the XCF format will now store locks and color tags on paths, but also the path selection (whether several paths were selected in their dockable). It will also make path items easier to evolve in the future as we add new features, instead of being stuck on some old, outdated and non-evolvable format.

As an aside, the XCF format specification had been stored inside the source repository ever since 1997 (2006 in its detailed version). We moved the file to the new developer website: Documentation of the XCF file format . It should make it easier to read, with markdown formatting and generated table of contents.

Moving to GApplication and GtkApplication

This is a technical information which possibly only developers would understand: the main process is now run as a GimpApp which is a new class derived from GtkApplication. The main process of gimp-console on the other hand is a GimpConsoleApp which is derived from GApplication. Both new classes share a same GimpCoreApp interface.

This is a main step for the GTK+3 port as it should allow us to work with GMenu next.

File format support

PDF

Among other improvements, the PDF export now provides an option “Root layers only” available when “Layers as pages” is checked.

GIMP 2.99.14: root layers only option in PDF export
Root layers only option in PDF export - GIMP 2.99.14

This option considers root layers only as PDF pages, and not their children, which means you can more cleanly organize your PDF pages into layer groups.

AVIF

We improved AVIF compatibility with Safari on iOS 16.0. Some AVIF images are indeed rendered differently in Apple’s implementation compared to implementations of Google and Mozilla (See upstream report).

This changes requires libheif 1.10.0 though the plug-in can still build with older libheif.

PSD

Two important changes were implemented:

  • export of CMYK(A) files added, with 8 or 16-bit precision per channel, using a CMYK soft-proof profile for conversion.
  • Paths are now exported with PSD files.
GIMP 2.99.14: CMYK PSD export
Exporting PSD images as CMYK using the soft-proof profile - GIMP 2.99.14

As a reminder, proper CMYK PSD import was improved in GIMP 2.99.12, storing the CMYK profile from the PSD as soft-proof profile, making round-trips easier (passing through a RGB conversion in GIMP).

JPEG-XL

Metadata import and export are now supported.

ICNS

GIMP now has initial support for loading and exporting ICNS files, the icon format by Apple.

It will also warn you when one of your layer is not a valid icon size for the ICNS format.

GIMP 2.99.14: ICNS support
ICNS support - GIMP 2.99.14

TIFF

The TIFF format has a concept of “reduced page”. Until now, we were assuming pages tagged as “reduced” to be thumbnails. Yet this is not always the case. For instance we had feedbacks from makers of medical devices which were using “reduced pages” as sub-sampled images generated by said devices. They needed GIMP to be able to load all the pages as layers (the main images and the sub-sampled ones).

GIMP 2.99.14: importing reduced pages of TIFF files
Importing reduced pages of TIFF files - GIMP 2.99.14

This is why we added a new option called “Show reduced images” which lets you decide whether you want to load these or not. The option will be checked by default through a small heuristic: if there is only 1 reduced page and it’s in the second position, then it’s probably a thumbnail (as per common usage across software); in which case we disable the checkbox by default. Still in the end, the choice is yours!

API

Several API improvements are present in this release:

  • We have a better GimpPickButton implementation for Windows, which should work better than the existing implementation, thanks to Luca Bacci.
  • Text layers now have a dedicated class GimpTextLayer.
  • Various functions were added to get lists of selected items (as per 2.99 ability to select multiple items).
  • gimp_vectors_stroke_translate() now uses double offsets (instead of integer).
  • There is a new function gimp_text_layer_set_markup(), contributed by Ian Munsie, which allows to set Pango markup directly in text layers. It is a powerful function because it allows to render texts even with features not supported in the text tool GUI.

    For instance, this is a text layer with a double underline and an overline on “Hello“, “under” in subscript, and “2” in superscript all of which are supported features in Pango, but not in our text tool GUI, as set through the Python binding of our API:

    txt_layer.set_markup('<span underline="double" overline="single">Hello</span> <sub>under</sub>world<sup>2</sup>')

    As a note of interest, any styling unsupported by the GUI will be discarded if you edit the text layer through the GUI.

GIMP 2.99.14: text layer styled with gimp_text_layer_set_markup()
Text layer styled with gimp_text_layer_set_markup() - GIMP 2.99.14

Though this release is not the most packed with API changes, a lot of background work is in-progress and in particular Lloyd Konneker is very actively participating to the work. We should hopefully see the result in the next development release.

macOS

Though the macOS build, still has some issues, major advances happened on macOS side, thanks to Lukas Oberhuber, once again.

Pointer click bug with macOS Ventura

Let’s start with the one bad news (before going to the good ones): there seems to be a major hover and click bug in GTK on macOS Ventura, the last version of macOS released a few weeks ago. It basically makes all GTK+3 application unusable, including GIMP. Every new release of this operating system seems to bring its load of (bad) surprises! 😓

As of now, no solutions exist yet as GTK developers are still looking for the cause. In any case, you may want to hold onto updating your OS if some GTK+3 applications (e.g. GIMP, Inkscape, Siril…) are a major part of your workflow.

GIMP has an Apple Silicon package!

The biggest news is that we now have a DMG package for Apple Silicon machines (M1, M2…)! 🥳

Be careful, you should take this as an experimental 🥼 package of an experimental 🧪 GIMP version. So issues are expected. As usual, we welcome any issue report you would get with GIMP (on macOS or any other platform by the way).

MacPorts-based builds

The second big change on macOS land, less visible yet quite major as an infrastructure change: Lukas ported the build to MacPorts away from the historical JHBuild scripts.

The main reason was that we could take advantage of the bigger “port” maintaining community for our dependencies, instead of building everything ourselves. This can be compared to using MSYS2 on Windows or the runtime system of flatpak. This improves the build time, but also the maintenance load as Lukas is still alone to maintain all this.

The drawbacks are that it makes it a bit harder to tweak dependencies when needed (as usual when you rely on an upstream), but also that the DMG packages are now bigger in file size. This is unfortunate, but considering that the alternative might be to wear our macOS maintainer out and have no package at all, we consider it to be worth it.

HTTPS for the update check

The “update check” — i.e. the ability to verify if new versions of GIMP were released, i.e. that you are running outdated GIMP — was never working on macOS because of the lack of HTTPS support for macOS in GIO, our backend library to handle all input/output transparently.

Lukas Oberhuber implemented a work-around for this, based on a macOS system API (no additional dependency), which we may backport later to GIO. Maybe macOS will eventually have the ability to open HTTPS remote images at some point!

Build and documentation

meson (message to packagers)

As told when releasing GIMP 2.99.12, we entered an intensive testing phase for our meson build. We received useful reports and feedbacks, which allowed us to get the meson build even closer to finalization.

This release might be the last one when we will provide both an autotools and meson tarball for packagers. If all goes well, we may decide to phase out our autotools build after GIMP 2.99.14, and only provide a meson tarball.

So if any packager finds any issue, please, now is the time to tell us about it!

API reference tarball

Our developer website now provides online libgimp and libgimpui 2.99 API reference, generated by gi-docgen.

This is the experimental version of what should become the libgimp 3.0 API. Of course, it’s still a moving target, so you should not expect it to be stable yet, up until we officially release GIMP 3.0. Still, plug-in developers are welcome to experiment already in order to prepare their plug-in for the new major version (several well known plug-ins already do have versions usable with our 2.99 experimental API).

An API reference tarball is generated as part of the continuous integration process and we now distribute them on our download server for anyone who prefers to read the documentation offline.

babl and GEGL

As usual, this release is supplemented with the releases of babl 0.1.98 and GEGL 0.4.40.

Some race conditions are now avoided in the LUT cache introduced in GIMP 2.99.10.

ICC tags handling was improved as well in babl and the newsprint GEGL operation was improved so that it does not drop the alpha channel in RGB modes.

Team news

There is no specific team news, except that we are getting a solid core team, with the usual people steadily contributing. 🧑‍💻

Our GSoC student, Nikc, stayed around and is clearly getting used to our codebase as they contribute more and more, which is pleasing to see!

Mirror news

4 organizations contributed download mirrors to distribute GIMP.

Thanks to metanet.ch (Zürich, Switzerland), the Fremont Cabal Internet Exchange (7 mirrors across the United States and Canada!), the LIP6, Sorbonne université (Paris, France) and EdgeUno (Bogotá, Colombia; our first mirror in South America, at least since the renewed mirror procedure!).

We remind that mirrors are important as they help the project by sharing the load for dozens of thousands of daily downloads. Moreover by having mirrors spread across the globe, we ensure that everyone can have fast download access to GIMP.

Book news

One more self-published third-party book about GIMP, in English, was added to the books page:

We remind that we welcome book additions. Whether you wrote it or just read it, if you know of a book about GIMP, just report the same information as other books in the list. Thanks!

Release stats

31 people contributed to the main repository for GIMP 2.99.14:

  • 16 developers contributed to GIMP code base for this micro version:
    • 1 developer with more than 100 commits: Jehan.
    • 3 developers with 10 to 20 commits: Jacob Boerema, Nikc and Daniel Novomeský.
    • 12 developers with less than 10 commits: Lukas Oberhuber, Hanabishi, Luca Bacci, Øyvind Kolås, Gotam Gorabh, Ian Munsie, Michael Schumacher, Niels De Graef, suzu_11, Hanabishi, Niels De Graef and lloyd konneker.
  • 15 translations were updated: Basque, Catalan, Chinese (China), Galician, Georgian, German, Hungarian, Icelandic, Polish, Portuguese, Russian, Slovenian, Spanish, Swedish, Ukrainian.
  • 17 translators contributed: Hugo Carvalho, Yuri Chornoivan, Martin, Zurab Kargareteli, Sveinn í Felli, Alexandre Prokoudine, Anders Jonsson, Balázs Úr, Jordi Mas, Boyuan Yang, Luming Zh, Rodrigo Lledó, Asier Sarasua Garmendia, Fran Dieguez, Piotr Drąg, Balázs Meskó, Tim Sabsch.
  • 1 person contributed to icons and themes: Jehan.
  • 10 people contributed build-related updates: Jehan, Alx Sa, Hanabishi, Øyvind Kolås, Daniel Novomeský, Ian Munsie, Luca Bacci, Lukas Oberhuber, Niels De Graef, Thomas Klausner.

These are the stats on babl, GEGL and ctx repositories:

  • 1 contributors to babl 0.1.98 with 5 commits: Øyvind Kolås
  • 12 contributors to GEGL 0.4.40:
    • 4 code contributors: Øyvind Kolås, Jehan, Sam James, nikita.
    • 8 translators: Marco Ciampa, Asier Sarasua Garmendia, Enrico Nicoletto, Fran Dieguez, Jordi Mas, Luming Zh, Matheus Barbosa, Sabri Ünal.
  • ctx doesn’t have releases per-se as it is project-embedded code. In the time frame between GIMP 2.99.12 and 2.99.14, there were 247 commits by 1 contributor: Øyvind Kolås.

On the documentation repository, in the GIMP 2.99.12 to 2.99.14 timeframe, 5 people contributed:

  • Main contributor on documentation and script with 57 commits: Jacob Boerema.
  • 1 additional contributor on documentation: Tim Sabsch.
  • 4 translators: Tim Sabsch, Andre Klapper, Hugo Carvalho, Rodrigo Lledó.

On the main website repository, in the GIMP 2.99.12 to 2.99.14 timeframe, 1 contributor contributed 89 commits: Jehan.

On the macOS build repository, in the GIMP 2.99.12 to 2.99.14 timeframe, 1 contributor contributed 43 commits: Lukas Oberhuber.

On the developer website repository, since the relevant news, 1 contributor contributed 8 commits: Jehan.

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting and manual tweaking, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions because we try to acknowledge every contributor for being a part of GIMP!

Downloading GIMP 2.99.14

As usual, GIMP 2.99.14 is available on GIMP official website (gimp.org), now in 4 package formats, as we got the new macOS on Apple Silicon package:

  • Linux development flatpak
  • Windows installer
  • macOS DMG package for Intel
  • macOS DMG package for Apple Silicon

Other packages made by third-party are obviously expected to follow (Linux distributions, *BSD distributions’ packages, etc.).

What’s next

With this release, we are really approaching GIMP 3.0 release, as can be seen from the roadmap of 3.0 where most items are “nearly done” or “done”. We are clearly reaching this part of development when we start targetting specific pain points, which means a lot.

Nice milestones in this release:

  • we now have all themes we absolutely needed (neutral dark, light and middle-gray themes);
  • macOS builds are getting on-par with other builds;
  • usability is being finalized, after the multi-item selection really changed the whole paradigm of how GIMP interacts with layers changed;
  • the space invasion project is currently running strong. Even though this release doesn’t show as much consequences of it yet as we hoped, the next release should;
  • developer documentation, for onboarding of new contributors, is finally getting somewhere.

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

Conference “GIMP and ZeMarmot” in Vandœuvre-lès-Nancy (France)

Par :Jehan

Next Friday, the 4th of November 2022, from 6PM to 8PM CET, Aryeom (with her hats of film director of “ZeMarmot” and GIMP contributor) and myself (Jehan, with my hats of main developer/maintainer of GIMP and technical operations in “ZeMarmot”), will host a conference at the Jules Verne library in Vandœuvre-lès-Nancy (France).

Poster for the talk 'GIMP and ZeMarmot' of 4 November 2022 in Vandœuvre-lès-Nancy
Poster for the talk “GIMP and ZeMarmot” of 4 November 2022 in Vandœuvre-lès-Nancy
Location
Médiathèque Jules Verne
2 rue de Malines
54500 Vandoeuvre-lès-Nancy
France
+33 (0)3 83 54 85 53
Time
Friday, November 4, 2022 - from 6PM to 8PM (CET, French time)

The event is organized by a public body whose name could be translated as something like “the Collective Factory of the Libre Culture” (FCCL), which is a cool name, right? It’s rare enough to have public institutions funded by a city (in this case: Vandœuvre-lès-Nancy) encouraging Free Software usage, and this is why we accepted their invitation. As far as we know, ever since the global health crisis, it will be the first physical conference with contributors of GIMP. Quite strange to prepare talks again after 3 years! 🥲

We will obviously talk about GIMP and how it is developed as a community, since the concept of “Community, Free Software” is dear to me. We will also talk about “ZeMarmot“, the Free/Libre Animation Film produced by the non-profit LILA which crowd-funds our work (for the movie and GIMP development). So it will be the opportunity to discuss about various interesting topics, based on our concrete experience of running FLOSS and Libre Art projects.

We may also present some other Free/Libre movies we produced, such as the ones made on account of Framasoft: “What is Peertube?” and “What is the Fediverse?“).

So if you are in France around Vandœuvre-lès-Nancy on November 4, we hope we’ll see you there. 🤗 Otherwise, I am told that the talk will be streamed live 🖥️ (in French of course).

Revival of the GIMP developer website

Par :Wilber

This weekend, we published a new developer 🧑‍💻 website! 🥳

Screenshot of the new developer website of GIMP
Screenshot of the new developer website of GIMP

As the name indicates, it is targetted at developers, both core contributors (people making GIMP itself) and third-party developers (people making plug-ins and publishing them on the side). This is why the website has 2 main sections:

  • Core: for core developers, with roadmaps, information on how to build GIMP, coding style guidelines…
  • Resources: for third-party developers, with links to the public libgimp API, tutorials to make plug-ins…
    We call this section “Resources” as in the future, it may also contain info on how to make brushes or other data for GIMP.

A bit of history

GIMP has had a developer website for at least 2 decades (the Internet Archive traces back an early page in 2001), yet mostly unmaintained ever since 2009, which is a shame.

Since then, documentation for developers was scattered on the general website, the source repository itself and 2 wikis (developer and GUI wiki). As you may know, the developer wiki encountered problems recently. As for the GUI wiki, it is still there, though we plan to merge both wikis into our new developer website.

Rather than having duplicate documents all over the place, we want to consolidate developer documentation into a single point of entry.

Work in progress

This new website is still a work-in-progress. Contents is still incomplete and often outdated. We decided to publish it in its current state and update it as we go, rather than wait forever.

As usual, we stick to only serving static pages, no server-side scripting. It’s simpler and safer as we don’t want to spend our time administering a webpage (we develop GIMP, not webpages).

What has been done so far:

  • We ported the website from DockBook to Hugo, especially thanks to Robin Swift, with help from Pat David. It has a few advantages:
    • The markdown syntax is less powerful yet so far sufficient and simpler that DockBook XML. It should facilitate contributions.
    • Hugo websites are easier to build and test, with nice immediate feedback loop when using the hugo webserver during development.
    • Hugo has a nice organization where file structure also decides of the website structure.
  • Contents was reorganized, reviewed, partially rewritten or merged. Some outdated documents were kept for historical interest, yet may not be as relevant for modern GIMP usage.
    We identified 2 main sections — as explained above: Core and Resources — with an additional Conferences section where we mostly keep track of historical meetings where developers made some decisions on the future of GIMP. We try to organize documents in these sections and subsections when relevant.
  • We progressively improve automatization of the website publishing, for instance automatic grab of the newest libgimp library documentation, and early error detection.
  • We created a testing website to validate changes before publishing to the main website (similar as what we do for gimp.org). Both websites will be automatically published daily from their own branch and can be triggered manually through Continuous Integration jobs on Gitlab.
  • All documents from the old developer website were salvaged, ported to markdown, reorganized or discarded after examination.
  • Several development-related documents from the main gimp.org website were moved to developer.gimp.org or merged into others. For instance, we had redundant pages about contributing code for GIMP. There is now (unless we missed some) only a single tutorial: Submit your first patch.
  • Dozens of the old wiki documents were ported to markdown and moved or discarded after examination. In particular, some of the most requested pages have a home again:
  • Some documents from the main source repository of GIMP were moved. An important document is the GIMP Coding Style guide.
  • Redirections were created, because “Cool URIs don’t change” and links to moved pages can be found in many third-party websites. For instance old links on the roadmap (which used to be at wiki.gimp.org/wiki/Roadmap) now redirect to the new roadmap.

What’s next

More documents need to move, be rewritten or fixed. This is only a start.

Also the website style is currently pretty simple and bare. On one hand, maybe it’s not too bad for a development website. On the other hand, discussions have happened proposing to make the website look a little more lively and less austere 🧐. We’ll see!

Why this website?

Improving onboarding

By having a single point of entry, we hope it will feel less heavy for newcomers to understand where to go for building GIMP and contributing patches.

Now if anyone asks, tell them to look at the Core section of GIMP’s developer website.

Simplifying plug-in development

We strive for a lively third-party plug-in ecosystem. For this to happen, we want to help third-party developers. There are a lot of documentation and tutorials about plug-in developement, but they are spread across the web, many links are dead, a good part of the documents are unmaintained and therefore partly outdated.

This new website doesn’t bring much yet on this side, though by making plug-in development one of the 2 main sections, we clearly intend to change this fact for the upcoming GIMP 3.0. You should not expect new tutorials for GIMP 2.10 plug-in development, but this is definitely where you should keep an eye on if you are interested by plug-in creation for GIMP 3.0: Resources section of GIMP’s developer website

Statistics

The main work happened on the gimp-web-devel repository.

Since mid-July, when we started the website renewal, the following contributors participated:

  • Jehan: 86 commits
  • Pat David: 38 commits
  • Robin Swift: 15 commits
  • Lukas Oberhuber: 1 commit

Some more work, unlisted here, happened on gimp-web (main website) repository.

Contributing to and Funding GIMP

As usual, we remind that GIMP is Community, Free and Libre Software. It is what we all make of it, together. This is a main reason of such a developer website. Hopefully you will find it useful. If not, don’t remember that the website itself is community-made. So feel free to propose developer tutorials and fixes or updates to existing ones.

Help with
GIMP development

Last but not least, if GIMP is useful to you and you wish to fund development, you are very welcome to donate to the project and fund core GIMP developers, as a way to give back and accelerate the development of GIMP.

Support us by
Donating

Development version: GIMP 2.99.12 Released

Par :Wilber

GIMP 2.99.12 is a huge milestone towards GIMP 3.0. Many of the missing pieces are getting together, even though it is still a work in progress. As usual, issues are expected and in particular in this release which got important updates in major areas, such as canvas interaction code, scripts, but also theming…

CMYK space invasion - animated video-game like strip
CMYK space invasion”, by Jehan (based on GPLv3 code screencast), Creative Commons by-sa 4.0 - GIMP 2.99.12

The most noteworthy changes are listed below:

To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Core Features

On-canvas brush sizing

There were requests for quickly changing tool settings, such as brush size or tool opacity, without having to go to the “Tool Options” dockable

A quickly appearing on-canvas GUI was considered (similar to other software), though we realized that many people who want this prefer a non workflow-disruptive interaction.

This is why we went for a simpler and direct design. For instance, now Alt + right click will trigger a brush resize action on canvas.

Changing brush size with Alt + right click
Changing brush size with Alt + right click - GIMP 2.99.12

Note that this code area still is a work-in-progress. There are more interactions still worked on, such as opacity update and customizability (see next section).

Customizable on-canvas modifiers

Many features are available on-canvas, some of them less known than others, for panning, zooming, rotating the canvas (since GIMP 2.10.0) or even selecting layers through canvas (since GIMP 2.10.10).

The current features are:

Modifiers Main button Secondary button (usually middle click) Third Button (usually right click)
- Tool-specific Panning Contextual menu
Ctrl/Cmd Tool-specific Zoom -
Shift Tool-specific Canvas rotation -
Shift-Ctrl/Shift-Cmd Tool-specific Constrained (15°) canvas rotation -
Alt Tool-specific Layer picking Resize brush (new)

Note: on macOS, Cmd is used in place of Ctrl. This is usually implied when Ctrl only is mentioned.

These are based on the following logic:

  • The main button is reserved for tools. Even though some of them share similar logic (e.g. all the selection tools share modifiers to add, subtract or intersect selections), some tools will have specific use cases.
  • The secondary button is used for “navigation”, in particular canvas navigation, but even on some kind of z axis with layer navigation (recent Layer picking ability since GIMP 2.10.10).
  • The third button was always reserved for contextual menu only. The new brush resizing ability breaks this tradition.

As we added new features, it became obvious that we were eventually going to lack modifiers for other useful actions. Also everyone is unique and has their own preferred workflow, so some people would definitely wish to have slightly different action behavior. As an example, even the just implemented brush sizing already comes in 2 variants (resize from center or sides).

Not to mention we had feedbacks of people disliking unexpected canvas changes, for instance because they hit Shift too early and a canvas rotation happens (admittedly not everyone cares about having canvas rotation in their workflow). Moreover some legacy actions, such as the contextual menu, can be questionable nowadays (especially as it is the same menu available at the top of the window).

This is why the canvas interaction code got factorized to use customizable modifiers rather than hard-coded. The table above is still the default, but now you may customize it: add more actions and modifiers, remove some or change them all. The settings are in Preferences > Canvas Interaction > Modifiers, then click on the button labelled “Click here to set a button’s modifiers” with any mouse or stylus button to start customize its modifiers.

You can even add “custom actions“, i.e. anything to which you could assign a shortcut. Want to swap the foreground/background color on right click? Now you can. Want to activate the Unified Transform tool with Shift-middle click and remove canvas rotation? You can too.

Remapping modifiers for on-canvas interactions
Remapping Shift+middle click to select the Unified Transform tool and removing Shift-Ctrl + middle click mapping - GIMP 2.99.12

Not only this, but it should work with any button (not only the second and third). So if you have a mouse with 20 buttons, you could map every one of them to an action (as well as any combination with modifiers).

Furthermore it will recognize different input devices, so that you can map different actions to the same button of several plugged mice or styli (note that it doesn’t recognize yet different device of the exact same model, but eventually it probably will).

⚠️ If you experience bugs in any canvas interaction, this is a good time to report them because a lot of code updates happened to make the code more generic so early-tester bugs are expected.

Testing new Zoom behaviors

A new settings is available in Preferences > Canvas Interaction to customize the zoom behavior, when zooming with Ctrl + middle click or Ctrl-Space.

The legacy algorithm would zoom, in or out, continuously as long as there is movement. It doesn’t depend on the movement span, which is why we called it the “By duration” drag-to-zoom behavior.

The new behavior is the “By distance” drag-to-zoom as it will zoom more if you do large moves, or in a more fine-grained way with very short moves. We left both behaviors available as a settings because after user testing, we decided that some people may prefer the old behavior, though the newly proposed one also made sense.

Finally the “Drag-to-zoom speed” allows you to set the speed rate at which the zoom will happen, in percentage of the default (i.e. that 100 is the default speed; you can raise or lower it).

These zoom settings were contributed by woob.

Improved tool pointers

In Preferences > Input Devices, you will first discover that some settings have been moved around. In particular, pointer-related settings have been moved from “Image Windows” to “Input Devices” tab and reorganized.

The second improvement is that the settings behavior have been rethought:

  • Now when “Show brush outline” is checked and “Show pointer for paint tools” is unchecked, if the brush outline cannot be drawn (for instance because you use a dynamics changing the size with pressure), GIMP will display a fallback 4-arcs generic outline showing the set size (it used to show a crosshair which made no sense, as “Show pointer” was explicitly unchecked).
  • When both “Show brush outline” and “Show pointer for paint tools” are unchecked, we show a minimal visual feedback of a few pixels only, as inconspicuous as possible, instead of a crosshair. Once again, people are explicitly asking for nothing, so showing a crosshair felt counter-productive. Yet actually showing nothing at all would be confusing too. Even with tablet displays, the parallax issue is unfortunately very real. This is why we opted for an extremely small point-like cursor. It still shows your exact position with few disturbance.

The point-like cursor was originally contributed by L Amander, then modified by Aryeom who made it visible on both dark and light background, and the new pointer was adapted into existing settings instead of creating a dedicated setting.

⚠️ This point-like cursor feature is really adapted for tablet displays and may seem very hard to use and frustrating for any other usage (nearly invisible pointer).

Drawing with point-like cursor
Drawing with point-like cursor: 🔎 can you see the pointer? 🔬 - GIMP 2.99.12

Improving again the “Fill by line art detection” of Bucket Fill tool

The “Fill by line art detection” mode of the Bucket Fill tool is a big question for us as we are regularly tweaking the options to improve usability.

The idea is how to make the settings easier to understand while not losing the very advanced capacity of the tool.

Therefore we tried something new, reorganizing the options in 3 categories which correspond to the 3 main steps of the line art algorithm:

  1. Line Art Detection: the settings which configure how the line art is detected: which source is being used? Using opacity or grayscale? Which threshold?
  2. Line Art Closure: the settings for the closure algorithm of opened line art areas.
  3. Fill Borders: the settings for borders of the fill: how much should we grow under the detected line art? How to get nicer borders?
Bucket Fill options - line art algorithm
3 steps in the line art algorighm: (1) line detection, (2) line closure, (3) border style - GIMP 2.99.12

Also we add an “Automatic closure” checkbox which is equivalent to setting the “Maximum gap length” to zero, and simply means we don’t want any smart closure by an algorithm. It is more understandable this way while making easier to switch between smart and no closure.

As a parallel, the option “Allow closing lines in selected layer” was renamed “Manual closure in fill layer“.

Finally we added a “Stroke borders” which works similarly as the “Stroke Path” or “Stroke Selection” features and which can be useful, in particular for visible borders of unclosed areas.

More iterations may happen to improve usability of this very nice tool as we progress towards GIMP 3.0.

Customizable checkerboard colors

In GIMP, we represent transparency in an image through the very common “checkerboard” pattern. In order to handle various use cases, we were proposing a series of colors, from light to dark grays, and even proposing white, gray or black only backgrounds. Though all these had the shared characteristics of being shades of gray.

Preferences > Display > Transparency > Check style has now a new option “Custom checks” allowing to select any RGB colors for the 2 colors representing “transparency”. If you wish to show transparency with rainbow 🌈 colors, this is up to you!

The new function gimp_checks_get_colors() has been added to the interface for plug-ins, replacing gimp_checks_get_shades(). This would allow any plug-in needing to render transparency checkerboard according to user choice.

This was originally contributed by Ben Rogalski, then improved, in particular for proper API and plug-in support.

Welcome Dialog

Remember the “Welcome dialog” which you get after an update (you probably got one in GIMP 2.99.12)? We worked a bit on the “Release Note” tab to allow for “demo” items. I.e. now some items (spotted with a different bullet point) will play a short scenario showing what a new feature refer to.

This is still a work-in-progress which doesn’t work for all types of features, and the styling for demo “playback” can definitely be improved. This is what it looks like right now:

Demo items
in release notes of Welcome dialog
Double-clicking demo items in release notes of Welcome dialog - GIMP 2.99.12

Pinching gesture for more usage

It was already possible to zoom the canvas with pinch gesture since GIMP 2.99.6. It is now also possible to rotate the canvas with a pinch gesture. Note that we made the choice to make zoom and rotation through pinch exclusive, i.e. that the first detected movement will lock on the gesture to either zoom or rotation, not both at the same time. It seemed to us that people might find it annoying to rotate when you just want to zoom (or the other way around).

Furthermore you can now zoom the preview images in item dockables (Layers, Channels, Paths) with pinching or mouse wheel.

Finally you can zoom in the Gradients dockable by pinch gesture too.

All of these were contributed by Povilas Kanapickas, who had already implemented zoom through pinch gesture on canvas.

CMYK

This one deserved a section on its own in this news report because thanks to our new GSoC student, things moved quite fast here, not only for CMYK, but for the color space invasion project as a whole. We had to re-think a lot of the color conversions and display in various parts of the program.

Simulation data is now image data

The main usage of “simulation” is soft-proofing, a very common use case being printing. E.g. you could work in a RGB space, but know the final format (e.g. through a profile given to you by a printshop, often a CMYK profile) and want to see how your image would render, in particular regarding gamut loss.

It was already possible to set a “Soft proof profile“, as well as a rendering intent, and whether you wanted black point compensation or not. Yet this info was lost at each session restart.

These data will now be stored within the XCF file itself. So you won’t need to re-set them each time. Indeed if you work on a print job, the final target can be considered part of your workflow for this specific print job, hence part of the image.

As a consequence, these 3 information (soft proof profile, soft proof rendering intent and soft proof black point compensation) moved from the View > Color Management menu to the Image > Color Management menu (though View > Color management still contains some settings, such as whether to enable color management and whether or not to soft-proof; these are not image data but specific to a view: a same image can be simultaneously displayed in several views, one proofed and the other not, for instance).

Simulation toggle in the status bar

To make simulation a first-class citizen in your workflow, we wanted a way to make it obvious when you are viewing a proofed image or not. This is done through a new icon at the right of the status bar. This icon has 3 purposes:

  • It visually shows whether we are in simulation (a.k.a. soft-proofing) mode or not.
  • It allows to switch from simulation to non-simulated modes by clicking on it.
  • It allows to customize simulation settings (simulation profile, simulation rendering intent, black point compensation…) with a pop-up dialog by right-clicking.
Quickly
changing soft-proofing settings with a toggle on status bar
Quickly enabling soft-proofing, clicking a toggle on status bar; or changing soft-proofing settings, right-clicking the same toggle (here showing a CC by-sa character design on canvas, by Aryeom) - GIMP 2.99.12

Various GUI now simulation-aware

Most GUIs which were displaying CMYK data were displaying “naive CMYK” colors. It is some generic algorithm not taking into account a specific CMYK color space.

Now if you set a simulation profile, and if this profile is a CMYK one, then these interface will display CMYK colors for this space, assuming that this is what you are interested in.

This includes interfaces such as the Color Picker tool, Sample Points, and the CMYK color selector.

Export formats with new or improved CMYK support

Similarly, several supported image formats have now new or improved CMYK support. We are not talking about having core CMYK support as backend encoding; GIMP is still only working in either *RGB, grayscale or indexed. Yet, you can now better import or export CMYK images in several formats, with much more suitable conversion done. In particular, it means that:

  • The CMYK profile of imported CMYK images will be stored as a simulation profile. I.e. that the image will now be RGB, yet the CMYK profile will be kept for simulation.
  • RGB images can be exported as CMYK, using the simulation profile (if a CMYK one) for conversion, then stored in the resulting CMYK file.

The assumption is always that the simulation profile is your target color space.

The updated formats so far are:

JPEG:

  • CMYK export now possible using the image Soft-proofing profile.
  • CMYK import ported to GEGL/babl conversion. The CMYK profile in the JPEG image will be stored as soft-proof profile on the image.

TIFF:

  • 8 and 16-bit CMYK(A) export now possible, using the image Soft-proofing profile.
  • CMYK import now possible. The CMYK profile in the TIFF image will be stored as Soft-proofing profile on the image.

PSD:

  • CMYK import ported to GEGL/babl conversion. The CMYK profile in the PSD image will be stored as soft-proof profile on the image.

New plug-in API

Plug-ins can now request or set the soft-proofing profile of an image with new functions, such as gimp_image_get_simulation_profile() or gimp_image_set_simulation_profile() respectively. This is really a new image data which can and should be used by plug-ins when they want to display or process CMYK colors in the context of the active image.

Similarly several libgimpwidgets widgets (GimpColorNotebook, GimpColorSelection and GimpColorSelector) became simulation-aware with new dedicated functions to set the simulation space of interest.

Themes

GTK got a new CSS-like theming system in GTK+ 3, which means our 2.10 themes were not reusable and which is why we called for theme designers many times because a graphics application should really have a good set of neutral gray themes for an interface with the less color pollution possible, as it can affect your color perception.

It is only a month ago that we got a first proposal for a mid-gray neutral theme, though this one is still a work-in-progress. On the other hand, it triggered our long-term contributor, Akkana Peck, to propose a Light theme. With quick back-and-forth exchanges, this one was rapidly completed and merged into the source tree. Nikc helped also a lot by finding solutions to annoying bugs where we were stuck.

In the end, we made the theme more generic, making colors into variables with semantic names, and reused the same style code yet different colors to make a dark theme.

Instead of having 2 themes, we merged these into a “Default” theme with both a light and dark variants which will be switched depending on the “Use dark theme variant if available” checkbox.

For this to work, we also made a new process for theme makers, based on generic GTK process, which is that your theme can contain a gimp-dark.css file (additional to the main gimp.css). This secondary file will be used instead of the first when the “Use dark theme variant if available” option is checked in Preferences.

New Default theme in
light and dark variants
New Default theme in light and dark variants - GIMP 2.99.12

File format support

PSD

Additionally to the new CMYK support on import, our PSD support got the following improvements:

  • Improved error logging during load.
  • Added support for extra layer mask: according to the specifications the extra mask is used “when both a user mask and a vector mask are present“. We haven’t seen an example that has the extra mask, so not sure which of the masks would appear first. For now assuming that the extra mask will be first. The advantage of adding this here now, is that we won’t try to add a mask channel as a normal channel.
  • Minimal support of duotone data: on import, a duotone image will be imported as grayscale image with an alert and the color information will be stored in a parasite; on export, a dialog will propose you to re-include the duotone data if the image is still grayscale. This allows for a roundtrip in GIMP without losing the duotone information.
New dialogs when importing (left) then re-exporting (right) a PSD duotone image
New dialogs when importing (left) then re-exporting (right) a PSD duotone image - GIMP 2.99.12

SVG

Some valid SVG can fail to import when they contain some huge data (of various types). This is not a limitation of the parser but a security limitations, because malicious SVG files can be created on purpose to consume too much memory.

Nevetheless this can still happen on valid and non-malicious files, as some users encounter issues with SVG files exported by Sweet Home 3D (a nice Free Software for drawing interior design plans). Hence when failure to load a SVG occurs, GIMP will propose to try again with the security limitation removed.

Dialog to disable safety limit on failed SVG import
Dialog to disable safety limit on failed SVG import - GIMP 2.99.12

🛈 Note that GIMP doesn’t have the information whether the load failure happened because of this specific issue or not, so if the reason was other, even retrying without security limitation may still fail.

⚠️ Also very IMPORTANT: as explained, this was a safety measure, which implies that disabling it has security implications. You should only accept disabling it to load SVG files from trusted sources, as the pop-up also reminds. ☢️

GIF

A new option appeared in the GIF export dialog: “Number of repeats“. It specifies a specific number of repeat for loop animation. Previously you only had the choice of single run animation versus infinite loop.

GIF export dialog
GIF export dialog with new option “Number of repeats” - GIMP 2.99.12

PNG

The following changes happened in our PNG support:

  • The format does not have any flag for linear RGB, but it can simply include a linear profile (or a 1.0 gAMA chunk). Therefore since we always attach the profile when importing (or transforming the gAMA chunk into a profile), we now always load PNG images as non-linear backend.
  • When exporting indexed images, a new checkbox “Optimize for smallest possible palette size“, if enabled, will export a PNG file with lowest bit-depth palette possible (less than an 8-bit palette with 256 entries, if possible).

DDS

The following changes happened in our DDS support:

  • 16-bit masks now supported.
  • DDS images with single 16-bit channel support added.
  • DDS images with two 16-bit channels correctly converted to 16-bit RGB images.
  • More robust DDS loading.

FLI

The following changes happened in our FLI support:

  • 1-frame animation now loaded correctly (it’s not really an animation yet it should still open!).
  • Layer names now include the delay in ms.
  • More robust FLI/FLC loading, double-checking data rather than assuming that the file writer properly followed the specs, better error handling…

Raw data

🛈 We are talking here of “raw data” where you export your pixels as contiguous or planar data directly, without following a specific file format, and not RAW file formats as are usually called formats used by digital cameras (for these, we still prefer to pass through good raw developer software, such as darktable or RawTherapee).

A big rewriting of the Raw Data dialog (and API) organization happened.

First, it is now possible to export any bit depth as raw data (despite the higher bit depth support, exporting 16 or 32-bit images used to still export them 8-bit raw data). This part will also be available in future stable version GIMP 2.10.34.

And especially all exportable formats can be loaded back, and more. As it made for a huge list, the way the import dialog used to list formats, we split settings. Data type (unsigned or signed integer, floating point), endianness or planar configuration (contiguous or planar) are now their own settings and code has been generalized to support each and every combination. The “Pixel format” list is now only about the layout for various components.

Raw data import dialog
Raw data import dialog with more settings and much more support formats - GIMP 2.99.12

As a consequence GIMP now supports a lot more raw data formats, while keeping a usable dialog, without showing a never-ending list of formats.

The PDB API for this plug-in has also been improved to follow the same scheme of separate arguments.

As a last change, the HGT format (supported since the stable version GIMP 2.10.0) is sharing the same codebase so we used to pop the raw data dialog up. Nevertheless we have all the relevant information for a properly formed HGT file, so we now load these directly without dialog (unless we fail to detect the proper sample spacing).

New format: WBMP

GIMP now supports loading WBMP image files, which are monochrome images optimized for the legacy WAP protocol, now mostly discontinued.

The format itself is probably not really useful for new images, but it can always be useful to be able to load existing images from older archives.

Note that this is a limited support as it doesn’t support all features of WBMP, yet hopefully enough to be useful for most use cases.

New format: ANI

GIMP now has import and export support for the ANI animated mouse cursor format.

The export dialog allows you to set hot-spot coordinates for each image in the animation.

Hot-spot coordinates from imported ANI files are stored as parasite in the XCF to be reused as a default when re-exporting.

Export dialog of ANI format
Export dialog of ANI format with cursor name, author, animation delay and hot-spot settings (CC by-sa illustration, shown in-dialog, by Aryeom) - GIMP 2.99.12

Script-fu

Lloyd Konneker, our new Script-fu maintainer, really did take his new responsibility to heart as Script-fu code has not seen such activity for years now.

A lot of bugs were fixed, more documentation for Script-fu developers was written, but also huge changes happened.

Script-fu server now its own plug-in

Script-fu used to be a very monolithic extension plug-in (i.e. a plug-in running permanently in background), with all its features in one binary, which had several drawbacks. One of them is that the Script-fu server (script-fu-server), which allows to communicate with GIMP remotely, would also be running in the same process.

It can be considered a security hazard, which is why it was made its own plug-in, which can be run independently, on request only.

New separate interpreter

GIMP now installs a gimp-script-fu-interpreter-3.0 binary which will run the Script-fu scripts. It has huge advantages:

  • Script-fu scripts are finally proper plug-ins. They are installed within the plug-ins/ folder (not in scripts/ anymore), and work the same way as other bindings. Note that Script-fu is not a GObject-Introspected binding, unlike other bindings, and it has its own way to wrap the PDB protocol or libgimp* libraries, but other than this, it became now much closer conceptually.
  • It makes the Script-fu infrastructure much more robust as a single crashing script will not crash the whole Script-fu altogether. Every Script-fu plug-in now runs in its own dedicated and independant process.

Rethinking the API

Since a lot happened on the main libgimp* API, Script-fu specific API had not been able to follow up. We are now trying to fill that gap and to get Script-fu much closer to the main interface.

Among these changes, the new function script-fu-register-filter is used to declare PDB procedure of the C class GimpImageProcedure. It will also allow to much more easily use the procedural dialog generation through the GimpProcedureDialog class.

A lot of discussions also happened on the topic of argument handling for various types. This is still a work-in-progress as we are trying to improve some use cases, for instance handling of plug-in’s specific lists of options.

API

The Application Programming Interface for plug-in developer received various improvements and changes within this iteration.

Of course, we have many new functions corresponding to new features in GIMP, such as for the simulation color management, customizable checkerboard colors and more. See the list.

A new gimp_image_metadata_save_filter() also appears, as an alternative to gimp_image_metadata_save_finish() when you want to save metadata yourself and you need only filtering processing. It returns filtered metadata allowing the caller to save the finalized metadata via other means (via native format’s library for example). This API can be used to support metadata saving of image formats not directly supported by gexiv2/exiv2. We already use it for the HEIF/AVIF plug-in.

We also finally got rid of various functions assuming that an image only had a single active layer or channel. We know this is not true anymore in GIMP 3.0, with multi-item selection.

Among the many other changes, one of the most important changes in this updated API is how we handle plug-in localization. While the translation of most strings were left to the plug-in’s discretion, the strings at register time (plug-in title, documentation…) were translated by the core, e.g. when used in menus or in the PDB browser, using gettext catalog given at registration time. This raised various issues, such as what happens if several plug-ins were to register a catalog with the same name (which could have been fixed, with even more complicated internal logic)? Or what happens if a plug-in doesn’t register a localization catalog, but the default catalog contains (wrong) translations for submitted strings? Moreover it ended up to be quite confusing as many plug-in developers were wondering what is translated where, i.e. if a string should be surrounded by _() (common gettext macro) or N_() (noop gettext macro).

So the new logic is much simpler: translation is now left entirely at the plug-in discretion, i.e. all strings received by the core are assumed to be in the correct target language. The core doesn’t try to translate anything coming from plug-ins anymore.

Now to help a bit with localization, our infrastructure proposes a standard file organization, with all gettext catalogs under the locale/ folder of the plug-in directory, and named the same way as the plug-in itself. If the catalog is absent, our system outputs a message on stderr to inform of this standard procedure. A plug-in following this procedure won’t have anything else to do than place the compiled gettext catalogs (*.mo files) with the right domain name in the right folder.

A GimpPlugIn can supplant this behavior at any time by overriding the set_i18n() method, to either disable localization altogether, pointing to a different catalog path and name or even use another system than gettext.

The only remnant of the old logic, which we need to think about and improve, is the localization of menu paths, as we still want core-localization of some base menu paths. E.g. the root menus (“Edit”, “Image”, “Colors”, “Filters”…) but also some submenus (“Blur”, “Enhance”, “Distorts”…) should still be localized by the core while plug-ins will need to handle new parts in the menu path. This is the only exception to the new “no core translation” logic for plug-in.

Batch processing

A new libgimp class GimpBatchProcedure was added, facilitating the creation of batch interpreter plug-ins, i.e. plug-ins meant to be run from command line to process a series of procedure calls. Currently 2 such interpreters exist in GIMP: the Script-fu (plug-in-script-fu-eval) and the Python (python-fu-eval) interpreters.

Running code this way is done with the --batch CLI option. Historically Script-fu was used as default, but this is not the case anymore. Now you must explicitly specify an interpreter with --batch-interpreter.

Moreover a new option --quit was created and this is what you must use if you wish to exit GIMP immediately after the scripts are run. Do not call "(gimp-quit 1)" anymore. A nice improvement is that GIMP will now exit immediately after a batch failure (i.e. if you had a series of --batch calls, it will stop at the first failure) and will propagate the failure into the process exit code. Exit codes are inspired from command Linux error codes: 0 for success, 69 for service unavailable (e.g. setting a non-existing interpreter name), 64 for usage (e.g. not specifying any interpreter or calling errors), 70 for execution errors (bugs in the interpreter plug-in) and 130 for canceling the call. Therefore you will now know when your scripts fail.

As an example of batch processing, here is how you could load a PNG image, then export it back as JPEG:

$ gimp-2.99 --batch-interpreter python-fu-eval -idf -b "img=Gimp.list_images()[0];layers=img.list_layers();c=Gimp.get_pdb().lookup_procedure('file-jpeg-save').create_config();c.set_property('image',img);c.set_property('file',Gio.file_new_for_path('/home/jehan/out.jpg'));c.set_property('drawables',Gimp.ObjectArray.new(Gimp.Drawable, layers, False));c.set_property('num-drawables',len(layers));Gimp.get_pdb().run_procedure_config('file-jpeg-save',c)" --quit  /home/jehan/in.png

This long command line may seem frightening, but this is the same script in a file, named for instance gimp-script.py:

img = Gimp.list_images()[0]
layers = img.list_layers()
c = Gimp.get_pdb().lookup_procedure('file-jpeg-save').create_config()
c.set_property('image', img)
c.set_property('file', Gio.file_new_for_path('/home/jehan/out.jpg'))
c.set_property('drawables', Gimp.ObjectArray.new(Gimp.Drawable, layers, False))
c.set_property('num-drawables', len(layers))
Gimp.get_pdb().run_procedure_config('file-jpeg-save', c)

Run it through GIMP in batch mode like this:

gimp-2.99 --batch-interpreter python-fu-eval -idf -b - --quit  /home/jehan/in.png < gimp-script.py

Of course, you can add in your scripts any filtering or image manipulation, through GEGL or libgimp API.

Build and documentation

meson (message to packagers)

GIMP build system traditionally uses GNU autotools. An initial, yet incomplete, port to the newer meson system was contributed in 2017 by Félix Piédallu.

It took a few years to complete the last customizations, tweaking meson scripts to be able to handle all the special cases we had in GIMP code. As we approached completion in this development cycle, we started to officially recommend meson for Windows, then macOS, and finally, early August, we decided to recommend meson for all platforms.

This is still an evaluation phase for this build system, though now we are moving forward into intensive testing. If you are a packager, please try to now use our meson build and report any issue to us.

Exceptionally for this version, we released 2 tarballs on our download server: gimp-2.99.12.tar.xz and gimp-2.99.12-autotools.tar.bz2. As you can guess, the former is the meson-generated tarball, yet we left an autotools-generated tarball as fallback if the meson tarball end up having major issues.

The INSTALL file was rewritten as well with meson instructions.

Of course, all our own packages (flatpak for Linux, installer for Windows and DMG for macOS) are now built with meson.

Gettext

As many other projects, GIMP was using the intltool project to extract localizable strings and translate various files with gettext, not only code.

Since about 2016, upstream gettext gained the ability to extract strings for more types of files and formats, projects were encouraged to move on and the intltool project was progressively abandoned. But GIMP was still using it for various types of files (XML, desktop files, Inno Setup translation files and more…) so the workfield was not small.

Well no more as Niels De Graef finally took care of this port and got rid of this technical debt! 🥳

Of course, it triggered various problems, even to release day as we realized when testing installers that some buttons were broken (which is one of the few reasons why this news is out days after the actual source release) and we had to fix the strings. Hopefully this was the last related issue!

Platform support

Wayland

Wayland issues are slowly yet surely being getting rid of. Some of the issues we had just disappeared with more recent versions of some Wayland compositors. We do hope more bugs in upstream compositors will be fixed eventually because some serious issues are still puzzling us (such as crashes of some GTK applications, GIMP included, on the Sway Wayland compositor).

Some other issues have been handled in our code.

One of them is that early testers may have noticed a very annoying popup telling you that “gimp-2.99 wants to inhibit shortcuts” (at least on Mutter, the Wayland compositor of GNOME) in former 2.99 versions. This got fixed by removing various keyboard grabbing code which was not necessary anymore with GTK+3.0.

Some issues still remain, based on the early state of Wayland in general, in particular because it doesn’t have color management. We were often advised to use the “portals” for various features, such as color picking, which unfortunately do not return us color-managed colors (as a side issue, some desktop — such as Cinnamon and Mate — simply are missing implementation for the color picking portal even though the portal exists, which confuses GIMP). This is a regression problem because we were getting wrong colors (slightly wrong, or even very wrong if you use a wide gamut display) even when one were still running on X11. Therefore now we will favour the X11 implementation for color picking when you are running on X11 and will use the portals only on Wayland. We may go back to portals for everyone on Linux when they return managed colors.

Meanwhile, we are in discussions with Freedesktop portal developers to get a new color-picking portal API, which will eventually have to be implemented for the various desktops. Let’s hope it happens sooner rather than later! 😅

macOS

As usual, a lot of maintenance work was done by Lukas Oberhuber. Packaging work is not as visible, hence is quite often thankless, which should be fixed: thanks Lukas as well as every other packager!

Apart from this, you may remember the slowness issues happening on newer macOS versions (ever since Big Sur). We had some custom patches already for GTK and some dirty trick in GIMP code itself since GIMP 2.99.10.

It all led to various improvements in GTK code which took over the previous patches. It took months of testing, several code proposals in several directions (at least 3 different merge requests, possibly more code was discarded) and it got to a very satisfying result as Lukas confirmed it is much faster now and GIMP is totally usable. Our in-GIMP dirty tricks could also be removed. For all these improvements, we want to thank in particular John Ralls who provided the final fixes and Christian Hergert for his constant inputs. Of course, we should not forget the numerous other contributors who stopped by to help and give useful inputs. Hopefully GTK on macOS will continue to improve even more!

In any case, this is great news for all other multi-platform GTK software, though no GTK+3 release contains these fixes yet. It will be available in GTK+ 3.24.35.

We include a patch on Cairo (again by John Ralls) as well for improved performance on macOS, though the gained performance was not as obvious as the GTK fix.

Also additionally to the development releases, we now provide nightly builds for macOS. Check the section “Automatic development builds” of the Development download page for a procedure. ⚠️ As usual, we remind that nightly builds means that it’s even more experimental than development builds: these packages happen at random point in the development process and the builds are not even human-tested. ☢

In any case, a lot has happened since the days, not so long ago, when we were despairing at the sad state of GIMP on macOS, with slowness (to the point of being unusable) and interface issues. Now we are finally getting to a point where we can hope GIMP 3.0 will be great on macOS, though we are still very short on contributors for this OS. We welcome any developer wanting to join us!

Last point for people waiting for M1 builds: some work has been done in this direction, but we are mostly blocked by CI hardware limitations. We’ll keep you updated on improvements for this topic obviously.

For people who have a M1 Mac and are willing to build locally, there are build scripts, in the gimp-macos-build repository though starting from the README might be ideal. Note that Lukas is already doing all his work on M1 machines now, so we are just waiting for CI support to provide proper packages.

babl and GEGL

As usual, this release is supplemented with the releases of babl 0.1.94/0.1.96 and GEGL 0.4.38.

babl 0.1.94/0.1.96

babl 0.1.94 fixes a crash on non-aligned data for SIMD and improve vala compatibility of introspection information.

It also brings a new command line utility for converting unique colors from one format and/or space to another. This is very useful to us for testing our color conversions and verifying that GIMP code does the right conversions too, which is why we wrote this tool in the context of the color invasion project.

For instance, to convert some color from sRGB to the CIELAB color space:

$ babl -f "R'G'B' u8" -t 'CIE Lab float' 100 100 100
Converting from "R'G'B' u8" to "CIE Lab float":
- 42.374615
- 0.000000
- 0.000009

Usage is:

$ babl --help
Usage: babl [options] [c1 ..]
Convert color data from a specific Babl format and space to another.

  Options:
     -h, --help            this help information

     -f, --from            input Babl format

     -t, --to              output Babl format

     -i, --input-profile   input profile

     -o, --output-profile  output profile

     -r, --intent          rendering intent
                           it only works with an output profile

     -b, --brief           brief output
                           it can be re-entered as input for chain conversions

All parameters following -- are considered components values. This is useful to input negative components.

The tool expects exactly the number of components expected by your input format.

The default input and output formats are "R'G'B' float" and default space is sRGB for RGB formats, or the naive CMYK space for CMYK formats.

Of course, this tool is still meant to evolve.

Note that babl 0.1.96 is functionally the same as babl 0.1.94, except for a fix in the build system, which was preventing to build babl from a tarball. Packagers in particular should therefore use the latest version.

GEGL 0.4.38

A new denoising operation called “Denoise DCT” ("denoise-dct") was introduced by Thomas Manni. It decomposes the input buffer to sliding overlapping patches, calculates the DCT denoising in each patch, and then aggregates the denoised patches to the output buffer averaging the overlapped pixels.

As for existing operations, the following were improved:

  • ff-load and ff-save: big API cleanup, now ffmpeg-5.0 compatible.
  • gif-load: updated to latest upstream libnsgif version.
  • slic: progress reporting and improved parameter handling.
  • vector-fill: updated to latest upstream ctx version.
  • oilify: clamp inputs to avoid nan in output.
  • gegl:load: fix possible double free.
  • rgbe-write: plug leaks in error paths.

Apart from bug fixes, other interesting points are that the build simplified using GEGL as a subproject and the continuous integration has been rewritten to be more reliable.

Team news

Aryeom got reporter access to gimp and gimp-web to help with various design-related issues.

Daniel Novomeský, maintainer of our JPEG-XL and HEIF/AVIF plug-ins, has been given access right to our flathub repository (for our stable and development flatpak) to help with maintenance.

We’d like to thank a category of contributors who are historically not much in the light: release testers. Recently in particular, as we are enhancing our continuous integration and release process, we also try to improve manual verifications before release. Users are very welcome to discuss with us and hang out on our discussion channels during release frenzy to test the final builds.

For our Windows installer, additionally to packagers (Jernej Simončič) and developers (Jacob Boerema), we want to thank Sevenix for having always been on-call, testing our installers for a few releases now. Sevenix also helps us to moderate our recent Discord discussion channel.

This is true for the Linux flatpak and the macOS DMG as well, as in these case, only their packagers (respectively Jehan and Lukas Oberhuber) have been testing them before release these days. So whatever is your platform of choice, please join us!

It’s a good reminder that you don’t need to be a developer to contribute back. There are tasks for designers, packagers, testers, translators, documenters and more! 🤗

Websites

Documentation website

We regularly write about this here: the new maintainer of the gimp-help repository (our documentation), Jacob Boerema, has been improving it for over a year now, doing much needed maintenance, removing technical debt, and improving what existed. But you could not see much of it… until today!

Indeed he very recently updated the online documentation website. As you can see, from the landing page already, we finally see all languages, and each of them show their translation ratio now. We do hope it will trigger more people to help and contribute to translation! 😸

A daily-update process has also been set up, so that we won’t ever get back in this bad situation of outdated online documentation for years (even though some contents were already fixed in-repository).

The Quick Reference PDF is now also available in every supported language (once again with translation completion percentage showing up).

Of course, a lot of original contents still deserve more love, either outdated, or information about new features may be missing. There is just so much that a man alone can do. Yet now the infrastructure is there to welcome a much faster update and feedback process, so if anyone wants to contribute to the documentation, you should look at the repository and propose merge requests. The contribution format is DocBook.

For translation contributions, you should get in touch with GNOME translation teams as they have their own platform. More information is available here.

A dedicated news with more details might soon be published, possibly if we decide to make a new tagged release of the manual, which will mean new installers for Windows, and tarballs for other platforms and for packagers, containing up-to-date contents for offline usage.

Development website

Meanwhile our developer website was in an even more dire situation as it had not been updated for over 10 years!

This is about to change as one of our goals for GIMP 3.0 is to improve the plug-in ecosystem, not only with an upcoming extension platform, but also with better and more up-to-date documentation.

The work on the new developer website is finally starting, thanks to the impulsion by Robin Swift, a new contributor, and help from Pat David (who is the long-time contributor who already helped by revamping our website and created the PIXLS.US community for FLOSS photography tool).

We already ported the website contents, away from DocBook, to the Hugo platform. This should simplify contributions. We also cleaned most of the outdated contents and started to port some contents which were stored in the source repository itself and from the wiki.

Ah, the wiki! Some people might have noticed that it is gone now. We used to have the roadmap, build instructions for newcomers and more technical or historical stuff over there. Let’s say that unfortunate events occurred and we lost it. 😱

Fortunately all the contents could be salvaged, and we plan to port the valuable parts into the upcoming developer website, nicely organized. After all, both the wiki and the developer website were filling a similar purpose (with the exception that one was mostly abandoned). So in the end, it’s a good thing, organization wise, right? 😅).

It’s still very early in the migration process, so we will keep you up-to-date with more exciting news soon.

Mirror news

A new mirror joined us to distribute GIMP.

Thanks to SandyRiver.NET in Pikeville, Kentucky USA, for sharing the download load!

Book news

Three German books and three Polish books about GIMP have been added to the books page:

We remind that we welcome book additions. Whether you wrote it or just read it, if you know of a book about GIMP, just report the same information as other books in the list. Thanks!

Release stats

61 people contributed to the main repository for GIMP 2.99.12:

  • 23 developers contributed to GIMP code base for this micro version:
    • 1 developer with more than 300 commits: Jehan.
    • 4 developers with 10 to 50 commits: Jacob Boerema, Nikc, Loyd Konneker, Niels De Graef.
    • 18 developers with less than 10 commits: Povilas Kanapickas, Kevin Cozens, Lukas Oberhuber, woob, Simon Budig, Anders Jonsson, Axel Viala, Ben Rogalski, Claude Paroz, Daniel Novomeský, GokhanKabar, Jan Tojnar, L amander, azetoy, houda, Øyvind Kolås, ktoyle and Sonia Habtiche.
  • 25 translations were updated: Basque, Brazilian Portuguese, Bulgarian, Catalan, Chinese (China), Danish, Dutch, Finnish, French, Galician, Georgian, German, Greek, Hungarian, Icelandic, Korean, Persian, Polish, Portuguese, Russian, Slovenian, Spanish, Swedish, Turkish, Ukrainian.
  • 35 translators contributed: Yuri Chornoivan, Hugo Carvalho, Martin, Rodrigo Lledó, Zurab Kargareteli, Luming Zh, Anders Jonsson, Fran Dieguez, Sveinn í Felli, Nathan Follens, Asier Sarasua Garmendia, Balázs Úr, Matej Urbančič, Alan Mortensen, Aleksandr Melman, Alexandre Prokoudine, Claude Paroz, Jordi Mas, Sabri Ünal, Balázs Meskó, MohammadSaleh Kamyab, Alexander Shopov, Jiri Grönroos, Piotr Drąg, dimspingos, Charles Monzat, Hannie Dumoleyn, Jürgen Benvenuti, Tim Sabsch, Alexandre Franke, Aryeom, Boyuan Yang, Danial Behzadi, Maíra Canal and Rafael Fontenelle.
  • 4 people helped with in-code documentation: Jehan, Lloyd Konneker, Niels De Graef and Akkana Peck.
  • 1 person contributed to icons: Stanislav Grinkov.
  • 3 people contributed to cursors: Aryeom, Jehan and L amander.
  • 3 people contributed to themes: Jehan, Akkana Peck and Nikc.
  • 12 people contributed build-related updates: Jehan, Lloyd Konneker, Akkana Peck, Anders Jonsson, Jan Tojnar, ktoyle, Øyvind Kolås, Lukas Oberhuber, Bartłomiej Piotrowski, Ondřej Míchal, Daniel Novomeský and Jacob Boerema.

These are the stats on babl, GEGL and ctx repositories:

  • 7 contributors to babl 0.1.94 and 0.1.96:
    • 3 contributors with multiple commits: Axel Viala, Øyvind Kolås and Jehan.
    • 4 contributors with single commits: Eli Schwartz, Lukas Oberhuber, Sergey Torokhov and Xavier Claessens.
  • 24 contributors to GEGL 0.4.38:
    • 7 contributors with multiple commits: Øyvind Kolås, Behnam Momeni, Thomas Manni, Michael Drake, Xavier Claessens, Axel Viala and Anders Jonsson,
    • 3 contributors with single commit: Felix Schwarz, Jehan and darnuria.
    • 15 translators: Hugo Carvalho, Piotr Drąg, Rodrigo Lledó, Yuri Chornoivan, Anders Jonsson, Luming Zh, Martin, Zurab Kargareteli, dimspingos, Alan Mortensen, Jordi Mas, Marcia van den Hout, Marco Ciampa, Sabri Ünal and Tim Sabsch.
  • ctx doesn’t have releases per-se as it is project-embedded code. So let’s count commits in the time frame between GIMP 2.99.10 and 2.99.12:
    • 1 contributor with 396 commits: Øyvind Kolås.

On the documentation repository, in the same time frame as GIMP 2.99.12, 26 people contributed:

  • 1 contributor with more than a hundred commits on documentation and scripts: Jacob Boerema.
  • 7 contributors on the documentation itself or scripts, with less than 30 commits: Jehan, Anders Jonsson, Andre Klapper, Balázs Úr, Daniele Forsi, Jernej Simončič and Marco Ciampa.
  • 21 translators: Rodrigo Lledó, Jordi Mas, Nathan Follens, Yuri Chornoivan, Marco Ciampa, Anders Jonsson, Tim Sabsch, Hugo Carvalho, Balázs Úr, dimspingos, Alan Mortensen, Aleksandr Melman, Charles Monzat, Claude Paroz, Danial Behzadi, Kjartan Maraas, Luming Zh, Martin, Matheus Barbosa, Milo Ivir and Ulf-D. Ehlert.

On the main website repository:

  • 1 contributor contributed 76 commits: Jehan.
  • 5 contributors contributed 1 to 10 commits: Alexandre Prokoudine, Anders Jonsson, Tom Gooding, Alberto Garcia Briz and Babs Keeley.

On the macOS build repository:

  • 1 contributor contributed 71 commits: Lukas Oberhuber.
  • 1 contributor contributed 2 commits: Jehan.

On the developer website repository:

  • 3 contributors: Jehan, Pat David and Robin Swift.

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting and manual tweaking, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions because we try to acknowledge every contributor for being a part of GIMP!

Downloading GIMP 2.99.12

As usual, GIMP 2.99.12 is available on GIMP official website (gimp.org) in 3 package formats:

  • Linux development flatpak
  • Windows installer
  • macOS DMG package

Other packages made by third-party are obviously expected to follow (Linux, *BSD distributions’ packages, etc.). The MSYS2 project is also apparently planning to package the development version soon too.

What’s next

This release is once again a major milestone towards GIMP 3.0. All 2.99 development versions were big milestones, but we are really feeling we are getting close to release candidates now, with some great improvements happening in much needed places:

  • we are finally getting proper neutral-gray themes;
  • our Wayland build is finally getting a bit stabler (even though issues remain);
  • our macOS build is really on the usable side now;
  • our last remaining GTK port issues are slowly, but very surely, getting taken care care of;
  • the space invasion project is showing leaps thanks to the CMYK project (which forces us to review color space issues as a whole);
  • Script-fu and the API in general are getting much love;
  • several of our long-worked improvement projects are getting to an end;
  • and more as so many things are on the work!

We still can’t give you any date for GIMP 3.0, but we are getting there! 🤩

Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. The maintainers of GEGL and GIMP are crowdfunding to be able to work full-time on free software, which could happen thanks to its community! 💪🥳

GIMP 2.10.32 is on the Microsoft Store!

Par :Wilber

Until now, GIMP was only officially distributed for Windows as an installer provided on our download page.

In particular, the GIMP team never distributed it via the Microsoft Store. This changes today! 🥳

What if I see several GIMP on the Microsoft Store?

You might see other “GIMP” on the Microsoft Store, so you must be careful. For the official package, make sure you use the link we provide:

GIMP on Microsoft Store (Windows-only link)

While others distributing GIMP is not necessary a problem (we even have a page explaining why selling GIMP is not illegal), we have no way to know what is actually in a third-party package, hence we cannot vouch for them.

Problems could be malware 😱 participating in botnets, hack your files or other computers or perhaps just steal CPU resources. Some are charging for their packages while using deceptive wording — seeming to be the official GIMP team — and at the same time introducing subtle bugs or significant problems like uploading opened images behind the users back. The official GIMP packages do not contain malware nor do they upload your files. We have a strict Privacy Policy. Our packages are also free of charge.

These are not all cases, and other third-party packagers may be doing a great job adding value (user support, additional documentation, more filters…) so you are welcome to continue using these as long as you are aware they are not related to us. Anyway we saw enough problematic cases that we are happy to announce GIMP being now officially distributed on the Microsoft Store so that everyone can get GIMP from its source.

Limitations of store’s GIMP

We worked closely with a developer relations team at Microsoft for this new distribution channel. GIMP is proposed as what they call a traditional desktop app which basically means that even if you install GIMP from the store, it actually uses the exact same installer (as found on our download page then run by the store in silent mode).

The good side is that it’s easier for us to maintain and user experience is exactly the same. The bad side is that it doesn’t get additional niceties made available by centralized repositories, such as auto-update. You will still have to update yourself, the old way.

This is why working on a MSIX or UWP package remains a possibility if anyone wants to continue the work started. Contributors welcome! 🤗

Funding GIMP

As all other official GIMP packages, GIMP is free of charge on the Windows Store. 💌

If GIMP is useful to you and you wish to fund development, you are very welcome to donate to the project and fund core GIMP developers, as a way to give back and accelerate the development of GIMP.

Support us by
Donating

GIMP 2.10.32 Released

Par :Wilber

GIMP continues strengthening its bases as this new version 2.10.32 is quite heavy on bug fixes and improves our support for many image file formats.

This news lists the most notable and visible changes. In particular, we do not list here the bug fixes. To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

File Formats

TIFF and BigTIFF

GIMP now supports 8 and 16-bit CMYK(A) TIFF files on import. This is one of the first consequences (already!) of the GSoC project by NikcDC under mentorship of Jehan.

Moreover the BigTIFF format is now supported, both for import and export. BigTIFF is an evolution of the original TIFF format allowing files bigger than 4GiB by using 64-bit internal offsets.

The TIFF export dialog exposes a checkbox to enable this format variant.

BigTIFF export GIMP 2.10.32
BigTIFF export in GIMP 2.10.32: new option in the TIFF export dialog

Moreover, if you try to export as a TIFF file and if it fails because of the maximum file size being exceeded, it will propose you to retry either as BigTIFF or with another compression algorithm.

Finally additional special cases in TIFF format are now taken into account, making loading TIFF files more robust.

JPEG XL

JPEG XL file format has been supported in development code ever since GIMP 2.99.8.

Daniel Novomeský backported the import code to the stable branch.

We remind that a third-party plug-in already exists, by developers of the libjxl library. It is a different codebase and should still work with GIMP 2.10.32. The main advantage of the third-party plug-in is that it has also export capabilities (which our stable plug-in doesn’t have yet), though with some unsolved issues causing some images to fail to load or export correctly.

You are welcome to continue using the third-party plug-in if you prefer. For instance the MSYS2 project now has it built-in within the libjxl package. If you install it, it will take precedence over our new core plug-in.

DDS

Some game engines require DDS images to be flipped vertically. Until now, asset creators had to flip the image in GIMP, export, then undo, which was not a very practical workflow.

This is why NikcDC added a new “Flip the image vertically on export” option allowing you to flip your image at export time.

Similarly, there is now a Visible layers” option (additionally to “Selected layer“, “As cube map“…) allowing you to export the whole image render, not a single layer. So depending on your work usage, you won’t have to flatten your image (to later undo this action) anymore before export.

DDS export GIMP 2.10.32
DDS export in GIMP 2.10.32: new “flip” and “All visible layers” options

Metadata handling (PSD…)

Several metadata handling improvements were made. One of the most important changes is that GIMP will start dropping Xmp.photoshop.DocumentAncestors tags if more than a thousand of them are found.

This case is very likely due to a bug in some versions of Photoshop or other software creating PSD files as we encountered over 100,000 such tags in some files (it probably makes no sense that a document could have that many ancestor documents), which was seriously slowing down GIMP to the point it looked frozen.

XCF

XCF import code also received various improvements, making the software more robust to invalid files. In some cases, it allows to salvage more data from corrupted XCF files, hence protecting your work.

Other formats

More format handling were improved:

BMP
A new PDB procedure file-bmp-save2 was added for plug-in developers. It supports all the options available interactively.
DICOM
Fixed endian conversion for photometric interpretation MONOCHROME1.
EPS
Loading transparent EPS files is now supported.
RAW
RGB Save Type” confusing dialog label renamed to “Palette Type” as on the main dev branch.
TGA
Improved support of indexed images with alpha channel (both import and export).
WebP
Export has a new IPTC checkbox (saved through XMP) as well as a thumbnail checkbox. (backported from dev branch, since 2.99.8)

Text tool: localized glyph variants

The Text tool now supports localized glyphs (locl) depending on the value of the “Language” tool option.

It is useful if you write in languages with regional variant forms (e.g. Serbian or Ukrainian use the same Cyrillic alphabet yet with 5 letters having regional variants).

If your chosen font supports several variants, you can now tell the internal formatting system through the “Language” settings which one needs to be used.

locl support in GIMP 2.10.32
‘locl’ support in GIMP 2.10.32: same characters in (left) Serbian (right) Ukrainian
(top) upright (bottom) italic

Usability: themes and icons

  • All official themes now have on-hover indicator around the eye 👁️ and link 🔗 toggles in Layer/Channel/Path Dialog tree-views.
On hover effect on eye and link toggles in GIMP 2.10.32
On-hover effect on eye and link toggles in GIMP 2.10.32
  • In the Dark theme, a new on-hover effect on radio menu items was added to improve readability.
On hover effect on radio item in GIMP 2.10.32
On-hover effect on radio menu items in GIMP 2.10.32
  • In the Color icon theme, thin contrast borders were added to the ‘close’ and ‘detach’ icons to improve their readability against dark backgrounds on mouse-hover.
More readable icons in GIMP 2.10.32
More readable icons in GIMP 2.10.32
  • In the Color icon theme, horizontal and vertical chain ⛓️ icons are more distinguishable between their broken and not-broken variants.
Chain icons in Color icon theme in GIMP 2.10.32
Left: GIMP 2.10.30 - Right GIMP 2.10.32

All these changes are works by Stanislav Grinkov.

Improved Screenshot on Windows

The Screenshot plug-in was missing the “Include mouse pointer” option on Windows.

This long missing feature, which was available on other platforms (such as Linux X11/Wayland, *BSD or macOS) is now implemented on Windows as well!

Screenshot plug-in on Windows in GIMP 2.10.32
Screenshot plug-in on Windows in GIMP 2.10.32: new “Include mouse pointer” options

GEGL, babl

GIMP 2.10.32 is the first stable release with the nice optimizations brought since babl 0.1.90 and GEGL 0.4.36, now that they have been battle-tested and debugged within the development release GIMP 2.99.10. As a consequence, babl 0.1.92 has been released, fixing in particular SIMD discovery ability, which was misbehaving on Windows.

These improvements are important enough that we felt their 2.99.10 description deserved to be copied on the stable news to make clear this applies to GIMP 2.10.32 now.

Automatic LUT creation for conversions in babl

Citing Øyvind in a recent report:

babl works as a universal pixel encoding translator by having - a not necessarily fast reference conversion able to deal with everything - and a collection of conversions that can be chained together into what babl calls fishes. The fishes are raced against each other to find the best conversion babl is able to create.

In some situations, a LUT (Look-Up Table) will perform better, we now know what the performance will be of using a LUT for various combinations of input and output bits per pixel; and mark fishes that are better as LUTs on creation time. If such a fish is used more than a minimum, LUT population is triggered.

Right now one drawback is that it might actually slow down slightly the first conversion happening in a given input > output conversion couple. The solution which might come later would be to create the LUTs in the background in a thread and continue doing non-LUT conversions until it is ready.

Note that the created LUTs are also garbage-collected after a few minutes of non-usage, to avoid filling memory with single use LUTs.

SIMD builds for x86_64 and ARM neon (ctx, babl and GEGL)

All of babl, GEGL and ctx have gotten similar SIMD build and dispatch changes applied.

Image processing code written to be portable and performant caters well to the auto-vectorization support for SIMD in modern compilers. The way it is done is mostly by changes to the build system. For now the code remains the same for all targets but the approach can be extended with conditional intrinsics.

To see the impact this can have, here is a test of filling a circle with ctx and its different pixel encoding targets, on a Raspberry Pi with default compiler flags (without neon support). Note that the cairo reference comparison is the BGRA8 format (the only other format proposed by Cairo is A8):

Test results without SIMD
Filling a 256px radius circle in a 512x512 buffer a number of times without Neon (smaller is better)

And the same test, with the compiler allowed to use Neon instructions:

Test results with SIMD
Filling a 256px radius circle in a 512x512 buffer a number of times without Neon (smaller is better)

Note well that both the optimized and non-optimized cases are built-in, and availability of relevant instructions determined by runtime tests. This makes these optimizations very portable, despite being based on recent architecture instructions.

ℹ️ Note that these changes (both the automatic LUT generation and the SIMD dispatch) will apply to GIMP 2.10 versions later. For now they are available in 2.99 as a form of beta test. We welcome feedbacks if you encounter any misbehavior.

Other improvements

babl now also comes with pre-defined CIE Lab u8 and CIE Lab u16 formats.

Team news

lukaso was already considered co-maintainer of the macOS build repository of GIMP (gimp-macos-build) since they have done most heavy lifting on GIMP for macOS for many months. This has been made official by changing their account to maintainer on this build repository.

Lloyd Konneker has been given developer git access to the main GIMP repository, in particular for their nice work so far on script-fu (which was in a state where dropping script-fu for GIMP 3.0 would have been considered otherwise).

Kevin Cozens, a long term GIMP contributor and script-fu maintainer got back recently and was given git access again to the repository. He will help co-maintain script-fu with Lloyd.

Ondřej Míchal has been given “Reporter” rights on the main GIMP repository (allowing to triage reports: labelling, closing, reopening, and moving reports…).

After being given “Reporter” rights initially, NikcDC has eventually been given developer git access in order to facilitate the work on feature branches for their GSoC project.

Release stats

10 people contributed changes or fixes to GIMP 2.10.32 codebase:

  • 3 people contributed several code changes or fixes: Jacob Boerema, Jehan and Nikc.
  • 1 person contributed several theme and icon improvements: Stanislav Grinkov.
  • 6 people contributed single commits: Sabri Ünal, Daniel Novomeský, Lukas Oberhuber, Rafał Mikrut, smlu and Øyvind Kolås.

About translations of GIMP itself:

  • 24 translators contributed: Anders Jonsson, Sveinn í Felli, Alan Mortensen, Aleksandr Melman, Yuri Chornoivan, Hugo Carvalho, Luming Zh, Rodrigo Lledó, Jordi Mas, Martin, Piotr Drąg, Balázs Úr, Jiri Grönroos, Zurab Kargareteli, Boyuan Yang, Marco Ciampa, Matej Urbančič, Milo Ivir, Sabri Ünal, Tim Sabsch , Balázs Meskó, Charles Monzat, Fran Dieguez, Hannie Dumoleyn.
  • 20 translations were updated: Catalan, Chinese (China), Croatian, Danish, Dutch, Finnish, French, Georgian, German, Hungarian, Icelandic, Italian, Polish, Portuguese, Russian, Slovenian, Spanish, Swedish, Turkish, Ukrainian.
  • GIMP 2.10.32 includes a new Georgian translation, incrementing the number of available languages for the stable version to 83.
  • GIMP was already localized in Galician, but not the Windows installer… until this version!

Contributions on other repositories in the GIMPverse:

  • 1 contributor to babl 0.1.92: Øyvind Kolås.
  • 5 contributors to babl 0.1.90: Øyvind Kolås, Mingye Wang, Jehan, Tomasz Golinski and Andrzej Hunt.
  • 6 contributors to GEGL 0.4.36: Øyvind Kolås, Anders Jonsson, Jehan, Alan Mortensen, Caleb Xu and zamfofex.
  • ctx contributors in the same timeframe: Øyvind Kolås, and Jehan.
  • 2 contributors to gimp-macos-build (macOS build scripts): Lukas Oberhuber and Jehan.
  • 4 contributors to org.gimp.GIMP (stable flatpak): Hubert Figuière, Ondřej Míchal, Jehan and Rebecca Wallander.
  • 1 Windows packager: Jernej Simončič.
  • Contributors to gimp-help (GIMP manual) since last stats:
    • 2 technical contributors (build scripts, continuous integrations…): Jacob Boerema and Jehan.
    • 5 documenters (original English text): Jacob Boerema, Anders Jonsson, Andre Klapper, Jehan and Marco Ciampa.
    • 20 translators: Rodrigo Lledó, Jordi Mas, Nathan Follens, Yuri Chornoivan, Anders Jonsson, Hugo Carvalho, Marco Ciampa, Tim Sabsch, Balázs Úr, dimspingos, Alan Mortensen, Aleksandr Melman, Charles Monzat, Claude Paroz, Kjartan Maraas, Luming Zh, Martin, Matheus Barbosa, Milo Ivir, Ulf-D. Ehlert.
  • 6 contributors to gimp-web (website) since last stats: Jehan, Alexandre Prokoudine, Anders Jonsson, Tom Gooding, Alberto Garcia Briz, Babs Keeley.

Then let’s not forget to thank all the people who help us triaging in Gitlab, report bugs and discuss evolutions with us. And of course, our community is deeply thankful to the internet warriors who manage our various discussion channels or social network accounts such as Ville Pätsi, Alexandre Prokoudine, Liam Quin, Michael Schumacher and Sevenix!

Note: considering the number of parts in GIMP and around, and how we get statistics through git scripting, errors may slip inside these stats. Feel free to tell us if we missed or mis-categorized some contributors or contributions.

Around GIMP

Mirror news

Ever since our new official mirror procedure, the following mirrors have been added to our rotation scripts:

  • Get Hosted Online (Rothwell, United Kingdom)
  • Aceldama Systems (Montreal, Canada)
  • Open Computing Facility (Berkeley, CA, United States)
  • Freedif (Singapore)

One mirror from the previous list had to be removed because of performance issues, and a mirror acceptance is still on-hold because of the conflict and unstability in East Europe.

As a fun note, GIMP is now back to Berkeley through the Open Computing Facility (student organization for all University of California, Berkeley students, faculty, and staff). For anyone wondering why it’s fun, you may read with interest the birth story of the GNU Image Manipulation Program.

TLDR; GIMP was originally born in the University of California. I guess it’s good to be home, right?

Book news

Our books page was in a badly maintained state. 4 books in Spanish were added to the list recently:

We took the opportunity to restructure the page with per-language section.

This is also a good time to remind that it is up to everyone to help us keep this page updated. We know many more books have been published about GIMP across the years so the list is very incomplete. Therefore if you wrote or know of a book absent from the page, please feel free to report the same information as other books on the page so that we can add them. Thanks!

Downloading GIMP 2.10.32

As usual, GIMP 2.10.32 is available on GIMP official website (gimp.org) in 3 package formats:

  • Linux development flatpak
  • Windows installer
  • macOS DMG package

Other packages made by third-party are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

What’s next

You may notice that stable releases are slowing down (GIMP 2.10.30 happened 6 months ago) as we are reaching a good stability overall on this branch, despite being held back by our very old toolkit. Nowadays most of our focus is on the development branch. Yet we will continue to provide updates and bug fixes to the 2.10 branch until GIMP 3.0 is out.

Don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, the maintainers of GEGL and GIMP are crowdfunding to be able to work full-time on free software. 🥳

GSoC 2022 project announced: CMYK features

Par :Wilber

The cat is out of the bag: Nikc, a Google Summer of Code student, is working this year on getting CMYK features into GIMP. Let’s talk about this in a little more detail.

For the record, we only requested this unique project slot to Google. Nikc discussed beforehand with us to understand the needs, the project current state as well as the wanted direction. They also contributed patches before GSoC selection so we knew how they interact during code review. If anyone is interested in GSoC in future years, please consider communicating with us like this, not just dropping a proposal without contacting us on our mailing lists or IRC. 😉

What’s up with GIMP and CMYK anyway?

Historically, it was complicated to implement CMYK support in GIMP as the program used to be hardwired to use sRGB color space for pretty much everything. Supporting any RGB color space has been work in progress for many years and it got much better already in the 2.10 stable series. On the other hand, print was not facilitated as a main workflow provided by our project for decades.

Since late 2000s, we’ve been considering a late binding workflow for CMYK, i.e. where you work in RGB, softproof in CMYK and then export to CMYK. Peter Sikking, a UX architect we worked with, came up with a plan for that, but the image processing engine was missing the required changes, and someone would have to work on exposing everything in GUI.

We ultimately lacked contributors interested into prioritizing that, and one patch we got from a contributor some years ago couldn’t be merged for architectural reasons, it had to be redone completely to play well with the rest of GIMP’s code.

A few years back, Øyvind Kolås finally added the missing bits to GEGL, our image processing engine, that made it possible to do things like blending a CMYK image with an RGBA image and writing the result as a TIFF CMYK file. This paved the way to this particular GSoC project.

What is the objective of the GSoC project?

First and foremost, we are not yet talking about a CMYK image mode, akin to ‘RGB’, ‘Greyscale’, and ‘Indexed’ like what you have today. Here is what it will focus on instead.

Importing and exporting images in a CMYK color space. GIMP will open images in a CMYK color space and convert them to RGB(A) for viewing and editing. You will also be able to export images to CMYK. We are currently targeting TIFF, PSD, PDF, EPS, AI, and PDF file formats.

While you won’t be able to edit CMYK images in a non-native color space yet, being able to both open (if only to view) and export CMYK data is clearly a step forward. Moreover while working with a CMYK backend is useful for some use cases (controlling your black colors or other accurate color mix as per printer instructions, ink coverage, trapping, overprinting and whatnot), working with *RGB images, then moving to CMYK in the end, is still a recommended workflow for many types of works. For instance, graphics professionals in the GIMP team and around worked with a lot of success with a mix of GIMP and Scribus, which is a software we warmly recommend.

Libre Calendar 2015, physical print project by LILA non-profit
Example of printing with FLOSS: the “Libre Calendar 2015” was a collaborative project by LILA, with several artists (illustrators, photographers and 3D), processed with GIMP, Inkscape and Scribus, Creative Commons by 2.0

Here is the current progress regarding CMYK support in file formats:

  • JPEG:
    • CMYK JPEG loading has been supported in GIMP for many years.
    • CMYK JPEG loading has been recently ported to using babl for conversion by Jehan Pagès.
    • CMYK JPEG exporting has been implemented as well by Jehan Pagès.
    • These improvements will be available in upcoming GIMP 2.99.12 and were implemented as a demonstration sample for Nikc since Jehan is the project mentor.
  • PSD:
    • CMYK PSD 8-bpc CMYK loading has already been available since GIMP 2.10.18 thanks to Massimo Valentini.
    • The code has been updated by Jacob Boerema to load 16-bpc CMYK PSD files in GIMP 2.99.10.
    • Work is in progress by Nikc to port CMYK PSD load code to use the babl library for conversion (should be available for 2.99.12, provided it passes review).
    • Exporting CMYK files in the PSD format could also be within the scope of this GSoC project.
  • CMYK TIFF loading and exporting is a work in progress by Nikc and might be available in GIMP 2.99.12 if it passes review on time.
  • Other formats with CMYK support will be considered.

A new dockable dialog for color management. To aid the late binding workflow, we need to be able to easily switch soft-proofing (simulating the CMYK result). Right now switching it ON/OFF and choosing profiles is done through menus which is cumbersome.

Nikc will develop a new dockable dialog to convert between color spaces via ICC profiles, control soft-proofing, etc. This is the next step after CMYK support in various file formats. We’ll feel comfortable talking about this more once it’s being actively worked on.

Soft-proof profile(s) as first-class citizen: currently the soft-proof profile is attached to the view, which means it disappears and needs to be set up again in-between sessions. Also the selected profile is not available to plug-ins which makes our CMYK export capabilities much less interesting until it gets implemented. This is why we want to move the soft-proof profile to become an image data instead, which will be stored in the XCF file. Nikc announced to have already started to work on this.

Discussions are ongoing to make this change generic to allow storing even several simulation profiles in the long run. This will make sense in particular when GIMP will support the concept of multiple export targets, as was theorized in an early blog post. Indeed a single image can be targetted differently for low-quality web previewing, for high-quality digital viewing, for printing… And it can even have different print targets. This is not in the scope of this GSoC project but are things we need to take into account early on when modifying the core code.

Identifying and fixing issues with color management. There are still all sorts of bugs and imperfections in GIMP’s color management implementation. We already know about some of them and we have no doubt that others will manifest themselves as the work on this GSoC project continues. Among the obvious areas to look on in details are: color picking and sample points, color selection, soft-proofing, various types of previews, maybe improved ways to work on specific color channels… So fixing or improving those is definitely part of the project. As you can see from the links above, work has already been started on some of these areas, and porting more code to using babl for streamlined conversion is a big part of the project.

Note that all improvements are not necessarily about CMYK-only in the end, since we have been working to make our color code more generic, which means that some changes may need to happen on a lower level, hence enhancing the workflow, efficiency and accuracy with any color model.

When are we shipping the results of the GSoC project?

Currently, we expect to make all new features and improvements developed by Nikc this spring/summer to be part of GIMP 3.0.

Will there be a CMYK mode?

The short answer is ‘eventually’.

Previously, we talked about anyRGB approach to editing that was within the scope of the Space Invasion initiative (end-to-end ICC profile attribution for an image while passing it through various operations in the node composition). Essentially, you should be able to open an image in e.g. AdobeRGB color space and never convert it to e.g. sRGB unless a particular GEGL operation requires that.

We revised the anyRGB plan to extend it to anyModel (RGB, CMYK, LAB etc.). This is going to be a major undertaking, we do not expect to ship this in GIMP 3.0 and we’d rather not give any estimations at this time.

Even staying within the scope of the printing world, hardcoding the specific CMYK model, rather than having generic core, would make no sense. What if you could also add spot color channels to your image for instance? This anyModel core is the direction we are heading for and the result of the groundwork which has been slowly built up by several contributors for many years now.

GIMP is a GSoC 2022 mentor organization

Par :Wilber

Up till 2013, GIMP was a regular at the Summer of Code. Ever since then we haven’t applied. Nine years have passed, so we decided to give it a new try and 2 days ago, we received an email: GNU Image Manipulation program is officially a Google Summer of Code 2022 mentor organization!

If anyone is interested, it could be a good opportunity to jump into the development of a huge desktop program used by millions of people. Here are some ideas of what you could possibly work on: wiki with list of possible project ideas.

On our side, we are interested in realistic projects which can really be finished or at least broken down in usable parts. Our list of ideas is mostly informative and we very much welcome people coming with their own ideas. If you want to participate, come discuss with us on IRC.

Requirements

GIMP is a huge codebase with high quality level requirements before acceptance of any code. It will require any participant to be thorough, listen well to our reviews and have some perseverance.

To increase acceptance chances, you could pick some bugs to fix or some easy features to implement (look in our newcomers list or simply in the full list of reports; possibly if you encounter an issue yourself, you could just come and fix that!), make a merge request with us and see how it goes. This would be the best kind of first contact before submitting your application.

Last but not least: we welcome contributors from all walks of life, regardless of origin, skin color, gender etc. All we ask is that you remain courteous and respectful to your fellow developers while working with us, and we will of course return the courtesy. If you’re looking for a welcoming environment, our project may be the perfect fit for you! 🤗

See you on the other side?!

Development version: GIMP 2.99.10 Released

Par :Wilber

GIMP 2.99.10 is once again a pretty massive step in our development plans toward GIMP 3.0. We redesigned some core concepts of GIMP (“linked layers”, item locks’ GUI, dynamics switch), substantially improve the new API further into releasable state, babl and GEGL gets crazy optimizations going on, macOS and Wayland get more love, all the while improving file formats… And more!

The below report will go through the most interesting changes.

Experiments - Wilber and co. comics strip by Aryeom
“Experiments” by Aryeom, Creative Commons by-sa 4.0 - GIMP 2.99.10

To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Redesigned Core Features

Linked layers” superseded by “layer sets”

Our stable series (2.10) still uses a concept of “linked layers”, which is mostly for transforming layers together. For instance, say you want to translate, rotate or shear several layers the exact same way. You would link them with the “chain” 🔗 icon next to each layer in the Layers dockable.

In GIMP 3.0, as we have multi-selection of layers and all the transform tools were already made to work on multiple layers at once, this concept was redundant and confusing. Nevertheless there was still one added value: as a way to mark and store a relation between layers.

This is why we remove the link feature and added instead a “layer set” feature. A “layer set” is a selection of layers stored with a name.

Layer sets
Layer set popover at bottom of Layers dockable

For instance, you could select a few layers together and store this selection as a layer set. Anytime in the future, you can select the same layers again in one click, without going through the slow process of clicking them one by one. In the below example, I am storing a semantic name for several layers featuring sleeping marmots:

Storing Layer sets
Left: select some layers and write a set name - Right: the set can now be selected again anytime

There is more! The same dialog allows you to search through layers by names. Say I want to select all layers containing “marmot” or “flower”, I could just search said keyword.

Searching layers
Searching layers with “flower” in the name - 3 were found in this huge layer list

For the geekiest of us: by default, this uses simple text search, but in Preferences, tab “Interface”, you can also set the search entry to use the Glob or Regular Expression syntaxes!

Layer sets settings
Settings for search syntax: text search, glob pattern or regular expression

Item locks redesigned

The locks (position, contents and alpha) used to be at the top of the Layers or Channels dockables. It meant that to know whether a specific layer was locked, you had to select it. Worse, when selecting several layers, the buttons could end up in an inconsistent state (if some layers are locked while others not).

So we moved the locks to the space left vacant by the now-defunct “link” 🔗 icon, next to each item. Clicking it will open a small popover dialog where you can select the lock type. Selecting a single lock will show it next to the visibility (eye 👁️) icon, selecting 2 locks or more will show a generic multi-locks icon. Each of the new icons, specific or generic, were designed by Aryeom. Now you know in a single glimpse to the layers list which ones are locked or not.

Locking a layer
Left: popover on “lock” area click - Middle: lock position (specific icon shown) - Right: lock contents (2 locks in use: multi-locks icon shown)

Among other advantages, the lock icons now allow the Shift-click interaction, same as the visibility icon, so that one can switch many items’ locks at once. We also created a new Alt-click interaction to switch locks within all selected layers. So we now have:

  • Simple click on a lock or visibility icon: the clicked item’s visibility or lock state is switched.
  • Shift-click: the clicked item stays visible/locked while the visibility or lock state of all other items on the same level in the layer tree is switched ON or OFF.
  • Alt-click: the clicked item stays visible/locked while the visibility or lock state of all other selected items is switched ON or OFF.

You will notice that we also added a new lock, the “Visibility Lock”. As the name implies, it prevents the visibility status to be modified. This is especially interesting together with features allowing to change multiple items at once, like the Shift-click or Alt-Click actions explained above. You could for instance have a background image locked to be always visible, then you could switch other foreground layers’ visibility while always keeping the background visible. Oppositely you could prevent your initial croquis for instance from being shown by mistake.

Locking visibility of background
Locking visibility of background layers to always visible and croquis layer to never visible.

Among other changes in this area, the alpha and position locks can now be set on Layer groups:

  • Alpha lock on groups mostly works like contents lock on groups (except that it’s for the alpha channel only), i.e. that it forbids to change the alpha channel from any child layer.
  • Position lock work both ways by forbidding moving child layers but also parent layers.

A document was also written to better specify the behaviors of various locks.

Last, but not least, two changes were made to improve discoverability of the visibility and especially the lock buttons:

  • The visibility and lock columns in the dockable now have icon headers, making their presence more obvious.
  • Our default theme will now provide visible hints around inactive button areas while hovering these clickable areas.
Hints for discoverability of clickable areas
Points to notice: “visibility” and “lock” icon headers and border around clickable area when hovering with pointer

Enabling/Disabling dynamics simplified

It is now possible to enable and disable dynamics in a single checkbox, instead of tediously having to select the “Dynamics Off” neutral dynamics. Obviously this neutral dynamics has been removed from the list of installed data.

It allows to switch dynamics painting in a single click, and without having to remember which dynamics you were using when switching back.

Enabling/disabling dynamics in a click
Enabling and disabling dynamics in one click

For advanced user, we also set up the new action “context-dynamics-toggle”. Thus you can create a shortcut (Edit > Keyboard Shortcuts menu) to switch the dynamics painting for even faster work.

Shortcut settings for enabling/disabling dynamics
Setting a shortcut to enable or disable dynamics in the Keyboard Shortcuts dialog

New Core Features

New option in “Line Art” mode of bucket fill tool

We added a new option “Allow closing lines in selected layer” in the “Fill by line art detection” mode of the bucket fill tool. The name is not necessarily final as naming this was hard.

Anyway here is what it does: when you choose the “Layer above|below the selected one” source, the selected layer is not used as line art source (as the title says). Yet with this option, you add the ability to paint with your fill color directly in the selected layer and union this data as closure data.

Once again, it is not a source for line art detection, which means it doesn’t trigger any recomputing. It is additional data for manual line closure only after line art and closure computation.

One of the main usage could be to set the “Maximum gap length” to 0, which totally disables line art closure computation, hence having much less computing (i.e. faster on big line art images). Then you’d rely solely on manually closed line arts. Unfortunately sometimes you don’t want to close a line art with your line color/brush/style, you want to close it with your fill color/brush/style. This is when this option comes into play.

For instance, here is how you could fill the line art with the smart closing which could oversegment if you don’t tweak properly the “Maximum gap length“. Additionally the closure (here at the leg bottoms of the character) would likely not be the expected style:

Now let’s disable the smart closing algorithm and use the new option instead. We will simply paint with our expected fill color and style to close the line art and it will be considered as “line” without recomputation. This way, the fill is instant and the closure style is exactly the one you expect:

This new option is originally based on an advanced digital painter tip of Aryeom on how to colorize efficiently a croquis (she was using this long before the “fill by line art detection” feature in GIMP, using Fuzzy Select in sample merged mode). Closing line arts with fill style is one of the many techniques she teaches to digital painting students at university. So we thought integrating this into our line art fill tool would be a definite gain as Aryeom was disappointed by the absence of style and control with the smart closing algorithm.

Note: we are aware the settings in this tool are a bit complicated to apprehend. We will hopefully do a pass of redesigning soon.

Welcome Dialog

GIMP now gets a Welcome Dialog which will show up only once after a new installation or an update. It will display the splash image, some short text and links to documentations and alike.

It also has a “Release Notes” tab containing the Release Notes of the new version so that anyone can peek at a listing of novelties.

Welcome Dialog
Welcome Dialog at first launch after installation or update

Note: the currently proposed Windows installer misses the release note. We will fix this shortly.

The website’s (the one you are reading on gimp.org) news will still provide nicer longer texts with explicative screenshots. But at least, the Welcome Dialog will be here for people not reading the website.

An advantage of the Welcome Dialog’s release notes though is that it can be fully localized by our translators (unlike the website in its current version). For instance, here are the release notes showing on a Portuguese-localized GIMP:

Welcome Dialog in Portuguese
Welcome Dialog’s release notes are localized; e.g. here in Portuguese

Some more work might happen on this Welcome Dialog. For instance, a “Customization” tab for some of the more controversial settings (such as themes and icons) will likely be added.

There is also the question about adding more “everyday use” features, such as a list of the last opened images, or a “New Image” option, avoiding going in menus (or using shortcuts). Of course it means giving the ability to open the dialog at every start as an option (unlike now where it will only open once after a new update).

Going further with our compact slider widget

Our compact slider was only available to core code until recently. It means that all plug-ins in particular could not use of this slider. So the widget has now been moved to the libgimpui library, making it usable by any plug-in which wants a nice looking and efficent slider with slow relative moves, fast drag moves and direct keyboard edits (see some of the usability work in an older news), all the while maximizing the space.

A few of our official plug-ins already make use of it now.

Locking a layer
The PNG export dialog with compact slider

Additionally our default System theme made it even more compact, because there were some complaints that this said compact slider was not compact enough!

Official plug-ins

PSD

As often lately, our PSD plug-in got some love to widen our support abilities:

  • new support for loading 16-bit per channel CMYK images.
  • new support for files in LAB colorspace.
  • new support for loading 32-bit per channel images (some code existed yet may have never really worked).
  • Add extra layer groups when loading PSD images with clipping layers: Photoshop handles clipping layers in a different way than GIMP. The only way to have it look the same is by adding extra layer groups. PSD layers that have clipping set, combined with the first non clipping layer below it are grouped together in a new layer group. Doing this results in the same image as the PSD merged image unless there are other PSD elements in play that we don’t handle yet.
  • PSD layers with clipping set need clip to backdrop as composite mode: certain PSD layers have a flag called clipping set to 1. We were not handling this flag and had some reports about colors bleeding where there were not supposed to. We are going to set GIMP’s layer composite mode to “Clip to Backdrop” which is the closest we can get to Photoshop’s clipping. With this, the colors won’t bleed anymore.

JPEG-XL

Our recent JPEG-XL support also continues to improve:

  • Bit depth now selectable in JXL export.
  • Import in 8-bit and 16-bit integer precision now possible for lossless images (GIMP used to import all JXL images as 32-bit float precision images).
  • New very fast export settings: thunder and lightning (fastest).
  • Compression slider is disabled for lossless.

Microsoft Windows Cursor (.cur)

GIMP is now able to load and export Microsoft Windows Cursors, including the ability to read at import, pass on and edit at export the hot spot location for each cursor in the file.

Screenshot

We definitely removed support for the KDE and GNOME portals for screenshots. On recent versions of these portals, new security restrictions were making them unusable for GIMP which didn’t have the permissions.

We now use only the Freedesktop portal on Linux (unless the direct X11 codepath is available, i.e. on Wayland) which is the new recommended logic by both the GNOME and KDE teams.

On Windows, the Screenshot plug-in finally gets an “Include mouse pointer” option.

HEIF

The HEIF plug-in used to have some heuristic for the choice of the bit-depth defaults when exporting, depending on the image’s encoding settings. This heuristic didn’t agree with everyone’s logic.

Also it was going against the settings storage which are now a basic feature of most plug-ins.

So we decided to just drop this heuristic and leave the user completely responsible for chosing the bit-depth they wish.

Deprecating help-browser and webpage plug-ins

We have 2 plug-ins depending on the WebkitGTK library:

  1. help-browser: for displaying the html docs. Nowadays every desktop machine has a browser, so it feels redundant. Its main advantage though was its very nice “topic tree”, which is basically a side menu to navigate the documentation quite efficiently.
  2. web-page: a webpage screenshot plug-in allowing to shot the whole page, not just what is visible. This is a very neat feature, yet it also appeared on most web browsers by default these days. For instance on Mozilla Firefox, you can right-click then select “Take Screenshot” in the contextual menu of a page.

On the other hand:

  1. WebkitGTK is very hard and long to build. More than once we encountered issues and are dreading them. Actually our macOS package don’t build it right now because of such difficulties.
  2. From what we gather, recent versions are officially unsupported on Windows right now and we don’t know when or if it will change soon.

So we have 2 of our main platforms not using it, it makes a lot of packaging problems, all this for features which are a bit redundant with browser nowadays anyway. This is why we decided to drop the ball, at least for now, by deprecating these 2 plug-ins. Unless situation changes in any positive way, we are not recommending packagers to build these anymore.

Build and documentation

Icon theme handling and refactoring

Our icon theme handling code was a bit of a mess because of too many build cases, so we refactored it:

  • We now use the exact same list for the Color and Symbolic icon themes, both in their SVG and PNG variants.
  • The PNG variants for both themes are now fully generated from the SVG files instead of duplicating everything and risking strange bugs with specific build combinations.
  • Our Continuous Integration now has a new weekly job to verify that the meson and autotools build rules are perfectly synced regarding icons.
  • We started to group icons in semantic lists when possible to help with deciding the right sizes to generate in the PNG case.

By the way, why we keep the PNG variant option needs to be explained. We were originally planning to drop it, but it turns out that the librsvg dependency used as GdkPixbuf loader, ported to Rust in its later versions, doesn’t build on all platforms and architectures (as Rust is not fully portable yet). It means that some platforms may need to either use very old versions of librsvg or may even prefer to use PNG-only icons. This is why we keep the PNG variant for now. It is suboptimal and on platforms where librsvg is not a problem, we definitely advise to use SVG icons. But at least the option exists.

Note though that there is another case where we depend on librsvg: the SVG import plug-in and this one had been made a mandatory one. We are not changing this because as graphics professionals, we consider that even in a raster program, you need to be able to import SVG nowadays. This format is simply a professional standards now and not supporting it seems absurd. Yet we understand if it is a problem on some platforms so, packagers, feel free to comment out the SVG plug-in if really this is a problem to you, as we have been told. It should be quite easy to achieve.

Clang-format check in Continuous Integration

A new .clang-format file was added to our repository and now every merge request will trigger a CI job to verify coding-style of your change.

Now to be perfectly fair, we are not completely happy with the check results, which is why the job failures are not fatale, mostly informational. Let’s say this is a first step, hoping this coding style check will get better.

Tool to bisect-test with older versions of flatpak

Note: this is developer fanciness and may not be of high interest to others.

Flatpak has limitations but also quite some interesting features. One of them is the ability to install older versions of the package easily. It can be a pretty neat developer tool when we want to test something on an older version of GIMP, a kind of git bisect but with flatpak packages. Nevertheless listing the old versions, uninstalling your current version, installing the relevant older version, and remembering the command lines for all this (since we don’t do this daily either) was making it hardly usable in real life.

This is where this tool comes in:

$ tools/flatpak-releases  -h
Usage: ./flathub-releases [--beta] [--system] [-X] [org.example.app]

List all flatpak builds stored on Flathub or GNOME repository.
The builds for org.gimp.GIMP are looked up by default unless
you provide explicitely another AppStream ID.

Adding a -X number as option install the numbered release
instead of listing them.

Options:

-0: install the last build.
-1: install the previous build.
-2: install the before-previous build (and so on).

--beta: list or install a beta release
--nightly: list or install a nightly release
--system: install as system flatpak (default to user install)

Say I want to know all the beta release still stored on Flathub:

$ tools/flatpak-releases --beta
 0: Working around weird install path of appstream file. (be96fed3) [2022-02-24 00:37:25 +0000]
 1: Update dependencies (127a0fa7) [2022-01-13 16:59:43 +0000]
 2: Issue #106:  File->Create->From Screenshot not working. (9c831b14) [2021-12-14 21:46:52 +0000]
 3: Release GIMP 2.99.8. (908bf5b0) [2021-10-20 20:29:00 +0000]
 4: Release GIMP 2.99.6. (e04355dd) [2021-04-26 14:08:32 +0000]
 5: Make sure the default path for plug-ins and scripts point to the extension point (8b02ea26) [2021-03-31 16:12:06 +0000]
 6: Build Little-CMS 2.12 ourselves. (ae60863e) [2021-03-29 16:03:51 +0000]
 7: Add extension point for Gimp3 (34b2f8c0) [2021-03-27 12:40:57 +0000]
 8: Release GIMP 2.99.4. (20a0a962) [2020-12-22 23:45:19 +0000]
 9: Update to GNOME Platform 3.38. (a84da0fa) [2020-11-14 23:08:38 +0000]
10: Use org.gnome.Platform//3.36beta. (12017e04) [2020-11-06 22:59:59 +0000]
11: Release GIMP 2.99.2! (58fef365) [2020-10-25 22:20:18 +0000]
12: Add shared module for intltool. (a1d2b211) [2020-06-01 18:34:15 +0000]

The number 0 is the GIMP 2.99.10 release (the package stored the last commit message, which might not be as relevant as we’d want). Now say I want to install the GIMP 2.99.6 release for a test:

$ tools/flatpak-releases --beta -4
[1/2] Installing org.gimp.GIMP
Looking for matches
Skipping: org.gimp.GIMP/x86_64/beta is already installed
[2/2] Updating to commit '9165cae20b6ad8549ff8053385b0facd15bb11fc8733e0b9c50aed0e961a6c3e' (4's previous build)
Looking for updates


        ID                     Branch         Op         Remote               Download
 1. [] org.gimp.GIMP          beta           u          flathub-beta         43.4 MB / 75.5 MB

Updates complete.
Build 4 released on 2021-04-26 14:08:32 +0000 was installed.
Build subject: Release GIMP 2.99.6. (e04355dd)
Build commit on flathub-beta: 9165cae20b6ad8549ff8053385b0facd15bb11fc8733e0b9c50aed0e961a6c3e

Done. In 2 commands and less than a minute, I am now able to run our GIMP 2.99.6 flatpak beta package which was 4 packages ago.

This command allows me to do this for the stable, the beta and the nightly packages.

New contributor documentation

Our developer document was a bit sparse and not too maintained these days, so a new version is starting to get written. It’s still widely incomplete and some part are based on older docs which might be outdated, or at least would deserve a review. In any case, work is in progress.

For anyone wishing to contribute, this is where you should start.

Improved API for plug-ins

The work on the API is still going full on. Here are the most noteworthy changes which happened during GIMP 2.99.10 time frame.

Changes in libgimp:

  • GimpStringArray type was removed in favor of GStrv. Various libgimp API were updated to use GStrv, and relevant plug-in procedures with GStrv arguments or return values were updated as well.
  • New functions:
    • gimp_context_are_dynamics_enabled()
    • gimp_context_enable_dynamics()
    • gimp_item_get_lock_visibility()
    • gimp_item_set_lock_visibility()
    • gimp_pdb_run_procedure_config()
  • Removed functions:
    • gimp_item_get_linked()
    • gimp_item_set_linked()

Changes in libgimpui:

  • New widgets:
    • GimpLabelColor (now used by default for GimpRGB properties in `GimpProcedureDialog)
    • GimpLabelEntry (now used by default for string properties in `GimpProcedureDialog)
    • GimpSpinScale (see above)
  • New functions:
    • gimp_color_area_enable_drag()
    • gimp_event_triggers_context_menu(): alternative to gdk_event_triggers_context_menu() with the additional ability of using button release events as contextual menu triggering (instead of press events), which might be prefered in some cases. Other than this, it uses exactly the same conditions as its GDK counterpart.
    • gimp_procedure_dialog_get_spin_scale()
    • gimp_prop_label_color_new()
    • gimp_prop_label_entry_new()
    • gimp_prop_spin_scale_new()
    • gimp_prop_widget_set_factor()
  • Improved functions:
    • gimp_procedure_dialog_get_widget() can now generate widgets of type GimpSpinScale (for int/double properties) and GimpLabelColor or GimpColorButton (for GimpRGB properties).
    • gimp_procedure_dialog_get_color_widget() now only return GimpLabelColor widgets (editable or not).

Also the Vala bindings gimp-3.vapi and gimp-ui-3.vapi were renamed to gimp-3.0.vapi and gimp-ui-3.0.vapi respectively in the autotools build (now consistent with meson).

By the way, it seems we have issues with the Vala and Lua plug-ins on Windows in the installer we are providing. We don’t know why yet and still need to investigate.

Wayland and macOS support

Various bugs and improvements have been made specifically to Wayland and macOS support. These often go together as we notice that many of the issues which appear on one of these also appear on the other.

On macOS in particular though, there were massive slowness issues of the 2.99 development series, so much that at some point, our packager feared that GIMP 3.0 on macOS would never be usable. Well we are proud to announce this was premature despair as we finally found some solutions for some things, workarounds for others, sometimes not too pretty yet enough for GIMP to be finally usable and even faster than the 2.10 series in our various tests! Our only uncertainty is that the code was mostly tested on macOS Monterey. We don’t know the situation on Big Sur where the problems initially started.

Several parts of the solutions lead us to GTK patches. Not everything is upstream yet, but we already use our current satisfying patch set in our own DMG package. This will help other projects using GTK3 and experiencing similar issues.

babl and GEGL

As usual, this release is supplemented with the releases of babl 0.1.90 and GEGL 0.4.36.

And these are particularly exciting for this release.

Automatic LUT creation for conversions in babl

Citing Øyvind in a recent report:

babl works as a universal pixel encoding translator by having - a not necessarily fast reference conversion able to deal with everything - and a collection of conversions that can be chained together into what babl calls fishes. The fishes are raced against each other to find the best conversion babl is able to create.

In some situations, a LUT (Look-Up Table) will perform better, we now know what the performance will be of using a LUT for various combinations of input and output bits per pixel; and mark fishes that are better as LUTs on creation time. If such a fish is used more than a minimum, LUT population is triggered.

Right now one drawback is that it might actually slow down slightly the first conversion happening in a given input > output conversion couple. The solution which might come later would be to create the LUTs in the background in a thread and continue doing non-LUT conversions until it is ready.

Note that the created LUTs are also garbage-collected after a few minutes of non-usage, to avoid filling memory with single use LUTs.

SIMD builds for x86_64 and ARM neon (ctx, babl and GEGL)

All of babl, GEGL and ctx have gotten similar SIMD build and dispatch changes applied.

Image processing code written to be portable and performant caters well to the auto-vectorization support for SIMD in modern compilers. The way it is done is mostly by changes to the build system. For now the code remains the same for all targets but the approach can be extended with conditional intrinsics.

To see the impact this can have, here is a test of filling a circle with ctx and its different pixel encoding targets, on a Raspberry Pi with default compiler flags (without neon support). Note that the cairo reference comparison is the BGRA8 format (the only other format proposed by Cairo is A8):

Test results without SIMD
Filling a 256px radius circle in a 512x512 buffer a number of times without Neon (smaller is better)

And the same test, with the compiler allowed to use Neon instructions:

Test results with SIMD
Filling a 256px radius circle in a 512x512 buffer a number of times without Neon (smaller is better)

Note well that both the optimized and non-optimized cases are built-in, and availability of relevant instructions determined by runtime tests. This makes these optimizations very portable, despite being based on recent architecture instructions.

ℹ️ Note that these changes (both the automatic LUT generation and the SIMD dispatch) will apply to GIMP 2.10 versions later. For now they are available in 2.99 as a form of beta test. We welcome feedbacks if you encounter any misbehavior.

Other improvements

babl now also comes with pre-defined CIE Lab u8 and CIE Lab u16 formats.

Team news

On our main source repository, “reporter” access (allowing to triage reports: labelling, closing, reopening, and moving reports…) have been given to nmat and Liam Quin.

Ondřej Míchal has now been given write access to the package repository for our stable and beta flatpak on Flathub, thus joining Hubert Figuière and Jehan for maintenance, after their various improvements to our flatpak packages, including some very nice work for automatic detection of outdated dependencies, thanks to the flatpak-external-data-checker tool.

Release stats

42 people contributed to GIMP 2.99.10:

  • 17 developers contributed to GIMP code base for this micro version:
    • 1 developer with more than 300 commits (Jehan)
    • 4 developers with 10 to 30 commits (Jacob Boerema, Niels De Graef, Lukas Oberhuber and Daniel Novomeský)
    • 12 developers with 1 to 4 commits: Øyvind Kolås, Anders Jonsson, Asalle, Emily Gonyer, Luca Bacci, Markus Volk, Ondřej Míchal, Stanislav Grinkov, Yoshinori Yamakawa, bartoszek, Nikc and Tomasz Goliński.
  • 20 translations were updated: Basque, British English, Catalan, Chinese (China), Danish, German, Greek, Hungarian, Italian, Kabyle, Latvian, Lithuanian, Polish, Portuguese, Russian, Slovenian, Spanish, Swedish, Ukrainian, Vietnamese.
  • 24 translators contributed: Yuri Chornoivan, Hugo Carvalho, Anders Jonsson Matej Urbančič Rodrigo Lledó, Rūdolfs Mazurs, Asier Sarasua Garmendia, Luming Zh, Bruce Cowan, Jordi Mas, Piotr Drąg, Ask Hjorth Larsen, Boyuan Yang, Marco Ciampa, Alan Mortensen, Daniel Mustieles, Yacine Bouklif, Alexandre Prokoudine, Aurimas Černius, Balázs Meskó, Luna Jernberg, Ngọc Quân Trần, Tim Sabsch and dimspingos.
  • 4 people helped with in-code documentation: Jehan, Niels De Graef, Alexandre Prokoudine and Daniel Novomeský.
  • 2 people contributed to icons: Aryeom and Jehan.
  • 9 people contributed to build-related updates: Jehan, Lukas Oberhuber, Øyvind Kolås, Asalle, Daniel Novomeský, Yoshinori Yamakawa, Aryeom Han, Markus Volk and bartoszek.
  • One new splash screen by Aryeom Han.

These are the stats on babl, GEGL and ctx side:

  • 4 contributors to babl 0.1.90:
    • 1 contributor with more than 70 commits (Øyvind Kolås).
    • 4 contributors with 1 to 4 commits: Mingye Wang, Jehan, Tomasz Golinski and Andrzej Hunt.
  • 6 contributors to GEGL 0.4.36:
    • 1 contributor with more than 20 commits (Øyvind Kolås).
    • 5 contributors with 1 to 2 commits: Anders Jonsson, Jehan, Alan Mortensen, Caleb Xu and zamfofex.
  • ctx doesn’t have releases per-se as it is project-embedded code. So let’s count commits in the time frame between GIMP 2.99.8 and 2.99.10:
    • 1 contributor with more than 600 commits (Øyvind Kolås)
    • 1 contributor with 1 commit (Jehan)

We should also not forget the documentation repository which gets more activity these days, thanks to the new maintainership by Jacob. In the same time frame as GIMP 2.99.10, it got 5 contributors:

  • 2 contributors on the documentation itself: Jacob Boerema and Anders Jonsson.
  • 4 contributors worked on translations: Rodrigo Lledó, Anders Jonsson, Jordi Mas and Piotr Drąg.

Finally the work on the macOS repository should not be forgotten, thanks to our new packager, Lukas:

  • 1 contributor with more than 60 commits (Lukas Oberhuber).
  • 2 contributors with 1 to 2 commits: Jehan and Andreas Scherer.

Downloading GIMP 2.99.10

As usual, GIMP 2.99.10 is available on GIMP official website (gimp.org) in 3 package formats:

  • Linux development flatpak
  • Windows installer
  • macOS DMG package

Other packages made by third-party are obviously expected to follow (Linux or *BSD distributions’ packages, etc.).

ℹ️ Fun fact: we learned that GIMP was successfully built on Haiku OS (yet another operating system, not a mainstream one) and is now provided through their packaging system. Even though we know it well, it always amazes us how cross-platform GIMP is as it can be found on nearly every operating system (yes GIMP is on GNU/Hurd too from what we are told!) and micro-architecture there is. 😊

What’s next

This release is quite heavy on API-side updates, which is one of the big blocker for GIMP 3.0 release (still some work-in-progress on this side). The “link” concept was also an old concept which needed to disappear for GIMP 3.0, so this is one less blocker as this change is now completely finished.

The GTK port is another big blocker; important work in this direction has been started by some contributors regarding a move to the GApplication and GtkApplication frameworks and the GAction port. These patches are still heavily under work and need review thus it has not been merged in any form in GIMP 2.99.10. We will most likely have the opportunity to talk more about it on the next release.

Meanwhile work related to Wayland and macOS support are still taking quite a bit of developer time as you can see.

Don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, the maintainers of GEGL and GIMP are crowdfunding to be able to work full-time on free software. 🥳

2021 annual report

Par :Jehan

While we are ending 2021, let’s sum up the year. For my first year as co-maintainer, I thought it would be a good idea to write this report in my name so that I can give personal impressions of how it is to work on GIMP and what it means to me.

Hello 2022 - Wilber and co. comics strip by Aryeom
“Hello 2022” by Aryeom, Creative Commons by-sa 4.0 - GIMP 2021 annual report

Statistics

In 2021, we had:

  • 4 stable releases (GIMP 2.10.24, 2.10.26, 2.10.28 and 2.10.30)
  • 2 development releases (GIMP 2.99.6 and 2.99.8).
  • 1179 commits on the unstable development branch (2.99.x, future 3.0) and 407 commits on the stable development branch (2.10.x) of the main repository.
  • 91 contributors on the main repository, including (some people belong to several categories):
    • 41 developers
    • 42 translators
    • 24 contributors to resources (icons, themes, in-code documentation) or build improvements.
  • 22 people contributed more than 10 commits in the main repository, among which 2 contributors did more than 100 commits (Jacob Boerema and myself), among which only one (myself) did more than 500.
  • 247 commits to GIMP’s website (gimp.org, i.e. right here) by 14 contributors.
  • 31 commits to babl by 6 contributors.
  • 229 commits to GEGL by 33 contributors.
  • 1179 commits to ctx by 3 contributors (mostly Øyvind Kolås).
  • 255 commits in gimp-help (our manual), whose main contributor is Jacob Boerema who is doing an awesome work reviving it.
  • 53 commits in gimp-macos-build (our repository for the macOS build) by 4 contributors (mostly by Lukas Oberhuber who took over maintainance of the macOS package).
  • 185 reports fixed in our 2021 releases and hundreds more handled, triaged, answered to, worked on…
  • Many patches contributed by GIMP contributors in various other projects we use (GLib, GTK, Cairo, GExiv2 and others… We don’t keep track) and an uncountable number of issues reported by our contributors to other projects.
  • Helping (or getting helped by) other Free Software when we can, e.g. the very nice Siril project for astronomical image processing and other software, because unlike what some think, we are not in a market or a competition! We all work together to make a better graphics work environment.
  • And more!

In the end, that’s quite a lot of work proudly brought to you by GIMP. As you may notice, we have quite some contributions, yet the core work is still actually done by a handful of people as most contributions are one-off (out of the 91 contributors, 69 contributed less than 10 commits, and among these 51 contributed a single commit).

I want to commend Jacob Boerema in particular who is the biggest contributor this year on the stable branch, while I must admit I mostly focus on the development branch and sometimes tend to neglect a bit the stable branch 😒! Thanks Jacob! 🤗

And we should never forget babl, GEGL and the new project ctx by Øyvind Kolås as these constitute the core of GIMP imaging engine and are considered as much a part of GIMP project as the interface itself.

Building a lovely team

You might have noticed a regular section for the last few news titled “Team news” where we list changes in the team, in particular new contributors who are given more access to the tracker or the source repository. I have been trying to be more and more proactive into integrating people into the core team.

Indeed as you saw in the statistics, Jacob Boerema is the only other contributor who did more than 100 commits in 2021, while I did a bit over 500. So I want to improve this ratio and increase the bus factor.

GIMP team has always been very welcoming, at least ever since I started contributing, back in 2012 and this is even why I stayed back then. I want to perpetuate this tradition. My goal is to identify faster the people to give more responsibility to (note that technical skills are important but social skills — in other words being a good person and nice to others — is my priority checkbox). Well it’s definitely an evil trick 🦹 to lessen my own burden, but I also expect this to make it way more fun 🎡 contributing to the project (based on personal experience)!

Therefore let me give special props to Jacob Boerema for his tireless work on file format support and more, Niels de Graef for his invaluable help and good expertise with GTK, Luca Bacci for his very nice work on input device support, helping on Windows and his GTK expertise, Daniel Novomesky for making HEIF/AVIF and JPEG-XL first-class formats…

Let’s not forget recurring contributors such as Massimo Valentini, Lloyd Konneker… (what would we do without these people never giving up on GIMP, years after years?!) and promising newcomers like Stanislav Grinkov.

Now let’s applaud our packagers: Jernej Simončič has been around in GIMP for as long as I could remember, flawlessly making Windows installers like a solid rock to rely on; macOS history is bumpier yet Lukas Oberhuber has been doing an outstanding work lately so I sure hope he’ll stay around; on Flatpak side, Hubert Figuière helps quite a lot too (and I secretly 🤫 hope he will end up taking over me maintaining our stable, beta and nightly flatpak-s!).

At the end of the day, GIMP is much bigger than just developers, it’s a community. What would we do without people helping for the website, bug triaging, infrastructure and more? And let’s not forget the translators, so many of them! I just love all of you! Sorry that I cannot just name everyone (in case I forgot you, don’t take it the wrong way, there are just so many awesome people around!).

What I like to tell everyone is that GIMP is both a community software and Free Software, or simply a Community, Free Software. This double concept is extremely important to me and this is why I love GIMP and why both Aryeom and I (from ZeMarmot projet, from which our heavy-lifting contributions really started) stuck with it. This is about humans meeting each others and trying to do something nice together (even though each’s personal end goal might be different). Everything works wonderfully as long as we remember to be good to each other. 🤗

Therefore to all contributors (of any specialties) who helped GIMP so far, I want to say a huge thank you! GIMP is what it is thanks to you! 🙏

GIMP 3.0 approaching

With 4 development versions released already, you know that we are working very hard on the future: GIMP 3.0.

Some features took a lot of time, mostly when we changed core logics. I am thinking in particular about the code for multi-selection of layers. It’s not that selecting multiple items in a list is hard to implement, it’s that any feature in the whole application has been forever expecting just one layer or one channel selected. So what happens when there are 2, 3 or any number of items selected? Every feature, every tool, every plug-in and filter has to be rethought for this new use case. This is a huge work and it has been 2 years I have been on and off on this one in between porting or developing other code and reviewing contributors’ code. Fortunately this change is nearing the end lately (not completely finished though). So that’s a great progress.

By the way, a part of this work has been to get rid of the “link” (chain ⛓ icon in the Layers dockable) concept in favor of multi-selection (and layer search and storage as a replacement concept for the ability to save layer links). This part is also done now. I’ll talk more about this in the GIMP 2.99.10 release news.

Linked layer concept replaced by layer search
Link concept replaced by multi-layer search, lock icons moved - GIMP dev branch

Among other blockers which I listed a year ago, we are steadily progressing on our GTK3 port and Wayland support as well as stabilizing the plug-in API. I do hope these will be considered in a good enough state soon enough so that we can consider having a release candidate.

On the other hand, the space invasion has been a bit on the slow pace in 2021 so this is definitely one topic we need to get back full-on very soon. Same for the extension platform.

GEGL, babl and ctx

The core 🫀⚙️ of modern GIMP is GEGL, a library project nearly as old as GIMP itself, by the same core of people, even though the first tentative integrations only happened in GIMP 2.6, and since then slowly making its way to be the main engine behind most pixel manipulation in the software.

GEGL development has been slowing down a bit since 2019, but mostly because it is becoming stabler by the day, which is really when things are getting good, solid and interesting. Now it would still be unfair to forget talking about the recent support of the CMYK color model in GEGL, which means we are a step closer to get some support in GIMP itself.

Another exciting thing is the new project Øyvind Kolås has been working on these days: ctx, a vector graphics library.

Now I know it may not sound as useful when you develop a raster graphics application, but there are still a lot of intersecting topics. One of these topics is the graphics interface itself which is usually rendered out of vector primitives. In GTK case, the rendering is going through Cairo. Øyvind has been working a lot to both render nicer and faster than Cairo, or similarly, on many cases. ctx also has color-management thought into the framework from the ground up as a first-class citizen.

Of course ctx is still heavily under work as can be seen by the intense commit rate so we’ll have to see where it goes, but this is for sure exciting since Øyvind is a well-proven excellent R&D developer.

There are other areas where ctx is useful, such as the few GEGL operations with vector components which have already been ported to this new library (e.g. gegl:fill-path) and text itself is usually rendered through vector shapes (so who knows what might happen when we improve text support?). GIMP is not going to refocus on vector graphics anytime soon, but we may definitely get more vector-related features as we go (anyone who follow a bit ZeMarmot‘s work knows that we are really looking into improved ways for SVG integration for instance, such as in my early, not merged yet, link layer experiment). When we do more vector work, ctx will definitely be a top contender.

I can already hear Øyvind telling me that ctx is actually much more than these few areas I summed up here. So let me be sorry in advance, Øyvind! This is why this report is in my name, taking into account my own limitations in understanding your bigger plans, and looking forward to be pleasantly surprised and amazed in the future! 🤯

Infrastructure, Documentation

In all software projects, there is a constant which is mostly invisible, yet extremely important: infrastructure.

You might have noticed we did speak a bit more than usual about this in 2021 because it has really been something which used to bother me in my early years contributing to GIMP. I always thought we needed more robust, automated and transparent builds (which is getting there for Windows, macOS and Linux with Flatpak), better download mirrors handling, better continuous integration in general, better end-user documentation (Jacob is on it! And we have plans to get a more automated release and online testing policy of GIMP manual, which should happen in 2022)…

We also had some work done in 2021 around developer documentation: Akkana Peck (well known for having written books on GIMP) and Lloyd Konneker helped set up some initial documentation to port plug-ins and script from 2.10 to 3.0. Akkana also jump-started generating API references for the Python and Javascript bindings (with g-ir-doc-tool). Then very recently Niels De Graef migrated our generic API documentation generation from gtk-doc to gi-docgen, producing much more modern web documentation for plug-in developers. None of these are online yet, only built within the source repository for the time being. Getting an online update procedure for these is also on the TODO list.

New API documentation - GIMP dev branch
New API documentation for plug-in developers - GIMP dev branch

All these topics take a lot of time and are also necessary to get a much nicer experience using GIMP. So I am already quite proud of what we did in 2021 and really excited about our 2022 plans.

Plans for 2022

You might wonder now: when will GIMP 3.0 be released?

Nope sorry, as always, we don’t answer such question. 😛 What we can say is that we are hard at work for this to happen and for sure I’d like it to be earlier rather than later.

As said above, apart from the code itself, I also want us to get our new online manual infrastructure improved before the release, but also our extension framework ready as well as a brand new developer website with documentation and more. So the plans are actually quite extensive and it’s not only within GIMP code itself (though code definitely needs more work too). We’ll see how things go from here!

Don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, myself as maintainer of GIMP (through ZeMarmot project) and Øyvind as maintainer of GEGL are crowdfunding to be able to work full-time on free software. Any funding is appreciated to help us succeed in such endeavour.

I wish you all a nice new year eve and a wonderful year 2022. 🥳

GIMP 2.10.30 Released

Par :Wilber

GIMP 2.10.30 is once again mostly a bugfix release, with many fixes and incremental improvements, not so much on the “new feature” side.

Improved file formats support

Several file format supports were updated with fixes or improvements: AVIF, HEIF, PSD, DDS, RGBE and PBM.

Let’s highlight in particular:

  • PSD support received various types of improvements allowing it to load more sub-cases of PSD: layer masks tagged with invalid dimensions, CMYK without alpha, CMYK without layers, merged image of a 16 bit per channel RGBA which had opaque alpha channel etc. In case of CMYK PSD files, for now, GIMP will convert to sRGB to allow to view the contents of a file rather than display a message that the file is not supported.
  • AVIF export now favors AOM encoder.

OS evolutions

Some backends got reworked to follow OS evolutions:

  • Backport of selection outline drawing reimplementation from GIMP 2.99.8 for macOS Big Sur and over (already discussed patch, itself exceptionnaly backported to the 2.10.28 DMG package so that macOS users enjoyed visible selections earlier).
  • On Windows, we moved from GetICMProfile() to the WcsGetDefaultColorProfile() API because the former is broken in Windows 11. Thus we were failing to get monitor profiles.
  • On Linux and other OSes which might use Freedesktop portals, we implemented color picking on display (Colors dockable) with the Freedesktop API when available, keeping old implementations as fallbacks. Screenshot plug-in now also uses in priority the Freedesktop API rather than specific KDE or GNOME API (which are getting restricted for security reasons since KDE Plasma 5.20 and GNOME Shell 41).

Other improvements

Various improvements were made on metadata support, be it on core code as well as in the metadata plug-ins (viewer and editor).

A noteworthy fix is that the text tool won’t follow anymore the subpixel font rendering choice from system settings. Subpixel rendering is for GUI on a screen of a specific type and pixel order and is not suitable for image contents which can be zoomed in or out, showed on various screens or even printed. This change also depends on a patch we contributed to Cairo which will be available in their next release (we include the patched version in our flatpak).

In brief

To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Core code contributors:
Adam Fontenot, Jacob Boerema, Jehan, Jordi Mas, Niels De Graef, Øyvind Kolås and Yoshinori Yamakawa.
Plugin code contributors:
Daniel Novomesky, Jacob Boerema, Jehan and Niels De Graef.
Build contributors:
Daniel Novomesky, Jehan, Jernej Simončič, Øyvind Kolås, Niels De Graef and Yoshinori Yamakawa.

Team news

Luca Bacci is now a core developer with git access, acknowledging his very nice contributions so far.

Lukas Oberhuber, our new macOS packager, was given “reporter” access on the main source repository which allows him to help triaging on the bugtracker: labelling, closing, reopening, and moving reports…

Translators

Among the 82 languages for which GIMP is available, 14 translations were updated: Brazilian Portuguese, British English, Catalan, Croatian, Finnish, Italian, Latvian, Lithuanian, Polish, Portuguese, Slovenian, Spanish, Swedish and Ukrainian.

The Windows installer now contains Portuguese localization (from Portugal, it already had Brazilian Portuguese), making it available in 35 languages. Also some previously announced translations were missing in the installer. These should be fixed now.

Translators on GIMP 2.10.30:
Anders Jonsson, Aurimas Černius, Bruce Cowan, Bruno Lopes da Silva, Daniel Mustieles, Hugo Carvalho, Jiri Grönroos, Jordi Mas, Marco Ciampa, Matej Urbančič, Milo Ivir, Piotr Drąg, Rodrigo Lledó, Rūdolfs Mazurs and Yuri Chornoivan.

GEGL

As usual, this release is supplemented with the release of GEGL 0.4.34 the same day as GIMP 2.10.30.

There have been some build related improvements, such as moving the implementation of ctx from the main GEGL library to one of the runtime loadable operation bundles. In operations the robustness of gegl:ripple and the gegl:magick-load powered fallback have been improved.

Contributors to the GEGL release:
Anders Jonsson, Asier Sarasua Garmendia, Boyuan Yang, dimspingos, Gavin Cui, Hugo Carvalho, Jehan, Jordi Mas, krzygorz, Lukas Oberhuber, Marco Ciampa, Matej Urbančič, Øyvind Kolås, Rodrigo Lledó, Rūdolfs Mazurs and Simon McVittie.

Downloading GIMP 2.10.30

As usual GIMP 2.10.30 is available on GIMP official website (gimp.org).

The Linux flatpak, Windows installer and macOS DMG package are already available and nearly all mirrors fully synced up, in less than a day from source release to binary release. This may be our new record of a perfectly timed release!

What’s next

While the development branch is getting most activity, we don’t forget the stable branch. This release contains several fixes which we really wanted to get out there, so we recommend everyone to update.

We are not sure we will be able to do a development release before the end of the year, so we wish you already a wonderful holiday season! 🎄🎉

Don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, the maintainers of GEGL and GIMP are crowdfunding to be able to work full-time on free software. 🥳

GIMP is not affected by the log4j vulnerability

Par :Wilber

Everyone is asking us if GIMP is vulnerable to the recent log4j vulnerabilities (also dubbed “log4shell” in the media, in particular regarding to the CVE-2021-44228 zero-day vulnerability).

As an official statement: no, GIMP is not vulnerable to log4shell!

We do not use log4j and there is not even any Java code in GIMP. So enjoy GIMP and feel safe while creating more wonderful artworks 🖼!

📷 Happy GIMPing! 🖌

GIMP 2.99.8 macOS package now available

Par :Wilber

The current development version of GIMP is finally available as a macOS package! 🥳

» Download it on gimp.org “Development Downloads” page «

So what’s happening with GIMP on macOS?

Fixed regressions in recent macOS versions (selection outlines and slowness)

Ever since the Big Sur release a year ago, macOS users have been experiencing regressions such as invisible selection outlines (a.k.a. “marching ants” 🐜) and general lack of responsiveness. These would happen for everyone using GIMP on macOS Big Sur or newer, whatever GIMP version (some people reported these issues even for old GIMP 2.8 packages). This was caused by changes in the operating system itself.

The slowness issue had been mostly worked around by Des McGuinness, our previously very active macOS package maintainer, though GIMP’s responsiveness may still not be on par with other platforms.

We recently fixed the selection outline visibility issue as well and then backported the fix to GIMP 2.10.28 DMG package! Therefore we encourage everyone still having this issue to use the latest package, either stable 2.10.28 or the unstable 2.99.8.

Team news: new package maintainer

Our new macOS package contributor, Lukas Oberhuber, has been working very hard to improve the packaging scripts, clarifying the process by merging two repositories in one, getting rid of various useless files and build rules and directly using modules of the upstream gtk-osx project (when possible) rather than duplicating rules.

He simplified our gimp-macos-build repository a lot, which should hopefully lower the entry barrier.

Finally, he fixed several bugs and environment code directly in the GIMP codebase to bring our development code up-to-date with macOS support.

As a consequence, Lukas is now officially a new co-maintainer of the macOS package. Welcome and congratulations, Lukas! 🥂

New contributors are still very very welcome 🤗

There are still serious macOS-specific bugs in both the stable and the development series. They are being worked on by Lukas who is supported by the core team, yet there are limits to what a single person is able to achieve.

For at least the past 10 years, GIMP has not been able to have two active macOS developers at once. In fact, this is the second time this year that we publish a macOS-only news post, which is not a good sign at all. It means being able to release improvements for this operating system is exceptional enough that we feel like we should inform people.

So we re-iterate our call for contributors. Do you like GIMP? Do you use macOS and have technical knowledge and skills for packaging and/or development? Then please consider joining us!

We’ve detailed the building process in the README.md file of the gimp-macos-build repository. This is the first thing potential contributors ask us about.

Once you make sense of our build scripts and are able to compile your own local copy of GIMP, please talk to Jehan or lukaso on IRC (#gimp channel on GIMPnet - irc.gimp.org), though others may be able to help too of course. If you already have specific solutions to existing problems, we can push your patch to a branch and generate a new DMG build for testing.

What’s next

As usual, we hope that macOS support will improve and that we won’t feel the need to make dedicated news again. In the end, it depends on macOS users, since GIMP is a full community Free Software. It is what we all make of it, together. The community has many Linux and Windows developers. We also get regular *BSD and even Hurd patches (seriously). How come we barely get any macOS developers?

Having M1 support is also a topic we have been discussing obviously. It will likely require more stable contributions for this to happen. So come in and contribute, everyone, it might be cold ❄ outside, but it’s warm 🔥 in here.

Finally, please don’t forget you can donate to the project and personally fund several GIMP developers as a way to give back and accelerate the development of GIMP.

Development version: GIMP 2.99.8 Released

Par :Wilber

GIMP 2.99.8 is our new development version, once again coming with a huge set of improvements.

Work in Progress 2 - Wilber and co. comics strip by Aryeom
“Work in Progress 2” (follow-up of 2.99.6 image) by Aryeom, Creative Commons by-sa 4.0 - GIMP 2.99.8

To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Clone-type tools on multiple layers

The Clone, Heal and Perspective Clone tools now work when multiple layers are selected. There are 2 new modes in particular:

  • When sourcing from multiple selected drawables then cloning into a single drawable, the pixel source is the composited render of source layers. This is similar to “Sample Merged”, except that it is limited to a list of drawables and you don’t have to hide the layers that you don’t want to source from.

  • When cloning while multiple drawables are selected, each drawable clones from itself to itself, i.e. every drawable is both its source and target (the layers selected when sourcing do not matter in this case). This can be very useful in particular when you need to heal several layers exactly the same way, for instance when working on textures and various texture mappings.

Development of this feature was proposed and financially supported by Creative Shrimp: Gleb Alexandrov and Aidy Burrows, well-known Blender educators. Here’s an excerpt from a new course where multi-layer cloning is already used:

Extract of a video course by Creative Shrimp (Gleb Alexandrov and Aidy Burrows)

Selection cue fixed on Wayland and macOS

Windows drawing logics evolved in recent compositing window managers. In particular, the drawing of image selection (marching ants 🐜 representing your selection boundary) broke on Wayland, as well as on macOS since Big Sur release. The selection tools were still perfectly working but the outlines were simply not visible on the canvas anymore.

We fixed this by reimplementing part of how selections were being drawn over the image. We aimed to only fix this for Wayland, but our recent macOS contributor (see below in macOS package section) confirmed it also fixes the issue for Big Sur. Now the next step is to backport this fix to the stable branch (only for the sake of macOS, since the stable GTK2 version uses XWayland and thus doesn’t exhibit the bug).

There have been two more Wayland-specific changes. For our Flatpak builds, we will now use the new fallback-x11 permission instead of x11 to prevent unnecessary X11 access while in Wayland, hence improving security step by step.

Finally, some people reported huge memory leaks under Wayland only (it was fine on X11). We didn’t do much so we can’t take any credit for this, but this seems to have been fixed, probably in a dependency with Wayland-specific code.

Wider coverage of input devices thanks to Windows Ink support

Windows Pointer Input Stack (Windows Ink) support was recently added to GTK3 by Luca Bacci, who also made it available in GIMP and added a new option in the Preferences dialog to switch between Wintab (older API) and Windows Ink. You can find this option on the Input Devices page.

Pointer input API selection — GIMP 2.99.8
Pointer input API selection — GIMP 2.99.8

This is a huge milestone for artists using Windows since more graphics tablets or touch devices come with Ink support as a default whereas the legacy Wintab interface requires specific drivers.

This is even more the case with Windows 8 and newer, for which most tablets should work out-of-the-box with Windows Ink.

Canvas-focus by toolbox clicking

Clicking anywhere on the toolbox or on Wilber’s drop area now returns the focus to the canvas (similarly to the Esc shortcut). This allows you to work on canvas with shortcuts more efficiently.

For instance, you could pan directly with the Space bar without having to click on canvas (hence activating a tool) when your keyboard focus was previously on some text input widget, by clicking anywhere on toolbox (buttons and dead area alike) first.

Dropping thumbnail icon

After years of discussions and bug reports, we dropped the thumbnail icon feature. Previously, when images were opened, the application icon in the taskbar would combine a preview of the active image and the actual application icon (Wilber). The icon would then change whenever the active image changed. For many people, this complicated locating GIMP’s window among windows of other running applications.

Moreover, due to recent changes in desktop environments’ behavior, this feature was actually working on less and less platforms. So depending on your OS and desktop environment, it either didn’t work at all or actively worked against you. This is why we decided to do away with it.

Improved file formats support: JPEG-XL, PSD/PSB, and more

JPEG-XL is now optionally supported thanks to Daniel Novomeský who also previously contributed to HEIC/AVIF support.

GIMP can load and export JPEG-XL files (.jxl) in grayscale and RGB, with color profiles support. Our exporting code also provides a “lossless” option and several “Effort/Speed” encoding values.

JPEG-XL exporting options — GIMP 2.99.8
JPEG-XL exporting options — GIMP 2.99.8

This plug-in is different from the third-party plug-in that is part of the libjxl library that we use too. It supports GIMP 3 plugin API, reads grayscale images as grayscale, is written in C rather than C++, and exposes several presets for speed/quality tradeoff. We also do not yet expose features that could be considered experimental. If you are interested in JPEG-XL support for GIMP 2.10.x, please use the plug-in from libjxl.

We also improved support for Adobe Photoshop project files. GIMP now supports larger-than-4GiB PSD files and loading up to 99 channels (specs say that 56 is the max but some sample PSD files have more channels).

Additionally, now you can also load PSB files which are essentially PSD files with support for width and height of up to 300,000 pixels.

There have been even more changes to file formats support and plug-ins:

  • 16-bit SGI images are now supported (until now, they were loaded as 8-bit).
  • The WebP plug-in was ported to the GimpSaveProcedureDialog API.
  • Script-Fu now handles GFile and GimpObjectArray types.

Plug-in development

Our API for plug-in developers got the following improvements:

  • New gimp_display_present() function to present a specific display at the top of the image display stack.
  • New gimp_export_thumbnail() function to query the user settings (added in “Image Import & Export” page of Preferences in this version) on whether or not a file plug-in should export the image thumbnail.
  • New gimp_procedure_dialog_fill_expander() function to create a GtkExpander in procedure dialogs.
  • All widgets within a same container in a GimpProcedureDialog are added to their own GtkSizeGroup for better aligned generated dialog, yet only within their own level of widgets.

Memory leak fixes

Several contributors including Andrzej Hunt and Massimo Valentini started chasing small memory leaks with code analyzers, which is a very nice way to spend your downtime. We recommend! 👍

Continuous integration changes

Windows

Development installer “nightlies”

We wrote rules for the continuous integration platform to create installers. This is very useful for users who want to test new unreleased features and bug fixes. Installers are being created once a week because the full process takes ca. 2 hours and we didn’t want to trigger it too often.

If you want to test the latest installer for Windows, here is how you can do it:

  1. Go to GIMP’s scheduled pipelines listing and click the “Last PipelineID listed next to the Windows installer item.
  2. Select the job named “win-installer-nightly
  3. Click the “Browse” button
  4. Navigate to the build/windows/installer/_Output/ directory
  5. Finally click the gimp-2.99.*-setup.exe file to download and install it.

This procedure or any updated version of it is available in the “Automatic development builds” section of the download page.

⚠️ Be warned that a weekly installer is a purely automated build, there is no human verification. It is happening at a semi-random time during the development process, you may end up with very broken software at times, even though we try to never leave the repository in a dire state. It is even less safe than development releases. We are grateful for feedback and bug reports. Just please don’t expect these builds to be rock-solid or even usable. ☢️

Automated release installers

Additionally to the weekly installers, our continuous integration platform will now also generate the installer when a new release is tagged. This should allow for much faster installer releases, within hours instead of days in the former fully manual process.

The only part of the installer creation process that is not automated is applying the digital signature. Digital signing will be done manually by our long-time Windows installer maintainer, Jernej Simončič. He will download and verify thoroughly the installer before signing it. So you are getting the best of both worlds: automation builds and human-verified software.

Note: this semi-automated release process is only for our development branch; it will be used in the stable branch when we will release GIMP 3.0.

Consistency of the installer scripts

We also added some additional tests for verifying installer script consistency. In particular, translations are handled by the GNOME translator teams, and we sometimes get translations into a new language that is not yet properly listed by the installer. A few times in the past, we did announce a new installer language which users could not find in the actual released installer! 😅

Our continuous integration platform will now warn us when such a case happens again, so that noone’s work would be wasted and all new translations would be properly used by the installer.

Linux

Similarly to the Windows installer nightlies, GIMP now gets a weekly flatpak, i.e. a flatpak built out of development code, entirely automated, a work initiated by Ondřej Míchal.

Install the “nightly” repository to get our weekly updates with this command:

flatpak install —user https://nightly.gnome.org/repo/appstream/org.gimp.GIMP.flatpakref

If you installed both the stable, beta (development releases) and master (weeklies) repositories, your desktop will only see one of them at any given time. You can select exactly which version it sees and start with the following command (e.g. selecting stable as default):

flatpak make-current —user org.gimp.GIMP stable

Then if stable was made to be your default flavor of GIMP, you can run the other versions with the following command (e.g. the weeklies):

flatpak run org.gimp.GIMP//master

This information is also available on the downloads page.

⚠️ Please keep in mind that a weekly build is purely automated, there is no human verification, it happens at semi-random time during the development process. Hence you may end up with very broken software at times even though we try to never leave the repository in a dire state. It is even less safe than development releases. People are welcome to test our weekly builds to help us with feedback and bug reports, but you should not expect these builds to be any close to stable software or even usable. ☢️

macOS

Finally, there’s some exciting news for macOS users: we were recently joined by a new contributor, Lukas Oberhuber, who started working on the development package. Lukas already has a working local build, he is currently tweaking the remote automated build. So we might finally have our first macOS development release (hopefully for GIMP 2.99.8) soon. Lukas also contributed fixes to GIMP source code to better support macOS.

GIMP 2.99.8 running on macOS — GIMP 2.99.8
Teaser alert: GIMP 2.99.8 running on macOS 🎉 (by Lukas Oberhuber) — GIMP 2.99.8

While this is excellent news, it does not invalidate the call for more macOS contributors we have made many times before. A single contributor (furthermore for both packaging and development!) is a very low bus factor. The more contributors, the better, so if you want to help to ensure sustainability of macOS packaging, you are still very much welcome to join!

Automatic builds for merge requests

To facilitate in-review code testing, we now provide automatic builds for merge requests. If you are planning to contribute a patch using this Gitlab feature, please add the 5. Windows Installer and/or 5. Flatpak package label to a newly created merge request. This will trigger building a Windows installer and/or a standalone flatpak. We expect this to be helpful for testing new features and bug fixes.

Updated coding style guide

GIMP source repository now provides a very nice first draft of Coding style guide written by Stanislav Grinkov. The new guide combines guidelines formerly available in the HACKING file and information passed down through discussion channels like IRC, patch reviews etc.

We expect this draft to receive further improvements as we do love very neat and organized code. In any case, this is a great start!

GEGL and babl

We did not request a new set of babl and GEGL releases for 2.99.8. All the changes we announced in v2.10.28 still apply here.

Downloading GIMP 2.99.8

As usual, GIMP 2.99.8 is available on GIMP official website (gimp.org):

  • The Linux development flatpak has already been published so that anyone who installed it previously should have an update proposed by their software manager (or from terminal: flatpak update org.gimp.GIMP//beta).

  • The Windows installer is already available too, very quickly thanks to the new installer release process.

  • The macOS DMG package will hopefully be published soonish.

Team news

Developers

Daniel Novomeský is now a core developer with git access, for their continuous contributions to the HEIF/HEIC/AVIF plug-in as well as the brand new JPEG XL plug-in.

Code contributors on GIMP 2.99.8: Andrzej Hunt, Daniel Novomeský, Des McGuinness, Ian Martins, Jacob Boerema, Jehan, Jordi Mas, lloyd konneker, Luca Bacci, Lukas Oberhuber, Marc Espie, Marie-P, Massimo Valentini, Mayank Suman, Michael Bazzinotti, Michael McLaughlin, Michael Schumacher, Niels De Graef, Øyvind Kolås, Pavel Artsishevsky, programmer-ceds and Stanislav Grinkov.

Build contributors on GIMP 2.99.8: Andre Klapper, Christopher Davis, Daniel Novomeský, Jehan, Jernej Simončič, lloyd konneker, Luca Bacci, Marco Spiess, Niels De Graef, Ondřej Míchal, Øyvind Kolås, Stanislav Grinkov and Trần Ngọc Quân.

Translators

Among the 84 languages for which GIMP 2.99.8 is available, 20 translations were updated: Basque, Brazilian Portuguese, Catalan, Chinese (China), Finnish, German, Greek, Hungarian, Icelandic, Indonesian, Italian, Lithuanian, Polish, Portuguese, Russian, Slovenian, Spanish, Swedish, Ukrainian and Vietnamese.

The development Windows installer now contains Portuguese and Lithuanian translations, making it available in 38 languages.

Translators on GIMP 2.99.8: Alexandre Prokoudine, Anders Jonsson, Asier Sarasua Garmendia, Aurimas Černius, Balázs Úr, Boyuan Yang, Bruno Lopes da Silva, dimspingos, Enrico Nicoletto, Hugo Carvalho, Jiri Grönroos, Jordi Mas, Luna Jernberg, Marco Ciampa, Matej Urbančič, Ngọc Quân Trần, Philipp Kiemle, Piotr Drąg, Rodrigo Lledó, rofiquzzaki, Sveinn í Felli and Yuri Chornoivan.

What’s next

You might have noticed that a lot of effort has been done to improve the infrastructure these last few months (whether for continuous integration, testing, automating releases, mirrors…) and more has to be done as this was highly needed for the long run. As a consequence of these infrastructure improvements, this release news was published a single-day after actual source release, which is a new record for us (it usually takes days to generate the Windows installer then to have all mirrors synced)! Apart from infrastructure, this version is nonetheless a big one with more than 50 reports closed, 25 merge requests accepted and over 500 commits since 2.99.6.

We are still working hard to finalize the GTK3 port as well as the new plug-in API. Taking care of technology changes (Wayland on Linux and macOS in particular) these days is also taking quite a toll in our development efficiency as we spend a lot of time fixing things which just get broken because the underlining systems change. Nevertheless we are quite happy of how things evolve as future GIMP 3 is looking more and more awesome every day, right? 🤗

Don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, the maintainers of GEGL and GIMP are crowdfunding to be able to work full-time on free software. 🥳

GIMP’s official mirrors and mirror policy

Par :Wilber

As far as we could remember, organizations from all over the world have supported the GNU Image Manipulation Program by mirroring 🪞 our file downloads. This is important as we may have to sustain dozens of thousands downloads a day.

Mirrored Wilber - Wilber and co. comics strip
“Mirrored Wilber” by Aryeom, Creative Commons by-sa 4.0

Official mirrors (to publication day)

The current list of official mirrors by alphabetical order:

  • Aalborg University
  • Academic Computer Club, Umeå University
  • Artfiles New Media GmbH
  • Astra ISP
  • CSC - IT Center for Science / FUNET
  • Cu.be Solutions
  • Dmitry Shishkin
  • dogado GmbH
  • eScience Center, Nanjing University
  • Friedrich-Alexander-Universität Erlangen-Nürnberg (FAU)
  • Göttingen University and Max Planck Society
  • Interdisciplinary Centre for Mathematical and Computational Modelling UW, University of Warsaw
  • IP-Connect LLC
  • Korea FreeBSD Users Group
  • Jaleco
  • Kumi Systems
  • Lysator ACS
  • nbshare.io
  • Studenten Net Twente (SNT), the University of Twente
  • UKFast
  • University of Crete
  • University of Kent UK Mirror Service
  • University of Maryland, College Park
  • XMission

One more mirror request is being processed at the moment.

The always-updated list is on a dedicated sponsor page. The image above poetically representating the mirrors, by Aryeom of ZeMarmot project, will also illustrate this sponsor page.

💌 Thanks to all these organizations!

What are official mirrors?

We recently cleaned out our mirror list per these rules:

  • We now list exactly the mirrors verified by the infrastructure team, no more no less. Being verified gives you rsync credentials allowing faster and safer updates. See below if you want in.
  • Mirrors are not listed anymore in the Downloads page since there is an automatic mirror rotation operating when clicking the download buttons. Instead we have the dedicated Sponsors page, which means better visibility to sponsoring mirrors, all the while simplifying the download page which used to be over-crowded with information.
  • We display names of mirroring organization, for instance “University of XYZ” with a link to the organization website, rather than just URLs.

Note: we had more mirrors either listed on our former download page or who made reports of interest to be official mirrors across the years (back then our workflow was much fuzzier). We sent messages to all of them but are not sure it reached the people in charge. If you wish to be part of the official list, help shoulder the download burden and be featured on our sponsors page, please read the procedure below.

How to be an official mirror

This is the same procedure as GNOME mirrors, except you must explicitly ask to be a GIMP mirror:

  1. Create a mirror request on the Infrastructure tracker
  2. Write in title and introduction that you want to be a mirror for GIMP in particular
  3. Add /cc @Jehan in the request description or in a comment
  4. Fill the relevant fields from the new-mirror template
  5. If you want a specific name and URL to be shown in the mirror sponsor list, please write it explicitly in the report (otherwise we will choose whatever organization name and URL seems the most relevant from what you wrote down)
  6. Once we are done verifying your organization, rsync credentials will be exchanged securely, allowing you to sync your mirror with the source server
  7. There is nothing to do in particular to appear on the Sponsors page which will be updated regularly through scripts. Yet it may take a few days or even weeks at times. So don’t worry if your organization name does not appear immediately!

🛈 We programmatically check at random intervals that mirrors are updated quickly enough and that the data match for obvious security reasons.

Technicalities

We used to list mirrors on gimp.org/downloads/ on a declarative basis. People wishing to download were encouraged to pick a mirror rather than the main download server.

Years ago, we moved to an automatic mirror rotation through web redirections. In other words, any URL to download.gimp.org/mirror/ automatically redirects to any of the configured mirrors (our own download server included), hence lowering the burden on all servers without having people to manually pick a mirror in a boring list.

Yet followup checks were not thorough enough, there were no clear procedure to give mirror administrators and there were discrepancies between mirrors listed on the website and the ones actually taking part in download rotation. These are the changing points.

Listing only verified mirrors has the following advantages:

  • The infrastructure team makes the background check to verify an organization is trustworthy.
  • Mirrors get rsync credentials, enabling faster updates (instead of through third-parties which may themselves sync from other third parties, hence avoiding several-day delays).
  • Our team has an accurate list of mirrors for systematic security checks of file presence and authenticity. We will react quickly in case of problem.
  • Only verified mirrors are added in the download rotation settings, thus contributing with the bigger chunk of downloads. It is only normal for them to be featured prominently.

More discussions are going on to improve the procedure and mirror technology even further by using the Mirrorbits software. More on this later (and after more extensive testing).

Additionally to mirrors, we would like to 🙏 thank the GNOME infrastructure team for their invaluable help!

Contributors

The work on mirrors was a long run background job which was improved by various people, notably Michael Schumacher and Pat David.

These recent improvements to the mirror procedure, making it faster and safer for people downloading GIMP and easier for contributors as well as for mirror administrators, were done by GIMP co-maintainer, Jehan of ZeMarmot project (Liberapay and Patreon fundings). The goal is to simplify and automatize as much as possible the process to make our list of mirrors always up-to-date, more reliable downloads, but also to verify the mirrors are safe by running automated data integrity verification scripts.

GIMP 2.10.28 Released

Par :Wilber

GIMP 2.10.28 is now released. This is a bugfix release, because we are giving most of our time and efforts to the development version (2.99.x).

Note: you may have noticed we skipped GIMP 2.10.26. A build bug has been discovered just after tagging the release. GIMP 2.10.28 is the same without the bug. We recommend against building and using GIMP 2.10.26.

Highlights

  • Bug fixes for GIMP on Windows; see below for details.
  • The Dashboard dockable now has memory support in OpenBSD.
  • Performance improvements for GIMP on macOS Big Sur were applied in our macOS packages since GIMP 2.10.22 as experiments. We felt confident enough to move the code to our main codebase.
  • The following plug-ins received fixes: C-source, DICOM, GIF, PS, Sunras, BMP, DDS, PSD, TIFF, Gimpressionist, metadata viewer and several script-fu scripts as well as the script-fu interpreter itself.
  • Some accessibility issues in themes were fixed, such as mouse-hover feedback or problematic colors.
  • A new Script-Fu function (dir-make) enables to create directories from scripts.

To get a more complete list of changes, you should refer to the NEWS file or look at the commit history.

Code contributors: bootchk, Des McGuinness, Ian Martins, Jacob Boerema, Jehan, Lloyd Konneker, Luca Bacci, Marc Espie, Massimo Valentini, Michael Bazzinotti, Michael McLaughlin, Øyvind Kolås, saul, Simon McVittie and Stanislav Grinkov.

Theme contributors: Kevin Payne and Stanislav Grinkov.

Build contributors: Marco Spiess and Mario Daniel Ruiz Saavedra.

Team news

Jacob Boerema got appointed a new co-maintainer of the manual repository (gimp-help) after porting its scripts to Python 3 and improving them.

Stanislav Grinkov is now a new core developer.

Des McGuinness and Lloyd Konneker were given “reporter” access which allows them to help triaging on the bugtracker: labelling, closing, reopening, and moving reports…

nmat was given “reporter” access on the website project (gimp-web), for his tremendous help with website maintenance.

Translators

Among the 82 languages for which GIMP is available, 14 translations were updated: Catalan, Chinese (China), Croatian, Dutch, German, Italian, Lithuanian, Polish, Russian, Slovenian, Spanish, Swedish, Ukrainian, and Vietnamese.

The Windows installer now contains Vietnamese and Lithuanian translations, making it available in 34 languages.

Translators on GIMP 2.10.26/28: Alexandre Prokoudine, Anders Jonsson, Aurimas Černius, Boyuan Yang, Daniel Mustieles, Hannie Dumoleyn, Jordi Mas, Luna Jernberg, Marco Ciampa, Milo Ivir, Ngọc Quân Trần, Matej Urbančič, Philipp Kiemle, Piotr Drąg, Rodrigo Lledó, Tim Sabsch and Yuri Chornoivan.

Windows is getting some love 💕

More work than ever is happening around Windows lately, both within GIMP and the libraries it depends on. Which is how several long-standing issues with GIMP on Windows finally got fixed:

  • Very slow file dialogs: it used to happen when network devices were slow or unavailable, or pluggable devices disconnected, or even because of fake floppy drives configured in the BIOS. GLib was using an inappropriate Windows API to get some information about drives. This has been fixed! (#913, glib!2020)
  • Opening files in specific third-party software was crashing GIMP: apparently, these applications were editing the file-handling registry field while GLib had a buggy watcher on the registry. (#6780, glib!2205, glib!2210)
  • GTK was outputting the wrong character on some keyboard input using Input Engines (e.g. alphanumeric characters were interpreted as half-width katakana when using the Japanese IME). (#1603, gtk!3741)
  • TIFF exporting used to lock the TIFF files because of a bug in the Windows thumbnailer (Explorer.exe would acquire a lock on the file and never release it). Since Microsoft doesn’t seem to want to fix this long-standing bug, we decided to switch to another way of creating thumbnails by adding a “reduced-resolution image” as the second page of the TIFF, as proposed in the TIFF specification, instead of adding a subifd thumbnail. This takes care of the lock issue in a nice way, bypassing Explorer‘s bug. Of course, it means that programs that can’t reads tags properly might try opening thumbnails as additional pages, even though it is explicitly annotated as “reduced-resolution image“. If you ever run into this very issue, please report it to developers of such programs. What they need to check is the SubFile type of the pages their software opens (as per TIFF specification). (#3740)
  • GIMP used to prevent some applications to open, when these programs needed to watch some specific directory, because GLib was reading directory with inappropriate access rights. Actually, this fix has been available since GIMP 2.10.24. (#4594, glib!1976)
  • Windows software with invisible windows (e.g. gesture shortcuts, screen capture and the like) used to interfere with GTK software and break some mouse interactions. We have had a patch for this, by Ell, since 2017, which we used for all GIMP 2.10.x releases. Unfortunately, with GTK2 maintenance stopped, our patch was only available in the bugtracker and in our binaries, while it was beneficial to other GTK software, even in GTK3 or newer. It has only recently been reworked and improved by Luca Bacci so that this problem is now officially fixed in GTK3 too! (#1082, gtk!2767)

In particular, we would like to thank Luca Bacci, Jacob Boerema, LRN, Ell, and all the contributors who stayed on top of Windows issues for this progress to happen, sometimes taking years of patience.

What about macOS?

On macOS side, the activity is still slow, if not non-existent.

We remind that GIMP is made by you. Yes, you 👆 reading this right now. Windows developers used to be very few too. As you can see, this is clearly changing. Therefore, if anyone cares about GIMP for macOS, please step forward.

You may have noticed that GIMP 2.10.24’s macOS DMG was released months late. Even this only happened because Jehan spent days to fix the build on the remote build server, bit by bit, without any local access to a macOS machine, nor any ways to run and test himself. If the packagers are still unavailable, we may try to do the same for this release, though we can’t set a deadline.

It is obviously not a sustainable release model. It is even worse for the development versions: we haven’t had a single build for GIMP 2.99.x on macOS yet.

So if you want this to change, please join us! 🤗

GEGL and babl

As usual, this release is supplemented with the releases of babl 0.1.88, early July, and GEGL 0.4.32 the same day as GIMP 2.10.26.

In GEGL in particular, the following operations were improved:

  • distance-transform: new edge_handling parameter allows users to choose whether areas outside the input are to be treated as above threshold or below threshold (i.e. infinitely white or black respectively) for calculating distance. (by woob)
  • negative-darkroom: contrast boost and illuminant adjustment parameter, reworked emulsion dye model, UI improvements, more black-and-white paper presets and some operation speed-up. (by JonnyRobbie for features and Richard Kreckel for speed-up)
  • fill-path: 32-bit float RGB and CMYK color processing, using ctx as renderer. (by Øyvind Kolås)

The test system got also some nice improvements by John Marshall.

Downloading GIMP 2.10.28

As usual GIMP 2.10.28 is available on GIMP official website (gimp.org):

  • The Linux flatpak has already been published so that anyone who installed it previously should have an update proposed by their software manager (or from terminal: flatpak update org.gimp.GIMP//stable).

  • The Windows installer is already available. Most mirrors have picked it up, but some still haven’t. So if the download fails, just try to click the Download button again.

  • The macOS DMG package will hopefully be published soonish.

What’s next

Though we may likely get again exciting new features in further 2.10.x versions, nowadays most feature development happen in the development version for future GIMP 3. You may have seen some of it, if you follow our work on social networks, or if you test nightlies of GIMP.

Otherwise, you will have more surprises when we will release GIMP 2.99.8 development version!

Don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As you know, the maintainers of GEGL and GIMP are crowdfunding to be able to work full-time on free software. 🥳

Funding GIMP developers for sustainable development

Par :Wilber

GIMP has been developed as a community effort since very early on, after its original authors left the project. This begs the question of sustainability when contributors wish to stay longer while not being able to afford being penniless volunteers forever.

We have seen skilled developers come and go for years, the latter becoming a growing concern. Contributing takes a crazy amount of time and people have family, work and other responsibilities to take care of. Thus when core team contributors are willing to be paid for making Free Software, we have decided that GIMP as a project should encourage such endeavours by putting more emphasis on their funding.

There are currently 2 such crowdfunding projects. You can consider these crowdfundings as “official” as can be and completely endorsed by the GIMP project:

For more information, please read below.

Øyvind Kolås: GEGL maintainer

Øyvind has been contributing to GIMP since 2004. He soon became GEGL maintainer, for what was meant to become one day GIMP’s image engine. GEGL and babl (its companion pixel format encoding library) already support color management, higher bit depths and CMYK; some of the non-destructive capabilities are already exposed as part of GIMP’s on-canvas preview of image filters. The integration of GEGL started in GIMP 2.8 with a wider port towards color management happening in 2.10. It is still a work in progress, with plans for deeper integration of existing and future capabilities of GEGL in future versions of GIMP as they continue to get refined and tested.

Øyvind is known not only for his work on GEGL itself, but also for his various experiments around images and colors. One of his visual experiments with color grids on grayscale images even got viral back in 2019 and spread all over the web on too many news outlets to name them all.

Color assimilation grid illusion, by Øyvind Kolås
Color assimilation grid illusion, by Øyvind Kolås

One of his later endeavours is ctx, a vector graphics stack, which is probably hard to describe as some parts of this project are a bit mind blowing, so let’s give you the official description:

ctx is a media-rich terminal and a vector graphics stack, built around a textual serialization protocol. The textual serialization has a corresponding binary representation that is used by the core rasterizer as well as sharing data among threads. The ctx protocol is available as an extension to ANSI escape sequences in the ctx terminal - the terminal launched when running the ctx binary with no arguments. This extension allows scripts in any language to output vector graphics in addition to or instead of monospace text in each tab/window, and also provides network transparent rendering.

All of this development background is most likely why Øyvind describes himself as:

I am a digital media toolsmith, creating tools and infrastructure to aid creation of my own and others artistic and visual digital media experiments.

GIMP wouldn’t be here without sharp minds like his. Can you imagine, 17 years or more of dedication to free software and researching images? So yes, GIMP project fully endorses Øyvind’s Patreon campaign and we encourage everyone to donate!

Fund Øyvind Kolås
GEGL development

Note: Øyvind is also present on Liberapay.

ZeMarmot: GIMP maintainer and Libre Art

ZeMarmot is a Libre Art project born as an idea in 2014, launched in 2015 with production starting in 2016. In particular, it is an Open Animation short film (Creative Commons BY-SA license promoting sharing and reuse) led by the film director, Aryeom, and GIMP co-maintainer, Jehan.

ZeMarmot project logo
ZeMarmot project logo

Now you might wonder why an animation film would help GIMP, yet this is the whole reason why Jehan has been heavily developing the software, to the point that he became the biggest contributor since 2020 and is now co-maintainer. Working on other fun projects with Aryeom is even the whole reason why Jehan started contributing to GIMP at all, ever since 2012.

ZeMarmot is a traditional (yet digital) 2D animation film, meaning a lot of illustration work (each frame hand-drawn), hence requiring heavy usage of brush tools, selections, filters, transformation tools, scripting for automatization and all sort of raster edit needs.

This is why the ensuing development is not only about illustration and animation, as some might believe. They are not aiming at changing the scope of the software. GIMP is a generic graphics manipulation tool and what we have realized over the years is that most features are so cross-disciplined that it makes total sense to have a generic tool. Moreover Aryeom and Jehan also work from time to time on printing jobs, logos, photos, pin buttons, board games… they do all kinds of things with GIMP!

A lot of care is taken to fix bugs, improve stability, efficiency, packaging and add generic tools and features useful to photographers, designers, illustrators, scientists, animators… Trying to list all the improvements brought by their work would be a challenge because there are too many.

Nowadays, ZeMarmot is as much an artisanal animation film project (Aryeom single-handedly working on nearly every production role) as it is a software development project (both with Jehan on development and Aryeom on testing and designing features). Aryeom and Jehan believe that taking ownership of your working tool matters and this why their collaboration works so well, by bringing together artist and developer.

The nice final touch is that their big dream is to be able one day to hire more Free Software developers and artists. This project is under LILA‘s (Libre comme L’ArtFree as Art in French) umbrella, a France-registered non-profit dedicated to Libre Art and creative media Free Software. Imagine in a not-so distant future if we had a non-profit studio producing artworks in Libre Art licenses, for everyone to view, share and even modify (source files are provided, e.g. the ones for this video they made for Framasoft about Peertube) with many artists (hence producing films at much better pace than they are able right now) and developers fixing production issues. We can truly consider LILA as GIMP’s sister non-profit Open Animation studio! And yes, an Open Animation studio producing Libre Art will help get better tools for photography editing or design as well.

This is why GIMP project also fully endorses LILA and ZeMarmot project and encourages the whole community to give to this project in order to improve GIMP. You can consider it a fostered project of GIMP.

Fund ZeMarmot (Aryeom and Jehan)
GIMP development

Note: ZeMarmot is also present on Liberapay and Tipeee platforms.

What about donations to the GNOME Foundation?

For years, we have received donations through the umbrella of the GNOME Foundation. It is still possible to do so of course. Yet these donations are so far only usable for community needs. In particular, it helps us when we need hardware (not so often), and to gather contributors for conferences (regularly we also help funding the conferences itself, because we believe that a sane free software graphics ecosystem should not be only about GIMP so we love to support other graphics software too) and contributor meetings.

Note that it is also possible to fund several contributors through GIMP Liberapay account as an interesting alternative.

What these donations through GNOME still cannot do is funding paid development, so if that’s what you want, please fund the developers directly as explained above. GIMP project obviously welcomes the 2 types of donation, for community needs through GNOME and for paid development through the 2 crowdfundings listed.

Thanks to everyone for supporting GIMP in whatever way suits you best! 🤗

Development version: GIMP 2.99.6 Released

Par :Wilber

☣️ GIMP 2.99 releases are development snapshots. There are known bugs, sometimes crashes and definitely unfinished features; that’s why it’s not yet a final release. Use at your own risk! ☣️

GIMP 2.99.6 contains quite a few visible and interesting improvements, yet the biggest changes are hidden from the public eye into the quite steadily evolving API (Application Programming Interface for plug-in developers).

⚠️ Many of the third-party plug-ins already ported for GIMP 2.99.2 or 2.99.4 will end up broken, and there is a high chance they will break again in further development releases until we stabilize the API. We apologize for this, though this is the price of making plug-ins for a program in-development. We figured it’s better to do this now rather than ending up stuck with a bad interface for the years to come (as stability will be ensured once GIMP 3 will be out).

Release highlights:

  • Off-canvas guides
  • Template selector in Canvas Size dialog
  • Pinch gesture on canvas for zooming
  • Improved Paint Select (experimental) tool
  • Better handling of gAMA and/or cHRM chunks of PNG
  • API evolution
Work in Progress - Wilber and co. comics strip by Aryeom
“Work in Progress (Feel free to grab a tool and help)” by Aryeom, Creative Commons by-sa 4.0 - GIMP 2.99.6

Core improvements

Off-canvas guides

In the continuation of out-of-canvas area visibility, guides can now be placed outside the canvas. This was deemed useful for various use cases when you want to work on bigger areas than your canvas.

For people worried of graphical interaction with guides, the workflow to delete them (dropping the guides off-canvas) just changed to be about dropping the guides off-viewport, which turns out to not be so different after experimenting with this change in production for a few months.

Off-canvas guides - GIMP 2.99.6
Off-canvas guides - GIMP 2.99.6

Template selector in Canvas Size dialog

It is common usage to resize your canvas to a standard format, for instance paper formats. For this reason, our recent and quite prolific contributor Stanislav Grinkov implemented a template selector in the Canvas Size dialog.

Template selector in Canvas Size dialog - GIMP 2.99.6
Template selector in Canvas Size dialog - GIMP 2.99.6

In order to handle the cases when you choose a template with expected pixel density differing from the image’s, you may be queried to decide whether you want to set your image to the template’s density or scale the template’s dimensions to match the image’s density.

Pinch gesture on canvas for zooming

This is very fresh news as we merged this code (by Povilas Kanapickas, brand new contributor!) only a few days ago: GIMP now has pinch gesture support for touchpads, some tablets or touch screens (it might not work with all tablets and touch screens). In other words, if you have a device with touch support, you can zoom in and out through pinching movements with your fingers.

This is known to work on Linux/Wayland (tested successfully on a laptop touchpad and a Wacom Intuos Pro) and it might work in a few months in X11 (after this patch gets merged). Someone reported the feature working on Windows 10 too with one’s touchpad and integrated laptop’s touch display. We have not found anyone yet to test the feature on macOS (it relies on generic GTK code, but the exact support depends on specific per-platform implementation and on the touch device firmware and/or driver implementation). I guess this will be the surprise for this release. We welcome any feedback in the associated report.

As a note of interest, we used to say that gesture support was not our biggest priority, hence might not make it to GIMP 3. Yet here it is! Another great example that GIMP is made by anyone. All it takes for your dream features to happen is someone willing to contribute code! It might be you! 🙂

Paint Select tool

The tool is still listed as experimental as it is not yet deemed finished by its contributor, Thomas Manni. Nevertheless it has already improved quite a bit and starts getting really interesting.

Several bugs were fixed and selection is now viewport-based which allows it to be much faster already depending on the zoom. Yet this is not even the expected optimization which is planned to make the tool work really fast. Expect more to come!

This work has been happening both on GIMP code base and on our graphics engine library’s code base, GEGL.

Copy-pasting Wilber in a few seconds with the Paint Select tool (realtime GIF) - GIMP 2.99.6
Copy-pasting Wilber in a few seconds with the Paint Select tool (realtime GIF, faster as zoomed-in) - GIMP 2.99.6

As a side note, the Paint Select tool now has its own icons, original design by Yash Arya, with collaborative work and design finalisation by Aryeom.

New Paint Select tool icon by Yash Arya and Aryeom - GIMP 2.99.6
New Paint Select tool icon by Yash Arya and Aryeom - GIMP 2.99.6

Plug-ins

PNG: color profile generated from imported gAMA and cHRM chunks

The PNG format has several ways to manage colors, one of them is through color profiles, which is also the logics in GIMP as in any modern graphics editor. In the PNG specification, the presence of a color profile is considered priority and overrides any of the other color management methods.

The other ways were through the gAMA, cHRM and sRGB chunks (a “chunk” is basically a PNG metadata), where instead of giving a full profile, a PNG could store its gamma correction as a single value (hence exact sRGB gamma curve cannot be stored this way, but an approximation of it can) in gAMA while the primary chromaticities can be stored in the cHRM chunk.

GIMP’s core logics never supported (and still won’t because it is an old deprecated method which should not be implemented to new code) only using such a single gamma value. Yet we wanted to be able to read and display such images correctly. Our historical workaround was to store the gAMA and cHRM values in a parasite on the XCF file, and just put it back when exporting to PNG again which means that the image was wrongly displayed in GIMP itself but fine after export.

Now GIMP will propose creating an actual ICC profile from the gAMA and cHRM chunks, thus the image will be properly displayed. Since we don’t store anymore the PNG chunks, the “Save gamma” export option has been removed from PNG export dialog. Only proper profile is supported now (i.e. an old-style PNG image which goes through a roundtrip import-export in GIMP will come in with gAMA/cHRM chunk and out with an equivalent ICC profile). Note that it is also recommended by the PNG spec to export with ICC profiles when a encoder software supports it.

Generating a color profile from PNG gAMA and cHRM chunks - GIMP 2.99.6
Generating a color profile from PNG gAMA and cHRM chunks - GIMP 2.99.6

Note: a crash cause has been discovered in babl when opening indexed images with embedded color profiles. Since we are now creating color profiles when a PNG had these chunks, this change can provoke this crash. Fortunately a patch has already been written, and we expect it to be present in the next version of babl.

More plug-in work

  • Our screenshot plug-in has several implementations and used to always display a dialog. Nowadays with portals on Linux (especially for Wayland and sandbox-style packaging), more of the logics is moved toward the portal itself. This is the case in particular for the Freedesktop portal which asks what and how to shoot your screen contents. Therefore when GIMP uses the Freedesktop portal, it won’t show anymore our now-redundant dialog.

  • Color profile and comment are now saved on each layer of an exported TIFF file to prevent any ambiguity for other programs (since every layer can have its own profile and comment in the TIFF format). As usual, while GIMP tries to be lenient on errors in files it imports (allowing to salvage even broken files), it should be strict on its own exported files.

  • Other plug-ins got some minor improvements, such as progression feedback during PDF export, multi-layer selection support in PSD, Qbist ported to the new API

API evolution

  • Work continued on GUI generation for plug-ins, allowing to generate a GTK dialog in just a few lines of code (options being introspected from the plug-in procedure’s arguments).

  • Plug-in procedure’s default argument used to give a single image and drawable. It was changed to give an image and an array of drawables, since now GIMP has multi-layer selection ability. This is the main reason why most plug-ins out there which used to work on earlier 2.99.x versions will break. Sorry about this, it’s for the greater good and goes with the new abilities of GIMP for better handling of complex images!

  • Some more work is also ingoing on the concept of a plug-in procedure’s “sensitivity”, i.e.: when is the plug-in usable? Up until GIMP 2.10.x series (and even in the first development releases 2.99.2 and 2.99.4), plug-ins were sensitive when an image is opened with a single drawable selected. Now with the new multi-selection abilities, it became clear that maybe you want a plug-in which works also on several layers at once, or even only when several layers are selected! And what if you wanted a plug-in which doesn’t care if an image was opened at all? We therefore added a new function to set the sensitivity cases for a plug-in, though we are already thinking on improving this even further (which is why we are not going to name the function here and we don’t advise to use it yet if you find it).

  • Moreover many functions have been renamed for consistency, and also sometimes avoiding some name clashes on language binding generation, such as gimp_parasite_name() becoming gimp_parasite_get_name(). Here is the list of updated function names in GIMP 2.99.6.

  • Parasites” (which is the technical name for random data attached to an image, a layer, or to GIMP itself) are now usable as plug-in procedure arguments. While this seems like a weird change, it is useful when you want to store random data (even binary data) between several GIMP runs. We already use this trick in the QBist plug-in from default plug-ins.

Many more changes happened on the API, you may have a better overview by checking the NEWS file, though even this file might not be exhaustive (in case we forgot to note some changes!).

New translation for the installer

Our Windows installer for the development release got a new full translation in Hebrew (GIMP itself was already partially localized in Hebrew).

Once again, we want to thank all the translators doing an incredible work!

GEGL and babl

Since we released a stable version not long ago, GIMP 2.99.6 relies on the same versions of babl 0.1.86 and GEGL 0.4.30, which is getting stabler as time goes.

Downloading GIMP 2.99.6

As previous development versions, GIMP 2.99.6 is available on GIMP official website (gimp.org):

  • The Linux flatpak has been published so that anyone who installed it previously should have an update proposed by their software manager (or from terminal: flatpak update org.gimp.GIMP).

  • The Windows installer is available on the download page.

Note: we realized a few changes listed in this news post were not integrated in the last 2.99.6 installer (like the Hebrew translation of the installer and the Paint Select tool). Expect us to add these in a further installer!

  • We are not sure yet when we will be able to publish macOS DMG packages for development versions. It depends on contributor time and willingness. We also remind that our team is fully made of volunteers so if you wish to help on macOS side (or anything else), we will welcome you with opened arms! 🤗

Let’s also take the opportunity to thank all past and current packagers. Without them, GIMP would be a lot less easy to install, right? They are also doing a core contribution to the community!

What’s next

Lately, a lot of the focus has been on the application interface (libgimp), which we are still tweaking in order to provide the best plug-in interface possible, based on 25 years of shared community experience. Even though this part is not very visible, it is important because we ensure major API version stability, i.e. that any API change after GIMP 3.0 release can only be incremental, cruft over more cruft. This is our one chance to do things better (as well as we can, errors will be made of course, but let’s keep these limited).

Even for non-developers, a good API will mean that you will be able to install many useful plug-ins in the future.

On GTK3 side itself, the port of GtkAction is still the main big remaining area. Some serious Wayland issues remain to be investigated, the space invasion is ongoing, and so on. Even though some progression has happened on most topics, the development report we shared a few months ago is still quite accurate.

As usual, we won’t give any type of deadline or release date for GIMP 3.0. We don’t know ourselves, and because it depends on volunteer time, we can’t know. We are very happy to have seen some new talented contributors these last few months (hopefully they will stay with us for a long time). We would enjoy getting more so if anyone wants to help, you are more than welcome to join the fun! So please “grab a tool!” as Wilber proposes you to do in the above comics strip! 👷

Finally, please don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP. As a community project, GIMP is indeed able to continue only thanks to contributors giving their time. This is why we have recently updated the donation page to put an emphasis on the importance of funding the developers in order to ensure the project sustainability.

GIMP 2.10.24 Released

Par :Wilber

GIMP 2.10.24 is mostly a bug fix release, which once again comes mostly with file format support improvements.

Release highlights:

  • Off-canvas point snapping
  • GeoTIFF metadata support (georeferencing information embedded within a TIFF file used by map makers)
  • Many improvements in the metadata viewer and editor
  • Many file format supports improved: HEIF, PSP, TIFF, JPEG, PNG, PDF, DDS, BMP, PSD
  • New “Negative Darkroom” operation to simulate enlargement prints from scans of photographic negatives.
  • The RAW image import now handles darktable 3.6 and over
  • New Kabyle translation
Wilber the geographer - Wilber and co. comics strip
“Wilber the geographer” by Aryeom, Creative Commons by-sa 4.0 - GIMP 2.10.24 gets GeoTIFF support

Core improvements

Off-canvas point snapping

Though there are various fixes in core code, this change is probably the most worth mentionning. Ever since GIMP 2.10.14, we are now able to see the out-of-canvas area. Consequently, many features can now work outside the canvas, yet not all features yet. This change is the continuation of this work, allowing you to snap various tools to guides, grids or vectors, even outside the canvas.

Snapping to guide off-canvas - GIMP 2.10.24
Snapping to guide/grid/vectors off-canvas made possible - GIMP 2.10.24

Metadata support

A lot of work has been going on in the metadata area, mostly consolidating our support and fixing many issues.

The metadata viewer and editor also received a lot of love, making them more robust to various edge cases, such as duplicate tags, but also mapping equivalency between similar IPTC and XMP tags, better encoding handling, and so on.

The GPS data is also handled a bit better with more precision, tooltips and better formatting.

There are still a lot of improvements to be made in the metadata area though we are probably on the right path. This part of the development is not as visible as other, yet this is very time-consuming and thankless groundwork while being useful to anyone who needs good metadata support so we’d like to thank Jacob Boerema who has worked tirelessly on this for months.

File formats

GeoTIFF

A fun story which started with a conference by Adam Cox of Louisiana State University about using GIMP for enhancing historic maps, with the issue that GeoTIFF metadata tags were lost and made the workflow a bit more cumbersome.

It prompted a bug report then later a patch by the passing contributor Ruthra Kumar and a review by the core team. All this within 2 months.

And now GIMP is able to import and export back the GeoTIFF tags. Note that no semantic logics is implemented, i.e. that GIMP can only export what it imported (the checkbox will only be sensitive on export if there was GeoTIFF metadata on import). It will not tweak the metadata contents for you. In particular since it contains georeferencing data, some type of image transform could make the data meaningless. This is up to you to know what the data references and how to keep its meaning.

Save GeoTIFF metadata as imported - GIMP 2.10.24
Save GeoTIFF metadata as imported - GIMP 2.10.24

This nice little story shows once again a power of Free Software, which is before all a software made by yourself. Anyone who contributes is part of the GIMP team! 🤗

Note: the sharpest mind may have realized the feature was available in the development release 2.99.4. Yet we add the description for 2.10.24 because this is the first stable release featuring GeoTIFF support.

Improved support for many image formats

Similarly to our previous stable release, our file format plug-ins received a lot of love.

  • TIFF got various improvements when handling multi-page files, but also many edge cases, such as 2 or 4-bit TIFF images, opening some types of non-conformant TIFF files and so on.
  • HEIF got some visually lossless export support when libheif 1.10 or later is used. We also detect separately HEIC and AVIF support at runtime, allowing to build the plug-in with only support of one encoding.
  • PNG now ignores useless layer offset of 0, a metadata which some third-party software are always storing, hence getting rid of unecessary dialog prompts.
  • JPEG will better warn the user when some metadata saving failed.
  • BMP in more bit depth can now be loaded, in particular 24bpp BMP images; moreover GIMP is now able to rescue some non-conformant BMP with wrong compression noted in header.
  • PDF import now proposes an option to reverse order of layers (same as we already had on export) and now support fractional DPI import.
  • DDS in BC5 format benefited from some fixes. Moreover as we are able to detect some images with errors previously created by GIMP, the software will also automatically fix these errors upon loading them.
  • Raw image formats are still forwarded through featureful raw developers such as darktable or RawTherapee. The former is undergoing some API changes, and while darktable 3.6 is not even out yet, GIMP already has support for this upcoming version. Therefore GIMP 2.10.24 will work with future darktable.

New translation

GIMP is now available in one more language: Kabyle. This is still an early translation as only 18% of the stable branch is translated so far (and 32% of the development branch!) yet we can already thank these new translators to bring GIMP to even more people.

This makes GIMP available to 82 languages other than default English!

Translators are also contributors doing an incredible work, even though their work doesn’t always get the visibility and acknowledgement they deserve. Thanks to all of them!

GEGL and babl

As usual, this release is supplemented with the releases of babl 0.1.86 and GEGL 0.4.30.

Changes in short

Our pixel encoding and color space conversion engine, babl 0.1.86, now supports creating babl space from input-class ICC profiles and improves thread safety.

On its side, GEGL 0.4.30 made improvements to its test suite and to the following operations: jpg-load, png-load, tiff-load, rgbe-load, color-reduction, fattal02 and paint-select. This later operation in particular was introduced for the new Paint Select tool so we will have the opportunity to talk about the improvements on the next development release news.

Negative Darkroom

Additionally to the other improvements, a new very interesting operation appears in GEGL, contributed by Jonny Robbie: negative-darkroom.

This operation is for artists who use hybrid workflow technique of analog photography. After scanning a developed negative, this operation is used to invert the scan to create a positive image by simulating the light behaviour of darkroom enlarger and common photographic papers.

Negative Darkroom in GEGL 0.4.30 / GIMP 2.10.24
Negative Darkroom operation in GEGL 0.4.30 / GIMP 2.10.24

As all GEGL operations are automatically detected and made available by GIMP, this new operation can be used in GIMP 2.10.24 through the generic GEGL tool (menu Tools > GEGL Operation… then select “Negative Darkroom (negative-darkroom)” in the dropdown list).

Creating a custom dedicated dialog for this operation has been raised and may happen in an further version of GIMP to even more improve the usage and experience.

babl minimum requirement in GEGL and GIMP

Meanwhile babl minimum requirement in GEGL has been downgraded to 0.1.78 (same as in GIMP) because newer versions require too recent meson build tool, which is unfortunately still not available on some distributions. In order not to prevent people from benefiting from a newer version of GEGL and GIMP, we refrain on purpose to bump the minimum requirement for a bit even though we highly encourage every packager to use the last version of babl when possible. Many fixes and improvements were also made available in recent versions.

Downloading GIMP 2.10.24

As usual GIMP 2.10.24 is available on GIMP official website (gimp.org):

  • The Linux flatpak has already been published so that anyone who installed it previously should have an update proposed by their software manager (or from terminal: flatpak update org.gimp.GIMP).

Note: our flatpak now supports only x86-64 and AArch64 (i.e. the 64-bit variants of the x86 and ARM architectures). In particular i386 (32-bit x86) had been dropped quite some time ago by the Freedesktop runtime we depend on. This is now the ARM (32-bit) support which has been dropped (even though 32-bit hardware is still being released or often 64-bit board computers are sold with a 32-bit OS). We tried to hold back a bit, for more than 6 months even, but now that the older runtime we used is unsupported, updating is the only sane choice.

For the record, our i386 flatpak is therefore stuck at GIMP 2.10.14 and our ARM flatpak is stuck at GIMP 2.10.22 with a few thousands downloads for this last version of GIMP i386 and a bit more than 400 for the last version of GIMP ARM.

  • The Windows installer is already available. Most mirrors have picked it up, but some still haven’t. So if the download fails, just try to click the Download button again.

  • The macOS DMG package will be published in the next few days once our packager can make the time.

What’s next

The development continues very strong on the development branch and we can clearly see the shift towards more work on GIMP 3 as 2.10.x release become more about robustness and less about new features (though we still continue to backport features when it can be done without too much additional work). We will give more details on this side of development when we will release the upcoming 2.99.6 development version.

Finally, please don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP.

🎄 Development release GIMP 2.99.4 is out 🎁

Par :Wilber

As we are progressing towards v3.0, we expect future unstable releases to have less new features and more bug fixes and improvements.

Release highlights:

  • Usability fixes across various parts of GIMP
  • New Paint Select tool in the playground
  • New generic dialog generation and metadata support API for export plug-ins
  • Multi-threaded JPEG2000 decoding
  • Initial documentation on porting plug-ins to 3.0
GIMP 2.99.4 present for Christmas! by Aryeom, CC by-sa
GIMP 2.99.4 present for Christmas! by Aryeom, Creative Commons by-sa 4.0

Usability fixes

Slider widget

We fixed several discoverability issues in the new (more compact) slider widget. This was mostly the result of usability tests by Aryeom after extensive use in production.

Before, if you tried to edit the scale value numerically (i.e. by inputting numbers on keyboard), you’d also trigger a value change by using the main mouse button click. You could avoid that by using the middle mouse button click, but is was hardly discoverable.

So now you can pinpoint-click the displayed numbers. This action will only focus the text input (by default entirely selecting the existing value as is common when focusing text entries). You can still click-edit the value from everywhere in the widget, except exactly on the numbers.

The second issue was related to changing the cursor depending on the context:

  • The top-arrow cursor came from a time where this widget had 2 areas, a top and bottom. It didn’t really mean anything anymore with the new interaction. We replaced it by a common “grab” cursor as defined in the CSS specification. This becomes a “grabbing” cursor when a click’n’drag is in progress.
  • When the pointer is hovering the text area, it becomes a “text” cursor instead, hence advertizing the fact that a click here would start editing the number.
  • Finally, when holding the Shift modifier key, the cursor will become a horizontal resize cursor (“col-resize” in the CSS specification), hence advertizing the ability for smaller relative resizing (an action also available with the third button, usually right-click).
GIMP 2.99.4: usability improvements on the slider widget
GIMP 2.99.4: from left to right, new cursors on the slider to grab, when grabbing, do small updates or text-edit

Multi-layer selection

Multi-item selection in the Layers dockable comes with common key interactions for multiple selection such as: Shift-click for range selection or Ctrl-click for selection modification. These interactions clashed with some features we had on layer and mask thumbnails. For instance one could end up changing the selected layers while in the same time create or remove layer masks by mistake.

Since the multiple layers feature is just too important and these generic interactions are so well established across software (hence their removal or replacement not even being a question), we made the following design choices:

  • No special click features in the Layers dockable should be based only on Shift, Ctrl or Shift-Ctrl modifiers, but it could include these if any additional modifier (e.g. Alt) comes to play.
  • We moved all existing features that didn’t follow such rule to the Alt+ combination.
  • For cases where all modifier combinations were taken, we removed click features based mostly on seniority (e.g. Alpha to Selection has been around pretty much since inception of GIMP while mask creation utilities were only added a few years ago).
  • Actions are now based on exact modifier combinations to avoid feature clashes (e.g. Ctrl-click should not trigger both the Ctrl-click and simple click actions).
  • Actions done when clicking a thumbnail with modifiers do not change the selection and will now operate on the clicked layer or mask, not on selected layers/masks. This makes these actions more useful as they are not redundant anymore.

The concrete consequential changes are as follows:

  • Ctrl-click on a mask thumbnail to enable/disable the layer mask has been changed to Alt-Ctrl-click. The other mask action, Alt-click for showing the mask, stays the same.
  • Shift-click and Ctrl-click actions on a layer thumbnail to respectively add (with last used values) or remove a layer mask have been removed. Indeed all Alt+ combinations are already taken on layer thumbnails (for “Alpha to Selection“, “Add Alpha to Selection“, “Subtract Alpha from Selection” and “Intersect Alpha with Selection“, respectively on Alt-click, Alt-Shift-click, Alt-Ctrl-click and Alt-Shift-Ctrl-click; we also took the opportunity to improve the Undo labels for these actions, improving discoverability on random clicks) and these “Add/Remove mask” actions were much newer (2.10.0) anyway.
  • Thumbnail popups on long click do not happen anymore when any modifier is being held, hence removing a distraction when this was obviously not what the click was for.

Input Devices dialog

The infamous “Input Devices” dialog has always felt packed with arcane features and devices. With GIMP 3, many features will be working out-of-the-box and it felt like the right time to clean this dialog a bit.

  • We now only show entries for actual physical devices attached to your computer. So no more “virtual devices”. Similarly we now hide the XTEST device which some kind of a test device generated by the X11 server (Linux).
  • We used to show all possible axes for all devices, including some axes like “Rotation” or “Slider” which are present very rarely (only on specific drawing styluses in the market, even uncommon among professionals). The dialog will now only list the axes returned by the backend (note that even this list may still show more than what a specific device really has because drivers are sometimes over-listing, yet it is still much closer to reality).
  • When a device is connected, the names of the axes will also be the ones as listed by the backend, which will get us closer-to-reality names. Typically the X axis for a graphics tablet will be Abs. X because these devices are usually meant for absolute pointer positioning whereas it will be Rel. X on mice.
  • Curve editing for the tablet pressure response was one of the most interesting configuration option in this dialog, even more now that we don’t need to enable or disable specific devices. This is why when a device has a “Pressure” axis, it will be selected by default, hence allowing you to directly work on the curve, without unnecessary clicks.

Call for user input:

There are a few puzzling settings in this dialog and we would welcome input from anyone who had an actual need for them. How were you using any of these features? Which OS? What was the goal?

  • There used to be a “Keys” list for every device in the dialog. We actually removed this list back in 2.99.2. Based on tests, code research, and discussion with Carlos Garnacho, our local GTK and input device expert, we came to the conclusion that the “Keys” concept was tied to “keyboard” devices (a type of devices not shown in this dialog) and it was meaningless on “pointer” devices (mice, touchpads, graphics tablets…). Yet here was the option! Maybe it actually had a hidden usage to someone, someday? If this is your case, please explain us so that we can think of a way to restore the feature with an understandable interface.
  • The “Axes” list has the ability to set the “axis use” for a given axis (the little numbers next to each axis). Yet we never managed to do anything with it. This looks mostly either broken or meaningless. Has anyone a use for this axis settings?
  • Each device has 3 “modes”: Disabled, Screen, and Window. “Disabled” simply means that the device will share the main virtual device pointer while “Screen” will make it look independent. The “Window” mode, on the other hand, is a concept only meaningful for “floating” devices (a concept maybe not even valid on all platforms) and even then it looks broken, as far as our tests went. Is there anyone in the world who actually uses the “Window” mode and sees a difference with “Screen” in recent GIMP versions?

If anyone has the use for these features, we would definitely welcome feedback because we are as puzzled as many others whether users actually rely on these things. On one hand, we are tempted to remove these settings, because it doesn’t make sense to show a non-working configuration. On the other hand, we don’t want to remove actual features if someone somewhere has a use for them. So if you are one of those people, please contact us. E.g. open a report to tell us more.

Maybe there are other ways to improve this dialog for more people? Tell us what you expect from it!

Better device defaults

As explained in the 2.99.2 release notes, GIMP 3 will be coming with a much better input device detection as well as hotplug detection. So we decided to provide reasonable defaults for when a new device is detected. This would help people see if it works correctly. In particular for graphics tablets, people expect pressure to work from scratch.

For these reasons, here are the tools enabled by default the first time you plug a device:

  • Pen devices (tablet styluses’ main input): Paintbrush tool;
  • Eraser devices (tablet styluses’ back input): Eraser tool;
  • Touch screens (finger): Smudge tool;
  • All other devices: Paintbrush tool.

Moreover, the default dynamics when a new device is plugged is now “Pressure Size“, i.e. the brush size will increase when you press harder.

This should make the first-time experience with GIMP much more enjoyable for people using graphics tablets, as they can directly start to paint on the canvas without having first to understand all the inner settings of GIMP’s painting system (based on the combination of brush and dynamics).

Font thumbnail adapted for Korean and Japanese

Our font list will now display fonts targeted at Korean and Japanese writing systems with “한” and “あ” respectively. This will allow to more quickly detect fonts useful for your language of choice in a long list.

Font thumbnails in GIMP 2.99.4
Thumbnails in GIMP 2.99.4 of fonts targeting various writing systems

For Korean “한” (han) was chosen (apart from being the first syllable in “Hangeul”, the name of the Korean writing system) firstly because it is a syllable with two consonants, which gives good indications on stylistic choices, and secondly because the circle shape in ‘ㅎ’ (hieut) but also its small hat have many stylistic variants and are therefore also quite good hints of stylistic choices made by a font designer.

As for “あ”, it is the first kana in the hiragana syllabary, which is one of the main components of the Japanese writing system.

The code logics is based on approximation of probable target language depending on supported characters found in the fonts. It may not always show the ideal sample characters, especially for fonts that try to support many different scripts, but it remains very useful overall. This is based on existing code, which already had detection for other writing systems, yet not for Korean and Japanese until now.

New experimental Paint Select tool

Our long-term contributor Thomas Manni is working on a new paint-based selection tool. It will offer a new way to progressively make a selection by roughly painting with a brush over the region of interest.

This new tool is based on a targeted segmentation algorithm (graphcut): its goal is to quickly isolate a specific region in the image. The tool provides a binary result (fully selected for the area of interest, fully non-selected for all other pixels).

It’s at a very early stage of development, so if you test it right now, you will probably be disappointed by its lack of precision and poor performance. Fear not, there’s just way more work to be done, you’ll like it once it’s complete.

GIMP 2.99.4: Paint Select tool
Canvas interaction of the new Paint Select tool: quick selection of Wilber in one stroke

But what about the Foreground Select tool?

Some people might be wondering about the existing Foreground Select tool which might look very similar to the new experimental Paint Select tool. This quote from Thomas might explain the difference:

Foreground Select uses a matting algorithm: its goal is to provide an alpha (grey) value for all “unknown” pixels. Generally it should be used only on regions where pixels’ colors are a mix of foreground and background colors (like strands of hair or fur).

Moreover, it is true that part of this new development comes from recognition of some limitations of the current Foreground Select tool which unfortunately does not work so well for actually segmenting global shapes, often takes a lot of time on big images, and has memory and stability issues.

We are not aiming to replace the Foreground Select tool though. The idea is to offer a new way to do selections. We might be able to improve the Foreground Select tool to work better in more situations. Discussions have also been happening on reworking the interaction interface as a better way to retarget the tool’s usage.

More experiments are still in progress or planned by Thomas, in particular, to give new ways to refine edges of existing selection (since the Paint Select tool creates binary selections which are less appropriate for edge selection).

This is all to be considered as open development and experiments in free software. We shall see how things evolve!

API updates

Dialog generation for plug-ins

We have been working on dialog generation for plug-ins. A plug-in historically comes with a “procedure” (which can be called from the core but also from other plug-ins through the PDB protocol), with parameters and 3 run methods: interactively, non-interactively and with last values. The non-interactive and with last values run methods imply known parameters (given by the caller or previous calls), but an “interactive” run implies to ask for these parameters in a GUI, usually with added logics.

Until now, this always needed specific GUI code. We now added new functions for easy dialog generation from the procedure parameters. In simplest case, you could therefore generate a full blown plug-in dialog in less than 5 lines.

Several checks were added, such as mnemonic verification, ensuring that every displayed property in a plug-in dialog has a unique mnemonic. This is a very useful feature for usability and accessibility, for people who mostly use keyboard navigation.

Similar ability used to be available on some specific bindings (Python and Scheme) up to the GIMP 2.10 series. Unlike this past ability, the new functions will be available for all plug-ins (i.e. C/C++ plug-ins, but also for GObject-Introspected bindings, for instance in Python 3, JavaScript, Vala, or Lua). Moreover, the customizability is much more powerful and will provide much better dialogs and advanced logics.

New generic metadata support API

With the plug-in dialog generation, we also special-cased some features for export plug-ins. In particular, we tried to rework some of the metadata logics and analyzed common points across various file formats.

This goes together with a more thorough work currently done by Jacob Boerema on metadata handling. Some of this work will end up in the GIMP 2.10.x series, but the fundamental part might only be available in GIMP 3.

Updated file plug-ins

Only 4 plug-ins so far have benefited from the new generic dialog generation API: the PNG, JPEG, TIFF, and FLI plug-ins. In the most extreme case, we shaved 600 lines of code off the JPEG plug-in code!

Note: we just discovered (after release) crashes on these 4 plug-ins 😱, which escaped us because they only happen on Windows! Pretty bad, but then it’s the joy of running unstable versions. We will fix these as soon as possible.

GIMP 2.99.4: dialog generation on PNG plug-in
PNG export dialog fully generated in a few lines of code: you don’t see much difference? That’s the point!

Multi-threading preferences now available from plug-ins

The Preferences dialog proposes a “Number of threads to use” setting, allowing people to customize the thread usage (defaulting to system threads detection). This was only used by core processing until now. We now make this setting available to plug-ins too through the gimp_get_num_processors() API function, hence allowing plug-ins to follow user preferences.

The HEIF/AVIF plug-in now uses this function (it was already multi-threaded, yet was using system threads discovery with no way to override the settings until now). The JPEG2000 loading code, which was single-threaded until now, has been ported to use this new function, hence decoding images much faster.

Improved plug-in debugging

Lloyd Konneker refactored and improved the infrastructure to help debugging plug-ins. It is now capable of telling the difference between WARNING from CRITICAL bugs for better targeted debugging.

Dev docs on porting plug-ins to 3.0

We started documentation on porting plug-ins to 3.0 a month ago. We welcome anyone who follows the API changes to look at already ported official plug-ins in our source repository and help with the documentation side too. This is still moving API, yet most of the core logics will stay the same, so the groundwork can be started already!

GEGL and babl

Øyvind Kolås released babl 0.1.84 and GEGL 0.4.28 in time for GIMP 2.99.4. Both releases mostly contain small fixes.

Apart from that, GEGL got two new operations:

  • gegl:paint-select” is the backbone of the new Paint Select tool by Thomas Manni
  • gegl:icc-load” treats .icc files as images, permitting loading a space into the graph from a file.

Øyvind Kolås spent lately much time on polishing his ctx project (a new 2D vector graphics platform/protocol/library/terminal we talked about a year ago.

Download and bug reporting

We need to remind that this is a development version and therefore bugs and even crashes are bound to happen. We do not advise using it in production. Nevertheless we are encouraging early tests and welcome reports as well as patches on issues. We fixed 21 reported issues (and many more unreported ones) since GIMP 2.99.2 release and we expect many are still unfixed. We probably even created some new ones as the work on upcoming v3.0 continues!

Between the GIMP 2.99.2 and 2.99.4, 283 changes were committed to this particular development branch of GIMP in a bit less than 2 months. This was quite a busy end of the year!

A Windows installer and a Flatpak build are already available:

Note: we still haven’t got a build for GIMP 2.99.4 for macOS, yet you may have noticed our other news from the very same day about finally releasing GIMP 2.10.22 for macOS (double Christmas 🎁!). So there’s a progress, and an unstable macOS package might happen soon too!

What’s next

A lot more work is still in-progress, so as always, we welcome any contributions to code, bug investigation, themes, icons, documentation, translation, website, builds…

GIMP is a community-developed software. You could think of everyone who contributed to this release as of friendly elves from all over the world who helped making this holiday present happen.

Oh, and one last thing. We are well aware that GTK 4.0 is out now, we have no plans switching over to it before GIMP 3.0 is released.

As usual, you can donate to the project and personally fund several GIMP developers who make this all possible at all. This is also a way to give back and accelerate the development of GIMP if you appreciate the project.

Have a very nice holiday season 🥳🎄 and the end of 2020, everyone! This year was a complete mess for most people out there. But we do sincerely hope that at least some things were good for you, and maybe (just maybe) GIMP was one of those things. We sure wish 2021 to go easy on everyone!

GIMP 2.10.22 Released for macOS

Par :Wilber

GIMP 2.10.22 is now available as a DMG file from our downloads page.

Many thanks to Des McGuinness, who updated the build enviroment created by Alex Samorukov and succeeded in getting the current stable code built and notarized!

This brings all the changes and fixes since GIMP 2.10.14 to macOS users, who had been limited to this increasingly outdated version for far too long. Several of the changes are quite visible and noticable to users, so it is a good idea to check the release notes for GIMP 2.10.18, 2.10.20 and 2.10.22 to get up to date with the current versions.

What’s going on with Big Sur

It is not all well on the platform yet, though - with users upgrading to the latest macOS release, Big Sur, we started getting reports about performance and user interface issues.

GIMP being very slow and invisible selection outlines are reported most frequently. It is likely both are symptoms of the same underlying technical issue, that being the image window content being updated completely and far too frequently than necessary.

It feels really good to have active contributors to the macOS platform again, this gives us confidence that the issues can be investigated properly and, hopefully, mitigated or completely solved.

If you encounter any issue in addition to the two linked above, please let us know; the bugs page explains how to do this. If you are unsure whether a bug is already known, you can search for them there, or have a look at all the issues reported for the macOS platform. When in doubt, report it anyway, we will figure out duplicates and mark them accordingly.

Finally, please don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP.

This is 25

Par :Wilber

Exactly 25 years ago, Peter Mattis wrote a message to several newsgroups announcing a new image editor called GIMP.

Happy 25th birthday GIMP! - Wilber and co. comics strip
“Happy 25th birthday GIMP!” by Aryeom, Creative Commons by-sa 4.0

We’ve been really busy ever since!

  • Had to come up with GTK, a user interface toolkit of our own. Did not expect whole desktop environments, like GNOME and Xfce, to become the result of that. GTK is now a self-contained project used by thousands of developers.

  • Surprisingly, got a few developers from Hollywood to write the beginnings of what became a new image processing engine called GEGL, now used by a few more software projects too. We still have barely scratched the surface of what’s possible with GEGL.

  • Introduced Wilber, a little cute mascot who traveled the world and, admittedly, did some kinky things. They grow up so fast! (Check out the splash screen archive)

  • Helped kickstart Libre Graphics Meeting as an extended version of our annual meetup in 2006. Made a lot of new friends every year since then.

  • Did our best to provide a sensible workflow to users by using common user interface patterns. That gave us a few questionable monikers like ‘Photoshop for Linux’, ‘free Photoshop’, and ‘that ugly piece of software’. We still can wholeheartedly agree with the latter one only!

  • Tried to do too many things at once with too few active developers to realistically get things done in a sensible timeframe. Made a lot of people think the project died while we were slaving away really. So we introduced some planning. It’s been paying off so far.

  • Made more people angry with software’s quirks than we’d like to. Got help on that from more passionate contributors than we expected to. We can certainly use more help still.

  • Got ourselves an animation project called ZeMarmot to make a positive feedback loop involving artists and developers. Continue using our chat for conversation with artists, some of which put GIMP through a lot. That really helps.

  • Every day, we are one step closer to completing the boring yet extremely important work on refactoring GIMP to make way for great new things. Things that we’ve been meaning to do for a long time. Things that users have been expecting for an even longer time.

The world is definitely a different place 25 years later. Louder, noisier, more demanding. Definitely less safe. But also full with warmth and humanity. We’ve seen waves of that washing up and down the rocky shores of GIMP.

We don’t really have any kind of big news for you to commemorate the anniversary. Sorry about that. We keep slaving away — in a more intelligent way these days, hopefully. But there might be cake.

Development release GIMP 2.99.2 is out

Par :Wilber

The new unstable version of GIMP, 2.99.2, marks the first step towards GIMP 3 based on the GTK3 user interface toolkit.

Release highlights:

  • GTK3-based user interface, with native support for Wayland and HiDPI displays.
  • Major refactoring and cleanup
  • Multiple layers selection
  • More (color) space invasion
  • Render caching available for better performance
  • New plug-in API
  • Plugins now possible with Python 3, JavaScript, Lua, and Vala
GIMP 2.99.2 splash screen by Aryeom, CC by-sa
GIMP 2.99.2 splash screen by Aryeom, Creative Commons by-sa 4.0
GIMP 2.99.2 with Coffee Run poster by Hjalti Hjálmarsson
GIMP 2.99.2 with Coffee Run poster by Hjalti Hjálmarsson, CC-BY 4.0

GTK3-based UI

The first difference will be visual as you will notice that GIMP got a bit more of a modern look and it can also use some new widgets (instead of redeveloping them on GTK2) as well as client-side window decorations on various dialogs. But the aesthetic differences are far from being the main appeal of GTK3.

GIMP 2.10.22 and 2.99.2 interfaces side by side
Left: GIMP 2.10.22 - Right: GIMP 2.99.2

High pixel density displays

One of the main issues of GTK2 was the absent support for high pixel density displays (e.g. small screens with high resolution or big screens with extremely high resolution) which has become more widespread, especially among graphics professionals. GIMP 2.10 came with partial workaround which was acceptable only in some limited cases but was not really appropriate for intense use of the software.

GTK3 brings proper support to GIMP so it will follow your system-set scale settings.

Status: done, some custom widgets might still need an update.

Improved input devices support

By “input device”, we are mostly talking about drawing tablets or pen displays. In GIMP 2, their support had many shortcomings: you had to plug the tablet before starting GIMP, enable each new device explicitly in the settings and, worse, unplugging the tablet could lead to instability of the software (though this issue got mostly worked around on GTK2 by GIMP developers in the v2.8 release series).

GIMP 3 (hence this first development release) is bringing hotplug support, which means: start GIMP, plug your tablet, done. You are ready to draw, with pressure, tilt, and everything.

We are also trying to improve general support by making the advanced configuration of input devices easier to set.

A while ago, we also experimented with support for touch gestures like zooming, panning, rotating etc. We did not finish this work because we realized this was not a priority compared to some other features.

Touch gestures are very nice and awesome but also sometimes become a burden. Actually, many professional artists even disable touch sensitivity to prevent unwanted input while working with a stylus (high-end tablets often come with a physical switch for this nowadays, and this can also be disabled in tablet settings). With this in mind, we have decided to not make it a priority compared to some other work-in-progress. So we are not sure whether specific gesture support will make it to GIMP v3.0. We do welcome patches from anyone willing to make it one’s priority though.

Status: some work needs to be done to simplify configuration dialog as the support for legacy features is either not needed anymore or can be done better. We might also want to add support for Wayland-specific features related to input devices.

Theming

With GTK3, we also inherit its CSS-based theme format. Unfortunately this means that all custom-made themes from past versions will be incompatible with GIMP 3.0 and future releases. On the bright side, this new theme format uses a very well known theming standard. This should make it much easier to tweak GIMP’s interface to your needs and preferences.

Moreover, the symbolic icon themes are much better supported. They will follow the theme-set foreground and background colors. If you ever had to switch from a dark theme to a light one in GIMP 2.10, you probably remember you also had to switch the symbolic icon themes manually. This won’t be necessary anymore as symbolic icons will be recolored according to your theme.

Finally, the “dark theme” is a core concept of GTK3, which means, for instance, that even window decorations get recolored as you can see in the screenshot above.

Also, a same theme could propose both a dark and a light variant, so the Theme preferences page shows a “Use dark theme variant if available” checkbox. Similarly, icon themes may propose both symbolic and color icons. Which is why the “Icon Theme” preferences page has a “Use symbolic icons if available” switch so that you could choose your preferred style.

Theme switching
Switching to Dark or light themes with a single checkbox with icons recoloring to theme colors

Status: waiting for theme contributors.

Code-side, changes related to theming are basically done. Now we need a new default theme. For now, GIMP 2.99.2 only lists the “System” theme, which lets GIMP follow your system-wide GTK theme. This is a regression from 2.10 that we intend to fix in time for GIMP 3.0 by reintroducing a default theme with a neutral dark/light variant as well as a neutral middle-gray custom theme.

The main issue with system themes is that they cover very basic desktop use cases. Meanwhile, advanced graphics work requires a neutral gray theme to avoid polluting your color perception. This is the main reason why GIMP needs to default to a neutral color theme with symbolic icons.

Colored themes and icons are still an option, and, in fact, we are pretty sure that the community will soon come up with good-looking custom themes. This is a great way to contribute to GIMP as a non-developer!

Wayland support

The port to GTK3 should normally give us Wayland support on Linux for free. And it mostly does. Unfortunately, a few bugs have already been reported for GIMP running on Wayland. Some of them are clearly blockers for releasing GIMP 3 (such as various weird GUI bugs or huge memory leaks). Others are less serious but still are a bit embarrassing, like the one where the splash screen is broken on HiDPI displays because Wayland doesn’t report scaling properly.

Until these issues are fixed, we don’t think we can safely claim that we provide appropriate Wayland support. We will be grateful for all patches to address that, whether they arrive to GIMP, GTK, or another relevant part of the technology stack. If you are interesting in helping out, here is the list of Wayland-related bugs.

Appropriate Wayland support also means we need to reimplement a few features through so called portals. We have already done this for the screenshot plug-in (using Freedesktop, GNOME, and KDE portals), and there is some ongoing work to fix on-display color picking (already works in KDE, doesn’t yet work with GNOME and Freedesktop portals).

As for the file portal, this is probably something that won’t happen for GIMP 3.0, because we still require some features of the GTK file dialog, but it might happen later with a planned redesign for improved export process.

Status: a few blocking bugs in particular require attention. We welcome contributions.

Multi-layer selection

Managing a complex project with tens and hundreds of layers is now much easier thanks to newly added multi-layer selection. Aryeom, the animation film director working with the core team, has been asking for this since 2015, so the ZeMarmot project finally made this happen. This is another example of a successful close artist-developer collaboration: every feature was carefully designed following discussions and was tested in production.

Selecting multiple layers in Layers dockable
Selecting 4 layers to organize them or transform them at once

The Layers dockable is now fully multi-selection aware, using the usual interaction for multi-items selection (Shift+click for selecting a range of layers and Ctrl+click for selecting or deselecting non-contiguous layers). Organizational operations now work on all selected layers, i.e. that you can move, reorder, delete, duplicate, merge (and more…) all selected layers at once.

Several tools now also work on multiple selected layers. For instance all transform tools (move, rotation, scale, perspective, unified transform…) will transform all selected layers (in addition to the existing layer links with the “chain” icon). You can also crop several layers at once or copy-paste merged layers’ projection. Even the Color Picker tool can now pick merged color from several layers (some kind of partial “Sample merged” without having to hide unwanted layers).

These are just a few examples because this change affects a large part of the code base: the concept of an active layer is prominent in every action. You can read more about this in a detailed development report.

Status: this is a work in the progress.

Some features in GIMP still expect a single layer and need to be fixed before the final release. It’s possible that we will inadvertently break something while working on that, which is why it’s important that we do more development releases. Moreover, we might extend the multi-item selection to paths and channels soon.

Finally, painting and GEGL operations (filters) are still limited to single layers. Adding ability to paint or run pixel operations on several layers at once will probably require some additional interface specification and designing to prevent undesired consequences like extremely slow operation or the ability to cancel a long-running process.

Plug-in API

We had to break the plug-in APi to introduce many improvements, although we took a special care not to break things where it wasn’t necessary to do so.

Porting a single-file plug-in from GIMP 2.10 to GIMP 3 usually takes between 5 and 30 minutes. We are working on a porting documentation to be released along with GIMP 3.

If you are a plug-in developer, one of the first steps you can take is making sure you don’t use any deprecated functions. We compiled a list of functions removed and their replacement. You can already do this part of the port while still targeting GIMP 2.10.x versions.

Object API

Among the noteworthy changes, we moved away from object IDs to real objects. In particular in GIMP 3, GimpImage, GimpItem, GimpDrawable, GimpLayer, GimpVectors, GimpChannel and GimpPDB are objects (other classes of objects already exist or may be added later).

It brings safer programming by having typed objects whose class can be easily verified, hence better error messaging (with IDs, which are basically integers, having weird bugs because of improper IDs was not uncommon and it was not always easy to track the bug).

Also object-programming implies class inheritance. Typically a GimpLayer is also a GimpDrawable, itself a GimpItem. This means you can use any methods from parent classes and easily test for class ownership.

A non-C consequence is that it enables bindings to adapt the API to their own object model. Hence duplicating a GimpImage named for instance img in Python 3 can be done with the quite pythonic API img2 = img.duplicate().

Status: object port is basically done. We also want to use object signalling, which is a work-in-progress and should eventually allow to connect signal handlers directly on objects, in order to manage events from the core application (something impossible in GIMP 2, except by regular polling).

GIO usage for file handling

Another change in our API is that paths are now handled as GFile, which implies using the GLib/GIO API.

While it may seem a bit cumbersome (as it adds the additional step of creating and managing a GFile), this allows much more robust file handling. In particular, you won’t have to take care about path character encoding (a real issue when developers just assume everyone uses the same encoding as themselves) hence broken paths and non-portable code. Also we don’t have to deal with difference of operating systems regarding folder separation or file system notations. Working with a GFile makes internal representation transparent and file handling robust.

The second big advantage is that it means all such API gains any ability of installed GIO modules, in particular loading or saving from/to remote locations (even possibly through secure channels like HTTPS). This opens a wide range of possibilities.

GIO port of file handling had been done in the core code of GIMP, back for GIMP 2.10 initial release. We are now bringing the advantages to plug-in developers as well in GIMP 3.0.

Status: done, except with legacy bindings.

Language bindings through GObject Introspection also have full access to GLib/GIO API so they are already able to create GFile from paths or URI without any problem. Yet legacy manual bindings, such as script-fu (Scheme), don’t have GFile access. We are working on it (a patch even already exists, but needs to be reviewed).

Plug-in declaration

Some major changes have been done in the API to declare your plug-in. This is now done by subclassing the GimpPlugIn class and overriding some methods to list and document the created plug-in procedures. We made a much cleaner and explicit API than the previous one which should help plug-in developers.

The way your plug-in procedure’s arguments are now handled has also been standardized, in particular using config GObject properties. This is easier to deal with as a generic logics. Especially the same config object allows us to generate many features. For instance, it will help generate dialogs on demand for plug-ins who do not want to tinker with GTK or other toolkit themselves. It also simplify and standardize argument saving for subsequent calls or a same procedure.

Eventually this is also part of the base work for a future recording/macro feature (very unlikely to be in GIMP 3.0, but this is part of the ground work towards such feature) since we will be able to reliably save the arguments used when running plug-ins.

Status: though the main part of this API is done, more needs to happen before the release, and in particular we are still tinkering with the argument representation.

Bindings

We have introspected the full API through GObject Introspection. It means that GIMP API should be fully usable in a wide range of language bindings. We have only tested a few so far, so we can confirm that GIMP can now be scripted (additionally to C and C++ of course) with:

  • Python 3
  • JavaScript
  • Lua
  • Vala

One of the main differences with how GIMP used to be scriptable, with Python 2 notably, is that a custom layer API is not needed anymore.

Also GIMP 2 bindings used to be made around the PDB protocol which is only a subset of the full C libgimp API. The new bindings are built around libgimp itself. Therefore plug-ins in Python 3, Javascript, Lua or Vala (or any future introspected binding) will have the same possibilities as C plug-ins. This is a bright new world for GIMP plug-in developers!

Another consequence is that the API is basically the same for all these languages, apart for language idiosyncrasies. For instance if finding an intersection of a drawable with a selection in C is:

success = gimp_drawable_mask_intersect (drawable, &x, &y, &width, &height);

In Javascript, it will be:

let [ intersect, x, y, width, height ] = drawable.mask_intersect();

Or again in Python 3:

intersect, x, y, width, height = drawable.mask_intersect()

Another nice example is how C-type arrays, with an additional length arguments are handled. As expected, the length argument does not exist in a binding if the target language has an appropriate structure. For instance, while you can copy from multiple drawables from a script with:

/* Where @drawables is a C array of drawables, and @num_drawables
 * indicates the size of this array.
 */
gimp_edit_copy (num_drawables, drawables);

This can be done in Python 3 as (with num_drawables removed and C array replaced by a Python list):

Gimp.edit_copy([drawable1, drawable2, drawable3])

Not only do these binding now have access to the full GIMP API, but they also have access to many more introspected APIs used as dependencies to GIMP. For instance a plug-in can have access to the full GLib/GIO, GTK, Pango, Cairo APIs as well as the babl and GEGL API (for easier pixel manipulation and access to a massive range of existing operations). This was one of the main limitation of the former Python 2 binding, which could not manipulate pixels with GEGL.

Status: some people are regretting the facilities provided by the former Python 2 binding, such as automatic dialog creation. This is worked on right now (some embryo of dialog generation has even already landed in the development branch after 2.99.2 release) hence should be available for the next development release. The best part is that such API will be done on the main API, thus available to all bindings, not just Python or Scheme. This is one of the biggest advantages of introspected API compared to manually maintained bindings: rather than reimplementing nice features in every available binding, we will provide them in the main API so that every developer can enjoy them, whatever your preferred language.

Finally Script-fu is not one of the introspected bindings (though there is supposedly GObject Introspecting scheme bindings, but we haven’t tested any yet) and still mostly works as its own extension. Yet issues regarding some of the API changes have been raised (for instance the inability to create GFile as discussed earlier) and will have to be fixed before finale stable release.

Goat exercises

For each of the tested binding languages, we created a plug-in called “Goat exercise”, which is a demo for creating plug-ins. You can call it a “GIMP Hello World!“.

Each Goat Exercise does exactly the same thing in its own language: it creates a dialog with a label, buttons and a text view (GTK+ and GLib/GIO demo); one of the buttons triggers a filter modifying the active layer (GEGL demo and GIMP API demo); all this while showing its own source code inside the text view (making it easy to inspect the code from within GIMP) and with a button sending you to the repository file (if you prefer to check out the last version, comfortably in your code editor).

Goat Exercise in 5 languages
The 5 versions of the Goat Exercise plug-in in Python 3, Javascript, Lua, C and Vala

These plug-ins are quite important as we are planning to improve the plug-in ecosystem with GIMP 3. They are the first step of “self-documenting demo plug-ins” (while doing something a bit more exciting that a bare “Hello World”).

Status: current code of the Goat Exercise is not always up-to-date with the most recent API yet as it is a moving target. These will be updated before release.

Developer documentation

We have started to write down some documentation regarding plug-in development in GIMP 3, and will progressively start to publish some tutorials. Hopefully we will even be able to relaunch our developer website that has been slowly decaying for too many years. We hope that GIMP 3 will revitalize the GIMP plug-in ecosystem!

Status: still at an early stage, we welcome more contributors to make it possible.

Extensions

Extensions are a new file format that is simply a wrapper of data (brushes, splash screens, patterns, dynamics…) or plug-ins, associated with metadata (name, description, screenshots, version, requirements…). The goal will be to allow plug-in developers to publish their work on repositories for anyone to search third-party plug-ins, install/uninstall, enable/disable and update them, all within GIMP.

The menu Edit > Manage Extensions shows the base dialog. In the “System Extensions” tab in particular, you will notice an “Official Demo Plug-ins” which is our first extension. It in fact bundles all the Goat Exercises plug-ins we talked about earlier. If you switch if off, you will notice after a restart (right now you have to restart GIMP to see the effect) that the menu category Filters > Development > Goat Exercises disappeared.

Goat Exercise as extension
The Goat Exercises are themselves a system extension.

We’ll get back to talking about this feature after we’ve done more work on it. In particular, we will provide documentation on how to create extensions. It is definitely something plug-in and resource creators should look forward to, as it will help share their creations with others.

Status: still more work to do on the GIMP side, especially for communicating with repositories, and much more work to be done for the official repository and the website for extensions.

Space invasion

Space invasion” is the internal code name for the work originally started in 2018 whose goal was proper support of color space during core pixel processing. In the GIMP 2.10 series, despite core color management support, the profiles were sometimes lost during an operation processing and only reintroduced on finale results, which may result in wrong values in some cases.

Anyone interested to understand further the problematics can read Øyvind Kolås’s post and in particular the detailed associated release notes for GEGL 0.4.6 where he explains this really well.

Some of the improvements of this work have already been progressively backported to various GIMP 2.10.x releases, but GIMP 3.0 should be the culminating release where we hope to get this 100% right.

Status: the development branch is much more advanced on this topic than the 2.10 series, but some more work needs to be done. Various aspects of GIMP still mostly expect or display sRGB-only values.

Render caching

GIMP 3 now has a render cache that keeps the result of scaling, color management, display filters and shell mask (for tools like Fuzzy Select). This results in much snappier user experience in comparison to the GTK2 version of GIMP.

There is now also a Zoom Quality setting in Preferences -> Display. When set to Fast, GIMP will do a nearest neighbor interpolation from the next bigger mipmap level instead of linear or box filtering. This gives a slight and permanent boost to painting and all updates. We have a few ideas to improve this further like reblitting in high quality after a timeout.

Status: done.

Improved import policies

Color Profile Policy now exposes a new choice “Convert to Preferred Profile” and the import dialog default “Convert” action will convert the image to the preferred profile (if any was set, otherwise it falls back to the built-in profile). Converting to the built-in profile will still be available as a secondary action. If you want to always work with a given profile, you can set up your preferred workflow as soon as importing is done.

Moreover, a new Metadata Rotation Policy is exposed in the Preferences dialog, next to the Color Profile Policy (in page Preferences > Image Import & Export) with 3 options: “Ask what to do”, “Discard metadata without rotating”, and “Rotate the image then discard metadata”.

Import Policies
Updated Color Profile policy and new Metadata rotation policy

The metadata rotation policy used to be handled on the API side, with a dialog generated by libgimpui and saved in a global parasite. The whole logics and GUI has been moved as core logics, similar to the “Color Profile Policy”. This implies that plug-ins don’t even need to handle this as it will happen as specified by the user automatically on every new import.

Status: done.

Compact sliders

The compact spin scale was introduced in GIMP 2.10.18. In the 2.10 series, it was left as an optional feature which could be deactivated in the Preferences dialog. In GIMP 3, this is now the only possible behavior, with no options.

Compact slider
New compact slider is now default and only option

Please note that the bright blue color on the screenshot is not our preference, it’s what the system theme dictates. This widget actually uses GtkProgressBar colors by default. Therefore this can be adjusted in a custom theme by changing GtkProgressBar colors or only the colors in this specific widget (again, we welcome theme contributors!).

Status: done.

Refactoring

While porting old features and implementing new ones, a lot of side work has been done on the code structure. Many parts of the code base got refactored for better maintenance.

Even when some port is not done yet, ground work may have been prepared, such as the GimpAction interface to add a layer of abstraction to GtkAction (preparing us to actually move away from it at a later point which is one of the main remaining big ports for the move to GTK3).

Many other parts are constantly remodeled and improved as part of a never-ending background work.

Status: refactoring is always work in the progress, always was, always will be. It never really stops.

Packaging

Beta Flatpak available

This release is available in the “beta” branch of our official Flathub package, which is a hidden release branch (you won’t find this information on the public web page). This command will allow you to install GIMP 2.99.2:

flatpak install https://flathub.org/beta-repo/appstream/org.gimp.GIMP.flatpakref

From now on, you will be able to update to new development builds as soon as they are available through this channel (if your desktop has Flatpak integration, it might even check and propose you the updates automatically).

Note that Flatpak only allows one visible branch of a same application at once. So if you installed both the stable and development releases with Flatpak, your desktop in particular will only show either one or the other. To switch the visible branch, run the relevant command among the 2 proposed below:

flatpak make-current --user org.gimp.GIMP beta
flatpak make-current --user org.gimp.GIMP stable

Some people also created shortcuts running the explicit command flatpak run org.gimp.GIMP//beta (respectively stable) as workaround to get icons for both versions.

Windows

As usual, we provide a Windows installer for GIMP, you will find it on the Development Downloads page.

Some features may be missing. In particular, you won’t find the JavaScript binding on the Windows build because of the complexity of some dependencies. We will fix this in future releases leading up to GIMP 3.

macOS

Our macOS packager has still not fully returned, so unfortunately there is no official macOS package. As always, we remind that GIMP is free/libre software developed by community. Any of you can become an official package maintainer (and having several contributors would keep everyone safe).

If you are interested, we suggest to get in touch with us on our IRC channel for developers, #gimp.

What’s next

As you can see, a lot has been done (the NEWS file will also give a bit more details). The vast majority of the work has already been done. What remains now is the final stroll. This is however not such an idle walk in the park, as the final decisions and attention to details is always the most difficult part. We want to release a rock-solid GIMP v3 and need to pay a lot of attention to details. This is where we are now and why we are releasing this first development version.

This development report lists pretty accurately all the remaining steps, and you’ll notice how it actually follows quite well the changes in GIMP 2.99.2. The API part, though going unnoticed to many users, is probably the major part which we must absolutely get right before the release since our API is meant to stay stable withing the 3.x series. Once we have it done, we will want to keep existing interfaces of libgimp 3.0.0 functions unchanged unless absolutely necessary (i.e. unless we discover bugs that made a function useless). This is likely to take a lot of our time.

There are definitely other parts where help will be crucial, whether it’s plug-ins, core code, user interface, or application interface. So we do need more eyes on this to resolve as many little issues as we can.

To conclude, we remind that you can donate to the project and personally fund several GIMP developers who make this all possible at all. This is also a way to give back and accelerate the development of GIMP if you appreciate the project.

GIMP 2.10.22 Released

Par :Wilber

GIMP 2.10.22 is a bug fix release, which for once contains mostly maintenance changes in core code.

Release highlights:

  • Improved HEIC and newly added AVIF support
  • Numerous improvements in the PSP file format support
  • Improved multi-layer TIFF exporting
  • Better handling of the Exif “Orientation” metadata
  • New “Sample merged” option in the GEGL operation tool

On official plug-in side though, there are quite a few improvements, in particular, better support of image formats, as well as support for one new format, AVIF.

Wilber Learning never stops! - Wilber and co. comics strip
“Wilber Learning never Stops!” by Aryeom, Creative Commons by-sa 4.0

Improvements

File formats

The highlight of this release is clearly the contributions on file format plug-ins.

HEIF: improved HEIC and newly added AVIF support

AVIF is the HEIF variant using AV1 compression (instead of HEVC in the same HEIF container format, which is the default and also called HEIC). This format was highly awaited as being an open, royalty-free, video coding format developed by the Alliance for Open Media.

AVIF is already supported on the web in Firefox (experimentally, you must enable image.avif.enabled in about:config), Chrome and Opera, which makes it a serious contender as a web image format.

It is now supported by GIMP, both for import and export.

Not only this, but HEIF files (both AVIF and HEIC) can now be imported and exported in high bit depth (10- and 12-bit per channel).

AVIF and high bit depth HEIF support
GIMP 2.10.20 brings AVIF support, as well high-bit depth support. It will also import NCLX profiles and metadata.

And finally, NCLX color profiles and metadata will now be properly imported.

These changes all happened thanks to the awesome contributions of Daniel Novomesky.

PSP

The plug-in for reading PSP (Paint Shop Pro) files has received numerous bug fixes and improvements. Raster layers from PSP images over version 6 are now supported, as well as 16-bit integer, grayscale, and indexed images.

Furthermore, PSP blend modes are now better converted to GIMP layer modes for correct rendering.

The importer is also much more robust and is even able to fix errors of some files which may have been wrongly exported by third party software. It also handles some edge cases like zero-length layer names better.

All these improvements were made by Jacob Boerema, one of GIMP newest core contributors.

TIFF

Multi-layer TIFF export got improved by allowing to crop layers to image bounds in the exported image. Indeed, TIFF has no concept of global image bounds, only layer bounds. Hence cropping the layers is the only way to enforce the image bounds.

Obviously, this cropping may or may not be what you wanted and perhaps you were expecting layers of various sizes. This is why the feature is available as a new optional Crop layers to image bounds checkbox in the export dialog.

There have been other bug fixes and improvements in the TIFF plug-in as well.

BMP, DDS, JPEG, WebP, XPM

Other file format supports were improved. In particular:

  • BMP always include color masks when exporting BMP with color space info, as mandated by BITMAPV5HEADER specification.
  • DDS import is now a bit more permissive, allowing to load some files with invalid header flags regarding compression, while we are able to know the right compression from other flags. This allows to recover invalid DDS files exported by other software.
  • JPEG and WebP detection improved.
  • XPM does not export a “None” (transparent) color when unused. Exporting an unused color was not a bug per-se but was not very well handled by some third party software.

Better handling of Exif “Orientation” metadata

In previous release, when an image with an “Orientation” tag was imported, GIMP would propose to rotate the image or leave it as-is. If you denied rotation, the image would keep the tag and retain it upon exporting. So when you opened the edited image in other software, you’d get the rotation you didn’t ask for.

The new policy is to remove the “Orientation” tag whether or not you accept the rotation. Hence what you see in GIMP is what you will see anywhere else after exporting.

Sample merged” in the GEGL operation tool

When some filters have a color property, their dialog usually exposes a button allowing to pick a color directly on the canvas. Until now, it could only pick from the active layer (the one you were editing).

All filters implemented as GEGL operations now show a Sample merged checkbox in the Tool Options dockable (just below the Sample average option). This allows color picking visible colors when necessary.

Sample merged in GEGL operations
The new “Sample merged” options will allow to pick visible colors when relevant, for instance here with the “Colorize” operation.

Spyrogimp plug-in

Spyrogimp, the official plug-in to draw spyrograph patterns, now works on grayscale images too and won’t clutter the undo history as much as it used to.

Improved indexed conversion

This is actually a feature that arrived in GIMP 2.10.20, but we forgot to mention it in the previous release notes. So let’s describe the changes here.

The conversion to an indexed image uses a median-cut algorithm to derive a suitable palette for the image. Such algorithm computes each index to be used as the average of colors in a 3D box in a color space, making the result value drift away from the extremes.

This makes it nigh impossible to achieve pure white or black, even when the original image contained these colors, like in scans of printed documents or technical drawings.

We now counteract the drift by snapping the whitest color to white and the blackest color to black if the resulting colors of median-cut are sufficiently close to white or black and if the original image already had some pure white or black.

Comparison of palette creation
Left is an original image in RGB, converted to a 6-palette indexed image in GIMP 2.10.18 (center) and 2.10.20 or later (right).

Note that the 2-color optimum palette case is special-cased not to use this modified algorithm as we already provide a dedicated “black and white (1-bit) palette” option which would do the same thing.

Configuration and defaults

Sample merged default in the Color Picker tool

After a small poll (which got 174 answers) on multiple social media platforms, Sample merged option is now enabled by default in the Color Picker tool. The idea is that it should now be less confusing to beginners because they will be able to pick what they see rather than the color in the active layer.

Of course for advanced users, it doesn’t change a thing as they perfectly know how to toggle this option, both use cases being useful at different times. This change does not affect anything other than the defaults and does not modify how the feature works.

Foreground Select tool’s default engine

We changed the default matting engine of the Foreground Select tool to Matting Levin as this engine performs better in most situations.

Debugging

The dashboard dockable now has a new option to record progressive performance logs that contain complete information after each recorded sample. This allows recording complete logs even in cases where they can’t be properly terminated, such as when GIMP crashes or freezes in the middle of the log.

Progressive logs are disabled by default, since they potentially increase the sampling cost. They can be enabled through a toggle in the log file dialog, or through $GIMP_PERFORMANCE_LOG_PROGRESSIVE environment variable.

Moreover, verbose debug information (gimp-2.10 -v on command line, or debug output) now displays Flatpak related information when it’s relevant: the exact Flatpak build hash, the runtime version, the installed Flatpak extensions, permissions, etc. This helps debugging Flatpak builds.

OpenCL now considered experimental

Since GIMP 2.10.0, several GEGL operations have OpenCL code paths, hopefully allowing faster processing. Unfortunately OpenCL situation is not so idyllic because of the lack of contributions to improve our code as well as faulty drivers.

In various cases, enabling OpenCL in GIMP could lead to instability. We decided it was not acceptable anymore and moved the feature into the Playground tab of the Preferences dialog. Technically it means that the feature is hidden unless you run GIMP with --show-playground command line option, so that anyone enabling this is really aware of the instability of the feature. Hopefully we will be able at some point to move this back into mainline Preferences.

Playground not visible by default

The Playground page in the Preferences is not visible anymore, unless you run a development version of GIMP, or if you start a stable version with the --show-playground command line option.

Nevertheless if you activated any of the unstable features from Playground, then the page will always be shown (making it easy to find the settings again if you need to disable it).

GIMP ecosystem

Plug-ins and manuals in Flatpak GIMP

Our official Flatpak now has an extension point for plug-ins. This means that anyone can now package third-party plug-ins as “Flatpak extensions” and contribute them to the Flathub repository. Thanks to the contributor Hubert Figuière, 7 very popular GIMP plug-ins are already available to Flatpak users: BIMP, FocusBlur, Fourier, G’MIC, GimpLensfun, LiquidRescale, and Resynthesizer.

The one-liner CLI call to install them all at once is (if GIMP is already installed as Flatpak, and the Flathub repository is configured):

flatpak install org.gimp.GIMP.Plugin.Resynthesizer org.gimp.GIMP.Plugin.LiquidRescale org.gimp.GIMP.Plugin.Lensfun org.gimp.GIMP.Plugin.GMic org.gimp.GIMP.Plugin.Fourier org.gimp.GIMP.Plugin.FocusBlur org.gimp.GIMP.Plugin.BIMP

Note: Flathub does not yet provide a way to discover software extensions directly on its web catalog. The following CLI call can be used to search for GIMP plug-ins: flatpak search org.gimp.GIMP.Plugin

Moreover, the GIMP manual will now be installed by default when installing our Flatpak, but not in all languages. To install the manuals in all available languages, run:

flatpak install --reinstall flathub org.gimp.GIMP.Manual

Flathub statistics indicate that there are nearly 230K users of our Flatpak package (with about 100K users updating GIMP within the first 2 weeks after a build update), which is pretty decent for a single package format on GNU/Linux.

GEGL and babl

As usual, GIMP release is accompanied by babl (0.1.78, 0.1.80 and 0.1.82) and GEGL (0.4.24 and 0.4.26) releases, with various bug fixes.

It is to be noted that, even though GIMP minimum requirement is babl 0.1.78, we advise to build against the latest version if possible, i.e. babl 0.1.82. This last version handles more complex parametric TRCs for ICCv4, which means that without these changes, your color profile conversion may be wrong in case you use a profile with these parameters.

Continuous Integration

GIMP CI process now runs a distcheck step, hence producing a fully unit-tested source tarball without human interaction.

Continuous builds of the development version (future GIMP 3) for Windows were already provided since GIMP 2.10.18 but the downloadable archive was huge, containing many temporary files from the build process and a wrapper to necessarily run at first launch. We now implemented a new CI job with a slimmed-down and hopefully usable build (if not please report, or better: send us patches!) and already fully set up with no first launch process.

The idea came from the Siril project (astronomical image processing free software) after we helped them set up a cross-compilation CI, similar to ours, using crossroad. A pretty good example of exchange between free software where some code goes from one project to another where it is improved, then back to the original one. 🥳

This will be very useful when asking people to test the development version as a lot of bugs are fixed on it (often just because the GTK2 toolkit is simply not maintained anymore whereas the development version using GTK3 fixes the problem by itself). The following dynamic links will always return you the last successful development builds:

NOTE 1: test builds are for testing purpose only (as the name tells!). They have not been human-tested, it relies on regularly modified development code, and our automatic build process is still a bit young, which means there may even be bugs specific to the build. So please do not use it for production!

NOTE 2: there are still a few known issues such as missing GObject Introspection, i.e. that the Python 3/Javascript/Lua/Vala plug-ins won’t work with this build (yet).

NOTE 3: these builds are not provided with a fancy installer nor any desktop integration (i.e. no shortcuts in menus, etc.). Just unzip the archive, and double-click gimp.cmd or gimp-2.99.exe files.

These changes are all part of a more global work in progress to improve development code testing as well as eventually automatize the release procedure to be faster, easier, and more trustworthy.

Availability of macOS builds

Unfortunately, we don’t have good news for macOS users at this time. The contributor who set up CI builds for making macOS releases and worked on macOS-specific bugs in GTK is still unavailable. So far, no other contributors stepped up to fill in. If you are interested to help out, please contact us on the IRC channel for developers, #gimp, or the gimp-developer@ mailing list.

Contributors

Contributors to this release are: Daniel Novomesky, David Russo, Elad Shahar, Ell, Jacob Boerema, Jehan, Liam Quin, Michael Natterer, Peter Oliver, luz.paz, sabri ünal, Sebastian Rasmussen, Simon McVittie, space pudim, Øyvind Kolås.

Translators: Alan Mortensen, Alexandre Prokoudine, Anders Jonsson, Andika Triwidada, Asier Sarasua Garmendia, Baurzhan Muftakhidinov, Boyuan Yang, Christian Kirbach, Daniel Mustieles, Jordi Mas, Julien Hardelin, Marco Ciampa, Milo Ivir, Piotr Drąg, Rodrigo Lledó, Sabri Ünal, sicklylife, Stephan Woidowski, Tim Sabsch, Yuri Chornoivan.

We also thank lillolollo, nmat, and Michael Schumacher for triaging bug reports, and Julien Hardelin for updating the user manual.

What’s next

During the same time span, specific work on the development version (future GIMP 3.0) continued, including:

  • Multi-layer selection support added in the Layers dockable and taken into account by many tools and features.
  • Several API improvements:
    • PDB functions can be called more easily from one plug-in to another in language bindings;
    • image rotation is now handled by core GIMP when importing new images (similarly to how color profile importing happens) and a new “Rotation policy” setting is made available in Preferences;
    • GObject Introspection for GimpUI now discards the gimp_ui prefix when relevant (i.e. gimp_ui_init() will be GimpUi.init() rather than GimpUi.ui_init());
    • Vala GObject Introspection binding improved;
    • New concept of “argument sync” to GimpProcedure so that procedure arguments can be synced with an image parasite of the same name.
  • Finally, some bug fixing on Windows, e.g. fixing CSS theme loading.
  • Twain plug-in for Windows ported to v3 API. It was the last C plug-in which was still totally unported, which means all official plug-ins are now at least ported at a usable state (if not necessarily to the latest API as it is still a moving target).
  • A few improvements to handle smaller screen (which ironically became even more of a problem with HiDPI scaling being enabled on middle-end display resolutions).
  • Former Python 2 specific API (pygimp) has now been fully removed and all former Python plug-ins have been ported to Python 3 and new GIMP 3 API (this work started over a year ago and is now finished, with a lot of help from Elad Shahar). The new way to make Python plug-ins is streamlined, following the same logics as for other supported languages (C/C++, Python 3, Lua, Vala and Javascript so far).
  • Some Wayland bug hunting done (still more to go).
  • GimpSpinScale styling improved and the new style is now unique (old non-compact style is not available anymore, unlike in GIMP 2.10.x).
  • Usability of the Input Devices editor has been improved.

The user interface is now available in two more languages in the development branch (first new languages since Marathi support was added back in GIMP 2.10.6): Kabyle and Central Kurdish. Please note though that these two additional translations are not yet present in the GIMP 2.10 series. With these, GIMP will be available in 83 languages. It is a very good opportunity to remind that translators are doing a tremendous job.

Also with new file format support (AVIF), various major file format improvements, new programming languages for plug-ins, our little Wilber is really getting very studious lately, learning many new things!

Finally, please don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back and accelerate the development of GIMP.

GIMP 2.10.20 Released

Par :Wilber

GIMP 2.10.20 comes with new features as well as important bugfixes.

Release highlights:

  • Tool-group menus can now expand on hover
  • Non-destructive cropping now available by cropping the canvas rather than actual pixels
  • Better PSD support: exporting of 16-bit files now available, reading/writing channels in the right order
  • On-canvas controls for the Vignette filter
  • New filters: Bloom, Focus Blur, Lens Blur, Variable Blur
  • Blending options now built into filter dialogs
  • Over 30 bugfixes
We wish you all the best health! - Wilber and co. comics strip
We wish you all the best health! by Aryeom, Creative Commons by-sa 4.0

Toolbox updates

We listened to users’ feedback on introducing tool groups in the toolbox in the previous release. A lot of people told us they appreciated the change in general but were quite averse to having to click to open the list of tools in a group. The new release adds the option to show the tool-group menu as soon as the mouse hovers over the toolbox button, without having to click it. This option is enabled by default when the toolbox is arranged in a single column, but it can be enabled for arbitrary toolbox layouts, or disabled entirely, through the Toolbox page of the Preferences dialog.

Additionally, when not using the new behavior, toolbox tooltips now list all the tools in a group, to improve their discoverability.

List of tools in a tool group

Basic non-destructive cropping

GIMP now provides a kind of a non-destructive cropping behavior by default. Instead of deleting pixels that you cropped out and thus changing both the layer and the canvas, it will simply resize the canvas. If you export such an image, the resulted file will only have what you see within canvas boundaries.

Non-destructive cropping

The benefit of that is (at least) threefold:

  • You can revert to the original uncropped version by going to Image -> Fit Canvas to Layers. None of your edits between cropping and uncropping will disappear.
  • If you save your project as an XCF file, you can close the file and even quit GIMP and still be able to remove cropping and then crop differently at any time later.
  • When you are on the fence about your cropping decision, you can view pixels that you cropped out by going to View -> Show All.

If you want the old “destructive” behavior back, simply tick the ‘Delete cropped pixels’ checkbox in Crop tool’s settings.

New and improved filters

The Vignette filter now has on-canvas controls to visually manipulate the geometry of the vignette rather than enter numeric values in a dialog.

Whichever vignette shape you pick, you will always have control for the inner area that stays unchanged, the border of the vignette where pixels stop changing, and the medium point between the two. Dragging the mouse pointer anywhere outside of the outer control will result in rotating the vignette shape.

In addition, there are two new shapes, ‘Horizontal’ and ‘Vertical’.

Vignette filter

There are three new filters all related to imitating out-of-focus blur.

Variable Blur takes a layer or channel as an input mask to decide which pixels should be blurred (at what percentage of user-defined maximum blur intensity) and what pixels should stay unchanged, and then blurs pixels with Gaussian Blur.

Variable Blur filter
Featured image by Raphaël Bacco.

Lens Blur does the same but provides a far more realistic imitation of the out-of-focus blur, including the partial occlusion of sharp foreground objects by highlights blurred in the background. You also have control of how much highlights are affected.

Lens Blur filter

Focus Blur provides a simple user interface to out-of-focus blurring using the same on-canvas controls that the updated Vignette filter has. You can choose between Gaussian Blur and Lens Blur as blurring methods. One of the uses for the filter is creating miniature fakes out of regular photos — the effect originally achieved by using a tilt-shift lens that changes the plane of focus.

Focus Blur filter
Featured image by Matt McNulty.

New Bloom filter applies an effect that looks a lot like what you can get with the Soft Glow filter but, unlike, Soft Glow, it doesn’t decrease saturation. Technically, Bloom isolates the highlights region, feathers it, and then recombines it with the original image.

Bloom filter
Featured image by Brocken Inaglory.

Filter dialog improvements

The options dialog of GEGL filters now provides a new Blending Options section, which allows controlling the blending-mode and opacity with which the filter is applied. This replaces the Fade functionality, which was removed in version 2.10.10.

Filter previews now remain cached even when toggled off, allowing for quickly switching between the original and filtered views.

Better PSD support

While GIMP could already load 16-bits-per-channel PSD files, high-bit-depth images can now be exported using 16-bits per channel as well.

In addition, channels are now exported in the correct order, and with their original colors.

Other changes

  • Painting tools can now save and load opacity and blending mode to/from presets.
  • Canon CR3 files are now properly recognized by GIMP and sent to your raw developer software of choice.
  • The TWAIN plug-in used for acquiring images via scanners has been slightly refactored and now supports 16-bit RGB/grayscale images.
  • PNG and TIFF plug-ins now default to not saving color values when alpha channel is present and 0 itself. This is to address security concerns about using simple cutting to remove sensitive information.
  • The PDF plug-in now imports multi-page documents in bottom-first order, similar to animated formats, and also similar to defaults for PDF exporting. This brings consistency but breaks existing behavior in 3rd party scripts.

GEGL and babl

As usual, new GIMP release is accompanied by new releases of babl and GEGL libraries.

The new version of babl comes mostly with bug fixes and performance improvements like the use of AVX2 instructions to convert gamma u8 data to linear float (making those conversions between 1.25x and 2.2x faster). It also features VAPI file generation for Vala integration as the unstable branch of GIMP now supports creating new plug-ins with Vala.

The most important changes in GEGL are:

  • New meta-data API that permits handling non-Exif metadata in different file loaders and savers in a generic manner
  • Faster and softer cubic interpolation.
  • GEGL now gracefully fails when running out of swap space.
  • The hue-chroma operation has been fixed to avoid modifying hue/chroma of neutrals
  • The dropshadow operation now has an option to grow the shadow. This means, with zero shift and larger shadow, you can stroke a text or a bitmap layer.

On top of that, GEGL got several new operations, some of which we already described above. Others are:

  • border-align: places a buffer within the borders of another one.
  • pack: joins two buffers into one, with optional gap.
  • piecewise-blend: uses a grayscale map as index into array of buffers used as LUT (required by new blur filters)
  • reset-origin: moves upper left of extent to 0,0
  • band-tune: parametric band equalizer for tuning frequency bands of image.

Contributors

Contributors to this release are: Ell, Jehan, Jernej Simončič, lillolollo, luz.paz, Marco Ciampa, Michael Natterer, Michael Schumacher, Nikc, Øyvind Kolås, pesder, Sabri Ünal, Salamandar, Sergio Jiménez Herena, Simon Budig, T Collins, woob.

Translators: Alexandre Prokoudine, Anders Jonsson, Bruce Cowan, Cristian Secară, Daniel Korostil, Daniel Șerbănescu, Dimitris Spingos, Jiri Grönroos, Jordi Mas, Nathan Follens, Piotr Drąg, Rodrigo Lledó Milanca, Sabri Ünal, Seong-ho Cho, Tim Sabsch, Yuri Chornoivan, Georgy Timofeevsky.

We also thank lillolollo, nmat, and Michael Schumacher for triaging bug reports, and Julien Hardelin for updating the user manual.

What’s next

We are wrapping up the development in the master branch for v2.99.2, the first unstable release in the 2.99 series leading up to v3.0 some time in the future.

We know that this release is anticipated by various demographics of our users, from people doing digital painting (you can hotplug a graphic tablet now) to photographers using a 4K display (the icon size is right for them now) to people generally wishing to drop GTK2 and Python 2 from their operating systems.

Having said that, there is a warning to make as well.

While we are looking forward to feedback and bug reports, we do not recommend upcoming v2.99.2 for use in production. There are both improvements and regressions from the 2.10.x series. Full details will be published when the release is out (soon).

For the time being, don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back, and to accelerate the development of GIMP.

GIMP 2.10.18 Released

Par :Wilber

We skipped announcing 2.10.16 due to a critical bug. Together, the two updates deliver several major usability improvements, a new tool for transformations in 3D space, new release checker, and the usual amount of bug fixes.

Here are release highlights:

  • Tools are now grouped in the toolbox by default
  • Sliders now use a compact style with improved user interaction
  • Vastly improved user experience for the transformation preview
  • Dockable areas now highlighted when a dockable dialog is being dragged
  • New 3D Transform tool to rotate and pan items
  • Much smoother brush outline preview motion on the canvas
  • Symmetry painting enhancements
  • Faster loading of ABR brushes
  • PSD support improvements
  • Consolidated user interface for merging down and anchoring layers
  • Update check to notify users of new releases available
  • 28 bug fixes, 15 translation updates
GIMP update brings tool groups, by Aryeom
GIMP update brings tool groups, by Aryeom, Creative Commons by-sa 4.0

Tools now grouped by default

Tools can now be grouped in the toolbox, and this option is enabled by default.

New compact style for sliders

You can customize groups by creating new ones and dragging tools between them. The changes will take effect immediately. Or you can disable the grouping entirely. You’ll find configuration options on the Interface/Toolbox page of the Preferences dialog.

Please note that the default order of tools in the toolbox is now different. You can customize it as well.

Compact sliders

Sliders typically used in GEGL-based filters and tools’ options now have a compact style by default: they take a lot less space vertically and have a vastly improved interaction model.

New compact style for sliders

You can use multiple modifiers with either left-click or mouse wheel scrolling:

  • Left-click + drag changes a value with a default increment
  • Shift + left-click + drag (or right-click + drag) changes a value with a smaller step
  • Ctrl + left-click + drag change a value with a larger step

Here is the full reference:

New interaction model for the slider widget

Docking UX improvements

The ‘You can drop dockable dialogs here’ message is now gone from the toolbox, and other empty dockable areas. This used to annoy quite a few users who used a single/double-column layout for the left panel.

But since we still need to hint where you can dock dialogs, whenever you drag a dialog, all dockable areas will be highlighted.

High-contrast symbolic theme now available

Since releasing 2.10 in 2018, we received a lot of feedback that the symbolic icon theme used by default doesn’t have enough contrast. We recently did a quick poll on Twitter showing people a variation of the theme with more foreground/background color contrast, and that certainly clicked with users.

Some of the feedback suggested, however, that a part of the demographic likes the current contrast. So instead of pushing changes for everyone, we introduced a new high-contrast symbolic theme. You can choose it in the Preferences dialog, just like any other icon theme.

New high-contrast icon themes

The contrast is a compile-time variable that you can change prior to building GIMP from source code. We see this as more of a dirty temporary solution.

With GTK3, it’s going to be a lot easier to make things configurable. In particular, upcoming Inkscape 1.0 is featuring a new icon theme called ‘multicolor’ that makes a great use of CSS in GTK3 and, while staying symbolic, uses some color where it matters. We will be definitely looking closer at that approach.

To complement the new high-contrast variation of the symbolic theme, GIMP now also draws a double black/white border around FG/BG indicator in the toolbox to make that border more legible, especially in dark themes.

Transformation preview improvements

A new option called Composited Preview is now available for most transformation tools. It enables the rendering of the transform preview with the right position of the modified layer in the layers stack, as well as with the correct blending mode.

It comes with two sub-options.

Preview linked items enables previewing changes to all linked items like layers rather than just the currently selected item.

Synchronous preview render the preview as you move the mouse/stylus pointer to change the transform instead of waiting for the movement to stop. This provides instant feedback when GIMP can update the display fast enough, which is usually not the case with large layers.

GIMP now also automatically previews the clipping of transformed layers. This allows reducing the amount of trial and error when e.g. rotating.

New 3D Transform tool

A new transform tool helps changing the perspective of a layer or panning it in 3D space. You can set a vanishing point, then rotate the layer in X, Y, and Z axes.

Multiple modifiers are available to constrain rotation and panning to just one axis. The Unified interaction checkbox allows shifting the vanishing, as well as panning and rotating without switching between tabs on the on-canvas settings dialog. Finally, the Local frame option allows controlling the transformation in the layer’s local frame of reference, instead of the global one.

Brush outline and quality improvements

The brush outline motion now feels smoother thanks to raising the refresh rate from 20 FPS to a maximum of 120 FPS, as well as disabling the snapping to dabs (new option, off by default). The former became a sensible idea thanks to painting parallelization introduced by Ell several releases ago. The snapping to brush dabs can be re-enabled on the Image Windows page of the Preferences dialog.

Additionally, the paint rate of the Airbrush tool was increased from 15 to a maximum of 60 stamps per second, making paint buildup smoother. Note that, as a result, the relation between the tool’s Rate parameter and the actual paint buildup rate is now different, which may affect existing tool presets.

It’s also worth mentioning that the Warp Transform tool now respects mouse pointer settings defined on the Image Windows page of the Preferences dialog.

Furthermore, in order to improve the quality of downscaled brushes, paint tools now use mipmaps for downscaling bitmap brushes. Instead of resampling downscaled brushes directly from their original size, GIMP now creates a box-filtered mipmap hierarchy for the original brush on demand, and uses the closest mipmap level as the resampling source for downscaled brushes. This significantly reduces aliasing in downscaled brushes, producing smoother results.

Symmetry painting enhancements

The Mandala symmetry painting mode now has a Kaleidoscope option, which combines both rotation and reflection.

When the Kaleidoscope option is enabled, subsequent strokes are mirrored across the symmetry slice edges.

Faster loading of ABR brushes

GIMP now spends a lot less time loading Photoshop’s brushes (ABR). So if you use a lot of those, the startup time will become pleasantly smaller, by order of a magnitude.

The technical explanation is that GIMP used to read the stream of ABR data byte by byte, and now it uses scanline reading instead.

PSD support improvements

PSD files now load faster mostly by eliminating excessive copies between the original file and the project representation inside GIMP. For large PSD files, the loading is now ~1.5 to ~2 times faster.

Moreover, GIMP is now capable of loading CMYK(A) PSD files (only 8-bit per channel for now). It does so by converting pixels to RGB(A) float using sRGB as the profile which, we know, is not good enough for serious work.

However, the plug-in is already using babl formats to specify and communicate CMYK pixel format encodings with GIMP. This is a good first step towards better CMYK support. It can be improved both on its own as well as integrate with the ongoing work enabling general color-space support for babl formats in the development branch.

Layers dock improvements

The Layers dialog finally consolidates the UI for merging layers and attaching floating selections.

The bottom toolbar will now display a button for anchoring a floating selection only when there is one. Otherwise, it will display a button for merging layers.

Consolidated UI for merging layers and anchoring floating selections

You can also use several modifiers:

  • Shift will merge a layer group
  • Ctrl will merge all visible layers
  • Ctrl + Shift will merge all visible layers with last used values

Update check to notify users of new releases available

GIMP will now check every time on the start up if the version of GIMP you have is the latest one available. It will do so by pinging GIMP’s server for the version of the latest release, then comparing it to the one installed on your computer.

GIMP will also compare revisions of the installers so that users would be aware of updated installers available. This is typically useful when we update installers to provide fixes in 3rd party components that we use.

Finally, this feature is used when constructing a crash report. If you experience a crash while using an outdated version of the program, GIMP will now tell you so.

You can disable this feature on the System Resources page of the Preferences dialog, and manually use the Check for updates button in the About dialog.

It is also possible to build GIMP without this feature by passing the --disable-check-update argument to the configure script.

Continuous Integration

Work on our continuous integration goes forward. We now implemented automatic compilation of the main development branch both with the legacy autotools build system and the new meson one. We also produce an alternative build with the Clang compiler (additionally to the GNU compiler gcc).

Moreover, for cross-platform development, we now produce Windows builds, both for 32-bit and 64-bit, cross-compiled with the crossroad/Mingw-w64 tools.

All these automatic builds allow us to catch early on specific bugs which may affect only certain configurations or platforms.

We hope it could also attract new developers wishing to dabble in contributing. Looking at compilation warnings and trying to fix them may be a very good first step into GIMP code. It would be much less overwhelming than actually trying to dive into our huge code from scratch.

If you are interested, look into our CI pipelines and look at the last ones (preferably the master branch), then into one of the various compilation jobs. We will be waiting for your patches!

GEGL and babl changes

There have been several improvements in GEGL since the release that accompanied GIMP 2.10.14:

  • Fixed potential data-corruption/crash in the tile-swap back-end on Windows (the fix has already been made available in an updated installer for 2.10.14), and improved tile-queuing speed.
  • The GEGL core now avoids running more thread jobs than there are pixels to process.
  • The teardown of buffer caches is now faster when bounding box shrinks.
  • In-place processing now only happens if region of interest fits in input abyss.
  • Edge handling was improved for gegl:distance-transform operation

The babl library got build fixes, improved host CPU detection, macOS-specific fixes, and Clang warning squelches.

Contributors

Code contributors to this release are: Alex Samorukov, Anders Jonsson, band-a-prend, Cyril Richard, Elad Shahar, Ell, Elle Stone, Félix Piédallu, Jehan Pagès, Jernej Simončič, lillolollo, Massimo Valentini, Michael Natterer, Nikc, Øyvind Kolås, Pascal Terjan, woob.

Translators: Alan Mortensen, Alexandre Prokoudine, Anders Jonsson, Asier Sarasua Garmendia, Balázs Meskó, Balázs Úr, Bruce Cowan, Daniel Korostil, Jordi Mas, Julien Hardelin, Marco Ciampa, Piotr Drąg, Rodrigo Lledó Milanca, Ryuta Fujii, Sabri Ünal, sicklylife, Sveinn í Felli, Tim Sabsch, Zander Brown.

As usual, we thank lillolollo, nmat, and Michael Schumacher for triaging bug reports, and Julien Hardelin for keeping the user manual up to date.

What’s next

Our main objective is still completing the GTK3 port and releasing GIMP 3.0. This will take a while.

One of the ideas we are also exploring is improving the default single-window layout and introducing named workspaces streamlined for common use cases such as general editing, web design, digital photography, painting etc.

If you customized your default GIMP layout, we encourage you to post a screenshot and tell us about your use cases for GIMP that affected this customization. You can do that either on Twitter or in the mailing list for users.

Once we have a representative amount of samples for each common use case, we will analyze the data and see if we can create default workspaces that you can further tweak to your liking.

For the time being, don’t forget you can donate to the project and personally fund several GIMP developers, as a way to give back, and to accelerate the development of GIMP.

GIMP and GEGL in 2019

Par :Wilber

Here is what we did in 2019 and what we are planning to do in 2020.

Happy New Year 2020 from GIMP and ZeMarmot, by Aryeom
“Happy New Year 2020”, by Aryeom, Creative Commons by-sa 4.0

New releases and features

2019 was the second year in a row where we shipped updates with new features in the stable branch. Our assumption was that this could change the public’s perception of the ongoing development efforts and shift the balance towards having more contributors. Here is why.

Between 2012 and 2018 (v2.8 and v2.10 releases respectively), we worked hard and added a ton of improvements and new features, we demoed them on social networks, mentioned them in annual reports etc., and yet we kept hearing how GIMP was dead because those changes were not in any stable releases. The same thing was happening before in the four years between v2.6 and v2.8.

Moreover, this was preventing people from contributing as they would have to wait a long time to see their contribution actually used. That wasn’t sparking an interest really.

Hence, after the v2.10 release, we kept adding new features at the same pace and started producing regular updates with those features, and all of a sudden we started hearing how we “picked up the pace”!

So this could be a lesson for other projects: arguing against the irrational is futile. Just don’t keep people waiting. If you did something good, share it!

Either way, there have been three updates in 2019. In terms of focus, here is what we targeted. The list below is far from being complete, these are just the most obvious changes.

Usability improvements

  • GIMP is finally able to optionally display and edit pixels outside the canvas boundaries.
  • There’s a new preference to allow the editing of hidden layers.
  • On-canvas handles of transformation tools can now be readjusted after zooming in or out.
  • The Free Select tool now creates a preliminary selection so that you could both copy and paste the selection and tweak positions of nodes when you do a polygonal selection.
  • You can now switch to a particular layer by pointing at its pixels and pressing Alt + middle click.
  • The Curves tool/filter now allows for more predictable editing and comes with two types of nodes instead of one to make more useful, more sophisticated curves.
Updated Curve tool

Better tools

  • Parametric brushes now have 32-bit per channel precision.
  • The Bucket Fill tool got a new mode for smart colorization of line art, this is handy for comic artists.
  • The new Sample Merged option in the Heal tool allows non-destructive retouching of photos on a separate layer.
  • The Foreground Select tool got a new Grayscale preview mode.
  • The New Offset tool makes it possible to shift pixels and optionally wrap them around the edges so that you could create repeatable patterns.

Better performance

  • Faster painting: GIMP now doesn’t replace the paint buffer on every dab if the paint color/pixmap hasn’t changed.
  • Faster saving/exporting and layer groups rendering.
  • Grayscale workflows are now an order of magnitude faster thanks to changes in the babl library.

Improved file formats support

  • Due to popular demand, we merged the existing DDS plug-in originally developed by Shawn Kirst. But as none of us is a game developer, we appreciate further contributions from the community.
  • Layers are now optionally preserved when exporting to TIFF, and if you load a TIFF file with an unspecified channel, GIMP will now ask you how to handle it.
  • GIMP now supports ICC profiles in HEIF images at both loading and exporting time when built with libheif v1.4.0 and newer.
DDS exporting options

New filters

A major addition here is the Normal Map filter that generates normal maps commonly used in production of 3G graphics and games. It’s already usable for some workflows, and there’s a plan for further improvements.

We also provided direct access to more filters, developed in GEGL a couple of years ago:

  • Bayer Matrix (for ordered dithering) and Linear Sinusoid (useful for halftoning)
  • Newsprint, a GEGL version of the old GIMP filter for halftoning, plus quite a few extras
  • Mean Curvature Blur for edge-preserving blurring

A few more filters, namely Neon, Stretch Contrast, and Oilify are finally on par with the original implementations and thus replaced them.

New Normal Map filter

Build systems, CI, and packaging

During 2019, we ported babl, GEGL, and the master branch of GIMP to the Meson build system. While it’s of little relevance to end-users who rely on ready-to-use builds of GIMP, to developers it means much faster compilation time.

We also set up Gitlab-based continuous integration (CI) for all three projects, which gives us a few bonuses over the previously used Jenkins-based solution. One of them is that Windows builds are now available for every successful commit to GIMP’s master branch.

Over the year, Alex Samorukov contributed a bunch of improvements to the macOS version, including support for Catalina.

Development in the unstable branch

As you probably already know from the previous report, we manage to backport most of the new features form the unstable branch to the stable one. However, some changes are the result of refactoring and some changes rely on the tech not available in the GTK2 stack.

One of the latter things is the entirely new object-based plug-ins API, with an extra bonus of preserving plugins’ settings across sessions. We expect more to happen there. This part of the work was done mostly by Michael Natterer and Jehan Pages.

The use of GObject introspection has more implications: we switched to Python 3 and made it possible to write new plug-ins in Lua and JavaScript.

Most recently, Jehan started working on a new feature that checks for availability of a newer version of the program and suggests downloading an update. It also integrates into the bug reporting dialog to tell the user if the version currently in use is out of date and the update may not have that bug anymore.

What’s new in GEGL and babl

There have been numerous changes in both GEGL and babl:

  • further work on space invasion to streamline the handling of color spaces, in collaboration with Elle Stone and others;
  • a ton of changes in the standalone GEGL tool, making it suitable for node-based compositing and video playback;
  • far more sophisticated CMYK support, up to blending CMYK and RGB pixel data, reading and writing CMYK TIFF and JPEG files;
  • a better use of available CPU cores on more operations thanks to newly added dynamic computation of per-operation thread cost;
  • better memory management: when you close large images in GIMP, it will now free used memory a lot faster.
  • sharper output when downscaling images with the cubic sampler.

Øyvind Kolås also started ctx, a new vector rasterizer project with API inspired by Cairo and HTML5 canvas’ 2D rendering context, and sufficiently small resource footprint to provide modern vector graphics on many microcontrollers.

The ctx library already has support for floating point pixel formats, and that support is geared to end up generic for gray, RGB, CMYK and other multi-component formats. Lack of support for color spaces and pixel encodings beyond 8-bit sRGB in cairo has been a gap for GEGL/GIMP that ctx can end up filling.

Team changes

Most of the source code changes in all three projects are still coming from the usual suspects: Michael Natterer, Jehan Pages, Ell, Øyvind Kolås, and Thomas Manni. Nevertheless, there have been a few new contributors who seem interested in sticking around.

A significant part of the contributions towards the new build system and CI support came from Félix Piédallu and Salamandar.

We now also have a small dedicated team of people, frogonia and nmat, who triage bug reports on a regular basis and do user support on the IRC channel. Liam Quin who has been team member for a long time, now does the vast majority of user support on Facebook.

We are still lucky to have Julien Hardelin as the author of the user manual.

And, of course, we keep getting no small amount of translation updates from new and seasoned translators. In fact, since the v2.10.14 release, we now mention non-code contributors to the project in release notes.

What’s next in 2020

There is an agreement among team members that 2.99.x releases are long overdue. We are likely to tie loose ends and start shipping them soon.

How you can help

As usual, we appreciate both coding and non-coding contributions to GIMP, GEGL, and babl.

There are many things we want to improve and even redo completely. And while we do say that certain changes are targeted for v3.2 and beyond, anything goes really, especially with the master branch.

UI/UX redesign? Shapes drawing? Clips for layers? Better text tool? Layer filters? Vector layers? You name it. Talk to us, if you want to work on any of that.

And if you don’t do programming, there’s plenty of work to do all around: updating and translating the user manual, writing new tutorials, updating incomplete translations, even making great art with GIMP and telling people about it.

❌