Skip to main content
bytedance avatar

Seedance 2.5 Reference to Video API

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

Generate a video steered by up to 30 reference images — composite a product, character, location, or style plate into one shot by naming each reference in the prompt.

Priced by resolution

Model Input

Input

Describe the shot, the action, the camera move, and the sound. Address the reference images positionally as @Image1, @Image2 and so on, numbered by their order in reference_images: with a product photo first and a room photo second, '@Image1 rests on the counter in @Image2, steam rising as the camera pushes in' places the product from the first reference inside the room from the second. A reference the prompt never names is usually ignored or blended into the others, so name every one you send.

  • https://media.modelrunner.ai/D2FAkKEZ7WbZsyjLhyC7T.jpeg
  • https://media.modelrunner.ai/7BLQ9IGMlfwwjE2JPCNf8.jpeg

1 to 30 reference images that steer identity, wardrobe, product, location or style. The first entry is @Image1 in the prompt, the second @Image2, and so on. JPEG, PNG, WebP, BMP, TIFF or GIF; 300-6000 px on a side, aspect ratio between 1:2.5 and 2.5:1, under 30 MB each. The references do not fix the framing - set aspect_ratio for that.

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

Frame shape of the clip. Reference images do not dictate the framing on this variant, so pick the shape you want - a 16:9 request against 3:2 references returns a 16:9 clip. Use adaptive to let the model choose the framing instead.

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.

Experimental: up to 10 short audio references for the generated soundtrack, addressed as @Audio1, @Audio2 and so on. Each clip 2-30 seconds, 30 seconds combined at most; WAV or MP3, under 15 MB each. The clips are accepted and add nothing to the price, but their effect on the finished soundtrack has not been verified - treat the field as experimental. They cannot be sent on their own: at least one reference image is always required.

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

Model Output

Output

Loading
Generated in 205 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 Reference to Video API

Seedance 2.5 Reference 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/reference-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/reference-to-video \
  -H "Authorization: Key $MRUN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "@Image1 stands on the counter in @Image2 while the morning sun sweeps slowly across the room, a thin curl of steam ri…",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "generate_audio": true,
    "reference_images": [
      "https://media.modelrunner.ai/D2FAkKEZ7WbZsyjLhyC7T.jpeg",
      "https://media.modelrunner.ai/7BLQ9IGMlfwwjE2JPCNf8.jpeg"
    ],
    "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/reference-to-video/requests/$REQUEST_ID/status" \
  -H "Authorization: Key $MRUN_API_KEY"
curl "https://queue.modelrunner.run/bytedance/seedance-v2.5/reference-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/reference-to-video", {
  input: {
    "prompt": "@Image1 stands on the counter in @Image2 while the morning sun sweeps slowly across the room, a thin curl of steam ri…",
    "duration": 5,
    "resolution": "720p",
    "aspect_ratio": "16:9",
    "generate_audio": true,
    "reference_images": [
      "https://media.modelrunner.ai/D2FAkKEZ7WbZsyjLhyC7T.jpeg",
      "https://media.modelrunner.ai/7BLQ9IGMlfwwjE2JPCNf8.jpeg"
    ]
  },
});
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/reference-to-video",
    headers=headers,
    json={
      "prompt": "@Image1 stands on the counter in @Image2 while the morning sun sweeps slowly across the room, a thin curl of steam ri…",
      "duration": 5,
      "resolution": "720p",
      "aspect_ratio": "16:9",
      "generate_audio": true,
      "reference_images": [
        "https://media.modelrunner.ai/D2FAkKEZ7WbZsyjLhyC7T.jpeg",
        "https://media.modelrunner.ai/7BLQ9IGMlfwwjE2JPCNf8.jpeg"
      ]
    },
).json()

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

Input parameters

