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

Apply Embedding Qwen

The node to reach for first when you've trained a Kinamix concept

By latentwill·Created 5 months ago·Updated 4 months ago· 0
Apply Embedding Qwen
  • conditioning
  • embedding
  • conditioning
strength0.75
seed42
curve1.25

You trained a Kinamix embedding - a few thousand steps, a 56 KB .safetensors file - and now you want it on the canvas doing its thing without a wall of knobs. This is the node for that. Apply Embedding Qwen is the pack's default single-embedding path, and the author recommends it as the starting point for a reason: one concept, one strength slider, done.

Quick context on what you're actually steering. Qwen-Image is Alibaba's 20B MMDiT, and unlike SDXL its text encoder is a Qwen2.5-VL LLM that emits a long token stream the diffusion transformer attends over directly. A Kinamix embedding is a small block of learned tokens - roughly 8 × 3584 for that encoder - trained with DSCI (DiT-Side Concept Injection) in the sibling kinamix-embeddings-qwen repo. The tokens get appended to your conditioning stream, so the model sees the concept without any weight being touched. That's the whole pitch: no weight modification, ~56 KB per concept instead of hundreds of MB, and it plays alongside LoRA.

How it works

Where older embedding nodes just slam the tokens in and call it a day, this one uses noise corruption for strength control. The idea: softmax attention locks onto token direction, so a concept that's scaled toward zero still reads as "present." Instead of scaling, the node blends the concept tokens toward magnitude-matched random noise, seeded by the seed input. At low strength the angular signature is mostly destroyed - a clean fade, not a cliff. Two supporting mechanics: a power curve maps your slider (effective = strength ^ curve, with curve defaulting to 1.25), and anything that lands below the noise floor (effective strength under ~0.15) is dropped entirely, so a whisper of concept doesn't leave behind a confusing half-token.

The inputs that matter

Most of the schema is exactly what you'd guess:

  • conditioning - from your CLIP Text Encode node.
  • embedding - the KINAMIX_EMBEDDING output of Load Kinamix Embedding.
  • strength (default 0.75, 0–1) - the one you'll actually touch. 0 is no concept, 0.5 is the sweet spot, 0.75 is strong, 1.0 is full. The shipped workflow's own notes put 0.25 as "subtle" and 1.0 as full.
  • seed - only matters at partial strength, since it seeds the corruption noise. Fixed seed = reproducible fade.
  • curve (optional, default 1.25) - how aggressively strength rolls off. Higher = sharper falloff; leave it alone until you've tried it.

The output is a single conditioning socket, wired straight into KSampler's positive. The trap people hit first: both CLIP Encode nodes in the reference workflow must use the same prompt. The negative conditioning is your text baseline without the concept, and KSampler's cfg is what pushes the sampler away from it toward the concept. Two knobs, one per job - strength here is concept clarity, cfg (try 3–5, sweet spot ~3.5) is how hard the model commits.

Installing it

Same story as every node in this pack - it's tiny:

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

Then drop your .safetensors in ComfyUI/models/embeddings/ and restart ComfyUI. Or use ComfyUI Manager and search for kinamix-embeddings-comfyui. The only dependency is torch, which you already have - this pack adds nothing heavy.

When it bites

The error you'll actually see is the dim check: the embedding's hidden dim (3584) must match the text encoder you're conditioning with, or the node raises a clear "trained for a different encoder" error. Related and sneakier: an SD 1.5/SDXL textual inversion is a vector in CLIP's vocabulary, and Qwen's encoder has nothing for it to bind to - this node will happily accept a 768-dim file and then fail, because there's no mechanism for it to work at all. Also remember this pack is early days: it had zero reddit footprint and zero search impressions when I wrote this, so the workflows in the repo are the real documentation. Drag workflows/apply_embedding_qwen.json onto the canvas and start from there - it's the minimal Load → Apply → KSampler path, and it works.

CategoryKinamix/Embeddings

Inputs (5)

NameTypeDefaultDescription
conditioningCONDITIONING
embeddingKINAMIX_EMBEDDING
strengthFLOAT0.750–1
seedINT420–4294967295
curveoptFLOAT1.251–5

Outputs (1)

NameTypeDescription
conditioningCONDITIONING