Making settings persistent in GIMP

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

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

Adding a named preset for the Unsharp Mask filter in GIMP

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

Using masks for digital photrography in GIMP

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

Tooltips for handling masks quickly in GIMP

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

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

(stroke-options
    (style solid)
    (antialias yes)
    (method line)
    (width 6.000000)
    (unit pixels)
    (cap-style butt)
    (join-style miter)
    (miter-limit 10.000000)
    (dash-offset 0.000000)
    (dash-info 0)
    (emulate-brush-dynamics no))

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

Dialog Defaults preferences page in GIMP 2.9.5

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

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

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

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

GIMP 2.8.18 Released

We are releasing GIMP 2.8.18 to fix a vulnerability in the XCF loading code (CVE-2016-4994). With special XCF files, GIMP can be caused to crash, and possibly be made to execute arbitrary code provided by the attacker.

This release includes additional bug fixes since 2.8.16. An important change has happened to the initial startup experience on Microsoft Windows and OS X platforms – any “GIMP is not responding” errors encountered there should be gone.

The source code for GIMP 2.8.18 is available from our downloads page; pre-built packages for Microsoft Windows and OS X will follow shortly.

GIMP 2.9.4 Released

We have just released the second development version of GIMP in the 2.9.x series. After half a year in the works, GIMP 2.9.4 delivers a massive update: revamped look and feel, major improvements in color management, as well as production-ready MyPaint Brush tool, symmetric painting, and split preview for GEGL-based filters. Additionally, dozens of bugs have been fixed, and numerous small improvements have been applied.

GIMP 2.9.4 is quite reliable for production work, but there are still loose ends to tie, which is why releasing stable v2.10 will take a while. Please refer to the Roadmap for the list of major pending changes.

Revamped User Interface and Usability Changes

The new version features several new themes by Benoit Touchette in various shades of gray: Lighter, Light, Gray, Dark, Darker. The system theme has been preserved for users who prefer a completely consistent look of user interfaces across all desktop applications.

New User Interface Themes

Note that we still consider this feature a work in progress, as dark themes still need some fine-tuning (especially regarding the color of inactive menu items).

The new UI themes are accompanied by symbolic icons originally created by Barbara Muraus and Jakub Steiner, and heavily updated and completed by Klaus Staedtler. The existing icon theme from past releases of GIMP has also been preserved, and users can freely switch between available icon themes and easily add their own ones.

Note that themes and icon themes are now separate: you can easily mix your favorite UI with various icon sets. Also since most 2.8 themes would end up broken in 2.9.x, themes are not migrated from GIMP < 2.9. Users who want custom themes will have to install ones specifically made for GIMP 2.9/2.10.

All work on icons by Klaus Staedtler is made on vector (SVG) images, which should allow better support for HiDPI displays (also commonly known as Retina) soon. Vector icons are an experimental feature, available after using the --enable-vector-icons build configure option. Note that this option does not allow HiDPI support at this time.

We cleaned the Preferences dialog a little and reordered options in a more logical manner. The Color Management page was redesigned following both internal and user-visible changes in relevant parts of GIMP (see below), and the Snap Distance options have been moved to a dedicated Snapping page.

Additionally, it is now possible to configure the size of undo step previews in the Undo dialog via the Preferences dialog, which was previously only possible by manually editing GIMP’s configuration file GIMP’s configuration file, by a complete oversight on our part.

The startup splash screen now features a pulsing progress bar to indicate that GIMP is not frozen. This, as well as initializing fontconfig in the background (also a new feature in 2.9.4), is meant to address a common issue where rebuilding the fonts cache (or building it for the first time) can take a lot of time hence making an impression that GIMP freezes at startup. We acknowledge that this is a workaround. Fixing the actual reason involves hacking on fontconfig. If you are interested, there is a bug report on that.

Color Management Improvements

