# Seedance 2.5

> Run Seedance 2.5 by bytedance online or via API. $6.40–$11.70/M tokens, varies by output resolution and visual input, no setup.

**URL:** https://inference.sh/apps/bytedance/seedance-2-5
**Last updated:** 2026-10-28

---

Professional multimodal video generation from text, images, video, and audio references using ByteDance's Seedance 2.5 model via BytePlus ARK API. Supports up to 4K (10-bit color), durations up to 30s, MOV output, and multimodal reference-to-video with synchronized audio.

- app: `bytedance/seedance-2-5`
- maker: [bytedance](https://inference.sh/apps/bytedance.md)
- category: [video](https://inference.sh/apps/category/video.md)
- input → output: text → video, image → video, reference → video
- tasks: [text to video](https://inference.sh/apps/tag/text-to-video.md), [image to video](https://inference.sh/apps/tag/image-to-video.md), [reference to video](https://inference.sh/apps/tag/reference-to-video.md), [native audio](https://inference.sh/apps/tag/native-audio.md)
- price: $6.40–$11.70/M tokens, varies by output resolution and visual input
- runs via: api, javascript and python sdk, belt cli, mcp

## seedance-2-5 API Guide

### About
professional multimodal video generation from text, images, video, and audio references using bytedance's seedance 2.5 model via byteplus ark api. supports up to 4k (10-bit color), durations up to 30s, mov output, and multimodal reference-to-video with synchronized audio.

### Get an API Key
Create one in [settings → api keys](https://app.inference.sh/settings/keys). The examples read it from `INFERENCE_API_KEY`.

```bash
export INFERENCE_API_KEY="inf_your_key"
```

### 1. Calling the API

#### Install the Client

```bash
pip install inferencesh
```

#### Run and Get Result
Submit a request and wait for the final result.

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])

## version @49vt34ae pinned
result = client.run({
        "app": "bytedance/seedance-2-5@49vt34ae",
        "input": {
            "prompt": "@Image1 is the character reference. @Video1 provides the motion. A marble statue stands in a sunlit hall, camera slowly orbiting."
        }
    })

print(result["output"])
```

#### Stream Live Updates
Get real-time progress updates as the task runs.

```python
import os
from inferencesh import inference

client = inference(api_key=os.environ["INFERENCE_API_KEY"])

## version @49vt34ae pinned
## stream=True yields updates as they arrive
for update in client.run({
        "app": "bytedance/seedance-2-5@49vt34ae",
        "input": {
            "prompt": "@Image1 is the character reference. @Video1 provides the motion. A marble statue stands in a sunlit hall, camera slowly orbiting."
        }
    }, stream=True):
    if update.get("progress"):
        print(f"progress: {update['progress']}%")
    if update.get("output"):
        print(f"output: {update['output']}")
```

#### Run in the Background
Start the task and get its id back right away, then check on it with `GET /tasks/{id}`. It is done when `status` is 10 (completed), 11 (failed) or 12 (cancelled).

```python
import os
from inferencesh import inference, TaskStatus

client = inference(api_key=os.environ["INFERENCE_API_KEY"])

## returns as soon as the task is created
task = client.run({
        "app": "bytedance/seedance-2-5@49vt34ae",
        "input": {
            "prompt": "@Image1 is the character reference. @Video1 provides the motion. A marble statue stands in a sunlit hall, camera slowly orbiting."
        }
    }, wait=False)

## later: read its current state
state = client.tasks.get(task["id"]).data
if state["status"] == TaskStatus.COMPLETED:
    print(state["output"])
```

### 2. Files

#### Automatic Upload

```python
## local file paths are automatically uploaded
result = client.run({
    "app": "bytedance/seedance-2-5@49vt34ae",
    "input": {
        "image": "/path/to/local/image.png",  # detected & uploaded
        "audio": "https://example.com/audio.mp3",  # url passed through
    }
})
```

#### Manual Upload

```python
## upload and get a hosted URL
file = client.files.upload("/path/to/file.png")
print(file.uri)  # https://cloud.inference.sh/...
```

### 3. Schema

#### Input
- **prompt** (string): Text prompt describing the video content (not needed with draft_task_id). Use @Image1, @Image2, @Video1, @Video2, @Audio1 to reference inputs in order (e.g. '@Image1 is the style reference, @Video1 provides the motion'). For video editing, use editing verbs ('Edit @Video1 to remove...'). Supports English, Spanish, Indonesian, Portuguese, Japanese, Malay, Thai, Arabic, Vietnamese, and Korean.
- **image** (string): First-frame image for image-to-video generation. Ratio must be 'adaptive'. Mutually exclusive with reference inputs.
- **end_image** (string): Last-frame image for first+last frame video generation. Requires image to be set as the first frame. Ratio must be 'adaptive'.
- **reference_images** (array): Reference images for multimodal generation (up to 30). Use prompt to describe how to use each, e.g. 'Image 1', 'Image 2'. Mutually exclusive with image/end_image.
- **reference_videos** (array): Reference videos for multimodal generation (up to 10). Each 2-30s, total max 30s. Formats: mp4/mov (MOV recommended for best quality). Mutually exclusive with image/end_image.
- **reference_audios** (array): Reference audios for multimodal generation (up to 10). Each 2-30s, total max 30s. Formats: wav/mp3. Audio-only input is supported.
- **resolution** (string): Video resolution. 1080p for high quality, 720p for balanced, 480p for fastest.
- **ratio** (string): Aspect ratio. Must be 'adaptive' for image-to-video, first+last frame, video editing, and video extension tasks. 'adaptive' auto-selects based on input content.
- **duration** (integer): Duration in seconds (4-30), or -1 for auto-select. Must be -1 for Video Editing tasks.
- **output_format** (string): Output video format. MOV provides higher color precision (YUV 4:4:4); recommended for professional workflows and when using video references.
- **generate_audio** (boolean): Whether to generate synchronized audio with the video.
- **seed** (integer): Seed for reproducibility (-1 for random).
- **watermark** (boolean): Whether to add watermark to the output video.
- **task_type** (string): Guide the generation task type. 'auto' lets the API detect from prompt content. Set explicitly to avoid misdetection errors — e.g. when the API wrongly classifies a reference task as video editing and rejects duration/ratio settings.
- **draft** (boolean): Draft mode: render a fast, low-cost 480p preview instead of the final video. The output's draft_task_id renders the chosen take at 1080p later. Iterate on drafts, then render only the one you want.
- **draft_task_id** (string): Render the final 1080p video from a draft (the draft_task_id of an earlier draft run, valid for 7 days). Prompt, images, references, duration, ratio, seed and audio are reused from the draft; those inputs are ignored here. Resolution is always 1080p.
- **safety_identifier** (string): Unique identifier of end user for platform safety policy. Must be fixed and unique per user, max 64 chars. Recommended: hash of username, user ID, or email.

#### Output
- **draft_task_id** (string): Set on a draft run: pass it as draft_task_id to render this take as the final 1080p video.
- **video** (string): The generated video file.

## other video apps

- [VACE](https://inference.sh/apps/pruna/vace.md): $0.40/video
- [P-Video-Animate](https://inference.sh/apps/pruna/p-video-animate.md): $0.03/sec 720p, $0.06/sec 1080p
- [P-Video-Upscale](https://inference.sh/apps/pruna/p-video-upscale.md): Std: $0.01/sec 720p, $0.02 1080p, $0.04 2k, $0.08 4k; high fps 2x
- [P-Video-2-Pro-Avatar](https://inference.sh/apps/pruna/p-video-2-pro-avatar.md): $0.02/sec 480p, $0.04/sec 768p, $0.06/sec 1080p, $0.08/sec 2k, $0.12/sec 4k
- [P-Video-2-Pro-Reference](https://inference.sh/apps/pruna/p-video-2-pro-reference.md): Output: cost $0.015-$0.105/sec, speed $0.02-$0.115/sec. Ref video: $0.03-$0.06/sec. Ref img: $0.005/img. Ref audio: $0.0015-$0.0025/sec

## faq

### how much does Seedance 2.5 cost?

$6.40–$11.70/M tokens, varies by output resolution and visual input. you pay per run from your inference shell credits. no subscription is required.

### how do I run Seedance 2.5 via api?

call bytedance/seedance-2-5 with the javascript or python sdk, the rest api, or `belt app run bytedance/seedance-2-5` from a terminal. the api reference on this page lists every input.

### who makes Seedance 2.5?

Seedance 2.5 is made by bytedance and runs on inference shell. every bytedance app is listed at https://inference.sh/apps/bytedance.

### can my agent use Seedance 2.5?

yes. agents call it as a tool through the inference shell mcp server (https://api.inference.sh/mcp), the belt cli or the sdk, and pay per run like you do.

### what are the alternatives to Seedance 2.5?

other video apps on inference shell include VACE, P-Video-Animate, P-Video-Upscale, P-Video-2-Pro-Avatar. they run through the same api, so switching is a one-line change.
