Color Choosing Paradox, also Warmer vs Cooler

I’m sure many of us are aware that color is extremely contextual. That is, if you’re painting or trying to add color to something, the actual color perceived doesn’t exist until you’ve already put the paint on the canvas and viewed in context with the rest of the colors on the canvas (or photo, etc). So, the paradox is: How can we (quickly) choose colors from a palette or color chooser dialog and know what they will look like on the painting? Seems we need to just intuitively know how a color will look, or use an exhaustive pick and try, undo, pick and try, cycle.

Well, I think I’m getting closer to a solution to this. The first step is getting rid of the the entire GUI for selecting colors, since the GUI (if it presents more than one color) will interfere with the selection process. Not to mention, the GUI is likely to be out-of-context to the painting/photo (off to one side, away from the pixels you intend to color.

So, what I’ve done is hijacked the standard eyedropper swatch that shows you the color you picked off the canvas. But instead of picking a color off the canvas, we adjust the brush color in whatever channels we want (I’ve chosen HCY). Then the new adjusted color shows up where your cursor is, showing you a pretty darn good representation of how that color is going to look on the canvas. Here’s a video demo. In the video you can see the color GUIs but I’m not using them to change or choose colors. I actually only change the C and Y channels in this demo, but I could have rotated the hue CW or CCW:

The caveat (actually, I consider this a benefit) is that you have to use keyboard shortcuts for the “up/down” of whatever channels you want. The other challenge is step-size. It’s not useful to have each key press jump your channel by 10%, but you don’t want it to always be .001%, either, or your fingers are going to fall off. So I’ve added some crude logic to compare the timestamp of the last time you adjusted the color channel up/down, and use that to scale the step-size. So you if tap the keys quickly, the color changes very quickly, and likewise tapping slowly can “fine tune” the color in very small steps.

I’m using the HCY space because it maps pretty closely to the artist concept of Hue, Tones, and Tints/Shades, respectively. However, I’m trying to think how we could have a generic “warmer/cooler” channel adjuster. Studying Bruce McEvoy’s page on this it is clear that it is NOT straight-forward, since warmer/cooler is again, contextual to the painting/photo at hand. So, I’m considering some method to sample the canvas region and determine which direction and which channel(s) the current brush color would need to go to make it “warmer or cooler” in comparison. I’m not sure if it makes sense to sample just a region, or if I ought to sample the entire painting to get an overall pixel average to work with… thoughts?


Your observations of course are exactly correct. I watched your video, your keyboard way to modify the color on the brush is nice! and the notion of tapping speed affecting the size of the incremental change seems like a very natural and efficient way to control changes in paint color.

Speaking just for myself, I never found any of the various RGB-derived color spaces particularly useful for picking colors, and I wanted something that would make it easy to put McEvoy’s information to practical use in the digital darkroom. High bit depth GIMP now has LCH color pickers and blend modes. LCH isn’t JCH, but it’s a lot closer to being perceptually uniform than XYZ or RGB or any of the various RGB-derived color spaces.

With respect to step-size, according to, HCY “Hue” is the same as HSV Hue (and also HSL Hue). The HSV/HSL/HCY Hue ring makes it look like these Hues are spaced apart in some sort of perceptually meaningful way, and also makes it look like every color on the outer ring has the same “chroma/saturation/etc”.

But when plotted in the LCH color space, it’s obvious that these RGB-derived “Hue increments” in fact are not perceptually uniformly spaced at all, and that the maximum LCH Chroma for any given HCY/HSV/HSL Hue does vary considerably from hue to hue as chosen using the RGB-derived color spaces:

You picked one of my favorite pages from MacEvoy’s (not “Lindbloom’s” as I originally incorrectly typed, though Lindbloom’s website also is a great source of information, but about color spaces rather than about mixing colors) wonderfully informative website. Awhile back I put together a tutorial on using LCH to pick warm and cool colors:

There are some threads on concerning LCH:

It could be the case that for MyPaint considerations of computational speed completely trump making actually perceptually uniform “step changes”.

Thinking ahead, if/when MyPaint is color-managed, and/or when Rec.2020 monitors reach the consumer desktop, all the intuitive grasp that artists have built up over the years regarding what happens when making color adjustments using HSV/HSL/HCY/etc will need fairly drastic “recalibration” as the meaning of triplets in these RGB-derived color spaces will change fairly radically when switching from sRGB to Rec.2020.

Right now MyPaint is not color-managed, so presumably the user is working in sRGB, using a monitor that’s more or less calibrated to sRGB? Why does HCY seem to use the “Y” values for NTSC ( The babl HCY code also uses these NTSC Y values. See Side Note 1 on this page:


Thank you for the feedback! I have a lot of reading to do on LCH, which does seem very nice. The only issue I see is that it might not satisfy my (perhaps irrational) preference for having a channel for “tints/shades”, totally independent of the channel for “chroma”(tones). That is, with HCY (or HSL) I can use the Y channel to go from 100% black to 100% white, regardless of the Chroma channel. This is really useful. When the MyPaint hotkeys were HSV, it was really annoying to crank up the Value and get “stuck” and then have to decrease the saturation to finally reach “white”. LCH appears to have this same behavior. HSL can go from black to white with the L channel, but the saturation channel doesn’t create “tones”, where tones is roughly defined as maintaining luminosity while decreasing chroma. LCH appears to be similar to HCY (probably a lot better) in its ability to keep the luminosity similar when changing the chroma.

Could it be possible to have hue and chroma step changes use LCH, but Luma step changes use HCY (or HSL)? I don’t see why not. Maybe mix and match would make sense. If you haven’t noticed I’m more than a bit suspicious of using a wheel/GUI at all for picking colors. Ultimately I would like to go “Full Screen” without an interface and just nudge the color one way or the other until it “looks right”. :slight_smile:

Too many Bruces involved in color! Your article was interesting, but I’m having trouble applying it to the idea of a severely limited palette, since I would almost never reach across the color wheel for the complements but instead reach across the limited gamut towards “subjective primaries” as James Gurney calls them. Here’s an example of a digital painting I did and the “gamut mask” I used, although this image represents the colors within an ~Adobe RGB colorspace, which is why it is such a small slice:

Yes, I’m using an Adobe RGB monitor with MyPaint and then going back and assigning my display profile and converting my image to sRGB. Yes, it is a nightmare. So what I’d like (I think) is a way to specify my light source color, say, yellow. Then I pick a red color and I want to make it “cooler” in relation to this light source. I think this paragraph from MacEvoy hints at the solution:

How do I make a color warmer or cooler? The answer depends on whether your axis of reference is the illumination or the hue circle. If you want to make a color warmer within a certain kind of illumination (that is, the light in any representational landscape or portrait), then the “warmest” color is typically shifted from red orange toward the color of the illumination. Greenish light makes oranges and yellow warmest, because reds are dulled almost to blacks; orange light makes oranges warmest, and dulls magentas and yellow greens.

So maybe even a 2D painting program needs a way to configure the “light source” color, maybe defaulting to D65 or D50? Then we can shift hue and chroma in relation to that in a logical fashion. . . However, there can be multiple light sources in the scene, so maybe a solution would be to make swatches of your light sources either in the image or to the side. Then, with a brush color already selected you could hover your mouse over the swatch of your light source, and press the “warmer/cooler” buttons to make the adjustments. Obviously you could also do this with any other colors in the picture but it wouldn’t be “representational” but would still be useful. Hmm, it would be tedious to keep reaching for that swatch to make the adjustment… so maybe a global setting makes sense, but have a specific key shortcut that “captures light source color” so you can still change your light source color very quickly. Yes, I’m aware that I am rambling :slight_smile:

Oh, I forgot to mention I added some neat color channel pickers that sample a particular channel. Right now H, C, or Y only but I could imagine setting a preference for other spaces, even RGB. Here’s a little demo:

It can be pretty useful for picking a hue from palette, wheel, or another part of the painting and then force it to match your existing color scheme with the constrained C and Y channels.

Actually, I think the GUI and these wheels is one of the areas we can really afford to use more CPU, if needed. The only performance-critical thing is the actual laying of strokes, IMO. Don’t lag the brush! :slight_smile:

Can you explain that a bit more? I thought as long as it was “three lights” the same concepts apply, whether it is Adobe RGB, Rec 709, etc etc.

Great question. I noticed that too and switched them out for Rec 709 numbers but didn’t notice a big difference, and I learned none of those coefficients should be hardcoded anyway :-P. So, add that to the list of not-quite-right stuff to fix. Actually, I believe there are some references to W3C standards, and the actual standards for certain things specify those particular coefficients, even though that doesn’t seem to make any sense

Hmm, that was the wrong Bruce for sure. I wrote Lindbloom but meant MacEvoy - is there one of those little smiley-face things for people feeling red-faced? I’ll go correct what I wrote to avoid sending people to the wrong Bruce.

You have some nice questions to ponder - a major disadvantage of moving along L/C/H to pick colors is that it’s very easy to pick/paint/create by blending colors that are outside the image’s color space and also easy to pick/paint/create by blending colors that are not just out of gamut but also entirely imaginary.

I just skimmed the conversation but I think part of the confusion with luma is that it changes with each Rec. I mostly use L* and “luminance” because they are relatively easier to understand, unlike V, L and the Y’s. Then again, I am unfamiliar with color theory in general.

Ouch! Surely there is a way to constrain that to the selected color space?

My article only mentions a few of the color harmonies discussed by MacEvoy:

I’m working on a companion article that will cover some of the other types of harmonies, simply because I think articles that tell people how to use HSV/HSL/etc-based “color harmonies” to choose colors for digital painting are just a bit silly and misleading because they are based on RGB-derived “hue” calculations that don’t have anything to do with how we actually perceive color differences. This is not to say that artists haven’t made excellent paintings using the various HS"X" colors. But I’m guessing this is because good artists rely on their eyes and artistic sense to pick harmonious colors - they don’t slavishly implement HS"X"-based color harmonies.

I hope you don’t mind, I took the liberty of plotting the colors in your painting in the LAB color space, on the left, looking down the LAB L axis, and on the right, looking down the cyan-magenta axis so as to show the colors in relation to the L axis:

And here’s the color scheme on the LCH color wheel:

Reading through the MacEvoy discussion of various color harmonies, your painting uses an analogous color harmony with a range of LCH Hues from 30 to 70, earth colors, which of course you already know :slight_smile: . The darker colors are all very neutral, drifting into nearly achromatic greens, and a small part of the image - in the shadowed areas around the knees - drifts into some nearly achromatic blues.

I didn’t look up Gurney’s “subjective primaries”, but looking at your image, to me the man’s jeans look blue. This is because as you say colors influence each other, and warm colors make less warm colors look cooler, actually look like the opposite color, not opposite on an HSX color wheel, but on a perceptually uniform color wheel. So all the bright warm oranges visually push the colors in the jeans towards blue. But hardly any part of those jeans is actually blue, only small portions of the shadow areas near the knees.

Is this “what the colors look like in context of the whole painting” vs “what the colors are in isolation” related to what you mean by “subjective primaries”?

Wow, that is really cool. Thanks for generating that plot!

Yes, I think in this case the achromatic center of the wheel became the new “subjective blue primary”. I think what Gurney is saying is that if you define a new gamut with this mask idea, you create a new “subjective neutral” in the geometric center of whatever shape the mask is. I think this could be considered the white point of the color scheme (the N):

Image from:

So within this new gamut you still have all the “hues”, they mostly just really, really dull). Maybe the jeans look blue because they are far away from the white point of my gamut mask, and hence considered a saturated color, and the “direction” of this deviation is going towards blue blue/green so that becomes the perceived color? In other words, the same exact ~achromatic RGB color should become “green jeans”, “purple jeans”, “red jeans”, etc etc by just moving that gamut mask around the wheel (and of course repainting or color shifting the image).

Would these gamut masks make more sense placed onto the CIELAB shield? The round hue wheel seems totally meaningless, doesn’t it?

Interesting! Looks like the footprint of a clothes iron. Perfect for a pair of jeans. My first thought when seeing the painting was “blue jeans; these jeans are blue” but being a person who doesn’t wear them I suppose there are other colored jeans as well.


I think you hit on yet another way that colors by themselves look very different from colors in context - we expect jeans to be blue, so they look blue. But in this particular image, I think the surrounding colors determine the appearance of the jeans more than just plain “expectations” that jeans are blue.

I thought that if the image colors were made more saturated, the jeans in the image would no longer look blue. But they still do as long as the other colors in the image are visible. The only way they stop looking blue to me is if I zoom in to 1600% and scroll until the surrounding earth tones aren’t visible, and then the jeans look gray, which they mostly are.

Edit: Actually the visual results of adding “saturation” depend on the algorithm used:

First I used GIMP-2.9’s Gegl Saturation, which actually operates in the LCH color space. Even moving the slider to +2.5 (that’s a lot), the jeans still look blue, though they don’t “color pick” as LCH blue hues (roughly from 220 to 260 on the LCH color wheel), instead color pick mostly as yellow-green and green hues, just as before. This algorithm oversaturated the skin tones compared to the colors in the jeans.

Then I used GIMP-2.9’s LCH Hue-Chroma tool (also a Gegl algorithm), and raised the Chroma by 30 points (that’s a lot), at which point the jeans look decidedly green, with splotches of magenta and blue-green. This algorithm made the background and the jeans look fairly oversaturated, while leaving the skin tones looking not nearly so over-the-top as the Gegl Saturation algorithm. Weird. I’ll have to ask the GIMP devs why there is such a difference.

1 Like

Actually the shield shape is the shape of the sRGB color space as projected on the LAB a-b plane. This is because sRGB is a matrix color space and all matrix color spaces have similar “shield shapes” on the LAB ab plane. Similarly in xyY space, sRGB’s “footprint” on the xy plane is a simple triangle, as are all RGB matrix color spaces. But the exact size and shape of the triangles on the xy plane vary, just as the sizes and shapes vary for the various RGB matrix color space “shields” on the LAB ab plane.

Other types of color spaces (such as printer LUT profiles) have different shapes. This page shows the projection onto the ab plane of several familiar color spaces - just look at the pictures, though if anyone is curious there is also a short and simple explanation of LAB:

Regarding the round LCH hue wheel, no, that is not physically meaningless. LCH is just a polar transform of LAB. So Chroma is the square root of the sum of the squares of a and b, or in terms of the polar graph, find a color’s a and b coordinates, and measure the distance to the center, where a=b=0. And Hue is the angle between the positive a-axis and the line connecting the intersection of the color’s a and b coordinates and the point where a=b=0, measured counterclockwise from the positive a-axis.

Lindbloom defines the “lab gamut” as “the set of Lab color coordinates for which there could possibly be a physical sample” (Welcome to Bruce Lindbloom's Web Site). The LAB space itself goes off to infinity in all directions. But most of the coordinates don’t correspond to colors that humans can actually see (there’s no corresponding “physical sample”). So an interesting question is what size and shape is the “lab gamut” when displayed in the LAB color space?

Sadly Lindbloom’s nicest displays of color spaces don’t seem to be working any more. But see these pages for an idea of what the “lab gamut” looks like in LAB space:

Welcome to Bruce Lindbloom's Web Site (scroll to the bottom)

1 Like

Ah, I think I’m beginning to understand :). What I think I mean is that, if you were going to define a new subset gamut (xy only not luma) with a simple triangle shape (as Gurney does), wouldn’t it only really work right on the xyY’s xy plane. Isn’t that the only place where “straight lines” make sense for defining a gamut with individual colorants (like sRGB, etc)? With the round hue circle, isn’t that just the RGB triangle with its sides stretched out to form a circle? That’s why I was thinking it didn’t make sense for drawing gamut masks on.

I never even noticed that LAB space was the red/green blue/yellow opponent process. Now this has me really confused: MyPaint has 3 hue distortion options, RGB, RYB, and the RG/BY opponent. If I use the RG/BY distortion with a normal HSV wheel, what do I get? Some sort of Chimera? Do the hues match up with the LCH wheel, while the S and V are still using the HSV standard? edit I’m going to guess “No”, since the hue distortion is only remapping the RGBY colors.

Ah, ok… so the “visible” lab space rendered in lab space is also a “shield”, but it has “rounded edges” since there are unlimited colorants, effectively. While, RGB spaces use 3 colorants so there are 6 sharp points (three for the colorants and three for where the colorants mix 50/50).

I’m glad this is entertaining. When I was painting it I just knew I wanted to try to stay in the small slice of the pie in my hue circle, and found that just using a lower chroma made the pants look blue. I did the same thing and zoomed way in and saw that it was really a gray. Any blue/greens that are actually in there are probably accidental or the result of noise or something (possibly from using that spectral mixing method I’ve been toying with).

Somehow I don’t think these jeans are going to become an Internet sensation like The Dress did. . . :slight_smile:

1 Like

This discussion is very interesting and I want to respond to some comments about this and that, but it will probably be several days before I have time to organize my thoughts - didn’t want you to think I’d lost interest because this is not at all the case.


Hi @briend - there are so many interesting topics in this thread, it’s hard to know where to start.

The particular “over topic” that I have in mind is about ways of defining and limiting one’s color palette. I’m guessing every good artist does this, and I suspect none of them do this strictly in terms of examining color wheels for possible harmonies to implement in their paintings.

On the other hand, out there in the real world of physical media, artists by definition have to select “some” pigments embodied in “some” medium for applying colors to a surface. And clearly many (all?) artists have preferred colors and more or less limited palettes, as nicely demonstrated in this page (follow the side links to see the various color palettes):

Does Gurney paint with real media (that seems to be the case, looking over his website). If so, then presumably his color wheel at the top of this page was created using real paints on real paper: Gurney Journey: Color Wheel Masking, Part 1

This means that any triangular or other shape Gurney picks out from his color wheel as a potential set of colors for painting a picture, reflects several things that aren’t the same as using digital media:

First, the paint colors that he used to paint the color wheel mix don’t mix additively the way RGB colors mix.

Second, his color wheel isn’t “standard” but rather unique to Gurney’s own color choices, and could have been painted in many other ways that it actually was painted, using many different sets of colors. These handprint pages are perhaps relevant:

If Gurney’s color wheel is rotated to put yellow at the top, and then flipped to put the red colors on the right, to more or less line up with the CIELAB/LCH color wheel, it looks to me like Gurney has somewhat compressed the greens, blues, and blue-violets to make more room for warmer colors. If this is true, then Gurney’s color wheel probably reflects Gurney’s preferred pigments for painting and shows the colors that can be mixed using his preferred pigments. Unfortunately, there’s no telling what color inaccuracies there might be from photographing a real media color wheel and posting it to the web.

Third, and probably more important in the current context, except by wildest improbable coincidence, a triangle drawn on his color wheel won’t have straight lines at all, if the corresponding colors along the sides of the triangle are located on the xy plane of the xyY color space.

Speaking more generally, results of choosing colors on and within a triangle will be different when done using various real media color wheels, vs one or another representation of digital colors, even if the three vertices of the triangle on the real media color wheel correspond to the exact same colors located on whatever plane is appropriate for whatever digital color space one happens to be using.

I guess I’m somewhat asking about the value of drawing straight lines, and also asking what the differences are in the resulting color palette, when the straight lines are drawn on different color wheels in different mediums, and/or in different digital color space projections.

Speaking of limiting one’s gamut, what color space is the triangle in this image drawn in?

You mention AdobeRGB, but there’s no triangle representing the AdobeRGB color space, but rather a wheel. So I’m guessing the color space in which the triangle is drawn is not xyY but rather either HCY or one of the HS"X" color spaces?

Thanks for helping me understand some of this, it does seem like a huge spread of topics. I don’t know if it would even to split it into multiple topics since everything seems related!

I think many artists do this intuitively without thinking a lot, but then there are artists like Gurney that obviously do quite a bit of thinking about it, and use color wheels and theory and “gamut masks”, etc as part of the planning phase. I think Gurney does this work before-hand so that he can focus more on painting. Then there are others that use traditional palettes such as the 4-color “Zorn” palette, which I suppose is a way to avoid thinking about the topic altogether :-). I’m in the camp that would like to think about it a bit before-hand, and then stop thinking about it and use tools (somehow) to keep the palette and painting coherent within the established limits (or gamut, or whatever it is that achieves this goal).

I think it’s worth considering the processes to be more similar than they are different. RGB colors don’t have to be mixed only additively (there’s normal mode, multiply, etc etc). The primary difference I can so far find is the number of colorants, where RGB uses three and the real world has many. So, I’m suggesting we should consider the processes interchangeable in theory but not in common practice (until full-spectrum rendering is mainstream ;-).

I agree, and I think even Gurney’s masks are not accurately depicting the “true” gamut that his painting ends up with even on his own wheel. That is, I’m pretty sure the mixing paths, being curved, result in his painting containing colors slightly outside the masks that he’s created, or even more constrained than the masks imply.

I think this is again, mostly a matter using a limited set of colorants versus ~infinite but theoretically they could be very similar.

That is a good question, it seems straight lines are only relevant when dealing with RGB since it seems 3 or less colorants will always be straight? (I think?). It’d be interesting to see mixing paths of 2, 3, 4, 5, etc colorant systems and how that would affect the paths (assuming you used “naturalistic” spectral curves). As soon as you add more than three colorants you start to get curved lines, I think. So, Gurney’s straight lines must not have a lot of meaning other than being a general guide to where those mixing paths might be, and depending on the paints it could be quite a bit off.

So, maybe it makes more sense to pick some colorants (the points of the triangle) but allow the system to figure out what the mixing paths would be to show you the actual shape of the gamut in a configurable model. For RGB that would be straight lines. But even within an RGB system you could at least synthesize the gamut shape of a full spectral system so you could know which colors are “valid”. This would let you “pick” from colors that you wouldn’t be able to reach from RGB (like semi-saturated greens from an RYB constrained gamut). However, blending on-canvas would still follow the RGB mixing paths.

Well, that screenshot was taken from the HCY wheel from unmanaged MyPaint on an ~Adobe RGB monitor, so you tell me ;-). What I meant was, the mask shape I used implies that I used very unsaturated colors but those points are much closer to fully saturated in the sRGB space.

So yeah, I suppose the straight lines on this wheel can be meaningless as soon as you start blending colors together, if the colorspace of the wheel isn’t perfectly aligned with the colorspace of the painting model. Since I’m testing the spectral stuff I bet my colors spill out of the mask. That would be an interesting test-- define a triangular mask, and do a whole bunch of painting and blending with a bunch of colors selected from the mask. Then generate a plot and compare it to the mask. I think with RGB the colors will all stay within the mask, but >3 colorants will spill out somewhat.

My painting from earlier is not a great test case, since, although I used the mask, I also adjusted my colors with the hotkeys which are not constrained by the mask (doh!), so occasionally I noticed I had wandered outside the mask slightly. Which, ultimately, is probably a good feature to avoid being totally locked into a particular scheme (maybe a noise or a mild electrical shock would be enough to keep you within the mask). As I recall something Gurney said in his Color and Light book; it can be useful to set up a system where muted and desaturated colors are the norm, so that reaching for saturated colors becomes a struggle or a conscious choice (such as reaching outside the gamut mask intentionally). Whereas a physical painter often starts with a few pigments and immediately starts to incur saturation costs, a digital painter can easily select any hyper-saturated hue. We need to devise better methods to avoid this. The “masks” are a pretty good start. . . pre-made palettes are basically the same thing (you can actually load a gimp palette directly as a mask in the HCY wheel).

