Nodes/ComfyUI QwenScope/Steer Conditioning
ComfyUI Node

Steer Conditioning

Steer Conditioning — the clean way to steer image generation

By Nynxz·Created 4 months ago·Updated 4 months ago· 0
Steer Conditioning
  • conditioning
  • steer
  • conditioning
  • info
active_tokens_onlytrue

Steer Conditioning is the node you'll reach for first when you want to steer an image model, because it's the honest, no-surprises version of steering. It slots between CLIPTextEncode and KSampler: it takes a CONDITIONING tensor, adds your steer direction to it, and hands back modified conditioning. Same idea as Steer CLIP, but it runs once on the already-encoded tensor instead of installing hooks that linger on your CLIP.

The README calls it "cleaner than Steer CLIP for most workflows," and it is. No persistent hooks, no Clear CLIP Steering chore, no surprise steering in branches you thought were clean. Wire it in, adjust strength, regenerate - that's the whole loop. The tradeoff: it can't do multi-layer residual interventions the way Steer CLIP can, because it operates on the final encoded conditioning rather than inside the encoder's forward pass. For 95% of "push the image toward cinematic" work, that's a trade you'll happily make.

How it works

Each conditioning entry is a tensor of shape [B, tokens, dim] plus its pooled metadata. The node takes the steer direction, scales it by strength (with the same 0.3 × mean residual norm calibration when normalize is on), and adds it to the conditioning tensor. The active_tokens_only toggle (on by default) restricts the edit to non-padding tokens - those with norm above 0.01 - so you don't inject steering into padding positions and pollute the pooled vectors the sampler uses.

It's also defensive in the right places: if strength is ~0 it's a pass-through no-op, and if the direction contains NaN/Inf it refuses to apply it and passes the conditioning through untouched with a console error. Garbage directions don't silently corrupt your generation.

The inputs

  • conditioning - the CONDITIONING from a CLIPTextEncode (or any conditioning producer).
  • steer - the QSCOPE_STEER plan: Feature → Direction, Load Lens, Combine Lenses, Train Lens - whichever direction you want.
  • active_tokens_only - leave true. Only flip it if you're investigating a padding-related artifact.

Outputs: conditioning (the steered tensor, straight into KSampler) and info confirming whether it applied or no-oped.

Installing it

Same pack, one install: ComfyUI Manager → search "ComfyUI QwenScope", or

cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-QwenScope

restart. Standard deps (transformers, huggingface_hub, safetensors, Pillow, numpy). Because it doesn't need the encoder internals, this node is light - it works on any Qwen-encoder model ComfyUI can load (FLUX.2 [klein], Qwen-Image, quantised or not).

Common issues

The classic confusion is mixing this with Steer CLIP and wondering why one ignores layer_spec. Steer Conditioning applies to the encoded tensor as a whole - layer spec is a no-op here by design, so don't expect 5-8 to mean anything. And while it's cleaner, it's also a single injection point: if a direction does nothing at strength 1–2, you're probably applying a layer-specific SAE feature at the wrong conceptual level - trained lenses (Train Lens Contrastive) with their layer = -1 convention are designed for exactly this node and tend to behave better here than raw features.

CategoryQwenScope/Steer

Inputs (3)

NameTypeDefaultDescription
conditioningCONDITIONING
steerQSCOPE_STEER
active_tokens_onlyBOOLEANtrueOnly modify non-padding tokens (norm > 0.01).

Outputs (2)

NameTypeDescription
conditioningCONDITIONING
infoSTRING