Bytedance Seedance V1 Lite I2V 1080p API Documentation

Bytedance Seedance V1 Lite I2V 1080p API Documentation

Playground

Try it on WaveSpeedAI!

Seedance Lite creates coherent multi-shot image-to-video clips in 1080p with smooth, stable motion and accurate prompt following. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Features

> Notice — Service Stability > > The Seedance 1.0 family is being retired or has already been retired by its original provider. Until it is fully removed, the service is unstable: generations may fall back to alternative models without notice, results can differ from what this model used to produce, and the service can be temporarily unavailable. > > If you need an equally capable, stable alternative, we recommend Seedance 2: bytedance/seedance-2.0/image-to-video.


Seedance V1 Lite Image-to-Video 1080p is Full HD image-to-video generation model that transforms static images into stunning 1080p videos. With optional last-frame control, flexible durations up to 12 seconds, and multiple aspect ratios, create cinematic animations from any image.


Why It Stands Out

  • Full HD 1080p output: Generate high-resolution videos with exceptional clarity.
  • First and last frame control: Optionally specify an ending image for precise animation control.
  • Prompt Enhancer: Built-in AI-powered prompt optimization for better results.
  • Flexible duration: Generate videos from 2 to 12 seconds long.
  • Multiple aspect ratios: Wide range from ultrawide 21:9 to vertical 9:16.
  • Camera control: Option to fix camera position for stable shots.
  • Reproducibility: Use the seed parameter to recreate exact results.

Parameters

ParameterRequiredDescription
promptNoText description of desired motion and style.
imageYesSource image to animate (upload or public URL).
last_imageNoOptional ending frame image for controlled transitions.
durationNoVideo length: 2–12 seconds (default: 5).
aspect_ratioNoOutput aspect ratio (default: matches source).
camera_fixedNoFix camera position for stable shots.
seedNoSet for reproducibility; -1 for random.

Supported Aspect Ratios

Aspect RatioBest For
21:9Cinematic ultrawide content
16:9YouTube, widescreen displays
4:3Classic format, presentations
1:1Instagram posts, social media squares
3:4Portrait photos, Pinterest
9:16TikTok, Instagram Stories, Reels

How to Use

  1. Upload your source image — drag and drop a file or paste a public URL.
  2. Write a prompt (optional) — describe the motion you want. Use the Prompt Enhancer for AI-assisted optimization.
  3. Upload a last image (optional) — specify an ending frame for controlled animation.
  4. Set duration — choose video length from 2 to 12 seconds.
  5. Select aspect ratio — choose the format that fits your platform.
  6. Enable camera_fixed (optional) — check for stable, static camera shots.
  7. Click Run and wait for your video to generate.
  8. Preview and download the result.

Best Use Cases

  • Artwork Animation — Bring paintings, illustrations, and art to life.
  • Social Media Content — Create platform-optimized videos for any channel.
  • Marketing & Advertising — Animate product images and hero shots.
  • Creative Transitions — Use first/last frame control for smooth morphing effects.
  • Music Videos — Generate dynamic visuals from album art.

Pricing

DurationPrice
5 seconds$0.45
10 seconds$0.90

Billing Rules

  • Billed per 5 seconds at $0.45
  • Minimum duration: 2 seconds
  • Maximum duration: 12 seconds

Pro Tips for Best Quality

  • Use high-resolution, well-lit source images for optimal results.
  • Use last_image for controlled transitions between two specific frames.
  • Enable camera_fixed for professional-looking static shots.
  • Choose 21:9 for cinematic content, 9:16 for mobile-first platforms.
  • Start with shorter durations to test concepts, then extend for final versions.

Notes

  • Ensure uploaded image URLs are publicly accessible.
  • Processing time varies based on duration and current queue load.
  • Please ensure your prompts comply with content guidelines.

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'
{
  "image": "https://interactive-examples.mdn.mozilla.net/media/cc0-images/painted-hand-298-332.jpg",
  "duration": 5,
  "aspect_ratio": "21:9",
  "camera_fixed": false
}
JSON
)

# 1. Submit the prediction once. Never retry this request automatically:
# a retry after an unclear failure can create a second, billed task.
CHECK='The task may already exist. Check History or the predictions list before submitting again.'
if ! SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --connect-timeout 10 --max-time 60 \
  -X POST "https://api.wavespeed.ai/api/v3/bytedance/seedance-v1-lite-i2v-1080p" \
  -H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  -H "Content-Type: application/json" \
  -d "${REQUEST_BODY}"); then
  printf 'Submit failed. %s\n' "${CHECK}" >&2
  exit 1
fi

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. %s\n' "${CHECK}" >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

# 2. Poll until the prediction reaches a final status.
BODY_FILE=$(mktemp)
trap 'rm -f "${BODY_FILE}"' EXIT
while true; do
  # Transient errors (429, 5xx) are retried, honoring Retry-After.
  HTTP_CODE=$(curl --silent --show-error --fail-with-body \
    --connect-timeout 10 --max-time 60 --retry 5 --retry-delay 2 \
    --output "${BODY_FILE}" --write-out '%{http_code}' \
    "${RESULT_URL}" \
    -H "Authorization: Bearer ${WAVESPEED_API_KEY}" || true)
  case "${HTTP_CODE}" in
    2??) ;;
    000|429|5??)  # dropped connection or temporary error: keep polling
      printf 'Task %s: HTTP %s, polling again in 10s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      sleep 10; continue ;;
    *) printf 'Task %s: HTTP %s\n' "${PREDICTION_ID}" "${HTTP_CODE}" >&2
      cat "${BODY_FILE}" >&2; exit 1 ;;
  esac
  RESULT=$(jq 'if type == "object" and has("data") then .data else . end' "${BODY_FILE}")
  STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')

  case "${STATUS}" in
    completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted)
      printf 'Task %s ended with status %s\n' "${PREDICTION_ID}" "${STATUS}" >&2
      printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done

Retry temporary errors only while polling, never the submit request. Errors, retries and timeouts

Parameters

Task Submission Parameters

Request Parameters

ParameterTypeRequiredDefaultRangeDescription
imagestringYes-Input image supports both URL and Base64 format; The image file size cannot exceed 30MB, and the image resolution should not be less than 300*300px.
promptstringNo-The positive prompt for the generation. max length 2000
last_imagestringNo--URL of the ending image.
durationintegerNo52, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12The duration of the generated media in seconds.
aspect_ratiostringNo-21:9, 16:9, 4:3, 1:1, 3:4, 9:16The aspect ratio of the generated media.
camera_fixedbooleanNofalse-Whether to fix the camera position.
seedintegerNo--The random seed to use for the generation. -1 means a random seed will be used.

Every model also accepts the global request options enable_sync_mode and enable_base64_output; see their pages for details.

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.statusstringTask status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses.
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.statusstringStatus: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses
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.