Nodes/lf-nodes/Split Tone
ComfyUI Node

Split Tone

Teal shadows, orange highlights, zero photoshop

By lucafoscili·Created 2 years ago·Updated 6 days ago· 35
Split Tone
  • image
  • ui_widget
  • image
  • image_list
shadows_tint0066FF
highlights_tintFFAA55
balance0.50
softness0.25
intensity0.60

You know the look - the blockbuster poster, the film still, the photo you can't stop staring at. It's usually split toning: shadows tinted one color, highlights tinted another, and everything in between falling off smoothly. That "teal and orange" grade is the single most recognizable color treatment in cinema, and LF_SplitTone gives you the whole thing as one filter node with a before/after slider. It's from the lf-nodes filter family, and it's the kind of deterministic color operation the post-processing layer is all about - millisecond-cheap, fully reproducible, and way easier to iterate than re-rolling a seed to get "warmer" light.

How it works

The effect is pure pixel math, no model involved. For each pixel it takes luminance (the brightest channel), compares it against a balance value, and builds a smooth mask from the difference. Pixels below the pivot pull toward the shadow tint; pixels above pull toward the highlight tint; a softness value widens the transition band between the two so you don't get hard color bands across the image. Then intensity scales how much of that blended tint actually lands on the original. In the source it's a handful of tensor operations - luminance mask, two lerps, a blend - which is why it runs instantly even on a batch of images.

The color values are plain hex strings, so 0066FF is a blue shadow tint and FFAA55 is a warm orange highlight - the default pair is literally the classic combo.

The inputs that matter

  • image (IMAGE) - the base image or image list.
  • shadows_tint / highlights_tint (STRING, hex) - the two ends of the grade. Default 0066FF and FFAA55.
  • balance (FLOAT, 0–1, default 0.5) - the luminance pivot. The tooltip nails it: 0 = lift even deep blacks, 1 = tint only the brightest pixels. Lower it to push the tint into shadows, raise it to keep blacks clean.
  • softness (FLOAT, 0.01–0.5, default 0.25) - how wide the transition band is. Small = hard-edged tint boundary, large = gradual drift.
  • intensity (FLOAT, 0–2, default 0.6) - the strength of the tint. 0.6 is already tasteful; pushing toward 2 gets you Instagram-turned-to-11.

Outputs are image and image_list, so it drops straight into the middle of a chain or fans out to list-based workflows.

Install

It's part of lf-nodes:

  • ComfyUI Manager: search "LF Nodes", install, restart.
  • Manual: cd ComfyUI/custom_nodes && git clone https://github.com/lucafoscili/lf-nodes.git, restart.

No models, no downloads. The pack's requirements.txt includes opencv and torch, which ComfyUI already has - nothing extra for this node.

Common issues

  • Colors look too weak or too strong. Intensity is the master volume; the other trap is balance. If your shadows tint never shows up, your pivot is set high enough that nothing sits below it. Drag balance down and watch the blacks pick up the tint.
  • Banding on smooth gradients. That's a softness-too-low symptom. Widen the transition band and the posterized look disappears.
  • You want a preview of before/after. The node's optional widget is an LF_COMPARE - a slider you can drag across the result to see the un-graded original. Use it while tuning, then take it out of the final workflow if you want a clean canvas.
Category✨ LF Nodes/Filters

Inputs (7)

NameTypeDefaultDescription
imageIMAGEBase image to colour-grade.
shadows_tintSTRING0066FFHex colour applied to shadows (e.g. 0066FF).
highlights_tintSTRINGFFAA55Hex colour applied to highlights (e.g. FFAA55).
balanceFLOAT0.500–1Luminance pivot. 0 = lift even deep blacks; 1 = tint only the brightest pixels.
softnessFLOAT0.250.01–0.5Width of the transition band around the balance value.
intensityFLOAT0.600–2Strength of the tint applied.
ui_widgetoptLF_COMPARE[object Object]

Outputs (2)

NameTypeDescription
imageIMAGEImage tensor with split tone effect applied.
image_listIMAGEList of image tensors with split tone effect applied.