The color management implementation got a complete overhaul in this version of GIMP. Instead of being a pluggable module, it is now a core feature. Moreover, we added an abstraction layer that makes GIMP less dependent on LittleCMS. This means that in the future GIMP could use native APIs on Windows and OS X, and/or use OCIO.

For now, it has helped us to clean up the code a lot and introduce a clean implementation of color management to various bits of GIMP such as: previews for color swatches and gradients, patterns, various color widgets (including the drag-and-drop color widget), the Color Picker tool, layer and image preview etc. The only unmanaged bit for now is the color widget in the Script-Fu and Python-Fu plug-ins. Moreover, GIMP will track which monitor the widget is currently on (different monitors would have different ICC profiles assigned to them) and color-correct it accordingly.

Grayscale images are first class citizens in GIMP once again: since v2.9.4, GIMP can color-manage them as well.

Since GIMP currently relies on sRGB (this is bound to change in future versions of GIMP), we decided to expose that in the user interface. So currently GIMP has an option called ‘Color-manage this image’ in two places: the New Image dialog and the Image > Color Management submenu. What it means is that instead of taking into consideration the ICC profile embedded into an image (whichever profile it is) it will just treat everything as sRGB. Please note that we are likely to reword the option to make it even more explicit about what it does.

Additionally, there’s now a View > Color Management submenu where you can enable and control softproofing.

The Color Management section of the Preferences dialog has been reorganized to reflect recent changes and provide more consistent wording of options.

Color Management Preferences

Since color management comes with a speed penalty (at least with LittleCMS), there’s a new option that enables you to choose either better color fidelity of faster processing depending on the kind of work you usually do.

Among smaller changes there’s a new Image > Color Management > Save Color Profile to File... command that does exactly what it says: it dumps an embedded ICC profile to disk as a file. Note that copyright restrictions on ICC profiles may apply, so please be careful.

GEGL

GIMP now keeps track of all GEGL-based filters that you used within one session and allows re-running them via the Filters > Recently Used submenu, just like old GIMP plug-ins.

The Posterize and Desaturate color tools have been converted to regular GEGL-based filters, and both the Tile and Pagecurl filters have been converted to use GEGL buffers. A quite popular “photographic” Highpass filter commonly used for enhancing details was added to the Filters > Enhance submenu.

A way more noticeable new feature, however, is split preview for GEGL-based filters. You can compare before/after versions right on canvas and move a “curtain” around to see more of “before” or “after”, and swap their positions (Shift + click on the guide). You can also switch between vertical and horizontal division (Ctrl + click).

GEGL preview curtain - original image by Aryeom Han

darktable as Raw Processing Plug-in

On Linux, GIMP is now capable of using darktable for pre-processing raw images from DSLRs (Canon CR2, Nikon NEF etc.). darktable is an amazing project whose developers stick around at our IRC channel and even contribute to GIMP (most recently, they added reading various metadata from EXR files).

Note that the file-darktable plug-in is activated only when darktable is built with Lua support. Make sure your build of darktable for Linux is feature-complete.

It is still possible to use other raw development plug-ins like UFRaw. For cases when multiple plug-ins are installed in your system, we intend to add a preference option.

Screenshots

The code for capturing screenshots has undergone a major reorganization. It’s now split into a front-end and several back-ends specific for Windows, OS X, Wayland and X.org (Linux and UNIX systems).

While there are no immediate user-visible changes, this reorganization will greatly simplify further improvements, hence improving user experience on different operating systems.

Painting

MyPaint Brush Tool

The new MyPaint Brush tool is now enabled by default. Daniel Sabo and Michael Natterer improved its performance and made MyPaint brushes available via an already familiar dockable dialog interface, with previews and tagging.

Jehan Pagès collaborated with the MyPaint team: he ported libmypaint to autotools, allowing, in particular, standard builds on all platforms, and work is being done to turn the default brushes into a separately shipped package.

Symmetry Painting

