Image reference limits: 10 on ElevenLabs, 16 on Sume, 5 Ideogram 4.5
ElevenLabs lists 10 references for GPT Image 2.5. Sume's docs list 16 for the same models and 5 total for Ideogram 4.5. A table, a count guard and an edit rule.

ElevenLabs lists up to 10 reference images for gpt-image-2.5-flare and gpt-image-2.5-sunburst. Sume's Image API docs list up to 16 for both models on POST /v1/images, and 5 in total for Ideogram 4.5. The same model name carries different limits on different platforms, so a reference count is a property of the endpoint, not the model.
Check the limit where you call, and guard the count in code.
The limits side by side
As read on 2026-10-03.
| Model | Platform | References |
|---|---|---|
| GPT Image 2.5 Flare and Sunburst | ElevenLabs | Up to 10 |
| GPT Image 2.5 Flare and Sunburst | Sume | Up to 16 |
| Ideogram 4.5 | Sume | 5 total: the first image is edited, up to 4 more are references |
Models whose input_references max is 0 | Sume | Text to image only; references are rejected |
Guard the count from the catalog
Sume publishes input_references as a range descriptor on each model, so the limit can be read at runtime instead of hard-coded. This function fetches it and trims or rejects before you spend a request.
import os, requests
H = {"Authorization": "Bearer " + os.environ["SUME_API_KEY"]}
def max_refs(model_id):
r = requests.get("https://api.sume.com/v1/images/models", headers=H, timeout=60)
r.raise_for_status()
for m in r.json()["data"]:
if m["id"] == model_id:
d = m["supported_parameters"].get("input_references")
return d["max"] if d else 0
raise KeyError(model_id)
def guard(model_id, urls):
limit = max_refs(model_id)
if len(urls) > limit:
raise ValueError(f"{model_id} accepts {limit} references, got {len(urls)}")
return urls
# guard("openai/gpt-image-2.5", my_urls)Rules for choosing references
More references is not better references.
- Order matters for Ideogram 4.5 on Sume: the first image is the one being edited and the rest are references.
- URLs must be public HTTPS. Localhost, private network and non-HTTPS addresses are rejected before submission.
- On edit calls, use
aspect_ratio: "auto"to match the reference. Omitting the field is not the same, per the Sume docs. - Use the fewest references that pin down the subject, style and product. Each one adds input cost on token-priced models.
Portability
If you maintain one prompt library across platforms, store a per-platform limit next to each model id and test your largest reference set against the smallest limit. Anything that works with 5 references on one endpoint will work on all three here; anything that needs 12 is only portable to the 16-limit endpoint.
Sources
Related posts
More in Comparisons
- Kling 4.0 vs Kling 3.0: the spec differences in one dated table
Length, resolution, HDR, references, keyframes, audio and prompt size, Kling 4.0 against 3.0 as stated on Kling's pages, plus how each maps to a Sume request.
- Luma API callbacks and credit balance vs Sume webhooks and /v1/balance
Luma's docs list callbacks and a credits balance. Sume has webhook mode, GET /v1/balance, and a generation_limits snapshot. How to use each before a batch.
- Luma Ray 2 API parameters: keyframes, loop and callback_url
Luma's video docs list ray-2 and ray-flash-2 with keyframes, loop, concepts and callback_url. Here is each field mapped to the Sume /v1/videos request.
- Midjourney has no public API: comparable control in a pipeline
Midjourney's 10/1 alpha adds a pinnable --exp setting and edits that keep aspect ratio. What to use when you need that kind of control from code.
Written by Sume