Bytedance Seedance 2.0 Fast Video Extend

Bytedance Seedance 2.0 Fast Video Extend

Playground

Try it on WaveSpeedAI!

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

Features

Seedance 2.0 Fast Video-Extend is the faster, cheaper tier of Seedance 2.0 Video-Extend. It appends a new cinematic continuation to an existing video by generating a fresh segment from the input video’s last frame and a natural-language prompt, then concatenating original and new segment into a single output.


Key Features

  • Seamless continuation — Generation starts from the input video’s last frame so the join is visually consistent.
  • Optional target last frame — Provide last_image to steer the new segment toward a specific end frame.
  • Director-level control — Camera movement, lighting, shadows, and character performance via prompts.
  • Native audio synchronization — Audio from both the original video and the new segment are preserved in the final output.
  • Faster, cheaper — ~17% cheaper than the standard Seedance 2.0 Video-Extend at every resolution.

Parameters

ParameterRequiredDescription
promptYesDescribe the cinematic continuation.
videoYesInput video URL. Generation continues from the last frame.
last_imageNoOptional target last-frame URL. Interpolates from the input’s last frame to this image.
durationNoLength in seconds of the new segment (4-15, default 5).
resolutionNo480p, 720p (default), 1080p, or 4k.
enable_web_searchNoEnable web search for real-time context.

How to Use

  1. Upload the input video. The new segment will be appended to it.
  2. Write the prompt. Describe the continuation in cinematic detail.
  3. (Optional) Upload a target last frame. The new segment will interpolate to this image.
  4. Pick a duration and resolution.
  5. Run. Receive the original video plus the new segment concatenated into one output.

Pricing

Billed per second of the new segment only. Resolution multipliers match Seedance 2.0 Fast image-to-video.

ResolutionPer second
480p$0.10
720p$0.20
1080p$0.50
4k$1.00

Examples (5s extension):

ResolutionCost
480p$0.50
720p$1.00
1080p$2.50
4k$5.00

Notes

  • Pricing is based on the new segment length only — the input video is not re-billed.
  • Aspect ratio of the new segment matches the input video’s last frame automatically.
  • Native audio generation is included for the new segment; the original video’s audio is preserved.

Authentication

For authentication details, please refer to the Authentication Guide.

API Endpoints

Submit Task & Query Result

set -euo pipefail

export WAVESPEED_API_KEY="your-api-key"

REQUEST_BODY=$(cat <<'JSON'
{
  "prompt": "A cinematic ocean wave at sunrise, highly detailed",
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "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/video-extend" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}")

TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi

# 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 type == "object" and has("data") then .data else . end')
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    created|processing) sleep 2 ;;
    *) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
  esac
done

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
promptstringYes-Describe the cinematic continuation — action, camera movement, lighting, mood.
videostringYes-URL of the input video to extend. Generation continues from the last frame.
last_imagestringNo--Optional target last-frame URL. If provided, the new segment interpolates from the input video's last frame to this image.
resolutionstringNo720p480p, 720p, 1080p, 4kOutput resolution of the new segment.
durationintegerNo54 ~ 15Length in seconds of the new segment to append (4-15).
enable_web_searchbooleanNofalse-Enable web search for real-time information.
generate_audiobooleanNotrue-Whether to generate native audio synchronized with the output video. Defaults to true.

Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
data.idstringUnique identifier for the prediction, Task Id
data.modelstringModel ID used for the prediction
data.outputsarrayOutput values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed)
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to retrieve the prediction result
data.statusstringStatus of the task: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”)
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds

Result Request Parameters

ParameterTypeRequiredDefaultDescription
idstringYes-Task ID

Result Response Parameters

ParameterTypeDescription
codeintegerHTTP status code (e.g., 200 for success)
messagestringStatus message (e.g., “success”)
dataobjectThe prediction data object containing all details
data.idstringUnique identifier for the prediction
data.modelstringModel ID used for the prediction
data.outputsarray<string | object>Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.
data.urlsobjectObject containing related API endpoints
data.urls.getstringURL to poll for the prediction result
data.statusstringStatus: created, processing, completed, or failed
data.created_atstringISO timestamp of when the request was created
data.errorstringError message (empty if no error occurred)
data.timingsobjectObject containing timing details
data.timings.inferenceintegerInference time in milliseconds
© 2026 WaveSpeedAI. All rights reserved.