Something like this would be awesome:


@iarga I have thought about this concept before but if apps can make it interactive and intuitive then magic is real. :mage:

Well, I’m learning too, so thanks back at you!

No, I think it’s all interrelated. Choosing a palette of colors, keeping colors within the palette while being able to freely choose colors within the palette, and modifying an already chosen color without going outside the palette, it all relates.

When you talk about “colorants” I’m not sure what you mean. To me “colorants” usually refers to the xyY/XYZ values that define a given RGB matrix color space.

I’m guessing that you are using the term “colorants” as the RGB equivalent of picking real-world paint pigments that will be mixed together to make various colors (which is basically what an RGB matrix profile is, a set of colorants, plus black and white, that can be mixed together to make various colors)? So one colorant combined with mixing with black and white would result in a monotone image? One or more colorants might be specified to define a palette? Or (and/or?) is there a “spectral rendering” meaning?

Like yourself with the straight-line gamut map, I also use straight lines to define a restricted color palette. But my straight lines are drawn on the LCH color wheel to choose a range of hues, a subset of all possible hues.

I think the LCH color space is a good way to choose a range of hues because the chosen Hues are independent of the particular RGB color space. So LCH Hue 20 is always a particular red Hue, and Hue 90 is always “true yellow, not green-yellow, not orange yellow”, and Hue 260 is always a plausible shade of sky blue, and so on. Whereas on the HS"X" color wheels, the “meaning” of any given hue varies from one RGB color space to the next, depending on the relative locations of the colorants.

