Alibaba Wan 3.0 Prime Video Extend API Documentation
Playground
Try it on WaveSpeedAI!Wan 3.0 Prime Video Extend continues existing videos by generating a new 2-30 second segment from the final frame and appending it to the retained source video. It preserves existing source audio, supports optional audio generation for the new segment, retains up to the last 120 seconds of input, and outputs at 480P / 720P / 1080P. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
Wan 3.0 Prime Video Extend continues an existing video with a new AI-generated segment while preserving the visual and audio context of the source footage. Instead of regenerating the original clip, it keeps the retained source intact and generates what happens next, making it suitable for longer narrative sequences, continuous camera movement, character actions, and scene progression.
Why Choose This?
-
Continuous video extension
Continue an existing clip instead of generating an unrelated new shot, helping maintain scene, subject, and motion continuity. -
Up to 120 seconds of source context
The model can retain and use up to the last120seconds of the source video before generating the continuation. -
2–30 second new segments
Append a newly generated segment from2to30seconds in a single request. -
Prime generation quality
Designed for higher-quality continuation workflows where visual coherence, motion progression, and scene continuity matter. -
Optional ending-frame control
Uselast_imageto guide the final appearance or composition of the newly generated segment. -
Audio-aware continuation
Existing source audio is preserved, whileenable_audiocan generate audio for the newly appended segment. -
480p, 720p, and 1080p output
Choose the resolution that best fits preview, production, or higher-quality workflows. -
Prompt expansion
Enable automatic prompt optimization when the continuation requires more detailed motion or scene interpretation.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Positive prompt describing how the video should continue, including subject action, scene progression, camera movement, atmosphere, and visual direction. |
| video | Yes | Source video URL. Inputs longer than 120 seconds are automatically trimmed to their last 120 seconds before extension. |
| last_image | No | Optional last-frame image used to guide the ending of the generated continuation. Supports URL or Base64-encoded data. |
| resolution | No | Output video resolution: 480p, 720p, or 1080p. Default: 720p. |
| duration | No | Length of the new segment to append, in seconds. Range: 2–30. Default: 5. |
| enable_prompt_expansion | No | Enable automatic prompt optimization and expansion. Default: false. |
| enable_audio | No | Generate audio for the newly appended segment. Existing source audio is preserved. Default: true. |
| seed | No | Random seed for generation. Use -1 for a random seed. |
How to Use
- Upload a source video — Provide the clip you want to continue.
- Describe what happens next — Write a prompt focused on the continuation rather than repeating the existing scene.
- Add last-frame guidance optional — Provide
last_imagewhen the continuation should end on a specific composition, pose, or scene state. - Choose resolution — Select
480p,720p, or1080p. - Set extension duration — Choose how many new seconds to append, from
2to30. - Configure prompt expansion optional — Enable
enable_prompt_expansionwhen the continuation instruction needs additional interpretation. - Configure audio optional — Keep
enable_audioenabled when the generated segment should include new audio. - Set seed optional — Use a fixed seed for reproducible generation, or
-1for random generation. - Submit — Generate the extended video and retrieve the completed output.
Pricing
Pricing is based only on the newly generated extension duration and selected resolution. The retained source video duration is not included in the pricing calculation.
| Resolution | Per 5s | Per Billed Second |
|---|---|---|
| 480p | $0.375 | $0.075 |
| 720p | $0.750 | $0.150 |
| 1080p | $1.500 | $0.300 |
Example Costs
| Extension Duration | 480p | 720p | 1080p |
|---|---|---|---|
| 2s | $0.15 | $0.30 | $0.60 |
| 5s | $0.375 | $0.75 | $1.50 |
| 10s | $0.75 | $1.50 | $3.00 |
| 20s | $1.50 | $3.00 | $6.00 |
| 30s | $2.25 | $4.50 | $9.00 |
Best Use Cases
- Narrative continuation — Extend story scenes without restarting the sequence from scratch.
- Longer cinematic shots — Continue camera movement, character actions, and environmental motion beyond the original clip.
- Character continuity — Extend scenes where the same subject needs to remain visually consistent across the transition.
- Action progression — Continue walking, driving, dancing, combat, performance, or other ongoing motion.
- Scene evolution — Progress lighting, weather, environment, or events naturally from the existing footage.
- Start-to-end directed extension — Use
last_imagewhen the continuation needs to arrive at a specific final frame. - Long-form AI video workflows — Build longer sequences by repeatedly extending existing generated or edited clips.
Pro Tips
- Write the prompt around what happens next, not just what is already visible in the source video.
- Mention the direction of existing movement when continuity matters, such as camera tracking, character movement, or vehicle direction.
- Keep character identity, clothing, environment, lighting, and camera behavior consistent in the prompt when the scene should remain continuous.
- Use
last_imagewhen the continuation needs to end on a specific pose, composition, object state, or environment. - Use shorter extensions first when testing motion continuity, then increase
durationonce the direction is stable. - Enable
enable_prompt_expansionfor short prompts that need more detailed interpretation. - Use a fixed
seedwhen comparing different prompts or parameter configurations.
Notes
videoandpromptare required.durationcontrols only the length of the newly generated segment.- Extension duration supports
2–30seconds and defaults to5. - Source videos longer than
120seconds are automatically trimmed to their last120seconds. - Existing source audio is preserved.
enable_audiocontrols audio generation for the new segment and defaults totrue.enable_prompt_expansiondefaults tofalse.
Related Models
- Wan 3.0 Prime Image-to-Video — Generate Prime-quality video from a first-frame image.
- Wan 3.0 Image-to-Video — Generate video from a first-frame image with optional last-frame guidance.
- Wan 3.0 Reference-to-Video — Generate video using multimodal reference images, video, and audio.
- Wan 3.0 Text-to-Video — Generate video directly from natural-language prompts.
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_prompt_expansion": false,
"enable_audio": true
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/alibaba/wan-3.0-prime/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="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 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|deleted) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
*) sleep 2 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | The positive prompt for the generation. | |
| video | string | Yes | - | Source video URL. Inputs longer than 120 seconds are automatically trimmed to their last 120 seconds before extension. | |
| last_image | string | No | - | - | The last frame image for generating the video (optional). Supports URL or Base64-encoded data. |
| resolution | string | No | 720p | 480p, 720p, 1080p | The resolution of the generated video. |
| duration | integer | No | 5 | 2 ~ 30 | Length in seconds of the NEW segment to append (2-30). Final output duration is the retained source duration plus this value. |
| enable_prompt_expansion | boolean | No | false | - | If set to true, the prompt optimizer will be enabled. |
| enable_audio | boolean | No | true | - | Generate audio for the new segment. Existing source audio is preserved. |
| seed | integer | No | - | - | The random seed to use for the generation. -1 means a random seed will be used. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.status | string | Task status. completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses. |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<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.urls | object | Object containing related API endpoints |
| data.status | string | Status: completed is successful; failed, cancelled, timeout, and deleted are failure terminal statuses |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |