Quantized builds at adapter weight 1.0, for text-to-image generation and image editing.
This repository ships quantized transformer weights only. The model is our rank-128 Omni adapter merged into Qwen/Qwen-Image-2.1 at LoRA strength 1.0, then quantized. The text encoder, processor and VAE are not included; take them from the base repository.
| File | Format | Layout | Size | Runtime |
|---|---|---|---|---|
qwen-image-2.1-step90000-BF16.gguf |
GGUF BF16 | 297 | 14.23 GB | ComfyUI, Diffusers |
qwen-image-2.1-step90000-Q8_0.gguf |
GGUF Q8_0 | 297 | 7.69 GB | ComfyUI, Diffusers |
qwen-image-2.1-step90000-Q6_K.gguf |
GGUF Q6_K | 297 | 6.00 GB | ComfyUI, Diffusers |
qwen-image-2.1-step90000-Q5_K_M.gguf |
GGUF Q5_K_M | 297 | 5.21 GB | ComfyUI, Diffusers |
qwen-image-2.1-step90000-Q4_K_M.gguf |
GGUF Q4_K_M | 297 | 4.47 GB | ComfyUI, Diffusers |
qwen-image-2.1-step90000-Q4_0.gguf |
GGUF Q4_0 | 297 | 4.20 GB | ComfyUI, Diffusers |
qwen-image-2.1-step90000-FP8-comfy.safetensors |
FP8 E4M3 | 265 | 7.12 GB | ComfyUI only |
qwen-image-2.1-step90000-INT8-ConvRot-comfy.safetensors |
INT8 ConvRot | 265 | 7.26 GB | ComfyUI only |
qwen-image-2.1-step90000-NVFP4-comfy.safetensors |
NVFP4 | 265 | 4.20 GB | ComfyUI only |
qwen-image-2.1-step90000-FP8-torchao/ |
FP8 (torchao) | 297 | 7.12 GB | Diffusers only |
qwen-image-2.1-step90000-NF4-bnb/ |
NF4 (bitsandbytes) | 297 | 3.67 GB | Diffusers only |
qwen-image-2.1-step90000-INT8-bnb/ |
INT8 (bitsandbytes) | 297 | 7.12 GB | Diffusers only |
qwen-image-2.1-step90000-BF16/ |
BF16 safetensors | 297 | 14.23 GB | Diffusers; ComfyUI (see BF16 workflow below) |
File integrity information is in SHA256SUMS.
from_single_file.bitsandbytes).torchao).gguf package -> the BF16 folder (plain from_pretrained).The 297 and 265 layouts use different MLP representations: 265 uses the fused img_mlp.gate_up
projection; 297 keeps the separate gate_layer / proj pair. A loader must support the selected layout.
The BF16 ComfyUI workflow below was verified with the 297-tensor safetensors file and the native
UNETLoader in ComfyUI 0.39.0; support should not be assumed for older or different loaders.
These are the values from our inference grid search for the non-distilled model.
| Setting | Starting value |
|---|---|
| Base components | Text encoder, processor and VAE from Qwen/Qwen-Image-2.1 |
| Sampling steps | 35 |
| True CFG scale | 5.0 (both text-to-image and editing) |
| Sampler | er_sde with the simple scheduler (ComfyUI) |
| Negative prompt | A single space: " " |
| Output resolution | 768 x 1152 or 1024 x 1024 |
| KV cache | Enabled |
An omitted or empty negative prompt disables true CFG even when true_cfg_scale is greater than 1. Use a single
space if you do not need a specific negative prompt. This is a regular LoRA merge; it does not provide few-step
distillation.
ComfyUI/models/
|-- diffusion_models/ qwen-image-2.1-step90000-Q5_K_M.gguf
|-- text_encoders/ <Qwen-Image-2.1 text encoder>
`-- vae/ <Qwen-Image-2.1 VAE>
Unet Loader (GGUF) -> pick the file. Works for both text-to-image and editing.Load Diffusion Model -> pick a -comfy.safetensors file.Text Encoder (Qwen-Image) in edit mode; the latent comes from that node.er_sde, scheduler simple, 35 steps, CFG 5.0.Download workflow_example.json and drag it into ComfyUI, or open it with the
workflow Load command. This is a ComfyUI UI workflow for text-to-image generation. It uses an
EmptyLatentImage and does not require reference images.
The tested environment is ComfyUI 0.39.0
(commit b0b7435),
with frontend 1.53.6. Use this version or a compatible build with the native TextEncodeQwenImage21,
QwenImage21Cache and INT8 ConvRot text-encoder support. All nine nodes in this workflow are built into
the tested ComfyUI version.
Download the following three components and place them at these paths relative to your ComfyUI folder:
| Component | Download | Local path expected by the workflow |
|---|---|---|
| BF16 transformer | ChatR Labs BF16 safetensors | models/diffusion_models/chatrlabs_qwen_image21_step90000_bf16.safetensors |
| INT8 ConvRot text encoder | Comfy-Org Qwen3-VL-8B | models/text_encoders/qwen3vl_8b_int8_convrot.safetensors |
| BF16 VAE | Comfy-Org Qwen-Image-2.1 VAE | models/vae/qwen_image_2.1_vae_bf16.safetensors |
Rename the downloaded transformer from diffusion_pytorch_model.safetensors to
chatrlabs_qwen_image21_step90000_bf16.safetensors; its weights are unchanged. Refresh the model lists
or restart ComfyUI, then check the selections in UNETLoader, CLIPLoader (type qwen_image) and
VAELoader. Here, BF16 refers to the transformer and VAE; the text encoder is INT8 ConvRot.
| Saved setting | Value |
|---|---|
| Steps / CFG | 35 / 5.0 |
| Sampler / scheduler | er_sde / simple |
| Seed / seed control | 12347 / fixed |
| Width / height / batch size | 1728 / 1728 / 1 |
| Denoise | 1.0 |
| Negative prompt | A single space: " " |
| KV cache device / dtype | auto / default |
Edit the prompt in TextEncodeQwenImage21, set the output dimensions in EmptyLatentImage, and adjust
the seed in KSampler as needed before queuing. The saved 1728 x 1728 resolution is this example's
setting; larger images require more memory than the starting resolutions above. SaveImage writes to
ComfyUI/output/ with the saved prefix sample_0006_seed12347; update the prefix for your own runs.
The workflow's SHA-256 is included in SHA256SUMS.
import torch
from diffusers import QwenImage21Pipeline, QwenImage21Transformer2DModel, GGUFQuantizationConfig
transformer = QwenImage21Transformer2DModel.from_single_file(
"qwen-image-2.1-step90000-Q5_K_M.gguf",
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
config="Qwen/Qwen-Image-2.1",
subfolder="transformer",
torch_dtype=torch.bfloat16,
)
pipe = QwenImage21Pipeline.from_pretrained(
"Qwen/Qwen-Image-2.1", transformer=transformer, torch_dtype=torch.bfloat16,
)
pipe.enable_model_cpu_offload()
import torch
from diffusers import QwenImage21Pipeline, QwenImage21Transformer2DModel
transformer = QwenImage21Transformer2DModel.from_pretrained(
"chatrlabs/Qwen-Image-2.1-Uncensored-Omni-Quantized",
subfolder="qwen-image-2.1-step90000-FP8-torchao",
torch_dtype=torch.bfloat16,
)
pipe = QwenImage21Pipeline.from_pretrained(
"Qwen/Qwen-Image-2.1", transformer=transformer, torch_dtype=torch.bfloat16,
)
The INT8 build stores its non-quantized tensors in FP16, so load both the transformer and the pipeline with
torch_dtype=torch.float16.
image = pipe(
prompt="A blue ceramic mug on a wooden table by a window, soft morning light, product photography",
negative_prompt=" ",
width=1024,
height=1024,
num_inference_steps=35,
true_cfg_scale=5.0,
use_kv_cache=True,
generator=torch.Generator("cuda").manual_seed(42),
).images[0]
image.save("generated.png")
from PIL import Image
reference = Image.open("generated.png").convert("RGBA")
image = pipe(
image=[reference],
prompt="Change the mug to green, keep everything else unchanged",
negative_prompt=" ",
width=1024,
height=1024,
output_resolution=1024,
num_inference_steps=35,
true_cfg_scale=5.0,
use_kv_cache=True,
generator=torch.Generator("cuda").manual_seed(45),
).images[0]
image.save("edited.png")
Keep VAE tiling off: tiled decoding adds visible vertical colour streaks.
We compared both public checkpoints from this training run with the original Qwen-Image-2.1 base model, using the same prompts, seed and settings (35 steps, CFG 5.0). This repository is step 90,000 (benchmarked as the BF16 LoRA fused at strength 1.0; the quantized files were not scored separately). Scores are 0–100, higher is better, ± one standard error.
| Benchmark | Base | Step 32,000 (LoRA v0.1) | Step 90,000 (Quantized) |
|---|---|---|---|
| Adult prompt adherence (960 images) | 85.1 ± 0.9 | 87.4 ± 0.8 | 89.7 ± 0.7 |
| Anatomy (960 images) | 70.3 ± 1.4 | 67.7 ± 1.4 | 69.4 ± 1.4 |
| General SFW prompts (300 PartiPrompts) | 79.8 ± 2.0 | 75.8 ± 2.2 | 79.6 ± 2.0 |
Scores come from AI judges (Qwen3.8-27B for adherence, Gemma 4 31B for anatomy) on a held-out test set that does not overlap the training data. See BENCHMARK.md for per-caption-length and per-category results, the exact judge questions, and limitations.
Measured on a single RTX 5090 (32 GB), 35 steps, er_sde, 768 x 1152:
| Build | Peak VRAM | Time per image (text to image) | Time per image (edit) |
|---|---|---|---|
| BF16 | ~14 GB | ~28 s | ~32 s |
| Q5_K_M | ~8 GB | ~28 s | ~32 s |
| NVFP4 | ~4 GB | ~30 s | ~34 s |
Editing and ControlNet runs add reference and control latents; budget a few GB more. The BF16 pipeline does not fit comfortably beside a full text encoder on a 24 GB card - use CPU offload there.
These are individual timings, not comparative quality benchmarks.
| Property | Value |
|---|---|
| Base | Qwen-Image-2.1 |
| Adapter | ChatR Labs rank-128 Omni LoRA, merged at strength 1.0 |
| Training checkpoint | Step 90000 |
| Adapted modules | 224 |
| Diffusers-layout tensors | 297 |
| Comfy-layout tensors | 265 |
| GGUF tool | ComfyUI-GGUF convert.py, per-block quantization |
| Comfy FP8 | TensorCoreFP8E4M3Layout, per-tensor scale, 229 modules |
| Comfy INT8 ConvRot | convrot, group size 256, 224 modules |
| Comfy NVFP4 | TensorCoreNVFP4Layout, 192 fused modules |
| Diffusers FP8 | torchao Float8WeightOnlyConfig, per-row scale |
| Diffusers NF4 | bitsandbytes 4-bit NF4 with double quantization |
| Diffusers INT8 | bitsandbytes 8-bit |
The text encoder and VAE are untouched in every build; differences between builds come from the transformer only.
The checkpoints and example code do not add a prompt filter or output safety checker. The name describes the intended release, not a guarantee that every requested concept will be rendered. Results depend on the prompt, the build you load, and the application running it.
Built with Qwen. This is a community fine-tune by ChatR Labs, independent of the upstream Qwen team.
GPU compute used for the development and evaluation of this release was provided by Chatr AI.
We thank the Chatr AI team for supporting this research release.
qwen-image-2.1-step90000-BF16/diffusion_pytorch_model.safetensors 14 GBqwen-image-2.1-step90000-INT8-ConvRot-comfy.safetensors 7.3 GBqwen-image-2.1-step90000-FP8-torchao/diffusion_pytorch_model.safetensors 7.1 GBqwen-image-2.1-step90000-INT8-bnb/diffusion_pytorch_model.safetensors 7.1 GBqwen-image-2.1-step90000-FP8-comfy.safetensors 7.1 GBqwen-image-2.1-step90000-NVFP4-comfy.safetensors 4.2 GBqwen-image-2.1-step90000-NF4-bnb/diffusion_pytorch_model.safetensors 3.7 GBQwen/Qwen-Image-2.1Have the files? Submit a torrent.
Submit a torrentHave the complete files and permission to share them? Replace the example folder path. The script checks the files, makes a torrent and submits its magnet and checksums. Keep your torrent client seeding. Get your community key from your settings, and read the script before running it.
curl -fsSL https://pirateface.co/package.sh | bash -s -- --repo chatrlabs/Qwen-Image-2.1-Uncensored-Omni-Quantized ./model-folder