As described in the previous sections, the final output of a module’s mask (the combined effect of any drawn and parameteric masks) is a grayscale raster image representing the extent to which the module’s effect should be applied to each pixel. This raster image is stored internally for active modules and can be subsequently reused by other modules in the pixelpipe.

As with any mask, if the opacity value for a pixel in a raster mask is zero the module’s input passed through the module unchanged. If the opacity is 1.0 the module has its full effect. For each value between 0 and 1.0 the module’s effect is applied proportionally at that location.

Enable the raster mask from its tab and choose a source from the combobox. Raster masks can be identified by the name of the module against which they were originally generated.

Combining with drawn and parametric masks

In Ansel, a raster mask is no longer a mutually-exclusive mode: it can be combined with a drawn and/or parametric mask on top. When you do, the raster mask serves as the base, and the drawn and parametric masks refine it — their opacities are multiplied together pixel-by-pixel. Because masks combine multiplicatively, adding a drawn or parametric mask on top of a raster mask can only restrict its area further, never extend it.

This lets you reuse a mask computed elsewhere in the pipeline (for instance a luminance or edge mask produced by another module) and then trim it to a region with a drawn shape, or restrict it by color with a parametric mask, without having to rebuild it from scratch. In Darktable, selecting a raster mask disabled the other mask types entirely.


Note: Raster masks are generated as part of a module’s internal processing. Once a module’s processing is complete its mask then becomes available to subsequent modules in the pixelpipe.

This has two implications:

  1. Raster masks cannot be generated by disabled modules since they do not participate in pixelpipe processing. As soon as you disable a module, its mask is no longer available for use.

  2. Raster masks are passed up the pixelpipe after module processing – they can only be used by modules that come later in the pipe than the generating module.