Qwen-Image Max returns one image: what n does on Sume
Alibaba says the Max series is fixed at one image while other Qwen-Image series allow 1 to 6. Sume's n runs 1 to 10 in the schema; read the model's own range.

On Alibaba's own API the Max series of Qwen-Image is fixed at one image per request, while other series allow one to six. On Sume the n field is documented as 1 to 10 in the request table, with lower per-model ceilings, so for qwen/qwen-image-max read the n range from the catalog before asking for four variants.
Alibaba's statement is from its Qwen-Image text-to-image API page, read 2026-10-02. Sume's behaviour is from the Image API.
What does the vendor page say about image counts?
The Alibaba page says the Max series is fixed at 1 image and that other series allow 1 to 6. It does not say what happens when a client asks for more than the ceiling, so do not rely on a particular failure shape from that page.
What does Sume say about n?
The request table lists n as an integer from 1 to 10 and notes that per-model ceilings are lower, telling you to read the n range descriptor from the catalog. Capability descriptors come in three kinds: enum, range and boolean. A range descriptor looks like { "type": "range", "min": 1, "max": 4 } in the Image API page's Seedream example.
A request that sets a parameter outside what the model advertises is rejected with 400 unsupported_parameter. The page documents that for parameters a model does not list; for a value outside a range, expect a 400 too, and confirm it once on your model.
| Question | Alibaba Qwen-Image page | Sume Image API page |
|---|---|---|
| Images per call, Max series | Fixed at 1 | Read the n range in the catalog |
| Images per call, other series | 1 to 6 | Schema allows 1 to 10, per-model ceilings are lower |
| Where the limit is published | Prose on the docs page | Machine-readable range descriptor |
| Billing of n | Not stated on the page | cost_usd times n is what you pay |
How do you get four options from a one-image model?
Send four requests instead of one with n: 4. Give each its own Idempotency-Key so a retry cannot double-bill, and run them concurrently within your workspace's limits. The Sume page says endpoint pricing lines are the amount charged and cost_usd x n is the total, so four single calls cost the same as n: 4 where that is allowed.
Mind the queue: Sume's error table separates 429 rate_limited from 429 queue_full, where the second means the workspace's concurrency plus queue is full. If you fan out, back off on both, using retry-after when present, as covered in the queue-full retry post.
curl -X POST https://api.sume.com/v1/images \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: mug-variant-1" \
-d '{"model":"qwen/qwen-image-max","prompt":"A ceramic mug on a white table, soft daylight"}'Where to go from here
Read the descriptor, decide between one call with n and several calls, and keep the idempotency key per call. For the text-only nature of this model, see Qwen Image Max on Sume; for bulk patterns see bulk image generation.
Practical rules for n
The rule of thumb is that the catalog, not a vendor's prose, is the contract on Sume, and the per-call ceiling is a model property rather than a platform one.
- Read the range descriptor once at startup and cache it for the process, so your code never sends an n the model refuses.
- Never send n greater than 1 to a model whose range tops out at 1; loop instead.
- Add
ninto your cost estimate: the page says cost_usd times n is what you pay. - Expect larger n at 4K or high quality to slip past the 30 second blocking budget and return 202 with a job.
Sources
Related posts
More in Developers
- Verify a Sume webhook in Rails: raw_post, skip_forgery_protection
A Rails controller that verifies Sume's sume-v1 HMAC over the raw body, accepts the rotation header, refuses an empty secret and skips CSRF for that route only.
- Why did my Sume webhook not arrive? Read the job events
One GET on a job lists a webhook.delivery event with status, attempts, last HTTP code and host. A 19-line Python function turns it into a one-line verdict.
- Repeat a TTS take: read generation_config and speed from the job
A completed Sume TTS job records its engine, voice, language, output_format, generation_config and speed. Read them back to make the next line sound the same.
- Reconcile a no-code run with GET /v1/jobs and idempotency_key
When a Zap, scenario or flow loses its job ids, list jobs with GET /v1/jobs and join on idempotency_key. Pages are newest first, 100 at most, cursor-paged.
Written by Sume