Tone Curves
The curve is the one control that can do what brightness, contrast, levels and gamma sliders each do separately — and several of them at once. Drag a point up and those tones get brighter; steepen a section and the contrast in that part of the range increases; bend one channel on its own and you have colour grading. The histogram sits behind the grid so you can see which tones you are actually moving, and the preview updates as you drag.
Drop an image here
PNG, JPG, WebP — multiple files allowed, the first one drives the preview
Click to add a point · drag to move · Alt-click or double-click to remove · arrow keys nudge
2 points on RGB · curve is linear
How to use it
- Drop one or more images. The first one is loaded into the preview and its histogram is drawn behind the grid.
- Leave the channel on RGB for tonal work — brightness, contrast, black and white points.
- Click anywhere on the diagonal to drop a control point, then drag it. Up brightens, down darkens. The x position picks which tones you are moving: left is shadows, middle is midtones, right is highlights.
- Switch to Red, Green or Blue to grade colour. Lifting the blue shadows and pulling down the blue highlights is the classic teal-and-orange look.
- Uncheck Split preview to see the whole graded frame, then press Apply curve & download. Every queued file gets the same curve at full resolution.
Reading the grid
The horizontal axis is the input value of a pixel, 0 on the left to 255 on the right. The vertical axis is what that value becomes. The dashed diagonal is the identity: a curve sitting exactly on it changes nothing. Everything you can do reduces to three moves.
- Lift or drop a point. The tones near that input value move brighter or darker. This is a targeted brightness control — you can brighten the midtones without touching the highlights, which a brightness slider cannot do.
- Steepen a section. Where the curve is steeper than 45°, the output range is wider than the input range, so differences in that band become easier to see: more contrast. The classic S-curve steepens the middle at the cost of flattening the two ends.
- Move the endpoints inward. Dragging the bottom-left point up raises the black level — a matte, faded look. Dragging the top-right point down does the same to the whites. Both throw away contrast on purpose.
Steepening one region always flattens another, because the total vertical distance is fixed at 255. That trade is the whole craft of curves: decide which tones matter in this picture, and spend the contrast there.
Why the interpolation is monotone
Between your control points the curve has to be filled in, and the obvious choice — an ordinary cubic spline — misbehaves. Put two points close together with a steep slope between them and the spline overshoots: it climbs past 255 just after the second point and then comes back down. In an image that reads as a bright rim or a dark seam appearing out of nowhere in a smooth gradient.
This grid uses a Fritsch–Carlson monotone cubic instead. It clamps each segment's tangents so the interpolated curve never rises where your points fall or vice versa, and never leaves the range your points define. The cost is that very tight point clusters look a little stiffer than a free spline. That is the right trade for a tool whose output is pixels.
FAQ
What order are the channels applied in?
Master first, then the per-channel curve — the same as stacking two adjustment layers with RGB underneath. Internally that is one composite lookup table per channel, red[master[v]], so a pixel is still touched exactly once no matter how many curves you have bent.
Does it work on transparent PNGs?
Yes. Alpha is passed through untouched, and fully transparent pixels are skipped entirely — grading them would produce coloured fringes wherever the image is later composited. Semi-transparent pixels are graded normally.
Why does the preview look different from the download?
It should not, tonally. The preview is a downscaled copy — at most 460 pixels on the long edge — so that dragging stays smooth, and the export runs the same lookup tables over the full-resolution image. Fine grain and dithering will look softer in the small preview simply because of the downscale.
Can I undo one point without resetting everything?
Alt-click the point, or double-click it. That removes it and the curve re-interpolates through what is left. The two endpoints cannot be deleted — they define the domain — but they can be dragged vertically. Reset curves returns all four channels to linear.
How is this different from the other tone tools here?
Auto levels picks the black and white points for you from the histogram. Brightness, contrast and gamma each apply one fixed shape. Apply a .cube LUT loads a grade someone else authored. Curves is the manual version of all of them, and the only one that lets you shape different parts of the range independently.