ComfyUI Node

Split Toning

Teal shadows, warm highlights, instant film grade

By isekai-sh·Created 9 months ago·Updated 8 months ago· 3
Split Toning
  • image
  • image
highlight_color
shadow_color
intensity0.30
balance0.50

IsekaiSplitToning is a color-grading node that does the classic photographer's trick: tint the shadows one color and the highlights a different one. It's the mechanism behind every "teal and orange" blockbuster still you've ever seen, and it's the fastest way to make a flat render feel like it was graded for a film. You pick two colors, dial in the strength, and the image suddenly has mood.

How it works. The node converts your image to numpy, computes a luminance value per pixel, and splits the image into two camps: highlights (luminance above your balance threshold) and shadows (below it). Then it blends a highlight tint into the bright pixels, a shadow tint into the dark ones, each weighted by intensity. The default balance of 0.5 splits exactly at mid-gray; push it toward 1 and almost everything counts as a shadow (more pixels get the shadow tint), toward 0 and the highlight tint takes over most of the frame.

The six color choices per side are named rather than pickable from a wheel - Warm, Cool, Yellow, Blue, Red, Green - so you're working with fixed tints, not arbitrary RGB. That's a limitation (you can't do a custom brand-teal), but it's also the point: quick, opinionated, reproducible grades.

Inputs that matter. Four, and the recipe is two plus two:

  • highlight_color and shadow_color - the tint pair. The classic combo is Warm highlights + Cool shadows (teal & orange), or Yellow highlights + Blue shadows for a more saturated take.
  • intensity - 0–1, default 0.3. This is the dial you'll actually live on. 0.3 is tasteful; anything above ~0.6 starts to look like a heavy Instagram filter.
  • balance - 0–1, default 0.5. Moves the shadow/highlight boundary; rarely needs touching unless your image is mostly one luminance.

Output is a single image (IMAGE tensor), wired anywhere an image goes. Put it after VAE decode as a finishing pass before save, or stack it after the pack's Posterize/Color Ramp nodes when you're chasing a stylized look. Because the tints are fixed and the math is deterministic, it's also a handy way to get a consistent grade across a whole batch - same settings, same look, every image.

Install. Standard pack install: ComfyUI Manager → search "isekai" → install → restart. Or:

cd ComfyUI/custom_nodes
git clone https://github.com/isekai-sh/isekai-comfy-node
cd isekai-comfy-node
pip install -r requirements.txt

Restart; it's under Isekai → Image/Blend. Pure PIL + numpy, no models, nothing heavy.

Common issues. The pack's usual suspects apply: only the first image of a batch gets processed, and any error logs [Isekai] Split Toning Error to the console while returning the original image - so a "no effect" result means it threw. The real pitfalls are aesthetic, though. With intensity high and the balance extreme, skin tones get dragged toward the shadow or highlight tint and people start to look radioactive - keep intensity under ~0.5 for portraits. And because the tint decisions are hard (a pixel is highlight or shadow, with no smooth ramp between them), very high contrast on noisy images can band at the boundary. Defaults are genuinely good here; the node rewards restraint.

CategoryIsekai/Image/Blend

Inputs (5)

NameTypeDefaultDescription
imageIMAGE
highlight_colorCOMBO6 options: Warm, Cool, Yellow, Blue, Red, Green
shadow_colorCOMBO6 options: Warm, Cool, Yellow, Blue, Red, Green
intensityoptFLOAT0.300–1
balanceoptFLOAT0.500–1

Outputs (1)

NameTypeDescription
imageIMAGE