Kinamix Concept Bias
Give a drowning concept a tug toward the prompt before you apply it
- conditioning
- embedding
- embedding_2
- embedding_3
- embedding_4
- conditioning
Here's the failure mode this node exists for: you have a great concept embedding - a film-grain look, a specific texture - but your prompt is a long, detailed sentence, and the concept just gets drowned. The model sees your eight concept tokens next to two hundred text tokens, and the concept barely registers. Kinamix Concept Bias is a pre-processor that goes before Apply Embedding and re-aims your text tokens toward the concept so it stops getting ignored. It's not a replacement for Apply - it's the thing you chain in front of it when adherence is weak.
The concept_tinting.json workflow in the repo shows the intended shape: CLIP encode → Concept Bias → Apply Embedding Qwen → KSampler. Long prompt, concept getting lost, bias first.
How it works
It's a proximity-based directional rotation, and the details matter. For every text token in your conditioning, the node computes cosine similarity against every concept token and finds the nearest one. A sigmoid gate (sigmoid((sim − 0.1) / 0.1)) means only text tokens that are already angularly close to a concept token get moved - distant tokens are left alone. Close tokens are rotated toward their nearest concept, and then the original magnitude is restored.
That last bit is the design choice worth understanding: nothing is amplified. No token gets bigger or louder; each one just gets pointed a bit more at the concept. That's deliberate - it preserves each concept token's specificity (color grading vs. grain vs. a motif) instead of averaging distinctive features into a bland mush, which is what a mean-based approach would do.
It also accepts up to four embeddings, and there's a subtlety there: the concept tokens from all of them are pooled, and each text token picks its single nearest neighbor from the whole pool. No compounding - you can't stack four embeddings and get four times the bias. Each token goes toward the one concept it's closest to.
The inputs and output
- conditioning - from your CLIP Text Encode.
- embedding - from Load Kinamix Embedding.
- bias_strength (default 0.3, 0–1) - how far text tokens rotate toward their nearest concept. This is the knob you'll actually touch; start at the default and push up only if the concept still underperforms.
- embedding_2 / embedding_3 / embedding_4 (optional) - more concepts to pool in.
- Output: conditioning, which you feed into Apply Embedding Qwen (or DFG).
Installing it
Same shared pack, same trivial install:
cd ComfyUI/custom_nodes
git clone https://github.com/latentwill/kinamix-embeddings-comfyui.git
Restart ComfyUI, put your .safetensors embeddings in ComfyUI/models/embeddings/, or find kinamix-embeddings-comfyui in ComfyUI Manager. Only dependency is torch, which you already have.
Where it bites
The honest limits: because bias is directional, it can only redirect tokens that are already near the concept. If your prompt has zero words conceptually adjacent to what the embedding encodes, there's nothing to rotate and bias_strength won't conjure a concept out of thin air - keep one or two related words in the prompt. And the dim-mismatch check from the rest of the pack applies: the embedding has to match your encoder's dim (3584 for Qwen-Image) or the apply node downstream will catch it. This pack is also very new - no community footprint worth citing when I looked - so treat the concept_tinting.json workflow as your map, and tune bias_strength against a fixed seed rather than trusting a default.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| embedding | KINAMIX_EMBEDDING | — | |
| bias_strength | FLOAT | 0.300–1 | — |
| embedding_2opt | KINAMIX_EMBEDDING | — | |
| embedding_3opt | KINAMIX_EMBEDDING | — | |
| embedding_4opt | KINAMIX_EMBEDDING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |