GPT Image 2.5 is LIVE — Flare & Sunburst | Try in Image Generator →

bytedance/

Seedance 2.5 (Video-Extend) extends an input video with a new cinematic continuation generated from its last frame and a natural-language prompt. Ready-to-use REST API, best performance, no coldstarts, affordable pricing.

video-extend
Input
Enable Safety Checker

Idle

$0.99per run·~10 / $10

ExamplesView all

eamlessly continues from previous video clip, muscles in its neck and shoulders tense gradually. It pushes its hooves against the ground, rises steadily from the ground onto four legs. After standing fully upright, it shakes its head vigorously from side to side, its soft antlers and fur swaying along with the movement, loose dust drifts off its coat, calm alert expression, realistic wildlife cinematography, natural soft forest light, 8k, high detail, lifelike fur texture, smooth continuous motion.

Related Models

README

Seedance 2.5 Video Extend

Seedance 2.5 Video Extend appends a new cinematic continuation to an existing video. The model continues from the ending of the input video, using the recent motion and audio context to generate a coherent new segment that preserves movement, subject continuity, and sound flow.

Why Choose This?

  • Seamless video continuation
    Generate a new segment that continues naturally from the end of the source video.

  • Motion and scene continuity
    Use the input video's ending context to preserve subject movement, camera direction, and scene flow.

  • Prompt-guided extension
    Describe what should happen next, including action, lighting, camera movement, mood, and atmosphere.

  • Native audio synchronization
    Generate synchronized audio for the extended segment while preserving the original video's audio.

  • Flexible resolution options
    Choose 480p, 720p, 1080p, or 4k depending on quality and cost needs.

Parameters

ParameterRequiredDescription
promptYesDescribe the cinematic continuation, including action, camera movement, lighting, mood, and scene progression.
videoYesInput video URL. The model continues from the ending of the video, using up to the last 30 seconds as context.
durationNoLength in seconds of the new segment. Range: 4–30. Default: 5.
resolutionNoOutput resolution: 480p, 720p, 1080p, or 4k. Default: 720p.
generate_audioNoGenerate synchronized audio for the output video. Default: true.

How to Use

  1. Upload the input video — Provide the source video you want to extend.
  2. Write the continuation prompt — Describe what should happen after the original ending.
  3. Set duration — Choose the length of the new segment from 4 to 30 seconds.
  4. Choose resolution — Select 480p, 720p, 1080p, or 4k.
  5. Configure audio optional — Keep generate_audio enabled when synchronized audio is needed.
  6. Submit — Generate the final output with the original video and new segment joined together.

Writing Effective Prompts

Extension continues your source video forward or backward. Your prompt describes what happens in the new footage — the model matches the existing look and motion.

Direct the continuation

Use a continuation trigger (continue, extend forward, extend backward) and describe the new action.

  • "Continue the video: the character walks off-screen to the right as the camera pans to follow."
  • "Extend backward: before the scene begins, show the same character entering the room and sitting down."

Keep it continuous

Describe motion, camera, and pacing that flow naturally from where the source leaves off — abrupt changes break the seam. For longer extensions, use a timed shot list.

0-3s: The bee lifts off the flower, the camera following in a slow macro pull-back. 3-5s: It drifts to a second flower and lands; pollen catches the light as it settles.

Camera language

Write these directly; the model understands them:

  • Shot size — extreme wide, wide, medium, medium close-up, close-up
  • Movement — push in, pull out, pan, track, follow, orbit, tilt up, handheld shake
  • Angle — low angle, overhead, eye-level, first-person
  • Techniques — one-shot / long take, dolly zoom, bullet time, speed ramp

For a niche term, add a plain-language gloss: "rack focus: the sharp foreground softens as the background comes into focus."

Negative control

Positive descriptions work best, but you can suppress subtitles and audio:

  • "No subtitles."
  • "No BGM — ambient and action sounds only."
  • "No audio."

Weak vs. strong

prompt
weakmake it longer
strongContinue the video for 5 more seconds: the surfer rides the wave to shore, then steps off the board onto wet sand as the camera pulls back to a wide shot. Match the existing golden-hour light and handheld motion. Ocean and wind sounds, no music.

Pricing

Pricing is based on the combined duration of reference duration + new segment duration.

The reference duration is calculated from the input video context, clamped to 2–30 seconds. The new segment duration is controlled by the duration parameter.

ResolutionPer second
480p$0.11
720p$0.22
1080p$0.55
4k$1.10

Example Costs: 10s Source + 5s Extension

ResolutionCost
480p$1.65
720p$3.30
1080p$8.25
4k$16.50

Example Costs: 30s Source + 10s Extension

ResolutionCost
480p$4.40
720p$8.80
1080p$22.00
4k$44.00

Best Use Cases

  • Scene continuation — Extend an existing clip with a coherent new segment.
  • Story progression — Continue character action, camera movement, and atmosphere from the original ending.
  • Ad creative extension — Expand short campaign clips into longer variants.
  • Social media content — Generate longer versions of short videos for different platforms.
  • Creative prototyping — Test alternate continuations from the same source video.

Pro Tips

  • Use a source video with a clear ending frame and stable final motion.
  • Describe what should happen next instead of restating the full original video.
  • Mention subject action, camera direction, lighting, atmosphere, and sound cues.
  • Use 480p or 720p for iteration and 1080p or 4k for higher-quality output.
  • Keep the input video focused on the part you want to continue from.
  • Native audio generation is included for the new segment, and the original video's audio is preserved.

Related Models

Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Seedance 2.5 Video Extend API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/bytedance/seedance-2.5/video-extend 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.5 Video Extend below.

HTTP example
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",
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "resolution": "720p",
    "duration": 5,
    "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.5/video-extend" \
  -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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/bytedance/seedance-2.5/video-extend";
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",
        "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
        "resolution": "720p",
        "duration": 5,
        "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));
}
Python example
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",
    "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
    "resolution": "720p",
    "duration": 5,
    "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.5/video-extend", 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.5 Video Extend API — Frequently asked questions

What is the Seedance 2.5 Video Extend API?

Seedance 2.5 Video Extend is a ByteDance model for video extension, exposed as a REST API on WaveSpeedAI. Seedance 2.5 (Video-Extend) extends an input video with a new cinematic continuation generated from its last frame and a natural-language prompt. Ready-to-use REST API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Seedance 2.5 Video Extend API?

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 production-oriented Python, JavaScript, and cURL examples with timeouts, transient-error handling, and safe GET retries. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/bytedance/bytedance-seedance-2.5-video-extend.

How much does Seedance 2.5 Video Extend cost per run?

Seedance 2.5 Video Extend starts at $1.10 per run. 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.

What inputs does Seedance 2.5 Video Extend accept?

Key inputs: `prompt`, `video`, `resolution`, `duration`, `generate_audio`. 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.5-video-extend.

How long does Seedance 2.5 Video Extend take to generate?

Median end-to-end generation time on WaveSpeedAI is around 586 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.

Can I use Seedance 2.5 Video Extend outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (ByteDance). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Seedance 2.5 Video Extend API on WaveSpeedAI