Nodes/ComfyUI-ConditioningMultiplyAdvanced/Conditioning Multiply Advanced
ComfyUI Node

Conditioning Multiply Advanced

Schedule conditioning strength without blowing up your token IDs

By SparknightLLC·Created 3 months ago·Updated 3 months ago· 0
Conditioning Multiply Advanced
  • conditioning
  • conditioning
start_multiplier1.00
end_multiplier1.00
start_percent0.000
end_percent1.000
curvelinear
outside_windowhold
segments16
tensor_scopemain_conditioning_and_float_metadata
non_float_behaviorpreserve
metadata_keyspooled_output,t5xxl_weights
log_summaryfalse

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, or sigmoid. smoothstep is the one most people actually want for a soft ramp; ease_out is nice when you want the change front-loaded.
  • outside_window - hold (the default) uses start before and end after; baseline uses 1.0 outside; linear_extrapolate keeps 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_metadata by default, which scales the main tensor plus whatever's in metadata_keys (default pooled_output,t5xxl_weights). Don't list t5xxl_ids there. 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_scope to all_float_tensors or add t5xxl_ids to metadata_keys, you're recreating the exact bug this node fixes - the README warns the token-id tensors should never be scaled.
  • start_percentend_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.

Categoryadvanced/conditioning

Inputs (12)

NameTypeDefaultDescription
conditioningCONDITIONINGConditioning payload to scale.
start_multiplierFLOAT1.00-1000000000–1000000000Multiplier used at start_percent and before the window when outside_window is hold.
end_multiplierFLOAT1.00-1000000000–1000000000Multiplier used at end_percent and after the window when outside_window is hold.
start_percentFLOAT0.0000–1Denoise progress where the multiplier transition window starts.
end_percentFLOAT1.0000–1Denoise progress where the multiplier transition window ends.
curveCOMBOlinearCurve used to interpolate from start_multiplier to end_multiplier inside the timestep window.
outside_windowCOMBOholdhold 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.
segmentsINT161–256Number of conditioning ranges used to approximate the multiplier curve inside the window.
tensor_scopeCOMBOmain_conditioning_and_float_metadataControls 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_behaviorCOMBOpreservepreserve leaves integer/bool tensors unchanged. error raises when a non-floating tensor is encountered.
metadata_keysSTRINGpooled_output,t5xxl_weightsComma-separated metadata tensor keys to scale when tensor_scope includes metadata. Integer token ids such as t5xxl_ids should not be listed.
log_summaryBOOLEANfalsePrint how many tensors were multiplied or preserved.

Outputs (1)

NameTypeDescription
conditioningCONDITIONING