Qwen-Image 2.1 β€” the libwaifu package

Qwen-Image 2.1, converted to the package format libwaifu reads. The same weights drawing the same pictures; a different file layout and a narrower dtype.

By downloading these files you agree to the Qwen RESEARCH LICENSE AGREEMENT, a copy of which is distributed here as LICENSE. The agreement is non-commercial (research and evaluation) use only β€” see LICENSE for the exact terms, including how to request a commercial license.

This is a modified copy β€” see NOTICE for what was changed β€” and it is not an official Qwen product and is not endorsed by Alibaba or the Qwen team. This project is Built with Qwen. The original weights are at Qwen/Qwen-Image-2.1.

What is here

package on disk what it is
qwen-image-2.1.yaml and its parts 30.0 GB float16 throughout
qwen-image-2.1-fp8.yaml and its parts 16.0 GB the matrices as E4M3 with one scale per output channel, everything else float16

Either one carries the whole model: the 7B single-stream DiT, the language half of a Qwen3-VL-8B text encoder (read at its last layer), and the Wan-2.2-style autoencoder β€” 64 latent channels, an alpha channel out. Nothing else has to be fetched to draw. The runtime composites the RGBA output over white by default; the raw four channels are available too (generate_rgba).

Drawing with it

waifu webui -m qwen-image-2.1.yaml

or from Rust:

let manifest = Manifest::open("qwen-image-2.1.yaml")?;
let model = QwenImage::from_manifest(Device::Cuda, Residency::LowVram, &manifest)?;
let image = model.generate("a red fox sitting in fresh snow", &options)?;

The package suggests forty steps at no guidance (suggested: block) β€” true_cfg_scale = 1 is what the model card calls "meant to be sampled without guidance"; a guidance above one runs a second pass on the negative prompt, the way the reference does.

How close it is to the original

Measured against diffusers' QwenImage21Pipeline on the same weights, 256x256, ten steps, with every input taken off one real trajectory rather than from torch.randn:

float16 package fp8 package
encoder, last layer before the norm (against float32) 1.07e-2 1.21e-1
velocity at step six 7.5e-3 2.15e-2
decoder, RGBA (against float32) 6.5e-4 6.5e-4 β€” it is not quantized
the whole ten-step walk 1.33e-2 1.19e-1

The float16 numbers are close to what the two float types disagree by and little else: the reference's own bfloat16 run is itself 6.9e-2 from float32 on the encoder's last layer, so float16 (1.07e-2) is the more exact of the two.

The fp8 package costs considerably more here than in libwaifu's other fp8 packages β€” about eleven times the float16 package's encoder error, against roughly four to five times for this runtime's other models. This weighs down that encoder and the walk it feeds more than it does the per-step denoising error. It is still a real, working package β€” nothing NaNs or crashes, and the decoder is exactly as exact either way, since it is never quantized β€” but take it only when the card is genuinely the constraint, and expect a more noticeably different picture than the other fp8 packages here draw.

Memory

Measured upstream on a 16 GB card with Residency::LowVram, 1024x1024: about 3.2 GB of card memory at peak (the weights stream through a layer at a time) and 27 GB of host memory for the float16 package mapped in. The fp8 package is about half that on disk and in host memory. Residency::Device instead holds the whole package on the card β€” budget roughly the on-disk size of the package plus a few gigabytes of activations.

Attribution

Qwen is licensed under the Qwen RESEARCH LICENSE AGREEMENT, Copyright (c) 2026 Hangzhou Tongyi Laboratory Technology Co., Ltd. All Rights Reserved. This project is Built with Qwen.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Model tree for ling0322/libwaifu-qwen-image-2.1

Finetuned
(32)
this model