Nodes/kinamix-embeddings-comfyui/Multi Embedding Qwen
ComfyUI Node

Multi Embedding Qwen

Four concepts at once, blended in token space instead of faked by stacking

By latentwill·Created 5 months ago·Updated 4 months ago· 0
Multi Embedding Qwen
  • conditioning
  • negative_conditioning
  • positive
  • negative
embedding_1
strength_11.00
embedding_2
strength_21.00
embedding_3
strength_31.00
embedding_4
strength_41.00
seed42
curve1.25

So you've got a style embedding and a texture embedding and you want them on the same image without running two passes or faking it with a second KSampler. That's Multi Embedding Qwen: one node that loads and blends up to four Kinamix embeddings, each with its own strength, and outputs a single conditioning pair you wire into KSampler. It's the pack's power tool - and the one with the most thought behind how the blending actually works.

How it works - the part that matters

The README is refreshingly explicit about why naive stacking fails. If you just concatenate each embedding's tokens with its own scale applied, you get almost nothing, because softmax attention is direction-dominated: scaling a chunk of tokens up or down barely changes which tokens get attended to, so per-chunk magnitude has almost no semantic meaning. What this node does instead is real token-space blending: each embedding's concept tokens are multiplied by its strength and summed into a single combined concept block, then one noise-corruption pass is applied to that block.

That single pass is the second half of the trick. The noise floor cleanly suppresses weak contributors - an embedding at low strength gets dominated by the seeded noise rather than leaking through at full presence, the way it would if each embedding got its own corruption pass. It's the same noise-corruption philosophy as Apply Embedding Qwen, applied once to the whole mixture.

The negative path gets the same care: it's your text conditioning with the concept slots zero-padded, so KSampler's cfg directly amplifies the concept direction when it steers away from the negative. That's why the node hands you two outputs instead of one.

The inputs and outputs

Pay attention to the first quirk: the embeddings here are dropdowns, not wire-in sockets. embedding_1 is a file selector listing models/embeddings/, so you don't need a Load node in front of this one - the node loads the files itself.

  • conditioning - your positive CLIP encode.
  • embedding_1 + strength_1 (required) - the first concept and its weight. strength runs 0–5, default 1.0, and 1.0 always means full contribution; values above 1 amp it.
  • embedding_2 / 3 / 4 + strength_2 / 3 / 4 (optional) - the rest of the mix. Empty slots are skipped.
  • seed and curve (optional) - the noise-corruption controls, same defaults as Apply Embedding Qwen (42 and 1.25).
  • negative_conditioning (optional) - your real negative if you have one.
  • Outputs: positive and negative - wire both into KSampler, exactly like DFG.

There's a hard requirement hidden in all this: every embedding must have the same concept token count. They're being summed into one block, so a 5-token concept and an 8-token concept can't mix - the node raises a clear error telling you the counts it found. If you trained your own embeddings, retrain with the same --num_tokens, or check the token counts of the files you're combining.

Installing it

The whole pack is one tiny repo, and this node doesn't add anything extra:

cd ComfyUI/custom_nodes
git clone https://github.com/latentwill/kinamix-embeddings-comfyui.git

Restart ComfyUI and drop your .safetensors files in ComfyUI/models/embeddings/ - that's where the dropdowns read from. Or search kinamix-embeddings-comfyui in ComfyUI Manager. Dependencies are just torch, which you already have.

Where it bites

Besides the token-count requirement, remember the dim rule that runs through this whole pack: each embedding's hidden dim must match your text encoder (3584 for Qwen-Image's Qwen2.5-VL), and the node checks every loaded embedding against your conditioning dim. Also be honest about the pack's maturity - zero community footprint and zero search impressions when I wrote this, so the multi_embedding.json workflow in the repo is your best tutorial. Drag it onto the canvas, drop in your own files, and watch what the strengths actually do to the mix; the token-space blending makes it respond more like a real recipe than you'd expect from a stack of sliders.

CategoryKinamix/Embeddings

Inputs (12)

NameTypeDefaultDescription
conditioningCONDITIONING
embedding_1COMBO1 options: none
strength_1FLOAT1.000–5
embedding_2optCOMBO1 options: none
strength_2optFLOAT1.000–5
embedding_3optCOMBO1 options: none
strength_3optFLOAT1.000–5
embedding_4optCOMBO1 options: none
strength_4optFLOAT1.000–5
seedoptINT420–4294967295
curveoptFLOAT1.251–5
negative_conditioningoptCONDITIONING

Outputs (2)

NameTypeDescription
positiveCONDITIONING
negativeCONDITIONING