A second reason why I like LCH for choosing colors is that the “Chroma” of a given RGB color as located on the LCH color wheel is constant, always the same, regardless of what RGB color space the painting or photograph might be painted/edited in.

The various HS"X" calculations for Saturation vary from one HS"X" color space to another, and the “same” HS"X" values for a given color in the sRGB color space doesn’t match the HS"X" value for that same color in, for example, Rec.2020 or AdobeRGB or etc - the larger the RGB color space, the more saturated any given HS"X" coordinates will be, though these coordinates also depend on the RGB color space TRC. To be strictly comparable, you have to compare RGB color spaces with the same TRC.

There is a problem with using LCH Chroma to modify colors, that I’ve been vaguely aware of, that is directly related to why GIMP-2.9’s “Colors/Saturation” keeps the “not really blue but looks blue” blue jeans still looking blue, and using the Chroma slider of the Hue-Chroma tool does not. I spent some time looking at the “Colors/Saturation” code and experimenting with the two ways to increase Chroma in an image, and wrote up the results in a tutorial:

Three ways to modify saturation using GIMP 2.9/2.10 LCH color tools:

While writing the tutorial I realized that I had almost certainly mixed up the “color appearance model” definitions of “saturation” and “colorfulness” in some previous tutorials I’ve written. LCH is not a color appearance model, but rather a color difference model. But one can define “saturation” in LCH as “Chroma divided by Lightness”, which more or less correlates with saturation in color appearance models such as CIECAM02.

