Models & AlgorithmsKR

Qwen-Image-2.1 on One A100: What I Could Count, and What the OCR Got Wrong

8.2 seconds for a 1024x1024 image at 20 steps, 56.5 GiB peak at 2048x2048, and thirty sign images I checked myself all carried the text I asked for — while Tesseract found it in twelve. Editing is the weak half: four of eight mask-free instructions were followed, and the median image changed 84% of its pixels.

Qwen-Image-2.1 on One A100: What I Could Count, and What the OCR Got Wrong

Qwen-Image-2.1 on One A100: What I Could Count, and What the OCR Got Wrong

Qwen released Qwen-Image-2.1 on September 20: one checkpoint that both generates images and edits them, 33.1 GB of weights across a 7B generator, a Qwen3-VL encoder and a VAE. The license is qwen-research, not the Apache-2.0 of the first Qwen-Image — worth checking before it goes anywhere commercial.

I measured what can be counted on one A100 80GB: time, memory, whether the text I asked for actually appears, and how much of an image survives an edit. I did not score beauty or "instruction following" on a scale, because those need a human panel and I am one person.

Speed and memory

Prompt fixed, three seeds per cell, bf16, diffusers from git (0.41.0.dev0).

ResolutionStepsMedianSpread over 3 seedsPer step
1024×1024208.2 s0.06 s0.41 s
1024×10244016.3 s0.08 s0.41 s
2048×20482043.6 s0.04 s2.18 s
2048×20484086.1 s0.05 s2.15 s

Going from 20 to 40 steps almost exactly doubles the time, so the per-step cost is the number to carry: 0.41 s at 1K, 2.15–2.18 s at 2K. That figure is whole-pipeline time divided by steps, so it sits above the pure denoising cost. Four times the pixels costs 5.3 times the time. Peak allocation was 36.8 GiB at 1K and 56.5 GiB at 2K, and the model loads from local disk in about 10 seconds.

The text test, and why it needed three readers

The release highlights text rendering, which is the one quality claim I can check without judgment calls. I asked for ten signs with specific wording — OPEN 24 HOURS, Gate B12, SALE 70%, Cafe Aurora, PLATFORM 9, NO PARKING, Espresso 4.50, EXIT, Room 301, Fresh Bread Daily — three seeds each, 30 images, and counted how often the requested string came back.

ReaderSigns with the full string
Tesseract 4.1.1, --psm 612 / 30
Tesseract, best of 4 preprocessings × 4 page-segmentation modes, chosen knowing the answer20 / 30
GPT-5.6 Terra, vision, asked only to transcribe29 / 30
Me, having opened all 3030 / 30

The first number is not a result about the model. Tesseract read NO PARKING as rn PARKING and SALE 70% as SALE 10", on images where both phrases are rendered cleanly in a heavy sans serif.

Two signs Tesseract misread. Both render the requested text cleanly.

The second row is not comparable to the others: it picks, for each image, whichever of 16 settings produced the answer, with the answer already known. The vision model got one transcription per image and missed one, reading the stylised percent sign on a SALE 70% as 70 7%.

The last row is mine. I opened all 30: the ten Tesseract failed one at a time, the other twenty as 2×2 contact sheets. Every one carried the text I asked for, including a script face for Cafe Aurora and a decimal price. That is a claim about text a person can read, not about how good the images are, and the three-reader gap is the reason this section exists at all: when the grader is weaker than the thing it grades, the number describes the grader. I nearly published 40%.

Editing keeps the layout and rewrites the surface

The same pipeline takes an image argument, which is how the model card does editing: pass the source and write the instruction as the prompt. I generated a red mug on a wooden table, then gave four instructions, two seeds each, 40 steps.

InstructionFollowedMedian PSNR vs sourcePixels changed
make the mug blue2 / 212.286%
write the word MORNING on the mug2 / 214.380%
add a small green plant next to the mug0 / 214.880%
remove the mug from the table0 / 212.284%

Colour changes and added text worked, and MORNING came out crisp on both seeds. Adding an object failed both times — one run put a smear of green inside the mug instead of a plant beside it. Removal failed differently: on one seed the mug simply stayed, on the other it turned into a washed-out, semi-transparent ghost of itself.

A source image and two edits. The colour change was followed but redrew the wall and the wood grain; the removal left a translucent mug in place.

The pixel numbers say the rest. Across the eight edits the changed-pixel ratio had a median of 84% and a mean of 82%, ranging from 71% to 91%, with PSNR against the source between 10.8 and 15.8. Looking at them, the composition survives — same framing, same table, mug in the same place — while the texture and tone are redrawn. On one seed the mug itself came back as a different mug, straight-sided instead of round. In these eight mask-free runs, the untouched parts of the photograph did not stay untouched. The model card also offers local edits through circles, painted annotations or a separate mask, which I did not test — so the finding is not "this model cannot edit", it is "a sentence alone buys no guarantee that the rest stays put".

What to take from this

  • Budget 0.41 s per step at 1K and 2.15 s at 2K on an A100. A 40-step 2K image is 1 minute 26 seconds. Fewer steps is the lever I measured; batching is not.
  • 56.5 GiB peak at 2K means a 48 GiB card will not hold this at that resolution in bf16 without offloading.
  • Text rendering is genuinely good on short sign-like strings, which is what I tested. Long paragraphs are a different question and I did not test them.
  • Check sentence-only edits before trusting them. Colour and text landed on both seeds here; adding or removing an object failed all four times, and the rest of the frame moved with it. Mask-based editing is untested.
  • Check the licence. qwen-research is not Apache-2.0.

What this does not show

One prompt family per test, 30 sign images and 8 edits, one card, one dtype. Beauty, prompt adherence on complex scenes, and the RGBA and multi-reference features went untested. The edit numbers compare whole images, not the region an instruction points at, so they mix intended change with drift. And the gap between three readers over four grading conditions means every OCR-scored image benchmark deserves the same question: who read it?

Setup: Qwen/Qwen-Image-2.1, bf16, diffusers 0.41.0.dev0, torch 2.13.0+cu126, one A100 80GB PCIe, driver 535. Generation: fixed prompt, seeds 1–3. Text test: 10 phrases × 3 seeds, 1024×1024, 40 steps; a match means the requested string, uppercased and reduced to A–Z, 0–9, % and the decimal point, appears inside the transcription — containment, not full-string equality. Edit test: one source image per seed, four instructions, 40 steps; PSNR and changed-pixel ratio computed over the whole image, a pixel counted as changed when any channel moves more than 16/255. Measured on 2026-09-23.

Stay Updated

Follow us for the latest posts and tutorials

Subscribe to Newsletter

Related Posts