Color Grading Control: Lift Value


In the color grading filter, the “Lift” setting starts out at 0%, which is the minimum value and I assume is “unity” (no change). This makes it impossible to lower the black levels of existing video as it is already at the minimum setting and it is not possible to enter negative values.

The gamma control defaults to 50% and has a range of +/- 50, i.e. it ranges from 0% to 100%.

Would it be possible to make the Lift and Gain controls behave like the Gamma control and have a range of +/- 50% from “unity” so that these controls can be adjusted up or down from default? Better still, have all three controls default to 0% (unity) and give them a range from -50% to +50%?

Thank you.


Stop bumping; you do not control the priorities. Hardly anyone else has asked for this or even liked your suggestion. You can always try to submit the code change yourself too.


The concept of having a negative “lift” seems odd to me. Are you sure the Color Grading filter is the right tool to lower black levels? I would suggest trying the brightness and contrast filters for adjusting black levels.

Color grading in general will always be limited in Shotcut until we have video waveform scopes. I am actually motivated and eager to work on those. But there are architectural challenges in the way currently. Hopefully some future refactoring will make it feasible to add some video waveform and histogram scopes.


Hi Brian -

There may be instances when, for aesthetic reasons, the user wishes to reduce the black level of a scene such as when shooting through haze or fog. Yes, this can be done with the brightness control but not on a channel-by-channel basis. There may be instances when a user wishes to control the black level of an individual R, G or B channel. You can do this with gamma and gain, so why not “lift”?

I have written a standalone scope program and my caveat is to read the samples in the YUV domain before they are decoded to RGB and processed by DirectX or whatever. I took this approach at first, reading RGB values and performing calculations to derive Y from RGB (which is a simple calculation), but the scope turned out to be inaccurate. It now reads YUV samples directly from a YUV file. It is also calibrated with r103 graticule lines.


One other thing: I never use the Contrast control as it does not allow independent control over whites and blacks; it controls both at the same time. Professional video equipment does not work this way but rather gives independent control over blacks (called pedestal or setup) and white levels (gain).

The difference between the two is that Lift/Setup/Pedestal is additive, and Gain is multiplicative with 1 being unity (input = output). A lift/setup/pedestal value of 0 will likewise give you unity (input = output).


Seems like a reasonable suggestion. I’m thinking that maybe it would make the most sense if all three parameters have a range of -100 to +100 percent.


In which case 0% would be unity or “no change”. Sounds good.

While I have your attention, here is another suggestion made previously:

In the Color Grading UI, would it be possible to add a numeric readout to the master slider for each of lift, gamma and gain? It would allow setting all three channels to the same value for R, G and B simply by entering one numeric value. It would be much more convenient than entering values for the three channels individually.

I see that the Color Grading UI is a little tight for screen real estate. Perhaps add them above the color wheels, between the wheels and the text above them?

The numeric readouts as they are now have been a tremendous boost to the usefulness of this filter. Thank you for adding them.


Also good suggestions. Thanks for sharing your ideas.


Thank you for listening.


Hi Brian -

Any chance of implementing this in a future version of Shotcut?

Thank you.


With the latest version, you can use the scroll wheel on the level control to increment/decrement all three values at the same time. The helps a little with the convenience when setting levels. And now you can at least have some idea what you are doing with the video waveform scope: