Split Toning
Teal shadows, warm highlights, instant film grade
- image
- image
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_colorandshadow_color- the tint pair. The classic combo isWarmhighlights +Coolshadows (teal & orange), orYellowhighlights +Blueshadows 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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| highlight_color | COMBO | 6 options: Warm, Cool, Yellow, Blue, Red, Green | |
| shadow_color | COMBO | 6 options: Warm, Cool, Yellow, Blue, Red, Green | |
| intensityopt | FLOAT | 0.300–1 | — |
| balanceopt | FLOAT | 0.500–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |