Seedance 2.0 Fast Turbo Reference to Video creates cinematic videos with native audio from your own reference images, videos, and audio, keeping characters, products, motion, and sound consistent while a prompt directs the new shot. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Idle
$0.12per run·~83 / $10
Use the florist from <Image 1> and the blue bicycle from <Image 2>. Preserve his exact face, hairstyle, apron, clothing, and bouquet. Preserve the bicycle’s blue frame, wicker basket, cream saddle, bell, and flower charm. The opening frame is a clean medium-wide shot of the florist standing beside the bicycle outside his flower shop. The bouquet rests inside the front basket. He turns toward the shop for one moment. A young woman passing by accidentally takes the bicycle, thinking it is hers. He turns back and watches her ride away with his bouquet. She notices the flowers, stops, and looks back. He raises both hands in disbelief, then starts laughing. The camera begins with a stable side composition, tracks gently with the bicycle as she rides away, then settles into a long-lens two-shot as they notice each other. Playful romantic comedy, bright natural light, clear visual storytelling, cinematic timing.
Seedance 2.0 Fast Turbo Reference-to-Video guides generation with your own reference images, videos, and audio. Keep characters, products, scenes, motion, and soundtrack consistent while a prompt directs the new shot, with native synchronized audio and director-style control over camera, lighting, and pacing. The same reference inputs are also accepted by Seedance 2.0 Fast Turbo Text-to-Video.
Fastest Seedance option Speed-optimized inference for maximum throughput.
Affordable HD output Starting at $0.60 per 5 seconds at 720p.
Unified multimodal architecture Same Seedance 2.0 foundation handling text, image, audio, and video inputs.
Native audio-visual synchronization Generates video with synchronized audio in a single pass.
Director-level control Camera movement, lighting, shadows, and character performance controlled through prompts.
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Detailed description of the cinematic scene |
| aspect_ratio | No | Output format: 16:9 (default), 9:16, 4:3, 3:4, 1:1, 21:9 |
| duration | No | Video length in seconds: 4-15 (default: 5) |
| resolution | No | Output resolution: 720p (default) or 1080p |
| enable_web_search | No | Enable web search for real-time information (default: false) |
| generate_audio | No | Generate synchronized audio for the output video (default: true) |
| reference_images | Conditional | Reference image URLs to guide style, characters, or composition |
| reference_videos | Conditional | Reference video URLs (up to 3). Each reference video is normalized to at least 2 seconds, each clip and the combined input are capped at 15 seconds, and the normalized combined input duration is rounded up to a whole second for billing. |
| reference_audios | Conditional | Reference audio URLs (total length must not exceed 15 seconds) |
Pricing is calculated upfront using your selected duration, plus reference-video charges when applicable.
Output-only pricing:
| Resolution | Per second | 5 seconds | 10 seconds | 15 seconds |
|---|---|---|---|---|
| 720p | $0.12 | $0.60 | $1.20 | $1.80 |
| 1080p | $0.14 | $0.70 | $1.40 | $2.10 |
Pricing has two parts:
Each reference video is normalized to at least 2 seconds, each clip and the combined input are capped at 15 seconds, and the normalized combined input duration is rounded up to a whole second for billing.
| Reference input | Output | 720p | 1080p |
|---|---|---|---|
| 2s | 5s | $0.555 | $0.655 |
| 5s | 5s | $0.75 | $0.85 |
| 15s | 5s | $1.40 | $1.50 |
Notice: Use @Image 1, @Image 2, @Audio 1, etc. to reference your uploaded assets. Number each type separately, in upload order.
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/bytedance/seedance-2.0-fast/reference-to-video-turbo with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Seedance 2.0 Fast Reference To Video Turbo below.
set -euo pipefail
: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"
REQUEST_BODY=$(cat <<'JSON'
{
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"enable_web_search": false,
"generate_audio": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/bytedance/seedance-2.0-fast/reference-to-video-turbo" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $WAVESPEED_API_KEY" \
-d "$REQUEST_BODY")
TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
-H "Authorization: Bearer $WAVESPEED_API_KEY")
RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
case "$STATUS" in
completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/bytedance/seedance-2.0-fast/reference-to-video-turbo";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');
async function requestJson(url, options = {}) {
const response = await fetch(url, options);
if (!response.ok) throw new Error(await response.text());
return response.json();
}
// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"enable_web_search": false,
"generate_audio": true
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;
// 2. Poll until the prediction finishes.
while (true) {
const resultBody = await requestJson(resultUrl, {
headers: { "Authorization": `Bearer ${apiKey}` },
});
const result = resultBody.data ?? resultBody;
if (result.status === "completed") {
console.log(result.outputs);
break;
}
if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
await new Promise(resolve => setTimeout(resolve, 2000));
}import json
import os
import time
from urllib.request import Request, urlopen
api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
"prompt": "A cinematic shot of a city at sunset, soft golden light",
"aspect_ratio": "16:9",
"resolution": "720p",
"duration": 5,
"enable_web_search": False,
"generate_audio": True
}
def request_json(url, data=None):
request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
with urlopen(request) as response:
return json.load(response)
# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/bytedance/seedance-2.0-fast/reference-to-video-turbo", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"
# 2. Poll until the prediction finishes.
while True:
result_body = request_json(result_url)
result = result_body.get("data", result_body)
status = result.get("status")
if status == "completed":
print(result.get("outputs", []))
break
if status in {"failed", "cancelled", "timeout", "deleted"}:
raise RuntimeError(result)
time.sleep(2)Seedance 2.0 Fast Reference To Video Turbo is a ByteDance model for reference-guided video generation, exposed as a REST API on WaveSpeedAI. Seedance 2.0 Fast Turbo Reference to Video creates cinematic videos with native audio from your own reference images, videos, and audio, keeping characters, products, motion, and sound consistent while a prompt directs the new shot. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.
POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/bytedance/bytedance-seedance-2.0-fast-reference-to-video-turbo.
Seedance 2.0 Fast Reference To Video Turbo starts at $0.12 per run or per second. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.
Key inputs: `prompt`, `aspect_ratio`, `resolution`, `duration`, `reference_images`, `enable_web_search`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/bytedance/bytedance-seedance-2.0-fast-reference-to-video-turbo.
Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.
Commercial usage rights depend on the model's license, set by its provider (ByteDance). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.