Skip to content

Qwen Image 2.1 Guide: Local RGBA + Multi-Ref Edits

Qwen Image 2.1 just dropped. Build transparent stickers and 10-ref mockups locally - setup, VRAM traps, and the license catch most guides skip.

5 min readBeginner

Goal for tonight: one transparent sticker PNG and one multi-reference product mock on disk. Local weights only. Qwen Image 2.1 shipped September 20, 2026 – native alpha, up to ten refs in a single pass.

Discord ping hit, I chased the drop the same night. First hour went to traps, not pretty samples. Below is the path that finished, with the VRAM and prompt gotchas left in.

Reader setup: two paths that finish tonight

Pick one stack. Both land the sticker + mock.

Path A – Diffusers (scriptable)

pip install torch>=2.4.0 transformers>=5.17 accelerate pillow
pip install git+https://github.com/huggingface/diffusers

import torch
from diffusers import QwenImage21Pipeline
from PIL import Image

pipe = QwenImage21Pipeline.from_pretrained(
 "Qwen/Qwen-Image-2.1", torch_dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload() # keep this under ~24 GB

# Transparent sticker - scaffold matters
img = pipe(
 prompt=(
 "This is an RGBA image with transparency. "
 "A flat vector coffee-cup mascot sticker, bold outline, "
 "soft drop shadow. The image has alpha channel and the background is transparent."
 ),
 width=2048, height=2048,
 num_inference_steps=40,
 generator=torch.Generator("cuda").manual_seed(42),
).images[0]
img.save("sticker_rgba.png") # keep RGBA

Defaults (Diffusers QwenImage21Pipeline): 40 steps, guidance off. CFG is optional. Add negative_prompt plus true_cfg_scale > 1 only when you mean it – each step then does roughly double the work. Easy way to thrash a 16 GB card for a quality bump you may not need.

Path B – ComfyUI (visual, lower VRAM)

Update ComfyUI, then pull the repack from Comfy-Org/Qwen-Image-2.1:

  • diffusion_models/qwen_image_2.1_int8_convrot.safetensors
  • text_encoders/qwen3vl_8b_* (INT8 or W4A8)
  • vae/qwen_image_2.1_vae_bf16.safetensors

~14 GB minimal stack (INT8 DiT ~7.26 GB + TE + 676 MB VAE). Built-in “Qwen Image 2.1 Text to Image” and “Image Edit” templates ship 25 steps / cfg 1 / euler / simple – not the card’s 40. For true 2K square, Resolution Selector ≈ 4.0 MP (2048²).

Edit prompts: name slots. “Keep pose in <image1>, put the jacket from <image2> on the subject, preserve face and hands.” Image list order is the order condition tokens are read.

What you actually pulled down

~33 GB for the full BF16 bundle. The “7B” headline is only the visual DiT (32 single-stream layers). Encoder is Qwen3-VL-8B; VAE is 64-channel RGBA at 16× compression. That split is why a 16 GB card can still work – and why native 2K feels like a cliff.

What you actually use, from the Qwen blog and model card:

  • Native RGBA generate, edit, subject lift
  • Up to 10 reference images, one forward pass
  • Local control: circles, paint marks, or a separate mask
  • Native ~2K defaults – 2048×2048; 16:9 at 2752×1536; plus 4:3 / 3:4 / 3:2 / 2:3

Day-zero hooks: Diffusers pipeline + Comfy templates. Launch-week chatter split hard – typography and edit fans vs people calling synthetic grain and a yellow cast. Run your own grid before you trust either camp.

Multi-ref mock + PE rewrite

refs = [Image.open(f) for f in ("bottle.png", "label.png", "scene.png")]
out = pipe(
 prompt="Place the bottle from the first image on the wood table in the third, apply the label from the second, soft window light, keep label text sharp",
 image=refs,
 num_inference_steps=40,
).images[0]
out.save("mock.png")

Short prompts underperform here. Repo ships optional rewriters – Qwen/Qwen-Image-2.1-PE-T2I and PE-I2I (fine-tuned ~9B VL each). Run them first; you get a long English prompt plus a suggested aspect to map onto the official size table.

Prefix KV cache reuses the text + reference prefix across denoising when causal_condition is true (default). Multi-ref stops feeling punishing on mid GPUs after step one lands. pipe.enable_model_cpu_offload() is still the first lever if resident weights won’t fit.

First clean transparent sticker feels oddly final. You quit fighting background removers and just keep the alpha.

Limits before you ship

The catch is legal, not just VRAM. Per the Qwen Research License (release date September 20, 2026): non-commercial only. Commercial use needs a separate license – request path is in that LICENSE file ([email protected]). Do not treat open weights as product-ready rights.

GPU VRAM Practical expectation (as of launch week, Sep 2026)
12 GB Aggressive quant + offload only
16 GB ~13.9 GB peak at 1024² / ~25s for 20 steps on INT8 path; 2K is a cliff
24 GB Comfortable INT8 / light BF16
48 GB+ Full BF16 + heavy multi-ref (~30 GB resident on 4090-class BF16 reports)

Community launch threads (as of that first week): synthetic texture, yellow/orange cast, finger and anatomy slips, dither-like fine detail. Editing consistency beats photoreal hero shots right now.

Comfy path details also live in the ComfyUI Qwen Image 2.1 tutorial if you want the template wiring without re-deriving nodes.

Qwen Image 2.1 FAQ

Can I use outputs commercially?

No under the default research license. Get a commercial grant from Qwen first.

Why is my “transparent” image still opaque?

Scaffold missing. Same open/close lines as the Path A sample; save PNG; confirm four channels. Skip the phrasing and you often get plain RGB.

Diffusers 40 steps or Comfy 25 – which should I keep?

Match the path default so you’re not debugging two variables. Soft type or drifting multi-ref identity? Climb toward 40 before you touch CFG. Guidance doubles compute and isn’t required for the quality the team showed with guidance off. Snappy Comfy iteration at 25/cfg1 is fine until the mock has to hold label text.

Generate one RGBA sticker with the scaffold, then one two-image edit with explicit <image1>/<image2> tags. Save both. That’s the baseline everything else gets judged against.