I’m going to outline a color correction tool that works with high dynamic range images.
Essentially, I’d like to propose that Krita introduce a colour adjustment tool that clones the functionality of the “Grade” operator in Natron and Nuke. This allows for colour corrections that do not depend on having the input image in some specific colour range.
Grade node in nuke
What the operators do:
- Blackpoint sets the blackpoint, i. e. ‘0’. Any value below this in the image will be negative.
- Whitepoint sets the whitepoint, i.e. 1. Any value above this will be “superwhite”, that is, outside the 0…1 range.
- Lift lifts the black level of the image, but does not alter the white level. In the CDL filter in Krita, this is called ‘Offset’
- Gain * is the overall gain This would be ‘Slope’ in the CDL filter. This is used to change brightness and tint the image.
- Multiply * is essentially the same as gain: the colour values are multiplied by this factor. I believe this is provided for convenience, so that an overall multiplication can be done after e.g. setting white balance with the gain operator.
- Offset * Is a value that is added to the colour values in the image. Similar to ‘lift’, but affects all values equally. I rarely use this myself except for some technical adjustments to render passes etc.
- Gamma * adjusts the gamma, or the midpoint, of the image. This is equivalent to ‘Power’ in the CDL filter, except the values are mapped differently. ‘1’ means no change, values above this shift the midpoint up, creating a lighter, more washed out look, while lower values shift the midpoint down, creating a darker, more contrasty look. A combination of gamma and gain/multiply would be a good way to adjust the contrast of an image.
How this operator is used:
Essentially the “Grade” operator is a simple tool that gives the user a lot of control over the colors of an image. It can be used to tint an image, to adjust its contrast, or to adjust its brightness. The biggest reason I’d like to see Krita to implement it is that it provides a good workflow for matching different images to each other, such as you’d need to do in e.g. matte painting.
Here’s an example of the workflow to match elements.
Below is a checkerboard composited over footage. I want to place it inside the fog next to the wolf. The checkerboard has the wrong color temperature (whitepoint) and the blacks are at some random level as well.
To match the element to my plate, I use the color picker to pick the blackpoint and whitepoint from the checkerboard. This neutralizes the color cast and normalizes the luminance:
Then I lift the blacks up to match the fog at the depth I’m trying to place my element, by picking a sample from the footage:
Additionally, I adjust the gain to better match the overall brigthness and white balance of my element to the plate (Technically I do this operation before the lift operation in the previous step):
So, that’s a much better fit already. Maybe the whites could be a bit more blue, the overall contrast of the element could be adjusted a bit etc, but you get the point.
Important here is that values can be sampled from the image. Nuke provides a shortcut to select a box to sample the average of, instead of just picking one pixel, which is great for grainy footage. Also of importance is that values can be input numerically, but also with this colour picker tool:
The colour circle is good for picking colour, of course, and the S and V sliders are great for shifting colours in terms of saturation or value, as typically you find your colours are a little too saturated or a little too dark, and without the S and V sliders making fine adjustments would be quite frustrating.
Natron has basically cloned this node from Nuke, and their documentation provides the formula used to calculate the output:
https://natron.readthedocs.io/en/v2.3.14/plugins/net.sf.openfx.GradePlugin.html
I’d be happy to answer any questions about this!






