[Gimp-developer] GIMP and GEGL in 2014

From: Alexandre Prokoudine <alexandre prokoudine gmail com>

To: "gimp-user-list gnome org" <gimp-user-list gnome org>, gimp-developer <gimp-developer-list gnome org>, gegl-developer-list <gegl-developer-list gnome org>

Subject: [Gimp-developer] GIMP and GEGL in 2014

Date: Mon, 5 Jan 2015 16:49:38 +0400

Hello, We hope you had great winter holidays! Here's our slightly belated 2014 report. Both GIMP and GEGL projects have been quite active. We didn't add any new new tools in 2014, but you are going to _love_ how we improved existing ones. João Sebastião de Oliveira Bueno added "fill" arrange modes to the Align Tool to evenly distribute items across an image or some other reference object. The Blend tool got a major redesign by Michael Henning, with additional work by Michael Natterer and Simon Budig. Now you can tweak the gradient's end points positions _after_ you created the fill. Much like the rectangular selection and crop tools, the end points have an active zone around them to allow easy grabbing and repositioning. The active zone hihglights disappear when you move the mouse pointer away which makes previewing your changes a lot easier. To finalize the gradient fill, you need to press Enter. The foreground selection tool now uses much improved algorithms for separating objects, especial the complex ones like hair. One of the algorithms (global) was earlier created by Jan Rüegg, the other (Levin) -- by Danny Robson. Michael Natterer updated the tool's options, made individual strokes undoable, and moved some of the controls to the canvas. However, performance of the tool needs to be improved. We'd appreciate some help here. Speaking of selection tools, the ones like Select by Color and Fuzzy Select now have a Draw Mask option contributed by Michael Natterer. What it does is highlighting an area that will be selected when you release mouse button. It's rather helpful if you need to e.g. evaluate the area that will be added to an existing selection so that you could make better choices at once, without going through the undo routine. The color is currently hardcoded to magenta, but this design decision is absolutely negotiable. The Seamless Clone tool earlier created by Barak Itkin got some much needed love from Jehan who made it a lot more responsive. Now you can paste and seamlessly blend into the background pictures that are larger that 100x100px. Alexia returned to work on the brush engine again. As the result, all brush-based tools now have a a few more options: locking brush size to zoom (whether brush size should follow changes in zoom), configurable hardness and force. There's also a new fallback brush cursor, a crosshairs-shaped one, used only as last resort. The text tool was updated by Mukund Sivamaran to use HarfBuzz library directly instead of relying on deprecated Pango functions. This will make sure we always provide excellent support for complex writing systems such as Arabic, Devanagari etc. To make things even more fun, we added 64bit per color channel precision to GIMP. One part of GIMP that already uses it is the FITS loader/saver for astrophysicists. But that bears the question: can GIMP reliably perform when dealing with such resources-hungry images? Well, we made quite a few changes to assist you there. First of all, GIMP now has a switch in the Preferences dialog to enable/disable OpenCL-based hardware acceleration globally (that is, including plugins that can make use of this). When applying a preview to GIMP will also start redrawing the visible part of the image first (the viewport) and work on the rest next. Finally, Øyvind Kolås worked on initial threading support in GEGL. This is still a somewhat experimental feature. The team would happily accept input from people who can give this thorough thoughtful testing. There have been some changes in file formats support too. First of all, we finally merged the updated PSD loader/saver that Simon Lui worked on in 2013. In a nutshell, Simon ported the plugin to GEGL, added support for 16bit files and parsing of advanced features such as text layers and adjustment layers. But since GIMP doesn't have public API for handling text layers, the app still can't load text layers as text. Somone would need to fix this. We also need non-destructive editing implemented in GIMP to make use of the ajustment layers parser. Additionally, Mukund Sivamaran improved and fixed a lot of code to support various file formats, and Roman Lebedev from the darktable project added loading and saving of 32bit TIFF files. Primary contributors to color management implementation in GIMP this year were Elle Stone and Michael Natterer. They added automatic generation of an sRGB color profile matching the one by ArgyllCMS, a widget to display basic ICC profile metadata, and created a new image profile API that is now used throughout GIMP. A lot of work has gone into improving user interface and usability. One notable fix is that now you can drag anything like a layer or a channel between opened images in the single-window mode. Michael Natterer introduced an important workflow change. Before, when you switched tools in the middle of e.g. rotating or adjusting colors, the change got lost. Now GIMP commits the change and _then_ switches to another tool. We also added TITO, a search system created in 2013 by Srihari Sriraman. Since GIMP has so many menu items that new users can easily get lost, by pressing the '/' key you can open a search dialog and start typing a keyword that you think a certain feature should have in its name or description, then (if present) select it in the list below. Here's some more information about it: http://sriharisriraman.in/blog/2013/09/15/gimp-tito/. Title bar and status bar can now additionally display layer dimensions and the current ICC profile. Head over to 'Edit - Preferences - Title & Status' and use codes %x, %y and %X, %Y for the former, and %o for the latter. These features were added by João S. O. Bueno and Michael Natterer. In some cases it makes sense to have a dial-like widget to quickly set rotation angle. Michael Natterer took the existing widget from the Color Rotate plugin, modernized it and updated all (or nearly all) relevant parts of GIMP's interface to use it, including filters based on GEGL. Speaking of which, we are now beginning to create custom user interfaces for these filters. The first two to have those are Convolution Matrix and Mono Mixer. They combine the old interafaces with best bits of the generic GEGL tool like saving and restoring presets and generating preview right on the canvas. Smaller, but useful changes include, but are not limited to: automatically updated Recent Colors palette, saving and restoring all currently active tag filters for assets (brushes, gradients etc.) between sessions, canceling ongoing operation such as transformation by clicking on the title of the on-canvas progress indicator. Many more existing GIMP filters have been ported to GEGL, and others were improved, which does bring us closer to releasing v2.10, although we are not there yet. Most work here was done by Thomas Manni, Michael Natterer, Øyvind Kolås, Dimitris Papavasiliou, Daniel Sabo, Pascal Giessler, Téo Mazars, Michael Henning, Mukund Sivamaran, and others. Øyvind Kolås also added a new GEGL operation to perform a equlinear/gnomonic or little planet/stereographic projection of a equirectangular input image. You can find it in 'Filters - Map' under 'Panorama Projection' name. We also continued to add compatibility code so that old scripts and plugins would still work with new GIMP. This is also a work in progress. Throughout the year Ed J was working on the Perl bindings for GIMP that had been abandoned. This code is in a much better shape now, available on CPAN: https://metacpan.org/release/ETJ/Gimp-2.30_05. Two work-in-progress projects that we consider important are advanced metadata support and MyPaint brush engine support. The former, worked on by Hartmut Kuhse, extends IPTC/XMP metadata support to single layers and even channels. Here is the branch: https://git.gnome.org/browse/gimp/log/?h=gimp-attributes-wip. Please note that it requires bleeding edge build of the gexiv2 library. Hartmut Kuhse started working on layer-level support for metadata. This means, and in a way it brings the plan laid out by Commons Machinery (http://bit.ly/1CTekPO) closer to reality. Previous work: http://bit.ly/1zvKtXo. The latter, worked on by Michael Natterer and Jehan, adds a new highly experimental tool that uses libmypaint to paint with MyPaint brushes. It's another project we started after looking at what's been worked on in the gimp-painter fork. Some interesting changes have been landing to GEGL throughout the year thanks to Jon Nordby who works on The Grid, an artificial intelligence based web publishing tool. The part of The Grid that handles images relies on GEGL, you can read more about that in this extensive coverage: http://bit.ly/1wPIISJ. While working on this project, Jon improved some existing GEGL features and added new ones like the gradient-map operation, support for CMYK JPEG files, and an image comparison command-line tool. Shortly before the new year he started moving more features to GEGL like .json graph serialization and meta-operation loading from such graphs. What it means is that you will be able to visually program new GEGL operations by connecting blocks in Flowhub (https://flowhub.io/) and use these operations in GIMP. A project we hold very high in regard, while not being all that much affiliated, is GIMP Magazine started in 2013 by Steve Czaika. It's a great resource for GIMP users who aspire to become better artists and photographers. If you are not familiar with it, do check it out and please consider financially supporting it: http://gimpmagazine.org/ Overall, the amount of changes in 2012-2014 does suggest that a new release is overdue. However, being a team of volunteers, we cannot estimate delivery date of v2.10 yet. Helping us to get v2.9 released would be a major contribution though, and one of the ways you can do that is by carefully testing all filters we ported to GEGL, then telling us if they work differently, miss options, have bad default values etc. To that end, you can use nightly builds of GIMP: Windows: http://nightly.darkrefraction.com/gimp/ Ubuntu Linux: https://launchpad.net/~otto-kesselgulasch/+archive/ubuntu/gimp-edge And here's a wiki page to track the reviews: http://wiki.gimp.org/wiki/Hacking:Porting_filters_to_GEGL/UI_review Let us know if you are serious about this and need a wiki account. We do humbly suggest to use IRC for more verbose communication with the team though. Alexandre Prokoudine On behalf of the GIMP team