Seedance 2.5 Eco is the economy tier of ByteDance's Seedance 2.5, with the same request body and modes. It produces 4-30 second clips at 720p or 1080p, accepts the same large reference set (up to 30 images, 10 clips and 10 audio tracks), and supports video editing and extension. Picture quality may be below the standard variant, and generation typically takes 50-100 seconds longer. It fits long-form batch work where cost matters more than turnaround time.
Best for
- Batches of 30-second product videos
- Extending existing footage in background jobs
- Content pipelines that publish on a schedule
- Iterating on long prompts before a final standard render
Prompting tips
- Send a
webhook_urland let the result come to you instead of polling. - For edits of a source clip, send
duration: -1so the output length follows the source. - Phrase edits as instructions: "replace the red car with a blue bicycle, keep the camera motion".
- Keep reference media within limits: each clip 2-30 s, 30 s combined, 200 MB per file.
FAQ
What does Seedance 2.5 Eco cost?
It costs from $0.44 per second. Reference clips are billed on top of the output, and a failed generation costs nothing.
What is the difference between Seedance 2.5 and Seedance 2.5 Eco?
The inputs and modes are the same. Eco drops 480p, may deliver lower picture quality and usually takes 50-100 s longer; Seedance 2.5 is the standard tier.
Can Seedance 2.5 Eco extend a video?
Yes. It supports both video extension and video editing, like the standard model.
How to call Seedance 2.5 Eco via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5-eco",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}'import os, time, requests
API = "https://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "seedance-2.5-eco",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "seedance-2.5-eco",
"input": {
"prompt": "A slow dolly shot through a neon-lit night market in the rain, reflections on wet asphalt, cinematic",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
prompt * | string | ≤ 20000 chars | |
aspect_ratio | string | 16:9 9:16 1:1 4:3 3:4 21:9 adaptive | adaptive |
resolution | string | 720p 1080p | 720p |
duration | integer | 4-30 | 5 |
generate_audio | boolean | true | |
image_url | string | ||
end_image_url | string | ||
image_urls | array | max 30 | |
video_urls | array | max 10 | |
audio_urls | array | max 10 | |
seed | integer |
The same schema is available from GET /v1/models/seedance-2.5-eco.









