batch-editing images

Batch-editing is the process of developing images in a semantically-related series that are expected to have a consistent final look, often with the intent of publishing the images in catalogues, magazines or books. It can be a tedious, frustrating and unexciting task, so darktable includes functionality to help make it faster and more reliable.


🔗shooting color checkers

Shooting a color checker on-location can save a tremendous amount of time during batch post-processing of a series of images. The image of the color checker can be quickly used as a color reference in the post-processing workflow to neutralize any color cast – Datacolor and X-Rite color checkers (24 and 48) are natively supported.

🔗prefer consistent lighting conditions

If possible, use controlled artificial lighting to maintain consistent lighting over the series of images. This means that you won’t have to worry about light color temperature and intensity changes between images. Shoot a new image of the same color checker every time your lighting conditions change.

🔗prefer manual mode

If possible, shooting in manual mode with constant exposure settings will help to remove some variability in the series. In terms of post-processing, any variation means that individual adjustments will be needed on each image, which will hinder your productivity.



The post-processing needs to be split in 2 fully separated parts:

  1. primary color-grading,
  2. secondary color-grading.

Primary color-grading is performed first in the pixel pipeline and in the editing workflow, with modules such as exposure, input color profile and color calibration. Its purpose is to normalize each image to the same neutral ground-truth, in terms of overall brightness, color accuracy and white balance. This stage aims at making all images look similarly boring by removing any color cast and ensuring a perfectly neutral white, and is particularly important if your series uses different cameras. Primary color-grading is not about artistic intent or expression, but simply about preparing a sane and consistent basis for the next stage.

Secondary color-grading happens next in the pixel pipeline and in the editing workflow. This is where all the artistic expression happens, with modules such as color balance rgb. If and only if the primary color-grading was successful at perfectly neutralizing all images to the same ground-truth, copying and pasting the secondary color-grading steps between images should have exactly the same visual effect on each image, no matter if the images were shot with a different camera or under slightly different lighting conditions.

In a nutshell, the whole purpose of the primary color-grading is to ensure the repeatability of the secondary color-grading between images. For example, if a non-neutral white balance is expected in the series, it is much easier to re-introduce non-neutrality in color balance rgb (using the same color shift) on fully-neutralized images, than to fine-tune the primary color-grading individually on each image, especially if several different cameras were used.


🔗profiling the series

You will first need to extract a color calibration profile from the image(s) of your color checker. This profile can then be applied to all images shot under the same lighting conditions with the same camera by copying and pasting the development history stack in the lighttable view. This step needs to be repeated for each camera and lighting setup.

Note: this process only works with the modern chromatic adaptation workflow, which assumes hard-setting the white balance to a D65 (camera reference) illuminant. See the documentation in the color calibration module for more information.

🔗editing the reference image

Choose a reference image that was taken in the lighting conditions closest to those of the color checker image that served as your profiling reference. Your primary color-grading should already be handled by the profile used in the color calibration module (in conjunction with the input color profile module). What remains to complete this stage is to adjust the exposure setting to match the overall brightness that you expect.

Next, proceed with the filmic rgb white and black relative exposures, as well as the contrast setting. Finish with the secondary color-grading.

When this is done, you can measure the brightness and chromaticity of a control sample, preferably located on a non-moving surface that is consistently lit across your series (and appearing in all the frames). These measurements are taken using the area exposure mapping and color calibration area mapping tools. They will be memorized and will serve as a target for individual images as needed.

🔗propagating the look

You can then propagate your secondary color-grading (including filmic rgb) to all the other images of the series, no matter whether or not they were shot in the same lighting conditions, since you should already have propagated your primary color-grading (calibration profile) to the relevant images. Don’t forget to paste the history using append mode or you will overwrite your primary color-grading as well.

However, this alone will not ensure a consistent look for the whole series.

🔗fine-tune individual settings

If there was some variability in your lighting conditions, each image will need some further fine-tuning adjustments. Fortunately, if you have applied the proposed method so far, this should be relatively straightforward.

First, homogenize the exposure using your control sample and the area exposure mapping tool.

Then, adjust the filmic rgb white relative exposure if needed, preferably using the color picker. The contrast should not require any adjustment since it does not depend on the dynamic-range of the image.

Finally, homogenize the chromatic adaptation, using your control sample and the color calibration area mapping tool.

This should get you close enough in most cases. However, if the background has changed, it is possible that these fine adjustments (aimed towards technically normalizing the primary color-grading on an individual basis) are not sufficient to give a perceptually-even look. In this case, you will need an extra step of secondary color-grading, which you are advised to perform on top of the previous one (shared with the other images of the series), in new instances of the relevant modules located later in the pipe. This ensures that the base secondary color-grading stays constant for all images and makes for a better workflow. You are not advised to make large changes in the primary color-grading to manage perceptual discrepancies involving contrast with the background.

🔗controlling your series

The culling mode in the lighttable view will help you to compare images side-by-side when the work is done. To view your reference edit in the darkroom view, you may display the filmstrip and increase its height, or use a snapshot of the reference overlaid on the current image (which will not necessarily have the same size).