ComfyUI Node

Color Bias

Steer a generation's palette with hex pickers, no reference image needed

By dimmedcrow·Created 5 months ago·Updated 5 months ago· 0
Color Bias
  • conditioning
  • model
  • clip
  • vae
  • color 1
  • color 2
  • color 3
  • color 4
  • color 5
  • conditioning
  • latent
bypassfalse
active colors2
global influence0.50
batch size1
width1024
height1024
latentnoise
strength 11.00
strength 21.00
strength 31.00
strength 41.00
strength 51.00

Pick colors, get a palette, no reference image required

Color Bias (class CLIPColorBiasMixer) is the whole of a small one-trick pack, and the trick is neat: you pick one to five hex colors, and it pushes your generation toward them. No reference image, no IP-Adapter, no praying that your prompt's "muted teal and warm amber" phrasing actually lands. It's the kind of node you reach for when a checkpoint has a stubborn color cast you can't talk it out of, or when you want a deliberate look - synthwave magenta-and-cyan, autumn orange - that prompt wording keeps fumbling.

Models do carry color biases, by the way. The merge-inheritance lore is real: shared ancestry propagates the same VAE requirements and color casts down whole model families. If your SDXL anime fine-tune always drifts slightly green no matter what you type, this is a direct knob for that, not another prompt hack.

The README scopes it honestly: it's aimed at CLIP-era checkpoints - SD1.5, SDXL, and anime variants like Illustrious and noobai, plus Anima - where color words in the conditioning actually bind to the latent space. On newer LLM-encoded models that connection is much weaker, so treat this as an SD/SDXL-era tool.

How it works

The node does two things at once, and the pair is the point:

  • The text side. Each hex is converted to a plain-English color description - the node tries webcolors first for an exact CSS name, and falls back to a hue-based one ("vermilion", "vivid sky blue") if there's no exact match. It builds a prompt like (red color palette:1.2), red tones:1.1, subtle red lighting, red accents, hex color #FF0000, RGB 255 0 0, HSL hue 0 degrees..., CLIP-encodes that, scales it, and appends it to your existing conditioning. Encodes are cached, so repeated runs don't re-tokenize every time.
  • The latent side. It paints a synthetic palette image - colored noise, or vertical/horizontal color bands - with each color's share weighted by its strength, VAE-encodes it, then adapts the result to your model's latent format. That last part is genuinely useful: it handles different channel counts (SDXL's 4-channel VAE vs. Flux's 16) and spatial downscale ratios, so you don't get the "flat color or noise" mess you'd normally see wiring a mismatched VAE's latent into the wrong model.

The inputs and outputs that matter

  • conditioning, model, clip, vae - feed it the same ones your KSampler uses. There's no trick here; it needs all four because it works in both text and latent space.
  • color 1–5 / strength 1–5 - hex pickers plus a relative weight (0–5). active colors (1–5) says how many of the slots count; only the first N are used.
  • global influence - overall strength of the added color conditioning, default 0.5. Set it to 0 and the conditioning passes through untouched while the node still returns its latent - handy if you only want the color-seeding half.
  • latent - palette layout: noise (default, and the recommended one) or the experimental vertical / horizontal bands.
  • bypass - skips all color processing, returns your conditioning unchanged plus a neutral gray latent. Great A/B switch to see how much the colors were actually doing.

Outputs: a conditioning (wire into KSampler's positive or negative) and a latent (wire into latent_image).

Installing it

Tiny pack, no models to download, no API keys. ComfyUI Manager → search "Color Bias", or:

cd ComfyUI/custom_nodes
git clone https://github.com/dimmedcrow/ComfyUI-ColorBias

Restart ComfyUI. The only dependency is webcolors, and the code even degrades gracefully without it - the hue-naming fallback kicks in. So installation is about as painless as it gets.

Where people get burned

The big one: the latent only steers the image when KSampler's denoise is below 1.0. At full denoise the sampler re-noises the latent completely and your palette gets washed away - you'd be left with just the CLIP text effect. Feed this into a KSampler at denoise ~0.6–0.85, or use it as a second pass, and the color seed actually shows through. That img2img-style behavior is the whole game here, and the README's "typical workflow" sketch doesn't warn you.

Second: width and height default to 1024×1024, which means a full VAE encode per batch item every run. On a small GPU that's real cost for what's just a color field - drop to 512. batch size multiplies the memory hit, and noise mode is heavier than the banded layouts. And if every strength is 0, it throws an error - there's nothing to condition on.

It's a young pack from a small author (zero community chatter yet), so treat the experimental band modes as exactly that, and keep noise as your daily driver.

Categoryconditioning/colors

Inputs (21)

NameTypeDefaultDescription
conditioningCONDITIONING
modelMODEL
clipCLIP
vaeVAE
bypassBOOLEANfalse
active colorsINT21–5
global influenceFLOAT0.500–1
batch sizeINT11–64
widthINT102464–20000
heightINT102464–20000
latentCOMBOnoise3 options: noise, vertical, horizontal
color 1COLOR#FF0000
strength 1FLOAT1.000–5
color 2COLOR#00FF00
strength 2FLOAT1.000–5
color 3optCOLOR#0000FF
strength 3optFLOAT1.000–5
color 4optCOLOR#FFFF00
strength 4optFLOAT1.000–5
color 5optCOLOR#FF00FF
strength 5optFLOAT1.000–5

Outputs (2)

NameTypeDescription
conditioningCONDITIONING
latentLATENT