I was hoping the @jdc might take a look at the final section of the tutorial (Modify saturation using GIMP's LCH color tools) and let me know how badly I might have mangled the concepts :slight_smile:

Anyway, LCH Lightness/Chroma/Hue are probably not the best parameters for modifying an already selected color. Lightness and Hue are fine, but instead of Chroma, probably “Chroma divided by Lightness” would be a much more useful third parameter for modifying colors.

1 Like


I do not think I can afford an opinion on your skills, which are great.:slight_smile:

Regarding, LCH (or Lab) which are the same thing if not a coordinate and LCH easier to use, your approach seems interesting to me.

It should not be forgotten either, that CIELAB space is far from perfect. While it is excellent for measuring color differences, it is imperfect when you vary the chroma in certain colors, for example the reds become orange, the blues become purple, and so on.
One can find a solution approach here.

In the case of Rawtherapee, I implemented an automatic correction of these problems when the user check the box: “Avoid color shift”

  • First, the algorithm uses relative colorimetry, when the colors are out of gamut, mainly by reducing C (hroma) and in some cases by adjusting L.
  • Second, about 150 LUTs are used to apply a “Munsell” correction in colors where Lab is failing (orange to red, etc.).



I have been aware of this color shift problem for ages but have only recently started asking questions. If I were to use apps other than RT, e.g., GIMP or G’MIC, what would be the simplest way to accommodate for it? Do I use UPLab? If so, how?