Split Tone
Teal shadows, orange highlights, zero photoshop
- image
- ui_widget
- image
- image_list
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
0066FFandFFAA55. - 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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Base image to colour-grade. | |
| shadows_tint | STRING | 0066FF | Hex colour applied to shadows (e.g. 0066FF). |
| highlights_tint | STRING | FFAA55 | Hex colour applied to highlights (e.g. FFAA55). |
| balance | FLOAT | 0.500–1 | Luminance pivot. 0 = lift even deep blacks; 1 = tint only the brightest pixels. |
| softness | FLOAT | 0.250.01–0.5 | Width of the transition band around the balance value. |
| intensity | FLOAT | 0.600–2 | Strength of the tint applied. |
| ui_widgetopt | LF_COMPARE | [object Object] | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | Image tensor with split tone effect applied. |
| image_list | IMAGE | List of image tensors with split tone effect applied. |