Pixverse Pixverse V6 Extend API Documentation
Playground
Try it on WaveSpeedAI!PixVerse V6 Extend continues and enhances existing video content by analyzing the ending segment and generating new frames forward. Supports 360p to 1080p resolutions, 1-15 second extension duration, optional audio generation, and multiple styles. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.
Features
PixVerse V6 Video Extend continues an existing video clip with new AI-generated footage, seamlessly picking up where the original ends. Describe where the scene should go next — the model generates a natural, motion-consistent extension with optional style control, negative prompting, and synchronized audio.
- Need to generate from scratch? Try PixVerse V6 Text-to-Video
Why Choose This?
-
Seamless video continuation Extends your existing clip with new AI-generated footage that matches the original motion, style, and scene context.
-
Prompt-guided extension Describe what should happen next — direct the action, camera movement, and atmosphere of the extended segment.
-
Style control Apply a specific visual style to the extension for creative or consistent branded output.
-
Optional audio generation Enable generate_audio_switch to produce synchronized ambient sound alongside the extended video.
-
Negative prompt support Specify what to avoid in the extension for more precise control over the output.
-
Multiple resolution tiers Generate extensions at 360p, 540p, 720p, or 1080p to match your delivery requirements.
Parameters
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Text description of what should happen in the extended segment. |
| video | Yes | Source video to extend (URL or file upload). |
| resolution | No | Output resolution: 360p, 540p, 720p (default), or 1080p. |
| duration | No | Length of the extension in seconds. Default: 5. |
| generate_audio_switch | No | Whether to generate synchronized audio for the video. Default: off. |
| negative_prompt | No | Elements to exclude from the extended footage. |
| style | No | Visual style to apply to the extension. |
| seed | No | Random seed for reproducible results. |
How to Use
- Upload your video — provide the source clip to extend via URL or drag-and-drop.
- Write your prompt — describe what should happen next in the scene.
- Select resolution — 360p for drafts, 720p for standard output, 1080p for final production.
- Set duration — choose how many seconds to extend the video by.
- Enable audio (optional) — check generate_audio_switch to generate synchronized sound.
- Add negative prompt (optional) — specify elements you want to avoid in the extension.
- Set style (optional) — apply a specific visual style to the extended footage.
- Set seed (optional) — fix the seed to reproduce a specific result in future runs.
- Submit — generate, preview, and download your extended video.
Pricing
| Resolution | Without Audio | With Audio |
|---|---|---|
| 360p | $0.025/s | $0.035/s |
| 540p | $0.035/s | $0.045/s |
| 720p | $0.045/s | $0.060/s |
| 1080p | $0.090/s | $0.115/s |
Billing Rules
- Billing is calculated per second of extension generated
- Audio generation increases cost per second at each resolution tier
- Examples: 10s extension at 720p (no audio) = $0.45 — 10s at 1080p (no audio) = $0.90
Best Use Cases
- Short Film & Narrative — Extend key scenes to develop story beats without reshooting.
- Social Media Content — Lengthen clips to hit optimal duration for Reels, TikTok, and Shorts.
- Marketing & Advertising — Extend product or campaign videos to fill longer ad slots.
- Creative Exploration — Explore alternate continuations of the same source clip with different prompts.
- Loop & Ambient Video — Generate extended atmospheric footage from a short seed clip.
Pro Tips
- Be specific about what should happen next — camera movement, subject action, and environmental changes.
- Use negative_prompt to prevent the extension from repeating or contradicting the source footage.
- Use 360p at short durations to test your prompt direction before committing to a high-resolution extension.
- Fix the seed once you find a direction you like to iterate consistently across different durations.
Notes
- Both prompt and video are required fields; all other parameters are optional.
- Ensure video URLs are publicly accessible if using a link rather than a direct upload.
- Please follow PixVerse’s content usage policies when crafting prompts.
Related Models
- PixVerse V6 Text-to-Video — Generate video from text prompts from scratch.
- PixVerse V6 Image-to-Video — Animate a reference image into a cinematic video clip.
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,
"generate_audio_switch": false
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/pixverse/pixverse-v6/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
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| prompt | string | Yes | - | Text description of the desired video. | |
| video | string | Yes | - | URL of the input video to extend | |
| resolution | string | No | 720p | 360p, 540p, 720p, 1080p | The resolution of the generated video |
| duration | integer | No | 5 | 1 ~ 15 | The duration of the generated video in seconds. v6 supports values from 1 to 15 seconds |
| generate_audio_switch | boolean | No | false | - | Enable audio generation for the video. |
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.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| 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.urls.get | string | URL to poll for the prediction result |
| data.status | string | Status: created, processing, completed, or failed |
| 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 |