Another major new feature is symmetric painting mode, also developed by Jehan Pagès with financial support from the GIMP community. It can be activated through the new Symmetry Painting dockable dialog and allows to use all paint tools with various symmetries (mirror, mandala, tiling…).

  • Mirror” allows to paint with horizontal, vertical (axial), and/or central symmetry. The symmetry guides can be placed anywhere on canvas.
  • Mandala” is a rotational symmetry of any order. The center can be placed anywhere on canvas.
  • Tiling” is a translational symmetry, which can be finite (with a maximum of strokes) or infinite. In the latter case, it is the perfect tool to create patterns or seamless tiles, with instant rendering of what it will look like, at painting time.

Quick 1-minute test by Aryeom Han:

Symmetry painting

Tool Options

The mouse scroll-wheel action mappings have been improved, allowing, in combination with various modifiers, to do useful things on the currently selected tool’s options:

  • Alt + Mousewheel: opacity increase/decrease;
  • Shift + Primary + Mousewheel: aspect increase/decrease;
  • Shift + Alt + Mousewheel: angle increase/decrease;
  • Primary + Alt + Mousewheel: size increase/decrease;
  • Shift + Primary + Alt + Mousewheel: spacing increase/decrease.

Note: the Primary modifier is usually Ctrl or Cmd, depending on your platform.

Selections

For cases when your selection has a lot of small unselected regions, you can now use the Select > Remove Holes command.

Removing holes in selection

The Select > Border... dialog now provides several border style options: hard, smooth, and feathered. Feathered creates a selection which goes gradually from 1 to 0 the farther you get from the middle of the border. Smooth preserves partial selection (antialiasing) along the edges of the selection.

Border styles selection

Better Tools

The Fuzzy Select and Bucket Fill tools got a new feature for selecting/filling diagonally neighboring pixels.

Diagonal neighbors selection

The Blend tool got shapeburst fills resurrected, and allows the placement of their handles on the canvas, outside of the image area. Additionally, the Blend tool now displays its progress thanks to a new GEGL feature available in several GEGL operations including gegl:distance-transform.

The Text tool now fully supports advanced input methods for CJK and other non-western languages. Minimal support already existed, but the pre-edit text was displayed in a floating pop-up instead of inline, within the text tool box, and without any preview styling. It is now displayed just as expected, depending on your platform and Input Method Engine. Several input method-related bugs and crashes have also been fixed.

Input Method Engine support in text tool

Batch Processing on Command Line

A new macro with-files is now available in order to easily process multiple files through GIMP from the command line, which was a much awaited feature.

For instance, if you want to invert the colors of all PNG images in the current folder, then save them as JPEG, you could run the following from the command line:

gimp -i -b '(with-files "*.png"
                (gimp-invert layer)
                (gimp-file-save 1 image layer
                    (string-append basename ".jpg")
                    (string-append basename ".jpg")
                )
            )
            (gimp-quit 0)'

Note: the name of the macro may change before the release of v2.10.

Email Plug-in Resurrected

The File > Send by email… dialog will open your default email client with an attached copy of the current image, to share your work-in-progress with a single click. This is available only on operating systems with xdg-email (likely GNU/Linux, BSD only).

The original implementation using sendmail is also available. Yet since it requires a properly configured sendmail, which is not common on desktop machines, the explicit --with-sendmail option has to be set at build time to replace the xdg-email implementation.

Debugging Facilities for Windows

In the unlikely event that GIMP crashes, we need as much information as possible to find out the actual bug. The raw crash log is one such source of information. Windows builds can now generate backtrace logs upon a crash with Dr.MinGW’s ExcHndl library, which must be available at build time. The logs will be stored in %APPDATA%\GIMP\2.9\CrashLog\.

What’s Left To Do for GIMP 2.10

Since the release of v2.9.2 we have been mostly fixing bugs and completing the work we had started earlier. We are not planning to add any major new features in v2.10. If you are interested in helping us release v2.10 earlier, you can find the list of bug reports in our bugtracker.

