Bytedance Seedance 2.5 Image To Video

Bytedance Seedance 2.5 Image To Video

Playground

Try it on WaveSpeedAI!

Seedance 2.5 (Image-to-Video) generates Hollywood-grade cinematic videos from reference images and text prompts with native audio-visual synchronization, director-level camera and lighting control, and exceptional motion stability. Built on Seed’s unified multimodal architecture, it preserves the input image’s subject and composition while adding expressive, physically accurate motion.

Features

Seedance 2.5 is Seed’s latest video generation model, built on a unified multimodal architecture. The Image-to-Video mode generates production-grade cinematic videos from reference images and text prompts — preserving the input image’s subject, composition, and style while adding expressive motion with native audio synchronization.


Key Features

  • Unified multimodal architecture A single model that handles text, image, audio, and video inputs for comprehensive creative flexibility.

  • Image-faithful generation Preserves the reference image’s subject identity, composition, lighting, and style while animating it into motion.

  • Multi-image reference support Guide generation with up to 4 reference images for consistent style, characters, or scenes.

  • Native audio-visual synchronization Generates video with synchronized audio in a single pass.

  • Director-level control Granular control over camera movement, lighting, shadows, and character performance through prompts.

  • Exceptional motion stability Industry-leading motion coherence with stable subjects, consistent physics, and fluid transitions.


Parameters

ParameterRequiredDescription
promptYesDetailed description of the cinematic scene
imageYesStart image URL to guide the video generation
last_imageNoLast frame image URL for video continuation
durationNoVideo length in seconds: 4-30 (default: 5)
aspect_ratioNoOutput format: 16:9, 9:16, 4:3, 3:4, 1:1, 21:9 (default: adaptive)
resolutionNoOutput resolution: 480p, 720p (default), 1080p, or 4k

How to Use

  1. Upload a start image — provide an image to guide the video generation.
  2. Write your prompt — describe the scene with cinematic detail: action, camera movement, lighting, mood.
  3. Set duration — choose any duration from 4 to 30 seconds.
  4. Run — submit and download your cinematic video with synchronized audio.

Pricing

ResolutionDurationCost
480p5 s$0.90
480p10 s$1.80
480p15 s$2.70
720p5 s$1.80
720p10 s$3.60
720p15 s$5.40
1080p5 s$4.50
4k5 s$9.00
1080p10 s$9.00
4k10 s$18.00
1080p15 s$13.50
4k15 s$27.00

Prices scale linearly with duration (4-30 seconds).

Billing Rules

  • Base rate (480p): $0.90 per 5 seconds
  • 720p: 2x the 480p price
  • 1080p: 5x the 480p price (2.5x the 720p price)
  • 4k: 10x the 480p price (2x the 1080p price).
  • Duration range: 4-30 seconds (continuous)

Best Use Cases

  • Product Demos — Animate product shots into cinematic showcase videos.
  • Ad Creatives — Turn storyboard frames into polished commercial footage.
  • Character Animation — Bring character art or portraits to life with natural motion.
  • Scene Extension — Transform a single keyframe into a full cinematic sequence.
  • Style-Consistent Series — Use reference images to maintain visual consistency across multiple clips.

Pro Tips

  • Upload high-quality reference images for the best subject preservation.
  • Write prompts like a film director — include lighting, camera angles, and mood.
  • Use multiple reference images for better style and character consistency.
  • Start with a short duration (4-5s) to iterate, then extend up to 15s for the final cut.
  • Describe character expressions and actions for more engaging scenes.

Notes

  • Native audio generation is included — videos come with synchronized sound.
  • Up to 4 reference images can be uploaded.
  • Duration range: 4-30 seconds (continuous).
  • Aspect ratio follows the input image composition.


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",
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "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/image-to-video" \
  -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 scene, action, camera movement, and mood for the video.
imagestringYes-Start image URL to guide the video generation.
last_imagestringNo--Last frame image URL for video continuation.
resolutionstringNo720p480p, 720p, 1080p, 4kThe output video resolution.
durationintegerNo54 ~ 30The duration of the generated video in seconds (4-30s).
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.