Introduction to curves
Many are probably familiar with the Curves tool as found in Photoshop and After Effects. Curves are powerful because they let you control the tone values of the image with much more precision than other typical adjustments such as Levels. The curve is actually a function which maps the original luminance values (on the X axis of the graph) onto new values (on the Y axis). But don’t be afraid of the mathematical definition – the easiest way to understand how the Curves tool works is simply to try it yourself. Place a point in the top-left quarter and pull it up, and you’ll see the image’s highlights getting brighter. Do the opposite in the bottom-right corner, and the shadows will get darker.
The curve nodes in Conduit obey the same logic as in those Adobe apps I mentioned above, with the difference that we offer several variants of curves which have slightly different characteristics. The main reason for this is that Photoshop/AE traditionally operate only on 8-bpc images, whereas Conduit works purely in a 32-bit floating point HDR color space. So while Photoshop can get away with using a precomputed low-precision lookup table (LUT) to perform the curve operation, Conduit actually computes the function separately for each pixel. What you gain is perfect precision: operations in Conduit never produce banding, and the effect of the curve is accurately applied down to the most minuscule tone variations.
(By the way, Photoshop’s reliance on old-fashioned lookups is the reason why Curves – and most other adjustments – are not available when working on 32-bit HDR images in Photoshop CS2.)
The most basic curve is the Cubic with no scaling and no weighting:

You can move any of the four control points vertically, but that’s all. Although that sounds limiting, it’s enough for a lot of typical needs. What you gain by using this no-frills curve is performance: this plain Cubic consumes as little as 3-4 GPU instructions. (Whether that matters at all depends completely on your GPU hardware — I’ll talk about that in a moment.)
When you need more flexibility, the Cubic stretches further by enabling “X weighting”:

In this mode, you can move the two control handles in the middle horizontally, but they always move together (=the distance between them can’t be modified). The price you pay for this degree of freedom is a few more GPU instructions.
You can also modify output levels (i.e. move the start/end points of the curve horizontally) by enabling “X scaling”:

If the tricked-out Cubic isn’t enough for you, you’ll have to move up to the Bézier curve, which lets you manipulate the two control handles independently:

Bézier Curve can cost up to 16 GPU instructions, so it’s one of the most computationally expensive nodes in Conduit.
Whether you need to care about the instruction count depends purely on the graphics hardware in your system: on older GPUs you’ll start to see rendering performance slow down if the number of instructions used by your conduit grows too large. The ATI Radeon 9600/9700 are particularly vulnerable to large instruction counts. OTOH, on more recent GPUs such as the NVidia Geforce 6800 or Radeon X1600 you shouldn’t have any problems even if you go nuts with Béziers. Still, it certainly doesn’t hurt to use Cubics if you can – just think, having the GPU doing less work could result in savings of 0.0000214% on your power bill ;)
The Cubic and Bézier curves are only properly defined for input colors that fall into the so-called standard range, i.e. values between 0 and 1. For that reason, you’ll generally want to keep the “Clip input” option enabled. The following screenshot from the Plot view illustrate the point. First, with input clipping enabled:

Without the clipping, the curve math can end up doing unexpected stuff for values outside the standard tone range:

This is a problem only if you need to apply a curve to a HDR image. Of course in Conduit it’s very easy to create HDR values (by intent, or sometimes by accident)… If you need to work with HDR input in curves and can’t accept clipping, an easy solution is to apply Levels before and after the curve so the image values are temporarily scaled within the legal 0-1 range. For example: you know your brightest HDR values are around 6.0, so you would apply Levels with “input white” at 6.0 before the curve, and another Levels with “output white” at 6.0 after the curve.
If you need separate control of RGB tone values, currently you have to use three separate nodes, maybe like this:

As you can see, it’s possible to individually shrink or grow nodes in Conduit to make the graph more readable. These scaling options can be found in the right-click context menu for the selected node.
Finally, an operation that is often handy: use a curve node to select a luminance range from an image, and use the result as a matte:

In this example, the Cubic curve isolates the highlight tones from the image, so the Multiply operation with the bright yellow color doesn’t get applied to the entire image. (With Curves, Multiply, Add and Gamma, you have the “raw materials” to build your own 3-way HDR color corrector with lift/gain/gamma controls and editable range curves. That could be your advanced level homework, if you choose to accept it…)





