Seedance 2.5 first frame plus references in one request: 400
On Sume's Video Router, image_url plus reference_*_urls returns 400 for seedance-2.5. Pick image-to-video or reference-to-video; /v1/videos lets frames win.

Seedance 2.5 on Sume works in one mode per request. On the Video Router, sending a first frame (image_url) together with any reference_image_urls, reference_video_urls or reference_audio_urls returns a 400: "Use either first/end frame fields or reference_*_urls, not both." On POST /v1/videos the same mix is not an error; frame_images takes precedence and the request becomes image-to-video.
The /v1/videos rule is in Video generation; the Video Router rule is in Sume's request schema (see Video Router and the API reference). ByteDance Seed presents foundational generation and reference-based generation as the model's two centres (launch post, read 2026-10-02).
What does each endpoint do with a mixed request?
The outcome differs by endpoint, so a body that works on one can fail on the other.
| Request | POST /v1/videos | POST /v1/video-router/generate |
|---|---|---|
| First frame + reference images | Image-to-video; references ignored | 400: frame fields or references, not both |
| End frame only | 400: last_frame needs a first_frame | 400: end_image_url requires image_url |
| First + end frame | Image-to-video | Image-to-video |
| References only (2+ images, or video/audio) | Reference-to-video | Reference-to-video |
Which mode should I pick?
Use a first frame when the clip must begin on that exact picture. Use references when the images should guide identity, style or props without pinning frame zero. If you want both effects, generate the first shot as image-to-video and use a frame or clip from it as a reference in the next request; this takes two jobs, not one.
A single reference image is still reference-to-video. One image to Seedance: reference, or first frame? covers that edge.
What does the corrected request look like?
Image-to-video on the Video Router, with a first and an end frame and nothing else in the reference family.
{
"model": "seedance-2.5",
"prompt": "The door opens and the room fills with light",
"image_url": "https://example.com/door-closed.jpg",
"end_image_url": "https://example.com/door-open.jpg",
"duration": 8,
"resolution": "720p"
}Why a 400 and not a quiet pick?
Because silently dropping one family would bill you for a clip that ignores half your inputs. The refusal happens at validation, before a job exists, so you can fix the body and send it again. The first-frame mechanics are in Seedance 2.5 image to video: first and last frame.
Sources
Related posts
More in Developers
- Seedance 2.5 references: input_references or reference_image_urls?
POST /v1/videos takes frame_images and input_references for seedance-2.5; the Video Router takes image_url and reference_*_urls. The wrong shape gets 400.
- Seedance 2.5 reference audio alone returns 400: add an image
On Sume's Video Router, reference_audio_urls with no reference image or video returns 400. Pair the audio with an image or clip, within 3 audio and 12 total.
- Seedance 2.5 seed, size and provider options: why Sume returns 400
Sume rejects seed, size and non-empty provider.options on seedance-2.5 with 400 instead of dropping them. What to send to repeat a clip or fix the frame size.
- Seedance 2.5 sync mode: a 30-second wait, then poll
mode sync on the Video Router blocks at most 30 seconds. A Seedance 2.5 job can outlast it, so read sync.timed_out and poll status_url without resubmitting.
Written by Sume