Some Statistics on Our Awesome Contributors

GIMP 2.9.2 was released on November 27, 2015. Since then, the work to reach GIMP 2.9.4 was done in 1348 commits, making an average of 5.9 commits a day, of which 894 are (mostly) code-related, 241 are icon-related, and 213 are translation updates.

As usual, the GIMP team is small yet as dedicated as ever: more than a third of the commits have been done by Michael Natterer (514), the next biggest contributors being Jehan Pagès (192) and Klaus Staedtler (187). The three of them represent 66% of all commits.

Note: contributions by Jehan Pagès were made on behalf of ZeMarmot Open Movie project: symmetry painting, MyPaint library integration, email plugin, Input Methods, management of the new themes and icons contributions, and more…

We have prolific newcomers among developers:

  • Ell joined us with significant code contributions (32 commits), such as the diagonal neighbours, the “Remove Hole” command, and many other fixes;
  • Tobias Ellinghaus, a darktable developer, contributed 14 commits on darktable integration and improving EXR and PNM support.

Of course, we also have our usual suspects with 10+ code commits: Alexandre Prokoudine, Daniel Sabo, Kristian Rietveld, Massimo Valentini, and Michael Henning.

And since no patch is too small, it would be completely unfair to forget all other code contributors: Adrian Likins, A S Alam, Carol Spears, Eugene Kuligin, Jasper Krijgsman, João S. O. Bueno, nmat, Richard Kreckel, saul, Shmuel H, Jonathan Tait, Michael Schumacher, Pedro Gimeno, Richard Hughes, Benoit Touchette, Hartmut Kuhse, Kevin Cozens, Elle Stone, Mukund Sivaraman, Øyvind Kolås, Sven Claussner, Thomas Manni, Alexia Death, Andrew Worsley, Simon Budig, and Piotr Drąg.

New icons are a big work in progress, with 241 commits, mostly by Klaus Staedtler, with additional contributions from Aryeom Han, Benoit Touchette, Jehan, Kevin Payne, Michael Natterer and Øyvind Kolås.
We should not forget Benoit Touchette for his work in progress on themes, as well as some code contribution.

We would like to thank as well every 30 translators: Alexandre Prokoudine, Ask Hjorth Larsen, Balázs Meskó, Balázs Úr, Christian Kirbach, Cédric Valmary, Daniel Korostil, Daniel Mustieles, Dimitris Spingos, Dušan Kazik, Gábor Kelemen, Hartmut Kuhse, J.M. Ruetter, Jordi Mas, Khaled Hosny, Marco Ciampa, Mario Blättermann, Martin Srebotnjak, Mónica Canizo, Necdet Yücel, Pedro Albuquerque, Piotr Drąg, Rūdolfs Mazurs, Sebastian Rasmussen, Sveinn í Felli, Tiago Santos, Yolanda Álvarez Pérez, Klaus Staedtler, kolbjoern, and Милош Поповић.

Note: Statistics based on the number of commits provide valuable information regarding the activity of a project, yet they are not always a perfect indicator of contribution, so the goal of this section is not to have any kind of contributor rank. For instance, one commit could be a one-liner, whereas another could contain several hundreds of lines (and even this may not always be a good indicator of the time spent on and the difficulty of the fix).

Moreover we should not forget all the “shadow contributors”, whose contributions cannot be counted as easily, working on things such as code review (which Massimo Valentini should be especially commended for), bug triaging and follow-up (Michael Schumacher here would get a prize!), community, website, and communication (Akkana Peck, Patrick David, and others)…

We sincerely hope we did not forget anyone, and we want to say: thank you.

Downloads

The source code is available from the Downloads page. An installer for Windows will be available shortly. A build for Mac OS X is not available at this time.

GIMPers at Texas Linux Fest 2016

