Conditioning Multiply Advanced
Schedule conditioning strength without blowing up your token IDs
- conditioning
- conditioning
Stock ComfyUI has a ConditioningMultiply node, and it's fine - as long as "conditioning" still means what it did in 2023. On Anima, Flux, and every model with a modern text encoder, a conditioning payload isn't just one tensor anymore. It's a main tensor plus a dict of metadata: pooled_output, t5xxl_weights… and integer token-id tensors like Anima's t5xxl_ids. Multiply all of that by 1.2 recursively and you'll shove floats into what the embedding layer expects to be int64 token ids. That's the crash Conditioning Multiply Advanced exists to avoid - and it throws a proper scheduling feature in while it's at it.
What it actually does
Instead of one constant strength, you hand it a multiplier that changes over the denoise: start_multiplier at start_percent, ramping to end_multiplier at end_percent. So "crank the prompt hard for the first 30% of steps, then ease off" is a single node rather than a choreographed dance of ConditioningSetTimestepRange + multiply pairs.
Mechanically it walks your conditioning structure (lists, tuples, dicts, tensors), multiplies only the float tensors it's told to, and - this is the whole point - leaves integer and bool tensors untouched unless you set non_float_behavior to error. When start_multiplier equals end_multiplier it short-circuits to a single multiply, so it degrades to a drop-in replacement for the vanilla node with no overhead.
The inputs that matter
start_multiplier/end_multiplier- the strength at each end of the window. Start 0, end 1.3 is a classic "prompt fades in late" move.start_percent/end_percent- the window in denoise progress (0–1). Note they're denoise-progress, so the same window means different things at different denoise values.curve-linear,cosine,smoothstep,ease_in,ease_out, orsigmoid.smoothstepis the one most people actually want for a soft ramp;ease_outis nice when you want the change front-loaded.outside_window-hold(the default) usesstartbefore andendafter;baselineuses 1.0 outside;linear_extrapolatekeeps the trend going.segments- how many conditioning ranges approximate the curve, default 16. More is smoother but each segment is a separate conditioning entry, so the sampler does more work.tensor_scope-main_conditioning_and_float_metadataby default, which scales the main tensor plus whatever's inmetadata_keys(defaultpooled_output,t5xxl_weights). Don't listt5xxl_idsthere. Seriously.
Output is a single conditioning that wires straight into your sampler's positive/negative input, same as any conditioning node.
Installing it
It's a one-node pack with zero dependencies and no model downloads - pyproject.toml lists nothing, it only needs torch, which ComfyUI already has. Easiest: ComfyUI Manager → search "ComfyUI-ConditioningMultiplyAdvanced" → install → restart. Or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/SparknightLLC/ComfyUI-ConditioningMultiplyAdvanced
Then restart ComfyUI. That's the whole install.
Where people get burned
- Crashing on token IDs. If you switch
tensor_scopetoall_float_tensorsor addt5xxl_idstometadata_keys, you're recreating the exact bug this node fixes - the README warns the token-id tensors should never be scaled. start_percent≥end_percent. It logs a warning and returns your conditioning unchanged, which looks like the node silently doing nothing. Check your window if a schedule has no effect.- Chasing smoothness with
segments. 256 segments is technically allowed and will grind your sampler down. 16 is fine; 32 if you can feel a step. - It's a niche pack from a small publisher with almost no community footprint, so don't expect updates or drama - it's a tool, it does one thing, and it does it cleanly. If you're scheduling conditioning strength on anything with a modern encoder, it's the one I'd reach for.
If all you need is a flat strength boost, the built-in node is fine and you don't need this. The moment you want a ramp - or you hit an embedding dtype error on Anima - this is the answer.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| conditioning | CONDITIONING | Conditioning payload to scale. | |
| start_multiplier | FLOAT | 1.00-1000000000–1000000000 | Multiplier used at start_percent and before the window when outside_window is hold. |
| end_multiplier | FLOAT | 1.00-1000000000–1000000000 | Multiplier used at end_percent and after the window when outside_window is hold. |
| start_percent | FLOAT | 0.0000–1 | Denoise progress where the multiplier transition window starts. |
| end_percent | FLOAT | 1.0000–1 | Denoise progress where the multiplier transition window ends. |
| curve | COMBO | linear | Curve used to interpolate from start_multiplier to end_multiplier inside the timestep window. |
| outside_window | COMBO | hold | hold uses start_multiplier before the window and end_multiplier after it. baseline uses 1.0 outside the window. linear_extrapolate continues a linear multiplier trend outside the window. |
| segments | INT | 161–256 | Number of conditioning ranges used to approximate the multiplier curve inside the window. |
| tensor_scope | COMBO | main_conditioning_and_float_metadata | Controls which floating tensors are multiplied. The default scales the main conditioning tensor plus selected float metadata such as pooled_output and t5xxl_weights. |
| non_float_behavior | COMBO | preserve | preserve leaves integer/bool tensors unchanged. error raises when a non-floating tensor is encountered. |
| metadata_keys | STRING | pooled_output,t5xxl_weights | Comma-separated metadata tensor keys to scale when tensor_scope includes metadata. Integer token ids such as t5xxl_ids should not be listed. |
| log_summary | BOOLEAN | false | Print how many tensors were multiplied or preserved. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| conditioning | CONDITIONING | — |