Qwen-Image 2.1 circle-and-edit prompts, 10 references: a test plan

Qwen-Image 2.1 lists circle annotations, mask edits, 10 references. A test plan, plus the Sume route: mask_url and 16 references on ChatGPT Image 2.5.

4 min readSume
All posts

Qwen-Image 2.1's model card (read 2026-10-05) lists circle and painted annotations, mask-based local edits and up to 10 reference images. To check them, run four fixed tests: one circle, one mask, one reference, one combination, and compare each against the prompt. Qwen-Image 2.1 is not hosted on Sume; the closest Sume route is a masked edit on ChatGPT Image 2.5 with mask_url and up to 16 references.

Capabilities in play

Claims come from the card and the Sume docs, both read 2026-10-05.

Edit features, read 2026-10-05
FeatureQwen-Image 2.1 cardSume ChatGPT Image 2.5
Annotation editsCircle and painted annotationsNot documented; describe the area in the prompt
Mask editMask-based local editsmask_url (public HTTPS)
Reference imagesUp to 10Up to 16 input_references
Max sizeUp to 2048 x 2048Custom pixels, multiple of 16, max edge 3840
Ratios1:1, 4:3, 3:4, 3:2, 2:3, 16:9, 9:16Ratio at most 3:1 for custom sizes

Four tests

Use one source photo with several objects. Write down the expected result before you run each one.

  • Circle: draw a ring around one object and prompt "change the circled object to green". Pass if only that object changes.
  • Mask: give a mask over the same object and the same prompt. Compare against the circle result.
  • Reference: add a reference photo of the target object and ask for it to replace the original. Pass if the shape matches the reference.
  • Combination: circle plus reference. Check whether the circle itself survives into the output, which would be a failure.

Score and log

Record three things per run: how much of the image outside the target region changed, whether the prompt was followed, and the time and cost. Use a pixel difference for the first, as eyeballing misses small shifts. For Sume runs, usage.cost gives the billed USD per call.

The Sume masked edit

Sume's docs say mask_url must be a public HTTPS URL and works on ChatGPT Image 2.5 only. They do not say which mask colour marks the editable area, so test one small mask first.

import asyncio, os, httpx

async def main():
    body = {
        "model": "openai/gpt-image-2.5",
        "prompt": "Change the masked mug to green. Keep everything else unchanged.",
        "input_references": [{"type": "image_url", "image_url": {"url": "https://example.com/desk.png"}}],
        "mask_url": "https://example.com/desk-mask.png",
        "aspect_ratio": "auto",
    }
    headers = {"Authorization": f"Bearer {os.environ['SUME_API_KEY']}"}
    async with httpx.AsyncClient(timeout=60) as c:
        r = await c.post("https://api.sume.com/v1/images", headers=headers, json=body)
    print(r.status_code, r.json().get("usage"))

asyncio.run(main())

After the tests

Keep the winning prompt wording next to the test image. Edit prompts are fragile, and a phrase that worked on one image may need rewording on the next. Re-run the passing tests whenever you change model or version, because the model card describes the features, not their reliability.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume