Tony Kuyper describes a great way to manage tones in Photoshop that he calls "Luminosity Masks." See http://goodlight.us/writing/luminositymasks/luminositymasks-1.html for his thorough description of how they work and what they can do. I have implemented and extended them in this Gimp plugin.
Put gimp-luminosity-mask.py in your Gimp plugins directory. Usually this is ~/.gimp-2.x/plug-ins. Restart Gimp.
Select a (adjustment) layer that you'd like to apply a luminosity mask to. Go to Filters > Generic > Luminosity Mask.
Choose the layer that will supply mask information, and choose a mode for getting "luminosity" information from that layer (lightness, luminosity, or average). If the layer is grayscale, the desaturation mode setting has no effect.
Choose which tonal region to target (Lights, Darks, Midtones). These are the tonal regions that will be most affected by the mask.
Finally, the "expand/contract" option allows more selective control over how much the mask lets through. Positive numbers expand the affected region (they make the layer affect more of the image), and negative numbers contract the affected region. Typically you would want positive numbers for midtones, and negative numbers for lights/darks.
The expand/contract scale is calibrated to play well with Kuyper's existing terminology. If you are familiar with the terminology from his website / Photoshop action, here is the translation into this Gimp plugin:
|Kuyper's terminology||This plugin|
|Expanded Lights||Lights, +1|
|Light Lights||Lights, -1|
|Bright Lights||Lights, -2|
|Super Lights||Lights, -3|
|Expanded Darks||Darks, +1|
|Dark Darks||Darks, -1|
|Shadow Darks||Darks, -2|
|Super Darks||Darks, -3|
Midtones are not exactly compatible with Kuyper's terminology. Instead, I calculated the curves using what I felt was a more natural generalization of the lights/darks curves. For example, Kuyper's "Basic Midtones" is a mostly gray mask, which I thought was unnatural. This plugin's "Midtones, +0" setting produces a mask that spans all the way from black to white. The midtones calculation may change in the future -- I welcome feedback.