Skip to main content
bytedance avatar

Seedance 2.5 Image to Video API

bytedance/seedance-v2.5/image-to-video

Animate a still photo into a video with synchronized audio — single takes up to 30 seconds long that keep your image's exact shape.

Priced by resolution

Model Input

Input

Describe what should happen from the first frame onwards: the action, the camera move, and the sound you want.

Still image used as the first frame of the clip. 300-6000 px on a side, under 30 MB, aspect ratio between 1:2.5 and 2.5:1. JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC and HEIF are accepted. The finished clip keeps this image's shape.

Output resolution of the clip. 720p costs more per second of video than 480p.

Clip length in seconds, from 4 to 30. Leave at -1 (the default) to let the model choose an appropriate whole-second length inside that range. Billing is per second of finished video, so -1 makes the cost of a run variable.

Additional Settings

Customize your input with more control.

Generate a synchronized soundtrack (dialogue, ambience and sound effects) together with the picture. Set false for a silent clip; the price is the same either way.

Frame shape of the clip. adaptive is the only value this model accepts: the clip always inherits the aspect ratio of the supplied image, so a vertical still produces a vertical clip. Crop the image before you send it if you need a different shape.

You need to be logged in to run this model and view results.
Log in

Model Output

Output

Loading
Generated in 168 seconds
Logs (1 lines)

Model Example Requests

Examples

Example output 1

Model Pricing

Pricing

Model pricing varies by the target resolution of your output video.

480p
$0.154
per second of output video
or around 6 seconds for $1
720p
$0.347
per second of output video
or around 3 seconds for $1

Seedance 2.5 Image to Video API

Seedance 2.5 Image to Video is a image-to-video AI model by bytedance. On ModelRunner it runs through a REST API or via MCP from any AI assistant, at $0.347 per second of video.

POST https://queue.modelrunner.run/bytedance/seedance-v2.5/image-to-video

cURL

# Submit a request to the queue. Input fields go at the top level of the
# body. The optional reserved "metadata" object holds your own flat string
# tags — stored on the request, never sent to the model; filter later with
# GET https://queue.modelrunner.run/requests?metadata=<url-encoded JSON>.
curl -X POST https://queue.modelrunner.run/bytedance/seedance-v2.5/image-to-video \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image": "https://media.modelrunner.ai/W5jjfbTQ6BahmlesNVWhr.jpeg",
    "prompt": "The paper lantern sways on its bamboo pole, its warm reflection rocking across the wet cobbles below, fine rain drift…",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "adaptive",
    "generate_audio": true,
    "metadata": {
      "project": "my-project"
    }
  }'
# → { "request_id": "...", "status_url": "...", "response_url": "..." }

# Poll status_url until "COMPLETED", then fetch the result
curl "https://queue.modelrunner.run/bytedance/seedance-v2.5/image-to-video/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/bytedance/seedance-v2.5/image-to-video/requests/$REQUEST_ID" \
  -H "Authorization: Key $MRUN_API_KEY"

JavaScript

import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("bytedance/seedance-v2.5/image-to-video", {
  input: {
    "image": "https://media.modelrunner.ai/W5jjfbTQ6BahmlesNVWhr.jpeg",
    "prompt": "The paper lantern sways on its bamboo pole, its warm reflection rocking across the wet cobbles below, fine rain drift…",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "adaptive",
    "generate_audio": true
  },
});
console.log(result);

Python

import os
import requests

headers = {"Authorization": f"Key {os.environ['MRUN_API_KEY']}"}

submitted = requests.post(
    "https://queue.modelrunner.run/bytedance/seedance-v2.5/image-to-video",
    headers=headers,
    json={
      "image": "https://media.modelrunner.ai/W5jjfbTQ6BahmlesNVWhr.jpeg",
      "prompt": "The paper lantern sways on its bamboo pole, its warm reflection rocking across the wet cobbles below, fine rain drift…",
      "duration": 5,
      "resolution": "720p",
      "aspect_ratio": "adaptive",
      "generate_audio": true
    },
).json()

# Poll submitted["status_url"] until "COMPLETED", then:
result = requests.get(submitted["response_url"], headers=headers).json()

Input parameters

