Nodes/Concept Steer/Timestep Steer
ComfyUI Node

Timestep Steer

Apply a lens at some noise levels and not others — composition early, detail late

By Nynxz·Created 6 months ago·Updated 6 months ago· 4
Timestep Steer
  • model
  • MODEL
lensNone
strength1.00
schedulecosine
custom_schedule1.0:0.0, 0.7:1.0, 0.3:1.5, 0.1:0.5, 0.0:0.0
sigma_max14.6
normalizetrue
active_tokens_onlytrue
custom_lens_path

Plain Concept Steer adds the same direction at every denoising step. Timestep Steer is the version that asks: what if the strength varies as the image is denoised? It hooks into the model's forward pass and modulates the concept direction based on the current noise level σ, using a schedule you pick. High-noise steps are where composition gets set; low-noise steps are where detail crystallizes. Different concepts benefit at different stages - and this node is how you say so.

How it works

The mechanism is fundamentally different from the base node, and the docstring says it plainly: Concept Steer modifies the conditioning once before sampling; Timestep Steer installs a model_function_wrapper that intercepts every forward pass, reads the current sigma, computes a schedule-modulated strength, and adds the direction to the cross-attention conditioning tensor at that step. It's grounded in "The Geometry of Noise" (Sahraee-Ardakan et al. 2026) - the idea that a conditioning perturbation's influence varies with noise level: washed out at high noise, dominant near clean. So a constant-strength steer either gets lost early or overshoots late. Scheduling fixes that.

The schedule options map cleanly onto intent:

  • constant - flat, same as vanilla Concept Steer (a good baseline to A/B against).
  • cosine - bell-shaped, peaks at mid-noise. The default, and a sensible place to start.
  • linear_decay - full at high noise → zero at clean. Pushes composition early.
  • linear_ramp - the inverse: weak early, strong at low noise. Detail/texture.
  • front_loaded - strong early with rapid decay (composition steering).
  • back_loaded - weak early, strong late (detail steering).
  • custom - your own keyframes as sigma_norm:strength pairs, linearly interpolated.

The inputs that matter

  • model - a MODEL, straight from your loader. It comes out a wrapped MODEL you feed to the KSampler.
  • lens - dropdown (or custom_lens_path override).
  • strength - the peak strength the schedule modulates around.
  • schedule - one of the modes above.
  • custom_schedule - only for custom mode; the default 1.0:0.0, 0.7:1.0, 0.3:1.5, 0.1:0.5, 0.0:0.0 is a reasonable shape to steal.
  • sigma_max - 14.6 default, typical for SDXL/flow models; maps raw sigma to normalized t ∈ [0,1] for the schedule.
  • normalize / active_tokens_only - same semantics as the base node.

Output is a single MODEL. Wire [Load Model] → Timestep Steer → KSampler.

Installing

Pack-standard: ComfyUI Manager search "Concept Steer", or git clone https://github.com/Nynxz/ComfyUI-ConceptSteer into custom_nodes/ and restart. Same requirements as the base node - a trained lens (or CLI-generated), and transformers/safetensors if you're training. No new model downloads.

Common gotchas

  • The wrapped model is the one to sample with. It's easy to leave the original model wired into the KSampler and wonder why nothing changed. The MODULE that comes out of this node is the one that does the steering.
  • sigma_max must match your sampler's range. If you run an SD 1.5 sampler that never reaches 14.6, your normalized schedule maxes out early and the shape compresses. Set it to your model's real sigma range.
  • Don't expect magic from cosine alone. The interesting wins come from matching the schedule to the concept - front-loaded for moody composition, back-loaded for texture - and that takes experimentation. Start with constant so you know your baseline.
CategoryConcept Steer/Advanced

Inputs (9)

NameTypeDefaultDescription
modelMODEL
lensCOMBONoneSelect a concept lens to apply
strengthFLOAT1.00-10–10Peak steering strength (modulated by schedule)
scheduleCOMBOcosineHow strength varies with noise level σ: • constant — flat (same as vanilla Concept Steer) • cosine — bell-shaped, peaks at mid-noise • linear_decay — full at high noise → zero at clean • linear_ramp — zero at high noise → full at clean • front_loaded — strong early (composition), rapid decay • back_loaded — weak early, strong late (detail/texture) • custom — user keyframes (see custom_schedule)
custom_scheduleSTRING1.0:0.0, 0.7:1.0, 0.3:1.5, 0.1:0.5, 0.0:0.0Custom keyframes for 'custom' schedule mode. Format: 'sigma_norm:strength, ...' where sigma_norm is normalized noise level (1.0=max noise, 0.0=clean). Linearly interpolated between keyframes.
sigma_maxFLOAT14.60.1–1000Maximum sigma value for normalization. 14.6 is typical for SDXL/flow models. Used to map raw sigma → normalized t ∈ [0, 1].
normalizeBOOLEANtrueScale direction relative to conditioning token norms
active_tokens_onlyBOOLEANtrueOnly modify non-padding token positions
custom_lens_pathSTRINGOverride: absolute path to a .pt lens file

Outputs (1)

NameTypeDescription
MODELMODEL