I've just realized that today is exactly a year after the epic “What happened to GIMP 2.8” story that caused quite a stir. Could there be an even better overview? Challenge accepted :)

In this blog post I'm going to summarize what was going on with the project in 2011, including some rather fancy side projects, and what plans the team has. And since it's the end of the year anyway, let this be the first 2011 retrospective post.

First of all, I have to admit that relying on the schedule in the original article wasn't a terribly great idea. The schedule was rough and could only cover features and bugs that were known at the time. Bugs that were yet to be discovered couldn't be taken into consideration.

The “schedule” was quite honest about all of that. Still, the estimation didn't quite give the right idea. After all, GIMP 2.8 is still to be released, albeit it's weeks rather than months.

So what actually happened to GIMP during the year, where the project is now and what's ahead? Let's start with changes.

UI and features

Most new features were written during 2010. In 2011 development was focusing on tying up loose ends.

Martin Nordholts found the time in his busy schedule to finish what was planned for this version regarding single-window mode. Since v2.7.3 the application saves and restores it, and since 2.7.4 all image tabs have a Close button.

Alexia took a closer look at GIMP Painter, the fork released in early January, and nicked some of its features such as line smoothing. Mixbrush hasn't been backported yet, and the prerequisite for that is a complete GEGL based painting system. This is because the team banned development of new tools that are based on the old image processing core. We'll talk of it later.

Michael Muré worked with Peter Sikking, the team's UX expert, to improve the Cage transform tool that he created during Google Summer of Code 2010. That required quite a lot of internal changes, but thanks to that Michael was able to implement rubberband selection of cage nodes, as well as editing of cage after an initial transformation. The tool itself was moved from a Git branch and is going to be part of upcoming v2.8.

Google Summer of Code

This year Google Summer of Code program had quite a twist towards GEGL, the new state of the art image processing core for GIMP.

Warp Transform tool was worked on by Michael Muré. This is a rewrite of the iWarp filter that allows doing a kind of sculpting on pixels with a brush. The tool is much like Photoshop's Liquify filter, except it works directly on canvas. The tool is based on GEGL and lays foundation for GEGL based painting system. Here is a somewhat synthetic example:

Seamless Clone tool was a project by Barak Itkin. The code is based on a SIGGRAPH 2009 paper by Zeev Farbman et al. that explains how to paste one image into another in a way that it completely blends into it. This is also a GEGL based tool, it still needs work to make it more robust, but it's currently scheduled to be part of GIMP 2.10.

Robert Sasu ported over a dozen of GIMP filters to GEGL operations. To name a few: Color to alpha, Color rotate, Convolution matrix, Polar coordinates, Red-eye removal. He also implemented a new GEGL operation that uses LensFun library to fix various lens distorsions. Robert uploaded a gallery of examples.

The OpenCL project in GEGL was already covered recently. To sum it up, Victor Oliveira implemented basics of GPU-side rendering and computation. He is now sponsored by AMD to bring OpenCL support to an even better shape next year.

Finally, Enrico Schröder rewrote the existing size entry widget to make the code cleaner and introduce a new feature. Now when you change e.g. image size, not only you can freely mix up units, you can also see them inside the entry box.

Usability researches

In February the team announced that Peter Sikking started looking for interns to work on GIMP's usability. Very few people turned up, and the only real candidate canceled the internship due to getting a job.

However later Man+Machine Interface Works, the company co-founded by Peter, got a new employee, Tobias Ehni, whose job was to do some work on UI. Tobias conducted several user interviews, mostly with people who do digital painting (a report by David Revoy is here).

In June Peter Sikking did another interaction design course at the FH Vorarlberg. Four groups of his students worked on prototyping UI for the Warp Transform tool. The spec hasn't been written yet, but this is clearly something that should be done for v2.10 when work on merging GSoC2011 projects starts.

Latest report from Peter is that Dominique Schmidt joins the project to work on GIMP's UI design in the beginning of 2012. Subject of the research is still to be decided on.

Foundations for future development

Throughout the year Mitch Natterer and Mikael Magnusson worked on porting GIMP to GTK+3. This is going to significantly improve rendering performance, especially for painting, and fix some serious issues (more on that below).

During the summer Mikael worked on the Unified Transform tool. It's currently more of a playground, but it's also a decent start to make the existing set of transformation tools not suck. As of now it isn't possible to say when this work will be completed.

Few months ago Martin started working on on getting GIMP to use GEGL buffers directly which is a further step in bringing high bit depth support and non-destructive editing to GIMP. He temporarily stopped working on that, but the code is in public Git repository, so the work can continue.

The current brush engine relies on the old image processing core, and thus porting Mixbrush and textured brush from GIMP Painter would only delay the switch to the state of the art architecture. The latest GSoC project by Michael Muré, the Warp Transform tool, is a major step towards moving to GEGL based painting.

So, what's, uh, the plan?

Around spring the team decided on a feature-based plan that looked like this:

Release GIMP 2.8 as soon as possible. Release GIMP 2.10 with internal changes + GSoC2011 projects. Release GIMP 3.0 with GTK+3 based UI and high bit depth support. Start implementing non-destructive editing etc.

This plan is being revised now, and it's quite possible that the team won't wait for high bit depth support to be finished to release GIMP 3.0. This is because GTK+2 is broken beyond repair with regards to advanced input devices, and GIMP 2.8/2.10 are going to have a broken support for Wacom tablets.

So it looks like there will be no changes to plans regarding GIMP 2.10, but GIMP 3.0 will be v2.10 + GTK3 based UI with graphic tablets support that works. Of course, things might change. We'll just have to wait and see. Or, better, help the team.

There are very few bugs left to fix for 2.8, most commits in the Git repository are translation updates. The team is currently dealing with end-of-year deadlines at their jobs and waiting for all translation updates to land. Then it's mostly release notes and splash screen that have to be done.

The v2.8 release cycle was way too long. To avoid that in the future the team is now using Git branches for development of significant new features. That makes development process less vulnerable in case a major feature is half done due to a developer's leave of absence.

What's up with the team

A year ago one of the key eye-openers for the masses was the low amount of developers working on the application. I'm talking about the “2.5 developers” meme. Unfortunately not much has changed since then.

The vast majority of commits is still on Mitch Natterer. Martin Nordholts moved further down to the 3rd place, while the second place is now taken by Mukund Sivaraman. The amount of work is still rather disproportional.

Some developers like Mikael Magnusson and Massimo Valentini became more involved with the project, but the project need five times as many new developers to balance things up.

If you are interested, the key areas of work would be:

finishing the switch to GEGL buffers, so that GEGL can finally be used directly;

finishing the painting core in GEGL to make deep painting with GIMP possible;

porting other GIMP filters to GEGL operations to boost release of GEGL based version of GIMP.

Scared already? :) Let's go for the fun part.

Side projects

Apart from tons of new and updated plug-ins and scripts there were three notable side projects in 2011 that are essentially friendly forks.

GIMP Painter is the one I already mentioned before. It's not a new project, but it got a major update with changes in UI and some other painting related features (if you are not a fan of cheaptunes, temporarily mute the sound for the video below).

Hsiang-Ting "Tim" Chen, Li-Yi Wei and Chun-Fa Chang implemented internal version control system for images in GIMP. For that they devised their own direct acyclic graphs (DAG) engine that represents spatial, temporal and semantic relationships between your editing operations.

The paper on that was published at SIGGRAPH and is finally available now. Tim is currently working on his next project that is built on top of it. It's about summarizing user's editing history using some machine learning algorithms, and the good new is that he's interested in rewriting the whole thing to make it usable in upstream GIMP.

The third “fork” features an advanced foreground extraction tool by Jan Rüegg. The original tool was first introduced in GIMP 2.4 several years ago. The problem with it was that it was missing a refinement brush to separate fine features from background. Jan introduced a new matting method that effectively ditched the need for a refinement brush:

It was too late to add the tool to 2.8, and the ban for new stuff based on old core was already in effect, so someone has to port it to GEGL before we can see it in upstream GIMP. However there is a Windows installer available from partha.com that contains this fork.

Interestingly, there was a Google Summer of Code 2010 project to add refinement brush, the student finished the project, but didn't manage to provide the code that compiled.

There are two notable side projects that I couldn't possibly not mention even though they don't deal with core features.

Resynthesizer, an amazing old GIMP plug-in, was given a kiss of life by Lloyd Konneker. The plug-in can make objects disappear thanks to smart filling of a selection with bits from the surrounding area. It's quite a bit like Photoshop's Content-Aware Fill except it was implemented years and years before Photoshop.

Lloyd updated the code and rewrote some of the additional scripts in Python. The new version was made available in April. Lloyd has just finished a threaded implementation of the plug-in that is supposed to work faster. Stay tuned for updates.

The last important project I'd like to mention here is GIMP Paint Studio, a project by Spanish painter Ramon Miranda. Along with other folks like David Revoy he created this excellent package of additional resources to improve GIMP as a tool for digital painting. G-P-S v1.5 was released this year, and Ramon is interested in updating it to match new features in GIMP 2.8.

As a closing note Id like to once again remind that GIMP is public project, and its progress is directly affected by how much the public is involved with improving it.