NameTypeRequiredDescription
promptstringyesDescribe what should happen from the first frame onwards: the action, the camera move, and the sound you want.
imagestring (uri)yesStill image used as the first frame of the clip. 300-6000 px on a side, under 30 MB, aspect ratio between 1:2.5 and 2.5:1. JPEG, PNG, WebP, BMP, TIFF, GIF, HEIC and HEIF are accepted. The finished clip keeps this image's shape.
resolutionenumnoOutput resolution of the clip. 720p costs more per second of video than 480p. Default: "720p".
durationintegernoClip length in seconds, from 4 to 30. Leave at -1 (the default) to let the model choose an appropriate whole-second length inside that range. Billing is per second of finished video, so -1 makes the cost of a run variable. Default: -1.
generate_audiobooleannoGenerate a synchronized soundtrack (dialogue, ambience and sound effects) together with the picture. Set false for a silent clip; the price is the same either way. Default: true.
aspect_ratioenumnoFrame shape of the clip. adaptive is the only value this model accepts: the clip always inherits the aspect ratio of the supplied image, so a vertical still produces a vertical clip. Crop the image before you send it if you need a different shape. Default: "adaptive".

Machine-readable: OpenAPI schema · llms.txt

Use Seedance 2.5 Image to Video from Claude & Cursor (MCP)

Point Claude Code, Claude Desktop, Cursor, or any MCP client at the ModelRunner MCP server and Seedance 2.5 Image to Video becomes a tool your assistant can call directly — it authorizes via OAuth (no API key in config) and runs this model with the run_model tool using the endpoint bytedance/seedance-v2.5/image-to-video.

MCP client config (Claude Desktop, Cursor)

{
  "mcpServers": {
    "modelrunner": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.modelrunner.run/mcp"]
    }
  }
}

Claude Code

claude mcp add --transport http modelrunner https://mcp.modelrunner.run/mcp

Then ask your assistant, for example: “Run bytedance/seedance-v2.5/image-to-video on ModelRunner to generate video”. MCP setup guide.

Model Details

Model Details

Seedance 2.5 Image to Video animates a still you supply: your image becomes the first frame, the prompt describes what happens next, and the clip comes back with a matching soundtrack — ambience, sound effects, and dialogue generated together with the picture rather than dubbed on afterwards. Its headline capability is length: a single take can run up to 30 seconds at 24 fps, twice the ceiling of the 2.0 generation, so a whole beat plays out from one photo without a cut. The finished clip always keeps the shape of the image you gave it — a vertical phone photo produces a vertical clip, with no re-crop and no letterboxing. Output is 480p or 720p; leave `duration` at its default of `-1` and the model picks an appropriate whole-second length between 4 and 30.

## Best for - Animating a photo, poster, packshot, or piece of concept art into a moving clip - Long single takes from one still — a full action beat or a slow push-in that runs to 30 seconds without a cut - Vertical social video straight from a phone photo, since the clip inherits the source shape automatically - Establishing shots and atmosphere plates that need ambient sound baked in rather than added later

## Choose another model when - You need output above 720p: this generation tops out at 720p, so use `bytedance/seedance-v2/image-to-video`, which reaches 1080p - You want to re-frame the still into a different shape: the clip always inherits the source aspect here, while `bytedance/seedance-v2/image-to-video` accepts an explicit ratio - You have no source image and want the shot built from a prompt alone — use `bytedance/seedance-v2.5/text-to-video` - You need runs reproducible from a fixed seed, or a locked-off static camera: neither input exists on this generation

## Tips - Describe the motion, not the picture: the still fixes the subject, so spend the prompt on what moves, how the camera moves, and what is heard - Crop the source image first if you want a different frame shape — `aspect_ratio` only accepts `adaptive` - Source images should be 300–6000 px on a side, under 30 MB, and no more extreme than roughly 2.5:1 either way; HEIC and HEIF are accepted alongside JPEG, PNG and WebP - Set `duration` yourself when cost matters: billing is per second of finished video, so `-1` leaves the total open up to 30 seconds

To run via the ModelRunner JavaScript client: ```js import { modelrunner } from "@modelrunner/client";

const result = await modelrunner.subscribe("bytedance/seedance-v2.5/image-to-video", { input: { image: "https://media.modelrunner.ai/W5jjfbTQ6BahmlesNVWhr.jpeg", prompt: "The paper lantern sways on its bamboo pole, its warm reflection rocking across the wet cobbles, fine rain drifting through the light and a brass chime turning beside it", resolution: "720p", duration: 10, generate_audio: true, }, }); ```