RGB Curves node - broken?

Am I the only one who thinks the RGB curves node is utterly broken?
It does not alter color & intensity the way you would expect it to do, like in Photoshop or any other app for an example.
Example, if I put a handle in the middle of the curve on the green channel (midtones), and I drag the top (highlights etc) handle down, i would expect the image to maintain the green in the midtones, and decrease the green in the highlights. This does not happen, it usually gives very weird results.
Its like its working with a extremely limited range… Anyone feel the same?

It doesn’t seem broken to me. I don’t have photoshop, and I’m not sure how it works. It works similarly to curves in GIMP. There may be some differences, I’m not sure, didn’t do a careful examination, sometimes stuff works differently due to working in linear color space rather than sRGB.

It doesn’t reduce the green in the highlights, it reduces the green in the areas of high green values, which aren’t necessarily highlights. However, if you want it to act on the basis of highlights, you could run the color into the fac, which would modulate the influence of the curves based on overall luminance. You could also run it through separateHSV/value to use value if you’d prefer, and you could run that single channel value through its own RGBcurves node if you wanted, to make it smoothly affect only highlights or shadows.

Its defaults are based around a 0,1 range, but it can be tweaked for operating on values outside of that range. It’s just a lookup: you give it a value, it looks that value up along the x axis and outputs the y axis value.

You may be noticing that it affects beyond the segment you’re dragging-- that’s because its a curve. As you do what you say, drag highlights down while holding midtones steady, notice what happens to the curve between shadows and midtones: it arcs upward to preserve the curve (to preserve a smooth derivative for the curve). That keeps the changes smooth. You can change handles to vector handles or use more handles to prevent this behavior.