DDRK Flux Conditioning
Getting some prompt weight back when `(word:1.4)` stops working
- conditioning
- CONDITIONING
What it's for
Prompt weighting doesn't work any more, on most current models. Flux, Qwen-Image, Z-Image, Klein and the rest are encoded by an actual language model - T5-XXL, Qwen3, Mistral - and ComfyUI disables the old (word:1.3) syntax on that path, because those encoders were never trained on it. On a Flux-era model you get no emphasis dial at all. You describe things and hope the wording binds attributes the way you meant.
DDRK Flux Conditioning is one crude way to get a dial back. It doesn't touch your prompt text. It reaches into the conditioning tensor after the text encoder and rescales pieces of it: padding toward zero, real tokens up or down, token magnitudes evened out, and each third of the prompt scaled separately. It's the only non-sampler node in the DDRK Omega pack, and it works next to stock ComfyUI samplers just as well as next to the ones it ships with.
What it does to the tensor
Conditioning in ComfyUI is a batch of token embeddings - one vector per token, per prompt segment. This node clones that tensor, reads the attention_mask sitting in the conditioning metadata to find where real tokens end and padding begins, and then applies whatever you asked for to the active region. Directions are preserved; it changes vector lengths, which is what attention responds to.
The console print names the layout by embedding width - 4096 wide is Flux.1 (T5-XXL), 7680 is FLUX.2 klein 4B, 12288 is klein 9B, 2048 is SDXL - and then reports token counts and mean norm before and after. If the encoder gave no attention_mask, it says no attention_mask - padding boundary unknown, pad_attenuation skipped and moves on. That print is the whole reason report defaults to on: a conditioning transform you can't inspect is indistinguishable from a placebo.
The inputs that matter
Six floats and a checkbox, all neutral by default - leave them alone and the node is a pass-through that tells you so.
pad_attenuation is the interesting one: it scales the padding tokens toward zero, from 0 (stock Flux behaviour) to 1 (what Chroma does). T5 padding isn't free - the model attends to those vectors - and on a short prompt padding is most of the sequence, which is where this is worth trying. Crank it toward 1.0 on a five-word prompt and see whether the subject gets sharper; long prompts have little padding left to attenuate.
norm_equalize blends every active token's vector length toward the mean of the active region. Attention scales with token magnitude, so a couple of loud tokens can crowd out the rest of your sentence; this buys the quiet ones some room without changing what any of them mean.
front_scale, mid_scale and end_scale scale the first, middle and last thirds of the active region, 1.0 being off. The author's own tooltip is the right warning: these are token positions, not meanings. There is no rule saying the front third of a Flux prompt is the subject - treat it as a coarse emphasis dial, not targeting.
active_gain multiplies the whole active region. Stay near 1. It doesn't make the model listen harder; it shoves the embeddings off the geometry they were trained on. Past about 1.3 you're usually just changing the look.
Output and wiring
One output: CONDITIONING. Put it between your text encode and your sampler - the positive side is where you'd normally start - and queue. Watch the ComfyUI console the first few times rather than guessing.
Install
It ships in the DDRK Omega Sampler pack, which has no dependencies of its own beyond ComfyUI:
cd ComfyUI/custom_nodes
git clone https://github.com/HVOSTOVSKY/DDRK-Omega-Sampler
Restart ComfyUI. In the node search, look for "DDRK" - it's filed under sampling → DDRK Omega → utils, separate from the sampler nodes. Or install the pack by title from ComfyUI Manager.
Where people get burned
The big one is silent nothing. pad_attenuation cannot work without an attention_mask, and plenty of encoder paths don't supply one - the node skips the operation rather than failing. If you don't read the console line you'll conclude the padding dial does nothing.
The second is expecting semantics. mid_scale at 1.3 makes some tokens louder; it doesn't make the middle of your prompt mean more. Wording and word order are still what binds attributes on these models, and this node can't fix a prompt that was confusing to begin with.
Worth knowing before you judge it: this pack is recent and essentially invisible in the community corpus - no adoption threads, no third-party A/Bs. The pack is candid about which of its claims have image tests behind them; for this node you are the test bench. Set one dial at a time from a fixed seed.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | — | |
| pad_attenuation | FLOAT | 0.000–1 | Scales padding tokens toward zero. 0 = untouched (stock Flux), 1 = fully zeroed (what Chroma does). Only acts when the encoder supplied an attention_mask; without one the padding boundary is unknown and this is skipped. Try 0.5-1.0 on short prompts, where padding dominates the sequence. |
| active_gain | FLOAT | 1.000.1–3 | Multiplier on real (non-padding) tokens. 1.0 = off. Raising it strengthens prompt influence in a blunt way; large values distort the embedding geometry the model was trained on, so stay near 1. |
| norm_equalize | FLOAT | 0.000–1 | Blends per-token vector norms toward the mean norm of the active region. 0 = off, 1 = every active token has equal norm. Attention weight scales with token magnitude, so a few high-norm tokens can crowd out the rest; this evens that out. Directions are preserved - only lengths change. |
| front_scale | FLOAT | 1.000–2 | Scales the first third of the ACTIVE region. 1.0 = off. |
| mid_scale | FLOAT | 1.000–2 | Scales the middle third of the ACTIVE region. 1.0 = off. |
| end_scale | FLOAT | 1.000–2 | Scales the last third of the ACTIVE region. 1.0 = off. Note these thirds are token positions, not meanings - the model assigns no fixed role to prompt position, so treat this as a coarse emphasis dial, not semantic targeting. |
| report | BOOLEAN | true | Print detected layout, token counts and before/after norms to the console. On by default because a conditioning transform you cannot inspect is indistinguishable from a placebo. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| CONDITIONING | CONDITIONING | — |