APNext Split Toning FX
Teal-shadow, warm-highlight color grading in one node
- images
- image
Split toning is the color-grading trick behind half the "cinematic" looks you've ever admired: push the shadows one hue and the highlights another - classic teal shadows, warm-orange highlights - and a flat image suddenly reads like a movie still. APNext Split Toning FX puts that in a single ComfyUI node so you can grade renders in-graph instead of exporting to a color tool. It's one of the "APNext FX Advanced" effects in dagthomas's "SDXL Auto Prompter" pack, which bundles a whole set of post-processing nodes alongside its prompt builders.
This is the node I'd reach for when a render is technically fine but emotionally flat. A subtle split-tone does more for the mood of an image than another five prompt tokens ever will, and unlike a LUT it's fully parametric - you dial the exact hues and how far into the tones they reach.
How it works
It takes your decoded IMAGE, tints the shadow region toward one hue and the highlight region toward another, blends that tint back over the original, and returns the graded image. It's a pure tensor/color operation - no model, no API key. The defaults already lean cinematic: shadows sit at hue 240 (blue) and highlights are neutral, so the first thing you'll do is give the highlights a hue and raise the saturations off zero to actually see the effect.
The inputs that matter
images- the image to grade, from your VAE Decode or upscaler.highlight_hue/shadow_hue(0–360) - the two colors. The cinematic default is warm highlights (around 30–45, orange) against cool shadows (shadow_huestarts at 240, blue).highlight_saturation/shadow_saturation(0–1) - these start at 0, which means no visible tone. This is the "why isn't it doing anything" control; raise them to around 0.1–0.3 for a tasteful grade.highlight_luminance(default 0.7) /shadow_luminance(default 0.3) - where the split falls, i.e. which tones count as "highlight" vs "shadow."balance(−1 to 1) - shifts the split point toward shadows or highlights.midtone_contrast(−1 to 1),blend_mode(color,soft_light,overlay,multiply) andopacity(0–1) control how the tint sits on the image.colorblend at reducedopacityis the gentle, natural default.
The single output is image, into a Save Image or the next FX node.
How to install it
ComfyUI Manager: search comfyui_dagthomas, install, restart. Manual:
cd ComfyUI/custom_nodes && git clone https://github.com/dagthomas/comfyui_dagthomas
cd comfyui_dagthomas && pip install -r requirements.txt
then restart. The pack's requirements.txt includes the imaging libraries these FX nodes use (blend-modes, color_matcher, scipy) plus the heavier openai/anthropic/google-generativeai/transformers/decord stack for the LLM and video nodes in the same repo. decord is the dependency most likely to fail to build; if it does, the FX nodes usually still load once the rest installs.
Where people get burned
- Saturations at zero = no effect. The number-one confusion. Both saturation values default to 0, so out of the box the node looks broken. Raise them.
- Overcooking the grade. Push the saturations or drop the
opacitytoo far and you get a heavy Instagram-filter look. Keep saturations low and opacity below 1 for something that reads as color grading rather than a color cast. - Blend mode changes everything.
colorpreserves luminance and tints cleanly;overlayandmultiplyalso shift contrast and darkness. If the image gets muddy, switch back tocolor. - Grade at the end. Split-tone after upscaling and sharpening, right before saving, so later passes don't fight your color.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | — | |
| highlight_hue | FLOAT | 00–360 | — |
| highlight_saturation | FLOAT | 0.000–1 | — |
| highlight_luminance | FLOAT | 0.700–1 | — |
| shadow_hue | FLOAT | 2400–360 | — |
| shadow_saturation | FLOAT | 0.000–1 | — |
| shadow_luminance | FLOAT | 0.300–1 | — |
| balance | FLOAT | 0.00-1–1 | — |
| midtone_contrast | FLOAT | 0.00-1–1 | — |
| blend_mode | COMBO | color | 4 options: color, soft_light, overlay, multiply |
| opacity | FLOAT | 1.000–1 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| image | IMAGE | — |