📈 Camera Raw Tone Curve
The parametric tone curve — the pack's quiet powerhouse
- image
- mask
- image
- tone_curve_chart
Nobody searches for this one yet, which is a shame, because it's the pack's quiet powerhouse. The Photoshop Curve node gives you point curves - drag points, make an S. This one adds the parametric tone curve from Adobe Camera Raw: four named bands (Highlights, Lights, Darks, Shadows) that you can push independently, the way you'd recover blown-out highlights or lift crushed shadows without drawing a single control point. If you've used Lightroom's tone curve panel, you know exactly what this feels like.
Reach for it when a point curve is too blunt. An S-curve moves everything; the parametric curve moves regions with soft, overlapping weights, so pulling Highlights down to rescue a blown sky barely touches the midtones. For AI images that come out top-heavy or murky, this is often the fastest path to a balanced render - set curve_preset to Medium Contrast, nudge the four bands, done.
How it works
The node builds a lookup table from a base curve, then layers region adjustments on top using Camera Raw's band definitions: shadows cover roughly 0-25% of the range, darks 25-50%, lights 50-75%, highlights 75-100%, with each band weighted by a smooth falloff so the transitions stay invisible. In Point mode you get a raw point curve (the same [[x,y],...] format as PS Curves); in Parametric mode the four sliders do the work; in Combined mode - the default - both apply, which is how Camera Raw behaves with a custom curve. The second output, tone_curve_chart, renders the final curve with matplotlib so you can see what your sliders actually built.
There are four named presets to start from: Linear, Medium Contrast, Strong Contrast, and Custom. The first three are the ACR standards; pick one as your base and push the bands from there.
The inputs that matter
curve_preset- Linear, Medium Contrast, Strong Contrast, or Custom. Your starting point.point_curve- the point list if you're working in Point or Combined mode.highlights/lights/darks/shadows- each -100 to 100. This is the whole appeal: four sliders instead of twenty curve points.curve_mode- Point, Parametric, or Combined.
Outputs: image and tone_curve_chart. There's also an optional mask / mask_blur (0-50) / invert_mask set, so you can tone-map only part of the frame if you want.
Installing it
Standard pack install. ComfyUI Manager → search "ComfyUI-Curve", or:
cd ComfyUI/custom_nodes
git clone https://github.com/aiaiaikkk/ComfyUI-Curve.git
Restart ComfyUI. No models, no keys. scipy does the curve math and matplotlib renders the chart - both come with the pack's requirements.
Where people get burned
The curve_mode default is Combined, which means both the preset/point curve and the parametric sliders are active - if you drag the four sliders and "nothing happens," check whether curve_preset is still Linear and remember Linear is the neutral base. Also note the bands are fixed at Camera Raw's proportions; you can't drag the band boundaries around. It's less flexible than a full custom curve editor and intentionally so - the trade-off (four intuitive sliders, predictable results) is exactly what makes it worth using.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| curve_preset | COMBO | Linear | Camera Raw内置色调曲线预设 |
| point_curve | STRING | [[0,0],[255,255]] | 点曲线控制点,格式:[[x1,y1],[x2,y2],...] |
| highlights | FLOAT | 0-100–100 | 高光区域调整 (Camera Raw标准) |
| lights | FLOAT | 0-100–100 | 明亮区域调整 (Camera Raw标准) |
| darks | FLOAT | 0-100–100 | 暗部区域调整 (Camera Raw标准) |
| shadows | FLOAT | 0-100–100 | 阴影区域调整 (Camera Raw标准) |
| curve_mode | COMBO | Combined | 曲线模式:点曲线/参数曲线/组合模式 |
| maskopt | MASK | — | |
| mask_bluropt | FLOAT | 0.00–50 | 遮罩羽化半径 |
| invert_maskopt | BOOLEAN | false | 反转遮罩 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |
| tone_curve_chart | IMAGE | — |