README.md
14.1 KB · 271 lines · markdown Raw
1 ---
2 license: other
3 license_name: qwen-research
4 base_model: Qwen/Qwen-Image-2.1
5 library_name: diffusers
6 pipeline_tag: text-to-image
7 tags:
8 - qwen
9 - image-generation
10 - image-editing
11 - rgba
12 - lora
13 - distilled
14 - few-step
15 ---
16 <!-- header start -->
17 <!-- 200823 -->
18 <p align="center">
19 <img src="assets/Pruna-Qwen-Image-2.1.png" width="800">
20 </p>
21 <!-- header end -->
22
23 <p align="center">
24 <a href="https://github.com/PrunaAI/pruna">
25 <img src="https://img.shields.io/badge/GitHub-PrunaAI-9334E9?style=plastic&logo=github&logoColor=white" alt="GitHub">
26 </a>
27 &nbsp;
28 <a href="https://twitter.com/PrunaAI">
29 <img src="https://img.shields.io/badge/Twitter%2FX-@PrunaAI-9334E9?style=plastic&logo=x&logoColor=white" alt="Twitter/X">
30 </a>
31 &nbsp;
32 <a href="https://www.linkedin.com/company/pruna-ai">
33 <img src="https://img.shields.io/badge/LinkedIn-PrunaAI-9334E9?style=plastic&logo=linkedin&logoColor=white" alt="LinkedIn">
34 </a>
35 &nbsp;
36 <a href="https://discord.com/invite/JFQmtFKCjd">
37 <img src="https://img.shields.io/badge/Discord-Join%20us-9334E9?style=plastic&logo=discord&logoColor=white" alt="Discord">
38 </a>
39 &nbsp;
40 <a href="https://dashboard.pruna.ai/login?utm_source=huggingface&utm_medium=org_card&utm_campaign=hf_traffic">
41 <img src="https://img.shields.io/badge/Performance%20Models-Try%20them%20now-9334E9?style=plastic&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MTEiIGhlaWdodD0iNDc3IiBmaWxsPSJub25lIj48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjMuNzAzIDMwMC41MzJjLTEuODQyLS42NzQtNC4xNDItMS4wNTctNS43MDMtMi4wMjktMTIuNTU4LTcuODQ2LTguODM3LTI1LjE3MiA1LjI1NS0yOC4zNjFhLjY2LjY2IDAgMCAwIC4zNDgtLjIwMS42LjYgMCAwIDAgLjE1Ni0uMzZxNi40OS04MS45ODYgNjguNTc3LTEzNC42MjlhLjM0LjM0IDAgMCAwIC4wOTItLjEyNS4zMy4zMyAwIDAgMC0uMDI2LS4zLjMzLjMzIDAgMCAwLS4xMTItLjEwOGMtNC4xMTUtMi40OTctOC42NC00Ljc1LTEyLjM1My03LjQ0M2ExOTAgMTkwIDAgMCAxLTE4Ljc5NC0xNS41MjJjLTIuOTM2LTIuNzY4LTMuNzAzLTUuODkxLjU4LTcuNzdhLjUuNSAwIDAgMCAuMjgtLjYwOEM1MyA3NS45NSA0OC40MTcgNDguNTk5IDQ1LjUxOCAxOS42NXEtLjM5My0zLjg1Mi0uMjcxLTYuMzJhLjc1Ljc1IDAgMCAxIC4xMzQtLjQuNy43IDAgMCAxIC4zMjQtLjI1NXEyLjEwNC0uODQyIDUuODQ0LTEuNDMxYzU4LjExNC05LjEzNiAxMjcuMDA5IDguNDI1IDE0NC4zMDcgNzIuNjQ1cS4xMDMuMzY0LjE3OCAwIDUuMDk2LTI0LjA5NyA0LjYzOC00OC4xOTMtLjA0Ny0yLjc4NyAxLjg3OS00Ljc4OCAxMC40MDctMTAuOCAyNC43OTgtOC42ODdjNy40NzEgMS4wOTUgNy43NDIgNC42MzggNy4yMDkgMTEuMWEzMzQgMzM0IDAgMCAxLTExLjg4NCA2NC43MDYuMzg4LjM4OCAwIDAgMCAuMTgyLjQ0NC40LjQgMCAwIDAgLjE2NC4wNTFjOTIuNDIxIDguNDUzIDE1OC44NzUgNzkuNDg5IDE2NS4wODQgMTcxLjI3NGExIDEgMCAwIDAgLjEyOS40MjQuODMuODMgMCAwIDAgLjI5MS4yOTZjMy43NSAyLjE3IDYuMiAyLjIxNiA4Ljg1NSA2LjU5MiA1LjA2OCA4LjMzMiAxLjQ1IDIwLjQzMS04LjU5MyAyMi40N2ExLjcxIDEuNzEgMCAwIDAtMS4zNjUgMS40NjhxLTkuMTczIDc1LjM4My02NC43NjIgMTIzLjM3MWMtMjguNjIyIDI0LjcwNC02NS43NDQgMzkuNzQ5LTEwMy40NjQgNDIuMzMtMTAwLjM1OSA2Ljg2My0xODQuNDg2LTY1LjYyMi0xOTUuMDA1LTE2NS41N2EuOC44IDAgMCAwLS4xNTQtLjM5NS43NC43NCAwIDAgMC0uMzMzLS4yNU0xNTEuMzM4IDk3LjY0M2wxOS4wNjYgMTkuMzc1YS41LjUgMCAwIDAgLjE1LjEuNS41IDAgMCAwIC4xNzYuMDMxLjQzLjQzIDAgMCAwIC4zMTktLjE1cTEwLjg0Ny0xMi40NjUgNy40NDMtMjguMTU1Yy00LjUzNS0yMC44Ni0xOC41OTgtMzcuNjY0LTM3LjI3MS00OC4zODktMjEuMDY3LTEyLjY4OS00Ny44NjUtMTUuOTA1LTcyLjI4LTE0Ljg0cS0uNjE3LjAzLS4xNC40MjJsNjMuNDcyIDUzLjMyNmEuNC40IDAgMCAwIC4xNDQuMDcyLjM0LjM0IDAgMCAwIC4zMDEtLjA2OC4zLjMgMCAwIDAgLjA4OC0uMTI2IDQ3IDQ3IDAgMCAwIDMuMjgyLTEzLjA4MXEuMDIzLS4yMzMuMTI0LS40MzN0LjI2OC0uMzM0YzIuOTU1LTIuNDc4IDQuMTE1LjQ1OCA0LjY5NCAyLjg1MnEyLjMyIDkuNTM3LjE4NyAxOS4yNDRhMS40OCAxLjQ4IDAgMCAwIC40NCAxLjQwM3ptLTYuNTI2IDkuMjk1LTkuMDI0LTEwLjI3NmEuNy43IDAgMCAwLS4zNDMtLjIwNy44Ni44NiAwIDAgMC0uNDMzIDBxLTExLjY4IDMuMDIxLTIzLjExNC0uODIyYy01LjgxNi0zLjg1Mi0uNzU4LTUuNTE3IDIuNTktNS44MTZxNS45MTgtLjUzMyAxMS43MzUtMi41MDZhLjMuMyAwIDAgMCAuMTI3LS4wOC4zLjMgMCAwIDAgLjA3My0uMTMzLjM0LjM0IDAgMCAwIC4wMDEtLjE1NC4zNC4zNCAwIDAgMC0uMDctLjEzOGMtMTkuNDU5LTIxLjE1LTQwLjc2LTQwLjI0NS02Mi4yNzUtNTkuMjY0cS0uMzU2LS4zMTgtLjMxOC4xNWEzMDggMzA4IDAgMCAwIDguMzg3IDUxLjgwMmM0LjU5MiAxOC4zMDggMTMuNzU1IDM0LjE1NyAzMS44NDggNDEuODcycTI2LjI0NyAxMS4xODIgNTMuNzI5IDIuODMzYS41ODMuNTgzIDAgMCAwIC4yOTktLjg4OCAyMzUgMjM1IDAgMCAwLTEzLjIxMi0xNi4zNzNtNDUuMTI1IDQ5Ljc0NXEtMTIuNTk1IDEuMzE4LTIzLjQ0MS01LjU4M2MtMy4wNzctNC44OTkgMi4wNjYtOC41OTMgNS40NDItMTEuMTgzYS41ODQuNTg0IDAgMCAwIC4xODctLjcwMSA4LjQ2IDguNDYgMCAwIDAtMy40ODgtMy44NjIuODEuODEgMCAwIDAtLjgyMy4wMDljLTE2LjY5MSA5Ljk3Ny0zNC40ODUgMTAuNzgyLTUzLjE4NiA2Ljk2N3EtMS41Ny0uMzItMi44NTIuNjQ1LTYxLjQ1MSA0Ni4zNy02OS42NyAxMjMuOTEzLS42ODMgNi40MzMtMS44MDYgOC44MjdjLTIuOTQ1IDYuMzAyLTcuNzcgNy44NDUtMTQuMjIyIDkuNDcycS0uNDQ5LjExMyAwIC4yMzRjOS4yNzYgMi4zMSAxNC42OCA2LjE0MyAxNi4wNzQgMTYuNDAxIDguNDYyIDYyLjQ5IDQ4Ljk0IDExNy44NjQgMTEwLjM4MyAxMzguMzQxYTEwNCAxMDQgMCAwIDAgMTEuMDA2IDMuNTA3YzkyLjY0NSAyMy45MDkgMTgxLjIzMi0zMy42NjIgMjAyLjgwNC0xMjUuMDU0cTEuNjA5LTYuNzkgMy40NS0xOS4wODVjMS4xMDQtNy4zOTYgNS42OTUtMTIuMTE4IDEzLjE0Ny0xMy41NjguNDEyLS4wODQgMS45MDgtLjc1Ny4yODEtLjk5MS04LjA1MS0xLjE0MS0xMi4yNC02LjM4Ni0xMi45ODgtMTQuMTI4cS0xLjA3NS0xMS4yNS0yLjUxNi0xOS4wMzhjLTExLjc3Mi02My44OTItNTYuMzgzLTExNC41NzItMTE5LjI4NS0xMzEuNDZxLTE1LjEyLTMuODgtMzAuOTg3LTUuMjQ1YS4zODYuMzg2IDAgMCAwLS40MDIuMjUyIDE2OC42IDE2OC42IDAgMCAxLTExLjM1MiAyNC44NTRjLTQuMTMzIDcuNDA2LTguMTYzIDE1LjQ5NC0xNS43NTYgMTYuNDc2Ii8+PGNpcmNsZSBjeD0iMTQwLjA2NSIgY3k9IjI3My4wMyIgcj0iNTAuNjE4IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iOS4yMDMiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTQ2Ljk2NyAyNDIuMDkyYzE1LjY3MiAwIDI4LjM3NiAxMy45NjMgMjguMzc2IDMxLjE4OHMtMTIuNzA0IDMxLjE4OS0yOC4zNzYgMzEuMTg5LTI4LjM3Ny0xMy45NjQtMjguMzc3LTMxLjE4OWMwLTIuNjI1LjI5Ny01LjE3NC44NTItNy42MSAxLjYwNyAzLjcyNyA1LjMxMyA2LjMzOCA5LjYyOSA2LjMzOCA1Ljc4OSAwIDEwLjQ4MS00LjY5MyAxMC40ODItMTAuNDgycy00LjY5My0xMC40ODEtMTAuNDgyLTEwLjQ4MWMtLjc2MSAwLTEuNTA0LjA4My0yLjIxOS4yMzcgNS4xMzktNS42NzYgMTIuMjUzLTkuMTkgMjAuMTE1LTkuMTkiLz48Y2lyY2xlIGN4PSIyNjkuOTMyIiBjeT0iMjczLjAzIiByPSI1MC42MTgiIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSI5LjIwMyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yNzYuODM0IDI0Mi4wOTJjMTUuNjcyIDAgMjguMzc2IDEzLjk2MyAyOC4zNzYgMzEuMTg4cy0xMi43MDQgMzEuMTg5LTI4LjM3NiAzMS4xODktMjguMzc3LTEzLjk2NC0yOC4zNzctMzEuMTg5YzAtMi42MjUuMjk3LTUuMTc0Ljg1My03LjYxIDEuNjA2IDMuNzI3IDUuMzEyIDYuMzM4IDkuNjI4IDYuMzM4IDUuNzg5IDAgMTAuNDgyLTQuNjkzIDEwLjQ4Mi0xMC40ODJzLTQuNjkzLTEwLjQ4MS0xMC40ODItMTAuNDgxYy0uNzYxIDAtMS41MDQuMDgzLTIuMjE5LjIzNyA1LjEzOS01LjY3NiAxMi4yNTQtOS4xOSAyMC4xMTUtOS4xOSIvPjxwYXRoIHN0cm9rZT0iI2ZmZiIgc3Ryb2tlLXdpZHRoPSI5LjIwMyIgZD0iTTE3Ny4xMzUgMzQ1LjMyOGMuODk5LS4yNCAyLjgwMS0uMTk3IDYuMzA0LjQ2NCA2LjMxMSAxLjE5IDE2LjU4NSA0LjIyMSAyNi4xMjIgNC4yMjEgOS40NTIgMCAxNy4xMTgtMS45MjYgMjEuMzgzLTIuNjAzLjc3LS4xMjMgMS4zODUtLjE5OSAxLjg3OC0uMjM3LS4zNCAxMy44NDMtMTIuODkzIDI3LjcxLTI3Ljg2OCAyNy43MS0xNS4xNzIgMC0yNy44NzYtMTMuODM1LTI3Ljg3Ni0yOC44MTEgMC0uMzU3LjAyOS0uNTk2LjA1Ny0uNzQ0WiIvPjwvc3ZnPg==" alt="Performance Models">
42 </a>
43 </p>
44 <div align="center">
45
46 <h1 style="color: #9334E9;">⚡ Pruna-Qwen-Image-2.1</h1>
47
48 <h2>Few-step LoRA adapters for Qwen-Image-2.1</h2>
49
50 <h3>
51 <span style="color: #9334E9;">5 or 8 steps</span>
52 &nbsp;·&nbsp;
53 <span style="color: #9334E9;">Up to 6.3x faster</span>
54 &nbsp;·&nbsp;
55 <span style="color: #9334E9;">No CFG</span>
56 &nbsp;·&nbsp;
57 Text-to-image and image editing
58 </h3>
59
60 </div>
61
62 **Pruna-Qwen-Image-2.1 is a set of LoRA adapters that let
63 [`Qwen/Qwen-Image-2.1`](https://huggingface.co/Qwen/Qwen-Image-2.1) generate
64 and edit images in only 5 or 8 steps. The adapters load on top of the base
65 model, so the pipeline, text encoder, and VAE stay unchanged. Training is based
66 on DMD. Improved using Qwen.**
67
68 > **v0.1: first release, work in progress.** Pruna-Qwen-Image-2.1 does not yet match the
69 > visual quality of the base model. We are still improving the distillation and
70 > will update this repository as new versions become available.
71
72 ## Variants
73
74 Both adapters are v0.1. Pick one based on whether you need **quality** or **speed**.
75
76 | File | Steps | Trade-off |
77 |---|:---:|---|
78 | `p_qwen_image_2.1_8step_v0.1.safetensors` | 8 | **Higher quality.** Recommended as the default. |
79 | `p_qwen_image_2.1_5step_v0.1.safetensors` | 5 | **Higher speed**, with noticeably lower visual quality. |
80
81 Each adapter is trained for its own sigma schedule. Load only one at a time.
82
83 ## Prompts, editing, and resolution
84
85 The adapters were trained at **1K resolution only**, with a mix of simple and
86 upsampled prompts, text-to-image generation, and single- and multi-image editing
87 with **up to 3 reference images**. Prompt upsampling is optional; detailed prompts
88 usually give better results.
89
90 Start at **1024 × 1024** and use at most **3 reference images** for editing.
91 Higher resolutions (including 2K) and more reference images may work, but are
92 outside the training coverage, and quality may vary. The 2K timings below show
93 inference speed, not a guarantee of quality at that resolution.
94
95 ## Benchmarking
96
97 Use a table; Hugging Face can otherwise render the `<img>` elements as separate blocks.
98
99 <table>
100 <tr>
101 <td width="50%">
102 <img src="assets/Pruna-Qwen-Image-2.1-t2i-1024.png" width="100%">
103 </td>
104 <td width="50%">
105 <img src="assets/Pruna-Qwen-Image-2.1-t2i-2048.png" width="100%">
106 </td>
107 </tr>
108 <tr>
109 <td width="50%">
110 <img src="assets/Pruna-Qwen-Image-2.1-i2i-1024.png" width="100%">
111 </td>
112 <td width="50%">
113 <img src="assets/Pruna-Qwen-Image-2.1-i2i-2048.png" width="100%">
114 </td>
115 </tr>
116 </table>
117
118 Text-to-image with the official Qwen model-card example prompt, BF16, batch size 1,
119 on one NVIDIA H100 80GB. Median of 3 requests after one warmup per configuration.
120 Includes prompt encoding, denoising, and decoding; excludes PNG saving, model
121 loading, and warmup. Base: 40 steps with KV cache on; Pruna-Qwen-Image-2.1: 5 or 8 steps with
122 KV cache off, as configured for this benchmark. The examples below enable KV caching for
123 Pruna-Qwen-Image-2.1; the chart has not been remeasured with that setting. LoRAs were unmerged;
124 no CFG, compilation, or CPU offload. These timings do not imply equal image quality.
125
126 ## Quickstart
127
128 Runs text-to-image and image editing with the same pipeline. Needs a **CUDA GPU**.
129
130 ```bash
131 pip install 'torch>=2.4.0' 'transformers>=5.17' accelerate peft pillow
132 pip install git+https://github.com/huggingface/diffusers@6256aa7666cedd47443adc8f82da9a10e110b09c
133 ```
134
135 ```python
136 import torch
137 from PIL import Image
138 from diffusers import FlowMatchEulerDiscreteScheduler, QwenImage21Pipeline
139
140 STEPS = 8 # 8 for higher quality, 5 for higher speed
141
142 # The terminal sigma 0 is appended by the scheduler.
143 SIGMAS = {
144 5: [1.0, 0.94, 6 / 7, 2 / 3, 0.4],
145 8: [1.0, 14 / 15, 6 / 7, 10 / 13, 2 / 3, 6 / 11, 0.4, 2 / 9],
146 }[STEPS]
147
148 pipe = QwenImage21Pipeline.from_pretrained(
149 "Qwen/Qwen-Image-2.1", torch_dtype=torch.bfloat16
150 ).to("cuda")
151 pipe.load_lora_weights(
152 "PrunaAI/Pruna-Qwen-Image-2.1",
153 weight_name=f"p_qwen_image_2.1_{STEPS}step_v0.1.safetensors",
154 )
155
156 # Use the sigmas exactly as given: no extra shifting.
157 pipe.scheduler = FlowMatchEulerDiscreteScheduler.from_config(
158 pipe.scheduler.config,
159 use_dynamic_shifting=False,
160 shift=1.0,
161 shift_terminal=None,
162 )
163 ```
164
165 ## For Text-to-Image
166
167 Longer, more descriptive prompts give better results.
168
169 ```python
170 image = pipe(
171 prompt=(
172 'A glowing neon shop sign that reads "QWEN IMAGE 2.1", mounted on a brick wall '
173 "in a narrow city alley at night. Heavy rain, wet pavement reflecting pink and "
174 "blue light, shallow depth of field, cinematic photograph."
175 ),
176 width=1024,
177 height=1024,
178 generator=torch.Generator("cuda").manual_seed(42),
179 num_inference_steps=STEPS,
180 sigmas=SIGMAS,
181 true_cfg_scale=1.0,
182 use_kv_cache=True,
183 ).images[0]
184 ```
185
186 ### For Image Editing
187
188 ```python
189 image = pipe(
190 prompt="Change the background to a sunset beach",
191 image=Image.open("input.png").convert("RGB"),
192 generator=torch.Generator("cuda").manual_seed(42),
193 num_inference_steps=STEPS,
194 sigmas=SIGMAS,
195 true_cfg_scale=1.0,
196 use_kv_cache=True,
197 ).images[0]
198 ```
199
200 ### Recommended settings
201
202 - **Use the sigma schedule that matches your adapter**, and keep the scheduler
203 at `shift=1.0` with dynamic shifting off so the sigmas are not shifted twice.
204 - 8-step: `1 → 14/15 → 6/7 → 10/13 → 2/3 → 6/11 → 0.4 → 2/9 → 0`
205 (shift 2, computed as `σ = 2t / (1 + t)` on evenly spaced `t`)
206 - 5-step: `1 → 0.94 → 6/7 → 2/3 → 0.4 → 0`
207 - **No CFG.** Keep `true_cfg_scale=1.0` and do not pass a negative prompt.
208 - **Keep the LoRA strength at 1.0.**
209 - **Write detailed prompts for text-to-image.** Longer prompts that describe
210 the subject, setting, lighting, and style work noticeably better than short
211 ones.
212
213 ## Limitations
214
215 - This is a first version. Quality is below that of the base model.
216 - The 5-step adapter is faster than the 8-step one, but its images are
217 visibly worse.
218 - Short or vague text-to-image prompts give weaker results.
219 - The adapters are only intended for the settings above. Other step counts,
220 schedules, or CFG values are not supported.
221
222 ## What this is not
223
224 - Not a standalone model. It needs the `Qwen/Qwen-Image-2.1` base weights.
225 - Not a replacement for the base model when you need its full quality.
226 - Not a finished release. Expect the weights to change in future versions.
227
228 ## License
229
230 Pruna-Qwen-Image-2.1 is a derivative of Qwen-Image-2.1 and is distributed
231 under the **Qwen RESEARCH LICENSE AGREEMENT**. Review its use restrictions
232 before using or redistributing the adapters.
233
234 Qwen is licensed under the Qwen RESEARCH LICENSE AGREEMENT, Copyright (c) 2026
235 Hangzhou Tongyi Laboratory Technology Co., Ltd. All Rights Reserved.
236
237 ## What's next?
238
239 - **Use Pruna-Qwen-Image-2.1 to generate and edit images with Qwen-Image-2.1 in a few steps.**
240 - Compress your own models with [Pruna](https://github.com/PrunaAI/pruna) and give us a ⭐️ for more efficiency!
241 - Want to use our optimized image models right away? Check [P-Image-Ideogram](https://www.pruna.ai/p-image-ideogram) and [P-Image-Edit](https://www.pruna.ai/p-image-edit).
242
243 <style>
244 .model-button {
245 display: inline-flex;
246 flex-direction: row;
247 justify-content: center;
248 align-items: center;
249 gap: 8px;
250
251 padding: 8px 20px;
252 border: none;
253 border-radius: 8px;
254
255 background: #9334e9;
256 color: #ffffff;
257
258 font-size: 14px;
259 font-weight: 400;
260 line-height: 1;
261 text-decoration: none;
262 white-space: nowrap;
263 cursor: pointer;
264
265 box-sizing: border-box;
266 overflow: visible;
267 opacity: 1;
268 }
269 </style>
270
271 <a href="https://dashboard.pruna.ai/login?utm_source=huggingface&utm_medium=model_card&utm_campaign=hf_traffic" class="model-button">Try our models</a>