Seedance 2.0 Eco is the budget lane of ByteDance's Seedance 2.0. It accepts the same requests and modes as the standard model, but you trade two things for the lower rate: renders usually take 50 to 100 seconds longer, and picture quality can be a little below the regular variants. If nobody is waiting at the screen, that trade is often worth it.
What you can make
- Overnight batches of product or catalog videos.
- Background pipelines that drop finished clips into storage via webhook.
- Large prompt tests where you compare dozens of ideas.
- 1080p or 4K drafts where a slight quality drop does not matter.
Settings that matter
- Length: 4 to 15 seconds, or automatic duration.
- Resolution: 720p, 1080p or 4K. There is no 480p on this tier.
- Inputs: reference images, clips and audio, as on Seedance 2.0.
- Sound: generated audio is supported.
- Delivery: because jobs take longer, set a
webhook_urlinstead of polling (webhooks docs). - Prompt: stay around 500 characters or less, which is the guidance for the whole Seedance 2.0 family.
Starter prompt
Slow dolly-in on a stack of folded linen towels on a bathroom shelf, morning light through frosted glass, a hand places a sprig of eucalyptus on topFor a catalog batch, keep the camera move and light fixed and change only the product line.
Questions
What does a Seedance 2.0 Eco clip cost?
from $0.248 per second. The estimate appears before you submit, and a failed clip costs $0.
How do I know if the quality drop is acceptable?
Render one sample on Eco and the same prompt on Seedance 2.0 before you send a large batch, then compare.
Is Eco a good choice for client previews?
Only if you can wait. Each job usually takes 50 to 100 seconds longer than on standard Seedance 2.0.
Seedance 2.0 Eco in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.0-eco",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"aspect_ratio": "adaptive",
"resolution": "720p",
"duration": 5
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "seedance-2.0-eco",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"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://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "seedance-2.0-eco",
"input": {
"prompt": "Tracking shot of a cyclist riding through an empty city street at dawn, long shadows, light fog, film look",
"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));
Input fields
| 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 4k | 720p |
duration | integer | 4-15 | 5 |
generate_audio | boolean | true | |
image_url | string | ||
end_image_url | string | ||
image_urls | array | max 9 | |
video_urls | array | max 3 | |
audio_urls | array | max 3 |
Fetch this list as JSON with GET /v1/models/seedance-2.0-eco.























