Open Source Photography: The big picture

this page has been migrated to our new wiki site

So, what Open Source programs can be used to work in photography? Let's start by defining the different areas involved in digital photo processing workflow and then see what programs can be used in each area. Keeping in mind a full Free/Open Source workflow, this article is quite biased towards GNU/Linux, with references to BSD, Tendances de Mode, Microsoft Windows and MacOS X software whenever applicable.

Diferent photographers use different approaches to managing their image workflow. But we're talking about the big picture so we might as well find a common ground to build upon. The most basic of workflows will be something like this:


Now that have a basic workflow, let's see what free and open source software we can fit in each of these steps.

Part I: Image acquisition

Typically, the digital photo workflow starts by taking pictures with a digital camera. But it can also start by scanning a film or a print. While hardware is not the focus of this site, there are a few considerations that will limit your freedom in the Open Source Photography world. For example if you take RAW photos and your camera's RAW_image_format isn't supported by any FOSS converter, or your scanner isn't supported on your operating system.

From a camera

All modern digital cameras present themselves as USB Mass Strorage devices, so you can just transfer files using regular file copy on your operating system, or access the images directly from camera memory (slower) without the need to use proprietary software that comes with the camera (which never has support for FOSS operating systems). Alternatively you can also use a card reader to read the memory card. Actually, this is the fastest and most convenient way to transfer images to your computer.

Then you have the library gphoto2 for cameras that don't support USB Mass Storage and to access advanced functions on some cameras, like the ability to take photos directly to computer memory (tethered shooting).

From a scanner

SANE (homepage)
If you want to scan photos using FOSS design, you're going to be using SANE, which stands for Scanner Access Now Easy and supports quite a lot of scanners on Linux, BSD and MacOS X. SANE is built around a front-end/back-end architecture, where the back-end drives and reads the data from the scanner and the front-end (user interface) is used to operate the scanner. This allows for easy custom writing network independence, enabling you to access the scanner on a server from your workstation. While the back-ends are for UNIX type systems only, there are front ends also for MS Windows.

Internal SANE back-ends
When you install SANE, it includes back-ends for a large number of scanners.

External SANE back-ends
If your scanner isn't supported by one of SANE's free and open source back-ends, it might be suported by an external front-end provided by the manufacturer or by a community project outside SANE. For example, Epson supports its scanners in GNU/Linux, providing a GPL front-end and a proprietary back-end driver that can't be bundled in SANE.

SANE front-ends

Xsane (homepage)
SANE's own front-end, Xsane can be used stand-alone or as a GIMP plug-in. Available for many UNIXes (Linux, BSD, AIX, IRIX, …), Microsoft Windows and OS/2 with X11.

Kooka (homepage)
Kooka is KDE's official SANE front-end.

Image Scan! for Linux (homepage)
Image Scan! for Linux is Epson's front-end for Linux.

SaneTwain (homepage)
SaneTwain is a SANE front end for Microsoft operating systems.

TWAIN SANE Interface for MacOS X (homepage)
TWAIN SANE Interface for MacOS X is a SANE front-end for MacOS X.

Part II: Processing and editing

Even if you have the "best" camera in the market and the manufacturer claims it takes "perfect" pictures, there's always room for improvement. So, after you get your images on the computer, you might want to make minor improvements like rotating the image, or cropping, or adjusting the contrast. And while you're at it, why not remove those "red-eyes", fix those specks of dust and correct the yellowish tone from the lighting? And why stop here? How about "stitching" two or three photos together an create a panorama? What about HDR images? Cloning? It only takes creativity and the right piece of Free/Open Source Software.

RAW development

If your camera only records JPEG images, you can skip this. However if you have an option to capture RAW images, you might want to take your photography to another level. So read on to get the picture and then you can check the page dedicated to RAW images and Opens Source Software

A word on RAW formats

There isn't an open specification for RAW formats and each camera manufacturer uses it's own proprietary format. This makes it quite difficult to support, as the format needs to be reverse-engineered. This is made even harder when some manufacturers encrypt the RAW file data

There is an organization called OpenRAW that tries to persuade camera manufactures to disclose the information on their RAW formats and to promote the development and adoption of an open documented raw format. Adobe has developed the DNG format and pushes it as an open format, but there are some problems to overcome.

Programs to process RAW files

dcraw (homepage)
The standard for reading RAW image files on OSS (and on many proprietary software), dcraw supports virtually all RAW formats in the market. Being a command line tool, it's not very user friendly so several graphical user interfaces were built around it.

UFRaw (homepage)
UFRaw is widely considered the most advanced OSS GUI for processing RAW image files. It's buit around dcraw and can be used stand alone or as a plug-in to GIMP.

