Seedance 2.5 Preview
The next generation of Seedance by ByteDance. Clips up to 30 seconds, richer multimodal references (up to 20 images, 6 videos, 6 audio clips), stronger character consistency, and better prompt adherence than Seedance 2.0.
seedance-2.5-previewAsyncPreviewUp to 30sGenerate
/api/v1/generateReturns a task_id immediately. Poll /api/v1/status for the result. Credits are deducted upfront and auto-refunded if the generation fails. Requires a paid plan.
Parameters
modelseedance-2.5-preview. The bare seedance-2.5 id now resolves to the GA model, not this one.prompt@image1 @video1 @audio1 tags to reference attached media (see References below).duration5. Values outside the range are clamped.aspect_ratio16:9 9:16 1:1 4:3 3:4 21:9 9:21. Default: 16:9resolution480p 720p. Default: 720p. 1080p is not yet available on this model; requests specifying it are served and billed at 720p.reference_imagesreference_videos@video1 in your prompt. Motion transfer, camera movement reference, video-to-video.reference_audio@audio1 in your prompt. Lipsync and beat-sync.last_framereference_images[0] to this frame.reference_modetrue to force reference mode even with a single image, so the image acts as an identity and style hint instead of being pinned as the first frame.tagcharacter object style location. Tagged outputs appear in your library.mode (speed) parameter and no separate audio toggle. Any mode value you send is ignored.Pricing
Billed per second, by resolution. The rate is the same whether or not a reference video is attached; what changes is the number of seconds counted.
Billable seconds
A billable second is a second the model processes, which is not always a second of the video you get back. With no reference video the two are the same. With one or more, the model reads those clips in addition to producing yours:
billable seconds = duration + the full length of every reference videoEach length is rounded up to the next whole second and counted separately. The whole reference clip counts, not the portion that appears in the result. Reference images and reference audio contribute nothing.
Rate by resolution
| Resolution | Per billable second | 5s, no ref | 10s, no ref | 30s, no ref |
|---|---|---|---|---|
| 480p | 24 credits | 120 | 240 | 720 |
| 720p | 47 credits | 235 | 470 | 1,410 |
Worked examples
| Request (720p) | Billable seconds | Credits |
|---|---|---|
| 10s, no reference video | 10 | 470 |
| 10s, 4 reference images | 10 | 470 |
| 10s + one 5s reference video | 10 + 5 = 15 | 705 |
| 10s + one 20s reference video | 10 + 20 = 30 | 1,410 |
| 10s + two references, 12s and 31s | 10 + 12 + 31 = 53 | 2,491 |
Every response includes credit_cost, so you always know the exact charge before you poll. Failed generations are refunded in full. Reference-video durations are measured at submit time; a clip whose duration cannot be read is counted as the output duration.
Examples
curl -X POST https://www.lunostudio.ai/api/v1/generate \
-H "Authorization: Bearer luno_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-preview",
"prompt": "A cinematic tracking shot through a city park after rain, wet pavement reflections, soft cloudy light",
"duration": 5,
"aspect_ratio": "16:9",
"resolution": "720p"
}'curl -X POST https://www.lunostudio.ai/api/v1/generate \
-H "Authorization: Bearer luno_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-preview",
"prompt": "She turns to the camera and smiles, gentle wind, shallow depth of field",
"duration": 8,
"reference_images": ["https://storage.lunostudio.ai/.../portrait.jpg"]
}'curl -X POST https://www.lunostudio.ai/api/v1/generate \
-H "Authorization: Bearer luno_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-preview",
"prompt": "A smooth transition from the cloudy sky to a quiet riverside path, natural camera movement",
"duration": 8,
"reference_images": ["https://storage.lunostudio.ai/.../clouds.jpg"],
"last_frame": "https://storage.lunostudio.ai/.../riverside.jpg"
}'curl -X POST https://www.lunostudio.ai/api/v1/generate \
-H "Authorization: Bearer luno_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-preview",
"prompt": "@image1 is the protagonist. Match the camera motion of @video1 and the mood of @audio1.",
"duration": 12,
"resolution": "720p",
"reference_images": [
"https://storage.lunostudio.ai/.../hero.jpg",
"https://storage.lunostudio.ai/.../wardrobe.jpg"
],
"reference_videos": ["https://storage.lunostudio.ai/.../camera-move.mp4"],
"reference_audio": ["https://storage.lunostudio.ai/.../score.mp3"]
}'curl -X POST https://www.lunostudio.ai/api/v1/generate \
-H "Authorization: Bearer luno_sk_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-preview",
"prompt": "An unbroken drone shot rising over a coastal village at golden hour",
"duration": 30,
"resolution": "480p"
}'{
"task_id": "task_e7uk96pezd21nr0f3ftx1kn3",
"credit_cost": 235,
"status": "pending",
"model": "bytedance/seedance-2.5-preview",
"type": "video",
"resolution": "720p",
"duration": 5
}References & Modes
Use @ tags in your prompt to tell the model how to use each reference. The number matches the array index (1-based). All URLs must be publicly accessible — use /api/v1/upload to host your files.
@image1, @image2, ...via reference_imagesSubject and style references, up to 20. Character consistency across shots, wardrobe, environment, and art direction.
Example: "@image1 walks through the location shown in @image2"
@video1, @video2, ...via reference_videosMotion and camera references, up to 6. The model matches movement, camera work, or editing rhythm from the reference.
Example: "Recreate the camera movement from @video1 over a mountain range"
@audio1, @audio2, ...via reference_audioAudio references, up to 6. Lipsync to dialogue, or match motion timing to music.
Example: "@image1 delivers the monologue from @audio1, close-up"
last_frameStart-to-end motion. Provide a start image as reference_images[0] and an end image as last_frame. The video transitions from the start frame to the end frame.
How the mode is chosen
| Your inputs | Mode | Behaviour |
|---|---|---|
| Prompt only | text-to-video | The model composes the whole shot |
| At least one image | keyframe | First image is pinned as the opening frame |
Image + last_frame | keyframe | Transitions from the first frame to the last |
reference_mode: true, or videos/audio with no image | reference | All inputs are identity and style hints; no frame is pinned |
reference_images are only forwarded when you also set last_frame — otherwise your second image would be interpreted as the end frame. To combine a pinned opening frame with several identity references, set last_frame explicitly, or use reference_mode: true and describe the opening shot in the prompt.Check Status
/api/v1/status?task_id={task_id}Poll every 5-10 seconds. Longer clips take longer; a 30 second render can take well over 10 minutes. While the model is in preview, expect a meaningful share of requests to come back failed — always refunded, safe to retry.
curl "https://www.lunostudio.ai/api/v1/status?task_id=task_e7uk96pezd21nr0f3ftx1kn3" \
-H "Authorization: Bearer luno_sk_your_key_here"{ "task_id": "task_e7uk96pezd21nr0f3ftx1kn3", "status": "generating" }{
"task_id": "task_e7uk96pezd21nr0f3ftx1kn3",
"status": "success",
"output": ["https://storage.lunostudio.ai/generations/user/1716234567.mp4"]
}{
"task_id": "task_e7uk96pezd21nr0f3ftx1kn3",
"status": "failed",
"error": "Generation failed",
"refunded": true
}Status values
pendingQueued, waiting
generatingActively rendering
successDone. Output in response.
failedFailed. Credits refunded.
Need help?
Engineering team responds within 5 minutes.