Qwen-Image KSampler ⚡
A stock KSampler with one extra toggle that matches diffusers img2img exactly
- model
- positive
- negative
- latent_image
- LATENT
If you've ever rendered in ComfyUI and in a diffusers pipeline with "the same" settings and gotten slightly different images, this node is the explanation wearing a sampler's clothing. Qwen-Image KSampler is a drop-in for the stock KSampler with exactly one extra option, denoise_mode, that reconciles two different conventions for how img2img denoising slices the sampling schedule. It's a compatibility switch, not a quality fix - but for img2img parity with the original pipeline, it's the switch.
The problem it solves
Qwen-Image has no bespoke sampling code in ComfyUI at all - it shares the Flux family's ModelSamplingFlux setup (the same shift=1.15). The discrepancy is in how denoise is interpreted. ComfyUI's own convention re-expands to int(steps/denoise) steps and takes the tail; the diffusers img2img convention computes the schedule at steps and slices from t_start = steps - round(steps*denoise). Same number typed, slightly different sigma schedule, measurably different output.
The pack verified this against a real loaded Qwen-Image model rather than assuming: at 9 steps, denoise 0.9, ComfyUI starts at sigma ≈0.9660 vs ≈0.9619 under the diffusers-style slice. Smaller than Z-Image's measured gap, same mechanism. At denoise 1.0 the two are identical, so txt2img is unaffected - this only ever matters for img2img.
The two modes
denoise_mode="comfy"(default) - unchanged stockKSamplerbehavior. If your workflow already looks the way you want, don't touch it.denoise_mode="diffusers"- matches the diffusers-pipeline img2img convention exactly. Use it when you're porting a workflow from diffusers and want the reference output, or when you're chasing the exact look of a diffusers-based tutorial.
Everything else is a familiar KSampler: model, positive, negative, latent_image, seed, steps (20), cfg (2.5 - Qwen-Image's comfortable range is lower than SD-era defaults), the full sampler_name list (euler default), scheduler (simple default), and denoise. Output is LATENT, into VAE Decode.
Where it fits
The pack's Qwen-Image graph hands you model, positive, negative, latent and denoise straight out of Qwen-Image img2img, which is a node built to feed a stock KSampler. This node slots in as that sampler when you want the diffusers-exact denoise behavior - pair the two and the whole img2img stack matches the original pipeline's convention end to end.
Installing it
Part of the ComfyUI-GGUF-Loader pack under 🤖 CCTech/Qwen-Image. ComfyUI Manager → search "ComfyUI-GGUF-Loader" → install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
cd ComfyUI-GGUF-Loader
pip install -r requirements.txt
Common issues
The trap is expecting denoise_mode to change quality. It doesn't - it changes parity. If your img2img results look worse than you'd like, that's a prompt/strength/CFG tuning problem, and flipping to diffusers mode won't rescue it. And if your text-to-image workflow feels fine, leave it on comfy; the modes only diverge below denoise 1.0, and txt2img runs at 1.0 by definition.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| model | MODEL | — | |
| positive | CONDITIONING | — | |
| negative | CONDITIONING | — | |
| latent_image | LATENT | — | |
| seed | INT | 00–18446744073709550000 | — |
| steps | INT | 201–10000 | — |
| cfg | FLOAT | 2.50–100 | — |
| sampler_name | COMBO | euler | 44 options: euler, euler_cfg_pp, euler_ancestral, euler_ancestral_cfg_pp, heun, heunpp2, +38 |
| scheduler | COMBO | simple | 9 options: simple, sgm_uniform, karras, exponential, ddim_uniform, beta, +3 |
| denoise | FLOAT | 1.000–1 | — |
| denoise_mode | COMBO | comfy | 2 options: comfy, diffusers |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| LATENT | LATENT | — |