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
- gpt-live-transcribe has no word timestamps: what it means for captions
OpenAI's realtime guide says gpt-live-transcribe cannot return word-level timestamps. If you need karaoke captions, that decides which path to use.
- Grok Imagine image: xAI $0.02 to $0.05 vs Runway 4 to 8 credits
xAI lists Grok Imagine images at $0.02, $0.04 and $0.05; Runway sells grok_imagine_image_2 at 4 to 8 credits ($0.04 to $0.08). Sume's router default is $0.025.
- Grok Imagine Video 1.5: Runway's listing vs Sume's catalog row
Sume's grok-imagine-video-1.5 row is image-to-video only, 480p or 720p, 4 to 15 s, no audio flag. Runway's changelog lists text-to-video and audio.
- Grok Imagine Video 1.5: xAI direct vs Runway credits for 30 clips
Thirty six-second Grok Imagine 1.5 clips cost $14.40 on xAI and $28.80 on Runway at 720p. Per-second math, the lite tier, and Sume's Omni 720p row for scale.
Written by Sume