Qwen Lowres Fix (Two-Stage)
Two-stage refinement for sharper Qwen images
- model
- positive
- negative
- latent
- vae
- LATENT
"Lowres fix" is an old idea with a good track record: generate at a base resolution, then run a second sampling pass at higher resolution with partial denoise so the model adds detail instead of redrawing the whole thing. QwenLowresFixNode wraps that whole two-stage loop into a single node for the Qwen line, following the DiffSynth-Studio method. Instead of hand-wiring an upscale, a re-encode, and a second KSampler, you drop this in and it does the sample-upscale-refine sequence for you.
It's the difference between a base-resolution image that looks a little soft and one with crisp detail - done in one node rather than a spaghetti sub-graph. Handy, because a lot of these models have a native resolution sweet spot and want an upscale pass for anything bigger.
How it works
Stage one samples your latent normally. Then the node upscales that latent by your chosen factor and runs a second sampling pass at reduced denoise - high enough to add real detail, low enough not to invent a different image. The denoise default of 0.5 is the tuning knob that controls that balance: lower keeps the composition locked and just sharpens, higher lets the refine pass change more. Everything a KSampler needs (model, positive, negative, sampler, scheduler, seed, cfg, steps) is exposed on the node because both internal passes use it.
Because it operates in latent space and hands back a latent, it slots between your first sampler and your VAE decode - you decode the refined latent at the end.
The inputs and outputs that matter
model,positive,negative,latent,vae- the standard sampling ingredients, plus the base latent you're refining and the VAE for the internal upscale.denoise(default 0.5) - the key dial. This decides how much the refine pass is allowed to change. Start here if results are either too soft (raise it) or drifting from the original (lower it).upscale_factor(default 1.5) - how much bigger the second pass runs. 1.5x is a sane default; 2x is more detail and more compute.steps(default 20),cfg(default 7),sampler_name,scheduler,seed- the usual sampler controls for the passes.
Output: a single LATENT - the refined result. Send it to your VAE decode to get pixels.
How to install it
ComfyUI Manager: search ComfyUI-QwenImageWanBridge, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/fblissjr/ComfyUI-QwenImageWanBridge
then restart. No dedicated model - it drives whatever Qwen model and VAE you feed it. It does run two sampling passes, so budget the extra time and VRAM the higher-res second pass costs.
Common issues & troubleshooting
The refine pass changed my image too much. Lower denoise. At 0.5 the model has meaningful freedom; drop toward 0.3-0.4 to keep composition and just add detail.
It's soft / the fix didn't do much. Raise denoise a little, or bump upscale_factor. Too low a denoise barely touches the image; you want it high enough to actually resolve detail at the new size.
Out of memory on the second pass. The upscale means the refine pass runs at a larger latent - that's where the VRAM goes. Lower upscale_factor, or generate a smaller base image. This is a compute-for-quality trade, and the second pass is the expensive half.
Inputs (12)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent | LATENT | — | |
| vae | VAE | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 7.000–100 | — |
| sampler_name | COMBO | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 | |
| scheduler | COMBO | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 | |
| denoise | FLOAT | 0.500–1 | — |
| upscale_factor | FLOAT | 1.51–4 | Upscale by 1.5x recommended |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |