Two reference images, one Omni prompt: <IMAGE_REF_0> and <IMAGE_REF_1>
On Sume, Gemini Omni Flash 1.1 takes up to 10 reference images and names them <IMAGE_REF_0>, <IMAGE_REF_1> in list order. Here is a two-reference request.

On Sume, gemini-omni-flash-1.1 takes up to 10 reference_image_urls and you refer to each one in the prompt as <IMAGE_REF_0>, <IMAGE_REF_1> and so on, counting from zero in list order. A prompt that names the product as <IMAGE_REF_0> and the person as <IMAGE_REF_1> tells the model which picture plays which role.
Without the addresses the model has to guess, and with several images it can mix them up.
The reference limits
The Omni row accepts up to 10 reference images and up to 3 reference videos of at most 3 seconds each, mixed in the same request. Clips are addressed as <VIDEO_REF_0>. There is no reference_audio_urls, because audio is always native and synced. A single reference image with no frame is reference-to-video, not image-to-video.
Output is 3 to 10 seconds at 360p to 4K, 16:9 or 9:16. The default resolution is 720p.
| Input | Limit | Address in the prompt |
|---|---|---|
| reference_image_urls | up to 10 | <IMAGE_REF_0>, <IMAGE_REF_1>, ... |
| reference_video_urls | up to 3, each at most 3 s | <VIDEO_REF_0>, ... |
| reference_audio_urls | not accepted | none |
| image_url with end_image_url | first and last frame, not references | none |
A two-reference request
Here the first image is a product shot and the second is a person. The prompt names both by address and describes the action. The request goes to the Video Router route, which takes the reference_*_urls field names.
curl -X POST https://api.sume.com/v1/video-router/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: omni-two-refs-001" \
-d '{"model":"gemini-omni-flash-1.1","prompt":"The woman in <IMAGE_REF_1> holds the bottle from <IMAGE_REF_0> up to the camera and smiles, soft window light","reference_image_urls":["https://example.com/bottle.png","https://example.com/woman.png"],"duration":8,"resolution":"1080p","aspect_ratio":"9:16","mode":"async"}'Why order matters
The index follows the order of the array. If you reorder the list later and forget the prompt, the roles swap. Keep the list in one place, build the prompt from the list in code, and log both with the job id.
If you want to build the prompt in code, keep a small table that maps role names to list positions, and fill the addresses from that table.
Practical limits
Keep each reference clear and well lit, with one subject. A cluttered image gives the model several things to latch on to. Image count adds no per-image charge in the catalog docs I read for Omni, which bills by output second and resolution, so use as many references as the shot needs, up to 10.
If you need the clip to follow a reference video's motion, remember the 3-second limit per reference clip. The post on the three-second limit covers how to cut one.
Checklist
Before you submit a reference job:
- Count your images, and stay at 10 or fewer.
- Match the addresses in the prompt to the array order.
- Send
durationbetween 3 and 10, andaspect_ratioas 16:9 or 9:16. - Use a public https URL for every file.
- Add an
Idempotency-Keyso a retry does not bill twice.
Related posts
More in Developers
- A one-file Python CLI that replaces a Sora script, on Sume
One argparse script, standard library only: prompt, model, seconds, resolution and aspect flags in, mp4 out, with an idempotency key derived from the arguments.
- One handler for both: Sume run webhook payload equals the GET receipt
A Sume run webhook's payload is byte-identical to GET /v1/format-runs/{run_id}. Write one function for polling and webhook, and branch on outcome.
- One Sume probe, eight platform limits: a Python preflight
Check one video inspect probe against Truth Social, Odysee, ArtStation, Linktree, Spotlight, Reels, TikTok API and Shorts limits in under 30 lines of Python.
- Agents SDK blocked_tool_names: hide Sume paid tools from a model
create_static_tool_filter takes allowed and blocked tool names. Use it so an agent on Sume's hosted MCP can read, but never sees a paid generate tool.
Written by Sume