If you happen to be anywhere near Austin, TX next weekend (July 8-9) then mosey on down to Texas Linux Fest 2016 and meet some of your friendly neighborhood GIMP crew!

Texas Linux Fest

Akkana Peck and Pat David will be hosting a photowalk from 0900-1100 on Friday, July 8th (first day of the meeting) to socialize, talk photography, and capture some images for their workshop sessions later that same day. Pat will be talking about various Free Software photography tools and using them to create high quality results. Akkana will focus on using GIMP as a primary photo editing tool.

Both sessions will be immediately following the photowalk, before and after lunch. They will also be in attendance for the “Graphics Hackathon” at the end of the first day.

They are part of a full “open graphics” track on the first day that includes Ted Gould creating technical diagrams using Inkscape, Brian Beck doing a Blender tutorial, and Jonathon Thomas showing off OpenShot 2.0!

More information can be found on the 2016 Texas Linux Fest website. We look forward to seeing you there!

GEGL 0.3.8 and babl 0.1.18 Released

New version of GEGL and babl are out with new features, minor improvements, and fixes. These releases in particular are intended to accomodate upcoming GIMP 2.9.4 that depends on several important bugfixes from both babl and GEGL. However there have been some interesting new features.

First of all, now GEGL operations can report processing progress so that GIMP or e.g. GNOME Photos could correctly render progress indication. So far this is only used in two operations, gegl:cartoon and gegl:distance-transform. We expect to propagate this new feature to more operations in the coming releases.

Secondly, linear and cubic resamplers provide better default image quality at downscaling now. In terms of quality, the output is comparable to that of NoHalo and LoHalo samplers, but processing time is shorter.

Additionally, file handlers finally register MIME types for loaders and try to guess file types by analyzing file content before falling back to file extension detection. This makes the file loading routine a little smarter.

Finally, the ‘gegl’ binary keeps getting more features like simple video filtering and encoding audio alongside video.

For the first time in quite a while a new GEGL release contains no new ports of existing GIMP filters. This is because there have been no related contributions for the last few months. There is still a lot of work to do, and we greatly appreciate your help with getting more filters ready for non-destructive workflows.

The complete list of changes is available in the NEWS file. Tarballs are up at download.gimp.org/.

Updated 2.8.16 Installer with a Major Bugfix Released

With the past few releases, users on the 32-bit versions of Microsoft Windows platforms were plagued by an annoying bug — resizing a window crashed GIMP. We believe this to be fixed, and have released an updated installer.

The crash was caused by a problem in libpixman, and is fixed in current version of this library. This has been packaged, so if you were suffering from this issue, you can get an updated installer from our downloads page.

Call for GIMP 2.10 Documentation Update

With the upcoming GIMP 2.10 release we intend to finally close the time gap between releases of source code, installers, and the user manual. This means that we need a more coordinated effort between the GIMP developers team and the GIMP User Manual team.

For the past several months we’ve already been working on GIMP mostly in bugfix mode. It’s time to start updating the user manual to match all the changes in GIMP 2.10, and we would appreciate your help with that.

What Needs Doing

  • Updating the content. There have been a lot of changes since 2.8. For quite a while, we’ve been maintaining a structured list of changes in 2.10 specifically to assist technical writers in updating the user manual.
  • Translating the content. At some point we’d like to “freeze” the documentation so that translators could start updating localized versions of the user manual. Since GIMP is hosted at GNOME, you would have to contact your local GNOME translation team to get involved.
  • Resurrecting PDF builds. Years ago we chose DocBook/XML as a way to build both web (HTML) and printable (PDF) copies of the user manual from a single source. Unfortunately, there appear to be some issues with building PDF files presently. Someone would have to investigate, what’s causing this, and act accordingly.
  • Adding Search to the Online Docs. We’ve heard a number of requests to add basic search to the online docs. If you have an idea how to do that, please contact us.

How To Contribute

Technical documentation on hacking on the user manual is available in the respective Git repository.

