Nodes/ComfyUI-Flux2Klein-Enhancer/FLUX.2 Klein Color Anchor
ComfyUI Node

FLUX.2 Klein Color Anchor

Fixing Klein's warm color shift on edits

By capitan01R·Created 7 months ago·Updated 30 days ago· 551
FLUX.2 Klein Color Anchor
  • model
  • conditioning
  • MODEL
strength0.50
ramp_curve1.5
ref_index0
channel_weightsuniform
debugfalse

Klein has a well-documented habit on edits: the output drifts a bit warmer than the input, independent of quantization - people see it on fp8 and on fp16 alike. It's one of the model's most reported gripes, and the community's usual fix has been a hacky low-denoise DDPM pass tacked on after the main sampler. Color Anchor is a cleaner, purpose-built answer to the same problem.

What it actually corrects

This is not an identity-transfer node, and it's worth being precise about that distinction because it looks superficially similar. It reads one reference latent already sitting in your conditioning, then applies a post-CFG correction to the denoised latent's per-channel spatial mean at every sampling step - nudging the overall color statistics of your output back toward the reference. Spatial detail, structure, everything else about the image is untouched. This is color-statistic anchoring only: it fixes "the whole image looks too orange" without touching "does the face look like the reference," which is what the identity-transfer nodes are for.

The inputs that matter

  • strength - the ceiling on how much correction gets applied. 0 disables the node entirely; 1 applies the full scheduled correction. The author's own guidance is 0.3–0.6 as a starting range - push it too high and you're overriding the model's color decisions outright rather than nudging them.
  • ramp_curve (optional) - shapes when the correction kicks in across the schedule, via progress^(1/curve). 1.0 is linear. Above 1 front-loads the correction and tapers off; below 1 holds back early and gets aggressive late. For short, few-step schedules (the 4–8 step territory Klein's distilled checkpoints live in), values of 2–4 are recommended because they reach useful strength quickly instead of running out of steps before the correction lands.
  • ref_index (optional) - which reference latent to anchor colors from, when more than one is connected.
  • channel_weights (optional) - uniform corrects every channel equally; by_variance trusts low-variance reference channels more, on the logic that a channel whose mean barely moves across the reference is a more reliable color signal than a noisy one.

Output is a patched MODEL - this is a sampler-time correction, not a conditioning transform, so it goes right before your KSampler.

Installing it

ComfyUI Manager: search ComfyUI-Flux2Klein-Enhancer, install, restart. Manual clone:

cd ComfyUI/custom_nodes
git clone https://github.com/capitan01R/ComfyUI-Flux2Klein-Enhancer.git

No extra dependencies.

Where people get burned

The color drift this node targets is a real, reported Klein behavior, not a rare edge case - expect to reach for this on i2i edit workflows more than on pure text-to-image. If you're not seeing the correction take effect, check that a reference latent is actually present in your conditioning (via Multi ReferenceLatent) and that ref_index points at the right one when you have more than one connected.

Strength above the recommended 0.3–0.6 band is the most common way this goes wrong - it stops looking like a fix and starts looking like the whole image got color-graded toward the reference, flattening lighting differences you actually wanted to keep. If your output looks color-locked rather than color-corrected, back the strength off before touching anything else. And if you're on a short 4-step distilled run, a linear ramp_curve of 1.0 may simply not have time to apply much correction before the schedule ends - that's exactly the case the higher ramp_curve values exist for.

Categoryconditioning/flux2klein

Inputs (7)

NameTypeDefaultDescription
modelMODEL
conditioningCONDITIONING
strengthFLOAT0.500–1Maximum correction strength. 0.3-0.6 is a good starting range. Too high and you override the model's color decisions entirely.
ramp_curveoptFLOAT1.50.5–8Controls the shape of the correction ramp. Formula: progress^(1/curve). 1.0 = linear. >1 = fast start, tapers off (e.g. sqrt for curve=2). <1 = slow start, aggressive late (e.g. squared for curve=0.5). For few-step schedules (4-8 steps) values of 2-4 work well because they reach useful strength quickly.
ref_indexoptINT00–63Which reference latent to anchor colors from.
channel_weightsoptCOMBOuniformuniform: correct all channels equally. by_variance: weight correction by how stable each channel's mean is in the reference (low-variance channels trusted more).
debugoptBOOLEANfalse

Outputs (1)

NameTypeDescription
MODELMODEL