Reference image preflight checklist before a Seedance 2.5 job
Most reference-to-video failures are input problems. A checklist and a curl preflight for URLs, count and mix before you pay for a Seedance 2.5 job on Sume.

Before you submit a Seedance 2.5 reference-to-video job on Sume, check four things: every URL is public HTTPS and reachable, you send at most 9 images, 3 videos and 3 audio files with 12 references in total, audio is never sent alone, and first or last frame fields are not mixed with references. A thirty-second preflight with curl catches the URL problems for free.
The checklist
The rules below come from the Video Router request schema and the Video generation docs read on 2026-10-04. The docs tell you to ensure reference images are "high quality and relevant" and accessible over public HTTPS in supported formats (Video generation).
| Check | Rule | If you break it |
|---|---|---|
| URL | public HTTPS, reachable without a login | job fails or request is rejected |
| Counts | 9 images, 3 videos, 3 audio, 12 total | 400 at submit |
| Audio | needs at least one reference image or video | 400 at submit |
| Frames and references | use one or the other, not both | 400 at submit |
| Duration | whole seconds, 4 to 30 on seedance-2.5 | 400 at submit |
Preflight the URLs
A reference URL that returns a login page, an expired signed link or a redirect to HTML is the usual cause of a failed download. Request only the headers, then read the status code and content type. A 200 with image/png, image/jpeg or audio/mpeg is what you want.
for url in \
"https://example.com/hero-front.png" \
"https://example.com/hero-side.png" \
"https://example.com/theme.mp3"; do
curl -sIL -o /dev/null -w "%{http_code} %{content_type} %{url_effective}\n" "$url"
doneCheck the content, not only the link
Open each image yourself. Is the subject large enough in frame? Is it cropped at the forehead? Does it contain a watermark you do not want in the video? The model can reproduce what you give it. Put the reference that matters most first in the list and keep the set small and consistent (BytePlus: What is Seedance 2.5 is the vendor overview), and remember Sume enforces its own ceilings regardless.
Send it with an idempotency key
Once the preflight passes, submit with an Idempotency-Key so a network retry cannot create a duplicate paid job. A reused key with a different payload returns 409 idempotency_conflict per Generation admission. Start at 480p; the 4-second minimum costs about $1.07 on Sume's rate card, which is a cheap way to confirm the whole input set works.
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: preflight-pass-001" \
-d '{
"model": "seedance-2.5",
"prompt": "The hero walks toward the camera to the beat of the theme.",
"reference_image_urls": ["https://example.com/hero-front.png","https://example.com/hero-side.png"],
"reference_audio_urls": ["https://example.com/theme.mp3"],
"resolution": "480p",
"duration": 4,
"mode": "async"
}'Sources
Related posts
More in Developers
- Removed OpenAI video ids: the exact list and a script to find them
OpenAI removed the Videos API and five sora-2 model ids on 2026-09-24. The exact ids from its deprecations page, and a Python script that finds them in a repo.
- Replace your mocked Sora client with a Sume contract test
Tests that mocked a Sora client now guard nothing. Write a small pytest contract test around your own video interface, plus one live smoke test against Sume.
- Reproduce the same AI voiceover later: model id, voice, settings
To redo a narration line months later you need the model id, voice, language, format and settings. Sume's completed TTS job records them. A short routine.
- Restyle burned-in captions without transcribing twice
Pass source_caption_id instead of video_url to re-burn a video under a new Sume caption style. Word timings are reused, so no second speech-to-text runs.
Written by Sume