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.
Idle
$0.75per run·~13 / $10
Continue seamlessly as she approaches the man. Instead of handing her the case, he places it inside the aircraft and quietly tells her they need to leave immediately. She looks toward the horizon as distant lightning illuminates several approaching vehicles. She puts on her helmet and moves quickly toward the cockpit while he boards behind her. The camera follows them toward the aircraft as the propellers begin turning. Preserve both characters, outfits, aircraft, storm conditions, and continuous cinematic tension.
Continue the scene smoothly: the man keeps walking forward along the rainy street, natural steady movement, consistent lighting and camera motion.
Continue seamlessly as the man slowly approaches her. He looks at the ring, then quietly reveals an identical ring on his own hand. The woman looks between the two rings in confusion. Before either speaks, the train suddenly enters a dark tunnel and every carriage light switches off. When the lights return, the man is gone, but his seat now holds an old photograph of the two of them together. Preserve the same woman, train interior, clothing, lighting, camera style, and continuous romantic mystery atmosphere.
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.
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 last 120 seconds of the source video before generating the continuation.
2–30 second new segments
Append a newly generated segment from 2 to 30 seconds 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
Use last_image to guide the final appearance or composition of the newly generated segment.
Audio-aware continuation
Existing source audio is preserved, while enable_audio can 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.
| 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. |
last_image when the continuation should end on a specific composition, pose, or scene state.480p, 720p, or 1080p.2 to 30.enable_prompt_expansion when the continuation instruction needs additional interpretation.enable_audio enabled when the generated segment should include new audio.-1 for random generation.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 |
| 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 |
last_image when the continuation needs to arrive at a specific final frame.last_image when the continuation needs to end on a specific pose, composition, object state, or environment.duration once the direction is stable.enable_prompt_expansion for short prompts that need more detailed interpretation.seed when comparing different prompts or parameter configurations.video and prompt are required.duration controls only the length of the newly generated segment.2–30 seconds and defaults to 5.120 seconds are automatically trimmed to their last 120 seconds.enable_audio controls audio generation for the new segment and defaults to true.enable_prompt_expansion defaults to false.Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/alibaba/wan-3.0-prime/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 Wan 3.0 Prime Video Extend below.
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,
"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 "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
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/alibaba/wan-3.0-prime/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,
"enable_prompt_expansion": false,
"enable_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));
}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,
"enable_prompt_expansion": False,
"enable_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/alibaba/wan-3.0-prime/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)Wan 3.0 Prime Video Extend is a Alibaba model for video extension, exposed as a REST API 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. You can call it programmatically or try it from the playground above.
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/alibaba/alibaba-wan-3.0-prime-video-extend.
Wan 3.0 Prime Video Extend starts at $0.75 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.
Key inputs: `prompt`, `video`, `resolution`, `duration`, `seed`, `enable_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/alibaba/alibaba-wan-3.0-prime-video-extend.
Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.
Commercial usage rights depend on the model's license, set by its provider (Alibaba). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.