NameTypeRequiredDescription
promptstringyesDescribe the shot, the action, the camera move, and the sound. Address the reference images positionally as @Image1, @Image2 and so on, numbered by their order in reference_images: with a product photo first and a room photo second, '@Image1 rests on the counter in @Image2, steam rising as the camera pushes in' places the product from the first reference inside the room from the second. A reference the prompt never names is usually ignored or blended into the others, so name every one you send.
reference_imagesarrayyes1 to 30 reference images that steer identity, wardrobe, product, location or style. The first entry is @Image1 in the prompt, the second @Image2, and so on. JPEG, PNG, WebP, BMP, TIFF or GIF; 300-6000 px on a side, aspect ratio between 1:2.5 and 2.5:1, under 30 MB each. The references do not fix the framing - set aspect_ratio for that.
resolutionenumnoOutput resolution of the clip. 720p costs more per second of video than 480p. Default: "720p".
aspect_ratioenumnoFrame shape of the clip. Reference images do not dictate the framing on this variant, so pick the shape you want - a 16:9 request against 3:2 references returns a 16:9 clip. Use adaptive to let the model choose the framing instead. Default: "16:9".
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.
reference_audiosarraynoExperimental: up to 10 short audio references for the generated soundtrack, addressed as @Audio1, @Audio2 and so on. Each clip 2-30 seconds, 30 seconds combined at most; WAV or MP3, under 15 MB each. The clips are accepted and add nothing to the price, but their effect on the finished soundtrack has not been verified - treat the field as experimental. They cannot be sent on their own: at least one reference image is always required.

Machine-readable: OpenAPI schema · llms.txt

Use Seedance 2.5 Reference 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 Reference 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/reference-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/reference-to-video on ModelRunner to generate video”. MCP setup guide.

Model Details

Model Details

Seedance 2.5 Reference to Video builds a clip out of reference material rather than a single starting frame. Send 1 to 30 reference images — a product, a character, a location, a prop, a style plate — and describe the shot; address each one positionally in the prompt as `@Image1`, `@Image2` and so on, so you decide which reference lands where. That is what makes compositing work: `@Image1 rests on the counter in @Image2` puts the object from the first reference into the room from the second, and both references show up in the finished take. Nothing here fixes the framing the way a supplied frame does, so `aspect_ratio` stays a free choice — 16:9, 4:3, 1:1, 3:4, 9:16, 21:9 or adaptive — and a single take runs up to 30 seconds at 24 fps with a synchronized soundtrack generated alongside the picture at no extra cost. Output is 480p or 720p.

## Best for - Compositing separate references — subject, prop, location, style plate — into one generated scene - Keeping a product, character, outfit or set consistent across a clip without filming it - Steering exactly which reference goes where by naming them `@Image1`, `@Image2` in the prompt - Vertical, square or 21:9 clips generated straight from landscape references, with no re-cropping - Long single takes, up to 30 seconds, with ambience and dialogue generated with the picture

## Choose another model when - You need output above 720p: this generation tops out at 720p — use `bytedance/seedance-v2/reference-to-video`, which reaches 1080p - You have one starting frame to animate rather than references to composite — use `bytedance/seedance-v2.5/image-to-video` - You want to steer the shot from an existing video clip: this variant accepts image and audio references only, not video - You need a fixed seed for reproducible runs, or a locked-off camera: neither input exists on this generation

## Tips - Name every reference in the prompt — one the prompt never mentions is usually ignored or blended into the others - Spend the prompt on motion, camera, light and sound; the references carry appearance, so don't re-describe them - Numbering follows array order: `@Image1` is the first entry in `reference_images`, `@Image2` the second - Set `duration` yourself when cost matters: billing is per second of finished video, so `-1` leaves the length open up to 30 seconds - `reference_audios` is experimental: the clips are accepted and cost nothing extra, but their effect on the soundtrack is unverified

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

const result = await modelrunner.subscribe("bytedance/seedance-v2.5/reference-to-video", { input: { reference_images: [ "https://media.modelrunner.ai/D2FAkKEZ7WbZsyjLhyC7T.jpeg", "https://media.modelrunner.ai/7BLQ9IGMlfwwjE2JPCNf8.jpeg", ], prompt: "@Image1 rests on the counter in @Image2, a thin curl of steam rising from it as the morning light shifts across the room and the camera pushes in", resolution: "720p", aspect_ratio: "16:9", duration: 8, generate_audio: true, }, }); ```