Seedance 2.5
Video Generationbytedance/seedance-2.5Seedance 2.5 is ByteDance's next-generation multimodal video creation model from the Doubao line, released on 2026-08-07. It accepts mixed text, image, video, and audio input โ up to 30 images, 10 videos, and 10 audio clips, for 50 reference assets in total โ and covers text-to-video, image-to-video, and video-to-video generation. Clips can run any whole number of seconds from 4 to 30, at 480p, 720p, or 1080p resolution (720p by default), with six aspect ratios plus an adaptive option. Output carries synchronized audio by default, and prompts can be written in multiple languages. This generation improves instruction following, multi-shot narrative, and long-range temporal consistency. Accessible via the OpenAI-compatible protocol.
Providers
provider.type: "byteplus"| Resolution | Mode | Audio | Price / Second |
|---|---|---|---|
| 480p | Text to Video | Any | $0.11/s |
| 480p | Video to Video | Any | $0.14/s |
| 720p | Text to Video | Any | $0.24/s |
| 720p | Video to Video | Any | $0.3/s |
| 1080p | Text to Video | Any | $0.6/s |
| 1080p | Video to Video | Any | $0.71/s |
| All other combinations | $0.71/s | ||
/v1/videosprovider.type: "volcengine"| Resolution | Mode | Audio | Price / Second |
|---|---|---|---|
| 480p | Text to Video | Any | $0.11/s |
| 480p | Video to Video | Any | $0.14/s |
| 720p | Text to Video | Any | $0.24/s |
| 720p | Video to Video | Any | $0.3/s |
| 1080p | Text to Video | Any | $0.6/s |
| 1080p | Video to Video | Any | $0.71/s |
| All other combinations | $0.71/s | ||
/v1/videosBilled per second of generated video. Supported parameter combinations and prices are determined by the live API and may vary by model version.
Code Examples
import timeimport requestsBASE = "https://api.ofox.run/v1/videos"HEADERS = {"Authorization": "Bearer YOUR_OFOX_API_KEY"}# Create the generation tasktask = requests.post(BASE, headers=HEADERS, json={"model": "bytedance/seedance-2.5","prompt": "A golden retriever running on the beach at sunset","duration": 4,"resolution": "720p","generate_audio": True,"provider": {"type": "byteplus"},# Or: "provider": {"type": "volcengine"}}).json()# Poll until the task reaches a terminal statewhile True:task = requests.get(f"{BASE}/{task['id']}", headers=HEADERS).json()if task["status"] in ("completed", "failed", "cancelled", "expired"):breaktime.sleep(10)# Prefer mirror_urls (persistent) then fall back to unsigned_urls (24h)print((task.get("mirror_urls") or task.get("unsigned_urls") or [None])[0])