Nodes/KarmaNodes/Karma Tone Curves
ComfyUI Node

Karma Tone Curves

Lightroom's tone panel, minus the Lightroom

By KarmaSwint·Created about a year ago·Updated 5 months ago· 1
Karma Tone Curves
  • image
  • image
shadows0.00
midtones0.00
highlights0.00
midtone_contrast0.00
black_point0.000
white_point1.000
shadow_tint_hue0.60
shadow_tint_strength0.00
highlight_tint_hue0.10
highlight_tint_strength0.00

If you've ever graded a photo in Lightroom, you know the tone panel: lift the shadows, recover the highlights, add a touch of midtone contrast, maybe tint the shadows teal. Karma Tone Curves is that panel as a ComfyUI node - independent shadow/midtone/highlight brightness, an S-curve contrast control, black and white point clipping, and split toning, all on a single IMAGE in, IMAGE out. It's the surgical half of this pack's post-processing chain, for when Kolors is too blunt and Film Emulation is too automatic.

Under the hood it's doing what a real tone curve does, just organized as zone controls instead of a graph you drag. The shadows, midtones, and highlights inputs (each -1 to +1) adjust brightness in those ranges independently - negative shadows crushes blacks, positive lifts them; midtones behaves like gamma; highlights pulls down or pushes up the bright end. midtone_contrast (-1 to +1) applies an S-curve, so positive gets punchier and negative goes flat and airy. black_point (0–0.3) raises the floor for that faded, matte look; white_point (0.7–1.0) drops the ceiling to tame blown highlights. The clever bit is the implementation: it blends the zones with cosine weighting so the transitions stay smooth, which is specifically to stop banding - the classic failure mode of naive per-zone adjustments.

Split toning rounds it out: shadow_tint_hue/shadow_tint_strength and highlight_tint_hue/highlight_tint_strength let you tint the two ends of the range with any hue, exactly like Lightroom's split toning. Here's the one number system to internalize: hue is normalized 0–1, where 0 is red, ~0.33 green, ~0.6 blue, ~0.83 magenta. That means the famous teal-and-orange grade is shadow_tint_hue 0.52 (teal lives right before blue) with highlight_tint_hue 0.08 (orange, just off red), both strengths around 0.1–0.15.

Installing it

Search "KarmaNodes" in ComfyUI Manager, or:

cd ComfyUI/custom_nodes
git clone https://github.com/KarmaSwint/ComfyUI-KarmaNodes
cd ComfyUI-KarmaNodes
pip install -r requirements.txt

Restart ComfyUI. No model downloads - it's pure NumPy pixel math.

Recipes worth stealing

The README has a handful that genuinely work. Faded film: black_point 0.05–0.1, shadows +0.1, midtone_contrast -0.1. Punchy modern: midtone contrast +0.3–0.5 with shadows slightly crushed. Matte finish: black point 0.05–0.08 and white point 0.92–0.95. High key: lift everything - shadows +0.2, midtones +0.1, highlights +0.1.

The trap to watch is subtlety on the wrong axis. Because the zones blend smoothly, big single-zone moves are safe from banding but can still look plastic - the reads of "muted," "matte," and "washed out" all live within about ±0.1 of zero, so nudge, don't slam. And remember its place in the pipeline: the pack suggests tone curves first, then color, then lens FX, then grain. Getting the tonal structure right before you touch color and grain is the whole difference between a grade and a filter.

CategoryKarmaNodes/Post-Processing

Inputs (11)

NameTypeDefaultDescription
imageIMAGEInput image to apply tone adjustments to
shadowsFLOAT0.00-1–1Shadow brightness adjustment (-1 = crush, +1 = lift)
midtonesFLOAT0.00-1–1Midtone brightness adjustment (gamma correction)
highlightsFLOAT0.00-1–1Highlight brightness adjustment (-1 = pull down, +1 = push up)
midtone_contrastFLOAT0.00-1–1Midtone contrast (S-curve): positive = more contrast, negative = flatter
black_pointFLOAT0.0000–0.3Raise the black point to clip shadows (0 = pure black)
white_pointFLOAT1.0000.7–1Lower the white point to clip highlights (1 = pure white)
shadow_tint_hueFLOAT0.600–1Hue for shadow split tone (0=red, 0.33=green, 0.6=blue, 0.83=magenta)
shadow_tint_strengthFLOAT0.000–0.5Intensity of shadow color tinting
highlight_tint_hueFLOAT0.100–1Hue for highlight split tone (0=red, 0.1=orange, 0.17=yellow)
highlight_tint_strengthFLOAT0.000–0.5Intensity of highlight color tinting

Outputs (1)

NameTypeDescription
imageIMAGE