Seedance
Seedance is an advanced video generation model series supporting text-to-video and image-to-video generation, with multi-modal reference inputs, video editing, and video extension available since the 2.0 series. SIRAYA-Seedance-2.5 extends this further with audio-only references and coherent single-shot videos up to 30 seconds long.
https://llm.siraya.ai/v1/videos/generations
Supported Models
| Model ID | Description | Resolutions |
|---|---|---|
ByteDance-Seedance-1.0-pro |
Base version | 480p, 720p, 1080p |
ByteDance-Seedance-1.0-pro-fast |
Base fast version | 480p, 720p, 1080p |
ByteDance-Seedance-1.5-pro |
Advanced version | 480p, 720p, 1080p |
SIRAYA-Seedance-2.0 |
Supports multi-modal references | 480p, 720p, 1080p, 4k |
SIRAYA-Seedance-2.0-fast |
Fast version, supports multi-modal references | 480p, 720p |
SIRAYA-Seedance-2.0-mini |
Lower-cost version, supports multi-modal references | 480p, 720p |
SIRAYA-Seedance-2.5 |
Latest version — up to 30s videos, audio-only references, mov output, 50 reference assets |
480p, 720p, 1080p |
Header
Bearer <API_KEY>).
Body
ByteDance-Seedance-1.5-pro, SIRAYA-Seedance-2.0, SIRAYA-Seedance-2.5).
4 to 15 (4 to 30 for SIRAYA-Seedance-2.5), or -1 to let the model choose automatically. When input_references includes a video reference, pass -1 so the output length follows the input video — see Video Editing & Extension. duration is not a supported field; use seconds. An unsupported value is accepted at submit and fails later, when the job runs — validate it client-side (see Failures after submit).
480p, 720p, 1080p, or 4k. The values each model accepts are listed under Supported Models. An unsupported value is not rejected at submit; the task fails afterwards (see Failures after submit).
16:9, 4:3, 1:1, 3:4, 9:16, 21:9, or adaptive (model picks automatically). For video editing, video extension, and first-frame/first-last-frame requests, the Seedance 2.0 family accepts a specified ratio or adaptive, while SIRAYA-Seedance-2.5 only supports adaptive — see Video Editing & Extension.
frame_images. Input image URL for image-to-video generation; it is treated as a single first_frame, so it cannot be combined with input_references.
SIRAYA-Seedance-2.5 natively supports prompts and generated audio in 11 languages: Chinese, English, Spanish, Indonesian, Malay, Thai, Arabic, Portuguese, Vietnamese, Japanese, and Korean.
frame_type (first_frame or last_frame) and an image_url. Cannot be used together with input_references.
SIRAYA-Seedance-2.0, SIRAYA-Seedance-2.0-fast, SIRAYA-Seedance-2.0-mini, and SIRAYA-Seedance-2.5. Cannot be used together with frame_images. See input_references for per-model limits.
mp4 (standard, broadest playback compatibility) or mov (higher color precision — recommended for editing/extension workflows). SIRAYA-Seedance-2.5 only.
false, the request waits for generation to finish and returns the completed video URL. When true, it returns immediately with a video id you poll for status. See Asynchronous generation.
async is true. An http(s) URL the router will POST to once generation completes (or fails), so you don't have to poll.
import requests
url = "https://llm.siraya.ai/v1/videos/generations"
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer <API_KEY>"
}
data = {
"model": "ByteDance-Seedance-1.5-pro",
"prompt": "A shiba inu running on the beach",
"resolution": "720p",
"aspect_ratio": "16:9",
"seconds": 5
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
Example Response
Mode Exclusivity
The following three modes are mutually exclusive — only one can be used per request:
| Mode | Parameter | Use Case |
|---|---|---|
| First-frame control | frame_images (first_frame), or the deprecated image_url |
Pin the exact first frame |
| First + last frame control | frame_images (first_frame + last_frame) |
Pin both start and end frames |
| Multi-modal reference | input_references |
Style/content reference, video editing, or video extension |
Note: If you need both reference materials and first-frame control, use
input_referencesand describe the desired first frame in your prompt. The model will follow the description but cannot guarantee pixel-level accuracy. Useframe_imageswhen exact frame consistency is required.
frame_images
Specifies the starting and/or ending frame images for the video. The AI generates content between the provided frames.
"frame_images": [
{
"frame_type": "first_frame",
"image_url": "https://your-domain.com/start.jpg"
}
]
| Field | Description |
|---|---|
frame_type |
first_frame (start frame) or last_frame (end frame) |
image_url |
Publicly accessible URL of the image |
input_references (Seedance 2.0 and 2.5)
Pass image, video, or audio files as generation references via input_references. Supported by SIRAYA-Seedance-2.0, SIRAYA-Seedance-2.0-fast, SIRAYA-Seedance-2.0-mini, and SIRAYA-Seedance-2.5.
Reference material with a human face
If the reference image or video contains a human face (not a celebrity or public figure), you can't pass a public URL — it must first be uploaded as a trusted asset and referenced as asset://{assetId}. See Using Assets with Seedance 2.0 for the full workflow, including motion-reference and character-consistency use cases.
"input_references": [
{
"type": "image",
"url": "https://your-domain.com/character.jpg",
"role": "reference_image"
}
]
| Field | Description |
|---|---|
type |
image, video, or audio |
url |
Publicly accessible URL of the reference material |
role |
reference_image, reference_video, or reference_audio |
Reference limits by model:
| Model | Max references | Audio-only references |
|---|---|---|
SIRAYA-Seedance-2.0 / SIRAYA-Seedance-2.0-fast / SIRAYA-Seedance-2.0-mini |
15 total (9 images + 3 videos + 3 audio) | Not supported — needs at least one image or video |
SIRAYA-Seedance-2.5 |
50 total (30 images + 10 videos + 10 audio) | Supported |
Video Editing & Extension (Seedance 2.0 and 2.5)
SIRAYA-Seedance-2.0 (and -fast/-mini) and SIRAYA-Seedance-2.5 classify every input_references request into one of five task types, based on the reference roles and the intent expressed in prompt: text-to-video, reference-to-video, video editing, video extension, or first-frame/first-last-frame generation. Editing and extension are triggered the same way on both families — pass a reference_image/reference_video/reference_audio and phrase the prompt accordingly. Where the two families differ is aspect_ratio flexibility:
| Task | Trigger | aspect_ratio — Seedance 2.0 family |
aspect_ratio — SIRAYA-Seedance-2.5 |
|---|---|---|---|
| Video editing | A reference + a prompt with an editing verb (e.g. "edit", "add", "remove", "replace") | A specified ratio, or adaptive to match the input video |
Only adaptive — matches the input video |
| Video extension | A reference + a prompt with an extension verb (e.g. "extend", "continue") | A specified ratio, or adaptive to match the input video |
Only adaptive — matches the input video |
| First-frame(s) generation | frame_images with first_frame and/or last_frame |
A specified ratio, or adaptive to match the first-frame image |
Only adaptive — matches the first frame |
| Text-to-video / reference-to-video | No editing or extension wording | Any supported value | Any supported value |
Recommended: pass seconds: -1 when a video reference is present
If input_references includes any item with "type": "video" — video editing, video extension, or any reference-to-video request with a video reference — set seconds to -1. The output duration is then determined automatically from the input video (matched for editing, extended for extension). If you omit seconds, the model's default length is used instead, which is not matched to the input video, and a fixed value may be rejected for the classified task type (see below).
| Model group | Request includes a video reference | No video reference (text-to-video, image/audio-only) |
|---|---|---|
Seedance 2.0 family (SIRAYA-Seedance-2.0 / -fast / -mini) |
-1 (recommended) |
4–15, or omit to let the model choose |
SIRAYA-Seedance-2.5 |
-1 (recommended) |
4–30, or omit to let the model choose |
Failures after submit
Seedance validates much of the request only after the job starts, so a 200 at submit does not mean the render will succeed. The job then ends with status: failed (or, in synchronous mode, a 400 with the error message — see Asynchronous generation). Handle failed when polling or in your callback. Typical causes:
- Misclassification. An unsupported
aspect_ratio/secondscombination for the classified task type doesn't fail immediately — the request queues normally, and the error is returned once the model finishes classifying the task. For reference-to-video requests, avoid editing/extension wording in your prompt, or the model may misclassify the task and reject it. - Unsupported
secondsorresolutionvalues. These are not checked at submit. - Content checks on the output. A benign prompt can still fail when the generated audio or video is flagged (for example with an
OutputAudioSensitiveContentDetectedpolicy error), including on4krenders ofSIRAYA-Seedance-2.0. Retry with a different prompt or settings.