Combine Lenses
Combine Lenses — mix 'cinematic' and 'moody' like audio faders
- lens_a
- lens_b
- lens_c
- lens_d
- steer
- info
Combine Lenses is the node that turns individual concept lenses into cocktails. Take up to four steer plans - each one a learned direction for something like "cinematic," "vintage film," "ethereal" - give each a weight, and it sums them into a single steer plan. The canonical recipe is written right in the README: 0.8 × cinematic + 0.5 × moody. Negative weights work too, so − 0.3 × bland is a legitimate move.
It's the difference between hunting for one perfect lens and mixing the ones you have. Individual concept lenses tend to be blunt instruments; the interesting results come from layering two or three at carefully chosen strengths, and this node is where that blending happens.
How it works
Under the hood it's just vector math: each steer plan is fundamentally a direction tensor, and combining is a weighted sum - combined = w_a·dir_a + w_b·dir_b + …. Then it unit-normalizes the result, which is the smart bit: because the sum is renormalized, the strength knob on the output behaves exactly like it does on a single lens. You're not playing whack-a-mole with compounded magnitudes; the blend's intensity is predictable.
There's one hard rule: all four lenses must share the same d_model. A lens trained at 4096-d (Qwen3-8B encoder) and one at 2048-d (1.7B) can't be added, and the node will throw a clear error rather than silently doing garbage math.
The inputs that matter
- lens_a - required. The anchor lens.
- lens_b / lens_c / lens_d - optional; leave unconnected and their weights default to zero. So you can start with two and grow to four later.
- weight_a / weight_b / weight_c / weight_d - each from −8 to +8, step 0.05. Positive pushes toward the concept, negative pushes away. Weights below ~0.05 on a connected lens are effectively ignored.
- strength - the master volume on the combined result (default 1.0). This is the knob you'll actually reach for while iterating.
Outputs: steer (QSCOPE_STEER) - ready for Steer Conditioning, Steer CLIP, or Generate - and info reporting how many lenses combined and the d_model, with the weighted source breakdown in the string.
Installing it
Part of the same pack, one install: ComfyUI Manager → search "ComfyUI QwenScope", or
cd ComfyUI/custom_nodes
git clone https://github.com/Nynxz/ComfyUI-QwenScope
restart. Dependencies (transformers, huggingface_hub, safetensors, Pillow, numpy) are the pack's usual set; nothing extra downloads just for combining - the heavy lifting happens in whichever nodes produced your lenses.
Common issues
The d_model mismatch is the classic failure - it usually means you blended a lens meant for a different encoder size than the one your image model actually uses. Fix: load/load the lenses from the same base model family. Also note the layer_spec of the output comes from the first lens; if your inputs were meant for different layer specs, the blend applies at lens_a's spec, so keep them consistent for predictable results.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| lens_a | QSCOPE_STEER | — | |
| weight_a | FLOAT | 1.00-8–8 | — |
| weight_b | FLOAT | 1.00-8–8 | — |
| weight_c | FLOAT | 0.00-8–8 | — |
| weight_d | FLOAT | 0.00-8–8 | — |
| strength | FLOAT | 1.00-8–8 | — |
| lens_bopt | QSCOPE_STEER | — | |
| lens_copt | QSCOPE_STEER | — | |
| lens_dopt | QSCOPE_STEER | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| steer | QSCOPE_STEER | — |
| info | STRING | — |