Rawstudio (homepage)
Started in the summer of 2006, Rawstudio is still a young player on the RAW processing arena. Built around dcraw it's aimed at the GNOME desktop and shows some promise.

There is a comparison table of RAW software for Linux that will give you a decent overview of available software.

Basic photo editing

When all you need is minor retouching of the image, you don't need to use a specialized program for photo editing and most of the times your regular photo management program will be enough. Both KDE and GNOME's photo management programs (digiKam and F-Spot) allow you to do things like adjust color levels, curves and white ballance, remove red-eyes, crop, rotate, straighten and even do some noise reduction. So, unless your needs are more specific, find a photo management program that suits your needs (see Part IV) and go take some photos.

But sometimes you need or want to do something more with an image, and that's when you need more complete programs.

Advanced photo editing

GIMP (homepage)
The GNU Image Manipulation Program is the most widely know and used free and open source software for digital image editing. It allows you do work with layers and support a large number of plug-ins and scripts that make advanced editing tasks more easy. We have a page dedicated to GIMP resources

Krita (homepage)
Part of KDE Office since version 1.4, Krita is KDE's advanced photo editing program. It supports advanced functions sucha as 16 and 32 bits per channel images, adjustment layers and full color managed workflow.

Cinepaint (homepage)
Previously known as Film GIMP, Cinepaint is a fork from the GIMP, suporting 16 and 32 bits per channel images.


Autopano-SIFT (homepage)
The different pictures of a panorama partly overlap. Autopano is a tool that detect similar points in different images and therefore allows you to match the relative positions of the panorama parts. The software is GPL licensed, but the SIFT algorithm is covered by a patent in the USA which prevents from commercial use of the software.

Hugin (homepage)
Hugin is a GUI frontend to PanoTools. Hugin can handle the matching points detected by autopano-SIFT but can also be used to add manually matching points to an image set. The main function of this GUI is to line up images, preview/generate the panorama, transform the images according to the angle of vision of the camera(may be loaded from Exif) and the projection algorithm.
The generation process can be handled completely by Hugin or delegated to a blending software like Enblend.

Enblend (homepage)
Enblend is a tool for compositing image. Output generated by Hugin or the Gimp when assembling several images will not be perfect. The photometric differences between the images will make the boundaries appear on the final image. Enblend will blend away those differences.

HDR Images

In photography dynamic range refers to the range of light1 that is present on a scene, from it's most dark element to it's brightest, often expressed in terms of image contrast. An daylight indoor scene with a windows showing the outside can have a dynamic range of 100,000:1. In contrast, the human eye can capture a dynamic range of about 10,000:1, a good DSLR camera (at 12bit per channel) covers a dynamic range of 4000:1, a typical computer monitor has a range of 500:1 and a printed photo only 100:1.

Tone mapping is the process of "compressing" the dynamic range on an image in order to obtain a result that best resembles (to the human eye) the dynamic range that was present on the original scene. For example, a RAW image with 12 bits per channel will have it's dynamic range reduced from 4000:1 to 255:1 when converted to JPEG.

pfstools (homepage)
A set of command line (and one GUI) programs for reading, writing, manipulating and viewing high-dynamic range images and video frames. All programs in the package exchange data using a simple generic file format (pfs) for HDR data.

Cinepaint (see above)
Cinepaint can be use to create an HDR image (typically using the openEXR format) from bracketed images. Cinepaint is an alternative to the pfstools.

pfstmo (homepage)
A set of tone mapping operators for use with pfstools

Qtpfsgui (homepage)
A GUI providing a workflow to work with HDR images, integrating dcraw, pfstools and pfstmo.

qpfstmo (homepage)
A GUI to the pfstmo tools. The tool must be fed with an HDR image (typically and openEXR file)

Part III: Printing and displaying

Printing a digital photography is substantially different from printing a written document or a chart. The thing that most affects the output quality of the print is the difference in colorspace from the source (the image file) and the output device (ink and paper quality). Also, what we said above about dynamic range applies to printing: good quality inks and paper produce only about 100:1 dynamic range prints. So, unless you have a good control of the process, the printed result will rarely be similar to what you see on your monitor.

Even if you just produce your images for display on monitors, different monitors will display different results for the same image, so an image that look bright and vivid in your monitor, may look dark and "flat" on another. This is because most computers are not "aware" of the characteristics of it's display and it's settings.

Part IV: Photo management

digiKam (homepage)
digiKam is the official KDE digital photo management software.

KPhotoAlbum (homepage)
KPhotoAlbum is a digital photo management software for KDE with focus on easily organizing collections with thousands of pictures.

F-Spot (homepage)
F-Spot is GNOME's official digital photo management software.

Part V: Other tools

exif tools, color proofing, KIPI plugins, …

Add a New Comment
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-Share Alike 2.5 License.