Shotwell Photo Manager

Jim Nelson discusses the features of Shotwell, a new photo manager for the GNOME Desktop.

Introducing Shotwell: A GNOME Photo Manager

When I was in high school back in 1987, I took an introductory photography class. We worked in the darkroom, enlarging negatives onto developer paper and then moving the prints down an assembly line of baths filled with some of the harshest chemicals I’ve ever been exposed to.

Today, digital photography has all but eliminated this process. Film isn’t just cheap now, it’s virtually free, and reusable as well. An amateur photographer can snap thousands of photos a month without hesitation and share them worldwide with a click of a mouse button.

With large collections becoming the norm, the need to organize, edit, and share one’s photos has become a common task. That’s where Shotwell comes in.

Our intention from the beginning has been to write a photo manager stocked with the best features top-of-line commercial applications offered. We’ve looked hard at how other photo managers worked and weighed the benefits and costs of their features and design. Shotwell is the default photo manager in Redhat Fedora 13 and will be default in Ubuntu 10.10 shipping in October. Here’s where Shotwell stands today.

Non-destructive Editing

One philosophy we’ve taken to heart is that your photos are precious. Shotwell preserves the original photo no matter what transformations you perform on them—the only time it edits the original file is if you explicitly tell it to update the metadata (such as the time the photo was taken). Think of your photo files as old-style negatives. If you damage a negative in the process of perfecting a developed print, that’s the last print you can make. By preserving the negative, you can make new and different prints over and over. This is the heart of the thinking behind Shotwell’s non-destructive editing engine.

As you alter your photo in Shotwell—crop, color adjustments, rotate, and so forth—the changes are stored in an internal database. When you view a photo in Shotwell the adjustments are applied on-the-fly. This has three important benefits:

  • As mentioned, there’s never any data loss due to overwriting your original (a destructive model).
  • It saves disk space. Rather than storing updated copies of each image you alter (a generational model), Shotwell only stores the alterations, which are expressed in a compact notation.
  • Edits are fast, to the point of being almost instantaneous. For example, if you adjust the saturation of a photo, Shotwell only has to save the saturation value (which is a single floating-point value). In a destructive or generational model, the new saturation would be applied, and then the photo would have to be re-encoded and saved to disk, which can take up megabytes. JPEG is lossy, so re-encoding entails more data loss.

Non-destructive editing relies on an image pipeline, where an image is modified in stages before being sent to the screen (or to disk in the case of export, or to the printer). We’ve spent a great deal of time optimizing and fine-tuning the pipeline, using whatever tricks possible to get the image from disk to screen as quick as possible.


This brings up one of the features we’re most proud of, our auto-enhance tool. We considered various algorithms and performed qualitative testing of photos enhanced by different applications. After a few tries, we landed on an algorithm that gives great results most of the time. (We’ve yet to find an auto-enhance that improves every photo.)

Our algorithm involves analyzing the photo’s luminescence, dropping the outer points of the distribution and boosting the middle ranges to expand the contrast of the image, making it punchier and more vibrant. If a fair portion of the photo is dark, the shadows are lightened to bring up detail.

Because all these adjustments are available in our color tool, the user can fine-tune the enhancement if the result was not quite right. Sometimes increasing the saturation of a photo can bring out richer colors, for example.

And because Shotwell is entirely non-destructive, if you wish to back out of the enhancement, it’s as simple as clicking Photo -> Revert to Original.

Fast and Scalable

Earlier this year I wrote about Vala, the new programming language we’re using to build Shotwell. We continue to believe Vala was a great choice for Shotwell, for all the reasons I explained in the article.

One way Vala has been a win is in Shotwell’s speed and memory footprint. We have fine-tuned control over the application in critical areas. For example, application startup is under one second to Gtk.main() with all objects loaded and ready for use, even with a library of 10,000 photos. Shotwell with a 10,000 photo library consumes 57MB of RAM at startup. If we wanted to be leaner, Vala allows us to control this even further, but we’re content with this footprint.

Ten thousand photos is not an extraordinary library size according to our users. We’ll continue to measure and optimize Shotwell to keep it speedy and its resource utilization low.

RAW Support

In Shotwell 0.6 we’ll be introducing support for RAW images. This is a highly requested feature, especially since the price point for cameras with RAW support is rapidly falling. RAW images are “digital negatives”, a dump of the state of the camera’s sensor when it was exposed as well as metadata regarding color profile, exposure time, and other information needed to process the file. The advantage of using RAW is that you have more control over correcting and improving the image. Once imported into Shotwell, all the benefits of its non-destructive editor are available.

Users may want to edit their RAW photos (or any photo) with a more full-featured editor. Shotwell 0.6 will also introduce the ability to edit photos with an external editor. We architected this feature to accomodate other editors—which are generally destructive—while still offering use of Shotwell’s own non-destructive one. Shotwell makes a copy of the master, applying any transformations you’ve made so far, and launches the editor for that photo. When you’re finished, Shotwell continues to allow you to make non-destructive edits to the edited photo. This means you can use GIMP, for example, to make sophisticated edits. Then, returning to Shotwell, you can use its non-destructive tools to fine-tune the image without losing the GIMP version. If you want to go all the way back to your master photo, you can return to that state as well; it’s never touched.


Shotwell today offers two primary ways to organize your photos: by tag (or keyword) and by event.

Most photo organizers offer a tagging feature. Tags allow you to notate a photo’s subject matter, creating groups of photos tagged, say, “London” or “GUADEC 2009”.

Events are different. When you import photos, Shotwell automatically sorts them into events. An event is a grouping of photos taken on the same day. Shotwell determines this by the exposure datestamp stored in the photo’s metadata. Think of events as chronological photo albums that Shotwell builds for you.

This means Shotwell immediately offers a grouping system for the user, with no effort on their part.

What Does the Future Hold?

We’ve brought Shotwell far, but we see its current feature set as merely a launching point for more great stuff. Possible future enhancements include:

  • Replace our pipeline with a 16-bit GEGL pipeline. Shotwell’s current pipeline is only 8-bit, which limits the range of color transformations we can make on RAW and (soon-to-be-supported) 16-bit TIFF images.
  • Monitoring the filesystem for photos and automatically adding them to Shotwell.
  • Automatic organization of your photos by geolocation, by their location on disk, and automatic face detection.
  • Better slideshows with customizable transitions and music.
  • Basic video support. As most digital cameras support recording movies, Shotwell will import those videos and allow you to play them right in the application. (Editing, however, will be the job of a dedicated video editor.)
  • Full synchronization, so you can share your photos across a LAN or synchronize from a server across the Internet.

… and plenty more. Shotwell’s home page is a great place to find out more information about Shotwell. We hope you find Shotwell a useful and vital tool for managing your ever-growing photo collection.

About the Author

Jim Nelson works at Yorba developing multimedia applications for the Linux desktop.

Discuss this story with other readers on the GNOME forums.


Posted on June 10, 2010, in June 2010. Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: