skip to main content

Photography Workflow using High Bit Depth GIMP

When editing photographs, it helps to have a well-defined workflow. My workflow consists of four sequential modules: preliminary color management steps, interpolation and image repair, image manipulation to meet artistic goals, and preparing the final image for display. High bit depth GIMP is my image editor of choice.

Written April 2015. Updated July 2016.

Considerations about using high bit depth GIMP

Partly because of deficiencies in PhotoShop and partly because of issues with Vista, I switched from Windows to Linux back in 2007. My current digital darkroom runs on Gentoo Linux and is entirely composed of free/libre software.

For most editing tasks high bit depth GIMP 2.9/2.10 is my image editor of choice. Unfortunately default GIMP 2.9/2.10 has hard-coded sRGB Y, XYZ and TRC parameters that affect all editing operations. Default high bit depth GIMP shouldn't be used for editing in RGB working spaces other than sRGB, and is unsuitable for anyone with an advanced workflow that makes conscious use of the differences between editing in linear gamma vs perceptually uniform RGB working spaces.

For my own editing I use a version of high bit depth GIMP ("GIMP-CCE" — the "CCE" stands for "Color Corrected Experimental") that I've patched to overcome the limitations of default high bit depth GIMP. Partha kindly provides GIMP-CCE builds for Windows and MacIntosh.

Photography workflow using high bit depth GIMP as the primary image editor

When editing photographs, it helps to have a well-defined workflow. My photography workflow consists of four sequential modules:

  1. Preliminary color management steps
  2. Interpolation and image repair
  3. Image manipulation to meet artistic goals
  4. Preparing the final image for display

The list below describes each module, specifies the software used for various tasks under each module, and indicates whether the task is done on linear or perceptually uniform RGB. The steps listed under each module were written from memory, so hopefully I didn't leave out anything crucial. The order of the steps is logical but of course specific images might call for additional or differently ordered steps. My tutorial on GIMP's very awesome LCH Blend Modes shows screenshots of layer stacks for image repair (second module, Interpolation and image repair) and for colorizing a black and white image (third module, Image manipulation to meet artistic goals).

In case you are curious, here are some images produced using my patched high bit depth GIMP and the workflow outlined below.

  1. Preliminary color management steps, which of course only need to be set up once, except for changes required from periodically recalibrating and reprofiling your monitor:
    1. Using ArgyllCMS, calibrate and profile the monitor.
    2. For camera raw files, use ArgyllCMS to make a custom camera profile that also can be used as an RGB working space for preliminary editing of interpolated camera raw files.
    3. Set up all image editing software to use ICC profile color management, making the color management monitor/display settings match as far as possible.
  2. Interpolation and image repair:
    1. When shooting raw, output a high bit depth linear gamma interpolated raw file that is both raw color and scene-referred.
    2. Whether the image is an interpolated raw file or a camera jpeg, open it with GIMP, promote the image to 32-bit floating point precision, and assign the appropriate ICC profile:
      1. If the image started as an 8-bit in-camera jpeg, the data from the camera is in either the sRGB or AdobeRGB color space. Assign the appropriate ICC profile from disk, promote to 32-bit floating point and add a small amount of RGB noise to fill in the histogram; noise should be added using perceptually uniform RGB.
      2. If the image started as an interpolated camera raw file, assign the appropriate custom camera input profile from disk and promote to 32-bit floating point precision if necessary. The interpolated image RGB data is already high bit depth RGB data, so there's no reason to add noise to fill in the histogram.
    3. For bracketed interpolated raw exposures, blend together in GIMP. This is not HDR-to-LDR tonal manipulation. Instead, like Guillermo Luijk's Zero Noise technique, this is just blending the bracketed exposures to retrieve clean shadow information and intact highlight information (linear RGB).
    4. Using GIMP, fix any remaining lens distortion as desired. For interpolated raw files lens distortions were already at least partially fixed during raw processing. But GIMP makes possible some geometry transforms that aren't possible using the various raw processors.
    5. Repair flawed RGB data:
      1. If desired, remove unwanted elements and/or extend portions of the image using the GIMP resynthesizer plugin or G'MIC plugin. Presently the resynthesizer plug-in only operates on 8-bit data, so perceptually uniform RGB must be used. Use masks to confine the 8-bit data to the smallest possible portion of the image.
      2. Use GIMP's heal/clone tools to remove smaller unwanted blemishes such as sensor dirt, objects that show up as mere specks in the sky, and so forth (linear RGB).
      3. Repair blown out highlights using GIMP's brush, clone, and healing tools and the Normal and LCH blend modes (linear RGB).
      4. Remove shadow noise using GIMP, or another software such as RawTherapee, PhotoFlow, or darktable. Noise removal works best if done on perceptually uniform RGB, though changing the gamma (as RawTherapee allows) does make it possible to specifically target shadow noise. Personally I pull denoised images into GIMP as a layer and use a mask to target the desired areas for noise removal.
    6. Adjust interpolated raw files in the appropriate custom camera input profile RGB working space to correct any global or local white balance problems. Extract the original RGB channel information as individual layers, and also make a straight luminance conversion to black and white. These channel and luminance layers are useful to have even when the goal is to produce a color image.
    7. For reasons outside the scope of this article, Rec.2020 is my current RGB working space of choice:
      1. Convert the camera jpeg layer stack to linear gamma Rec.2020. Correct any white balance problems.
      2. Convert the interpolated raw file layer stack to linear gamma Rec.2020, taking care to note and deal with any out of gamut RGB values.
  3. Image manipulation to meet artistic goals:

    For an interpolated camera raw file, the "image interpolation and repair" module produces an image that is as close to scene-referred as possible, except for deliberately removed or added portions of the image. For a camera jpeg, the resulting image is not scene-referred because of the in-camera-applied processing algorithms. In either case at this point the image is in the linear gamma Rec.2020 working space.

    The next step is deliberate manipulation of the image in pursuit of a more or less (ideally more, usually less) previsualized final image. Except as noted, all subsequent editing is done in GIMP:

    1. Using GIMP, pull out shadow detail as desired.
    2. For black and white rendering, at this point appropriate monotone layers have already been retrieved for interpolated raw files. For black and white rendering of camera-generated jpegs, make a straight luminance conversion, and also retrieve the channel information for tweaking and modifying the straight luminance conversion.
    3. For color and colorized black and white images, adjust/add color as desired. For proper color mixing, operations and blend modes need to be done using linear RGB data.
    4. Adjust global and local tonality using masks and layers, and converting between linear gamma and perceptually uniform RGB as dictated by artistic intent. For proper color mixing, operations and blend modes need to be done using linear RGB data.
    5. As dictated by artistic intent, selectively apply creative blurring and sharpening using masks and layers. (Personally I don't find capture sharpening to be very useful.)

      For proper color mixing, blurring should be done on linear RGB. Sharpening can be done on either linear or perceptually uniform RGB, depending on the algorithm and the artistic intent. Hue shifts can be avoided by converting the sharpened layers to linear RGB and setting the sharpened layer to LCH Lightness blend mode.

      GIMP doesn't provide Lens Blur, so I use Krita for Lens Blurring. GIMP doesn't provide a full range of sharpening algorithms, so sometimes I use RawTherapee and other image editing software for creative sharpening.

  4. Prepare the final image for display
    1. Using GIMP, crop as desired.
    2. Using GIMP, soft proof to the output color space:
      1. For display on the web, soft proof to sRGB .
      2. For printing, soft proof to a suitable printer profile.
      3. Resize for output (linear RGB) and apply output sharpening as required by artistic intent and the output medium. As appropriate, convert the resized image to the output color space.
    3. As appropriate, post the image to an online gallery and/or make test and final paper prints. Personally I have only made a couple of paper prints, using two different local commercial printing services and I didn't like the results: One service turned a black and white image into shades of purple; the other produced overly saturated colors and has since gone out of business. Theory is one thing, practice is quite another, and I have a lot to learn about how to use commercial services to make photographic prints.