The primary communication environment for all things documentation in the project is the gimp-docs@ mailing list. We encourage you to talk to fellow team members publicly about which part of the documentation you are hacking on. This is because efficient collaborative effort requires full transparence.

If you have technical questions about features in GIMP 2.10, you can use either gimp-docs@ mailing list or join the IRC channel, ask your question, and stick around for the answer.

We do not yet have an estimated time of arrival for GIMP 2.10, but there’s only so much time we can spend on completing this release before we can move to the next development cycle.

Revamping Tutorials

As part of building a new GIMP website we had to sort through all of the legacy pages in order to migrate content properly. A nice side effect of this sorting included addressing tutorials that were out of date (or in some cases, really out of date). This gave us an opportunity to re-build the tutorials index to focus on (more) current content as well as ensure that everything is being licensed in a permissive manner.

Cool URIs don’t change

It was true in 1998 and is still just as true today. Possibly more so. Great care was taken to make sure that we didn’t break all of the inbound links to the old tutorials during the site update.

This means that if there were any links to the previous tutorials they will still work. They are still at the same URL they had always been. What we did change was the listing of tutorials on the index page:

www.gimp.org/tutorials/

That list now includes only more current content that has been permissively licensed for use. If you need the deprecated tutorials for some reason, see the complete list.

An unfortunate side-effect of pruning old material is that we are now a little light on good tutorials…

Help Write More Tutorials

Which is where you, the community, comes in! If you were looking for a way to contribute to the project, and you don’t feel up to coding*, this is a great way to share and help others learn GIMP. We encourage you to come tell us about your tutorial on the gimp-user mailing list or, even better, drop by the IRC channel and let us know what you’re thinking (this is strongly encouraged to make sure there’s not something already being worked on)!

*Of course, if you do feel up to coding we’d love to hear from you too!

There’s usually helpful team members around who can guide you with both ideas and content if needed.
We have a tutorial template, and you can find the markdown file used to generate it in git.

We can use tutorials of all types and skill levels, so don’t feel intimidated by what you might see on the current tutorials page. Indeed many common questions we see might have solutions that are not obvious to others – the perfect opportunity to write a tutorial about it! We’ll absolutely consider all proposed tutorials.

New Tutorial – Tone Mapping with Levels

Speaking of tutorials, Elle Stone has just published a new tutorial on doing some simple tone mapping and shadow recovery of images using high bit depth GIMP and the GEGL Exposure operation.

GEGL Exposure
The GEGL Exposure dialog.

The tutorial covers a method for adding exposure compensation to an image’s shadows and midtones while retaining highlight details. She does this using Exposure and combining the results with a mask based on a grayscale version of the working image (similar to using a luminosity mask).
This is also one of the first tutorials using the high bit depth version of GIMP. Head over to the tutorials page and have a look:

Tone Mapping and Shadow Recovery Using GIMP’s ‘Colors/Exposure’

Corrupt Windows Installer Warnings

For the past few weeks, we have been receiving reports that some users can’t download our installer packages for the Microsoft Windows platforms. Microsoft Edge and Internet Explorer 11 mark them as corrupt and discourage users from running them.

Turns out this is a policy change by Microsoft, gone into effect on January 1, 2016. The new policy affects all kinds of security certificates as of specific deadlines, and this includes code signing certificates. Jernej Simončič, who creates the Windows installer packages, signs them to make their authenticity verifiable. But the way this signature is done is no longer considered safe by Microsoft, and there are justified technical reasons for that.

Administrators and users of Microsoft Windows systems are well advised to make themselves familiar with the implications of this policy; the TechNet article on the subject is available at Windows Enforcement of Authenticode Code Signing and Timestamping.

We are working to resolve the issue — this requires a more recent code-signing certificate and signing the installer packages with it. Stay tuned for updates.

As a temporary workaround, you can use other web browsers to download the installer packages.