Seedance 2.5
ByteDance's newest video model: clips up to 30 seconds with sound — from a description, frames or references. It can also edit and continue your video.
Good for: ads, music clips, story videos, video edits
With your video — from $0.098/s, without video — from $0.163/s
For developers →How to get a better result
"A ginger cat on a windowsill, rain outside, watercolor".
"Soft sunset", "neon light", "cozy, warm tones".
Refine the description and press "Another version" — every result is new.
Pass this model in the request seedance-2.5
1. Create a task POST /api/v1/jobs/createTask
curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-123" \
-d '{
"model": "seedance-2.5",
"callBackUrl": "https://your-app.example/callback",
"input": {
"prompt": "A ginger cat jumps onto the windowsill, snow is falling outside, the camera slowly moves in",
"image_urls": [],
"video_mode": "auto",
"resolution": "720p",
"aspect_ratio": "adaptive",
"duration": "5",
"output_format": "mp4"
}
}'import time, requests
API = "https://mixmedia.tech/api/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
task = requests.post(f"{API}/jobs/createTask", headers=HEADERS, json={
"model": "seedance-2.5",
"callBackUrl": "https://your-app.example/callback",
"input": {
"prompt": "A ginger cat jumps onto the windowsill, snow is falling outside, the camera slowly moves in",
"image_urls": [],
"video_mode": "auto",
"resolution": "720p",
"aspect_ratio": "adaptive",
"duration": "5",
"output_format": "mp4"
}
}).json()
task_id = task["data"]["taskId"]
while True:
info = requests.get(f"{API}/jobs/recordInfo", headers=HEADERS, params={"taskId": task_id}).json()["data"]
if info["state"] in ("success", "fail"):
break
time.sleep(4)
print(info["state"], info.get("resultJson") or info.get("failMsg"))const API = "https://mixmedia.tech/api/v1";
const headers = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const { data } = await fetch(`${API}/jobs/createTask`, {
method: "POST", headers,
body: JSON.stringify({
"model": "seedance-2.5",
"callBackUrl": "https://your-app.example/callback",
"input": {
"prompt": "A ginger cat jumps onto the windowsill, snow is falling outside, the camera slowly moves in",
"image_urls": [],
"video_mode": "auto",
"resolution": "720p",
"aspect_ratio": "adaptive",
"duration": "5",
"output_format": "mp4"
}
}),
}).then((r) => r.json());
let info;
do {
await new Promise((r) => setTimeout(r, 4000));
info = (await fetch(`${API}/jobs/recordInfo?taskId=${data.taskId}`, { headers }).then((r) => r.json())).data;
} while (!["success", "fail"].includes(info.state));
console.log(info.state, info.resultJson ?? info.failMsg);Response: data.taskId. callBackUrl and Idempotency-Key are optional.
2. Status and result GET /api/v1/jobs/recordInfo
curl "https://mixmedia.tech/api/v1/jobs/recordInfo?taskId=TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
data.state: waiting, queuing, generating, success, fail. On success data.resultJson is a JSON string with resultUrls.
3. Upload a file POST /api/v1/files/upload
curl -X POST https://mixmedia.tech/api/v1/files/upload \
-H "Authorization: Bearer YOUR_API_KEY" -F "file=@photo.jpg"
The response has data.url. Pass that URL in the file field. Any public https URL works too.
Input fields
| Field | What to send |
|---|---|
prompt * | text, up to 30000 characters |
first_frame_url * | image URL |
last_frame_url | image URL |
image_urls | list of URLs, up to 30 |
video_urls | list of URLs, up to 10 |
audio_urls | list of URLs, up to 10 |
video_mode | auto · reference · edit · extend · default auto |
resolution | 480p · 720p · 1080p · default 720p |
aspect_ratio | adaptive · 16:9 · 9:16 · 1:1 · 4:3 · 3:4 · 21:9 · default adaptive |
duration | 4 · 5 · 6 · 7 · 8 · 9 · 10 · 11 · 12 · 13 · 14 · 15 · 16 · 17 · 18 · 19 · 20 · 21 · 22 · 23 · 24 · 25 · 26 · 27 · 28 · 29 · 30 · default 5 |
generate_audio | true or false, default true |
output_format | mp4 · mov · default mp4 |
nsfw | true or false, default false |
watermark | true or false, default false |
seed | number from -1 to 4294967295 |
About the model
Seedance 2.5 is the newest ByteDance video model. It films 4 to 30 second clips in 480p, 720p and 1080p with sound: from a description, from the first and last frame, from references (up to 30 photos, 10 clips and 10 audio tracks), and it edits and continues your video.
Pick «Auto» length and the model decides: the price of 30 seconds is held and the rest comes back right after the video is ready.


