Pixverse Music Mv Agent API Documentation
Playground
Try it on WaveSpeedAI!PixVerse Music MV Agent is a fast AI music video generation model that creates music videos from uploaded audio with optional character reference images, music style, MV style, aspect ratio, and quality controls. Ready-to-use REST inference API for audio-to-video generation, music videos, artist visuals, social media clips, promotional content, creative storytelling, and professional MV production workflows with simple integration, no coldstarts, and affordable pricing.
Features
PixVerse Music MV Agent generates a music video from an input audio track, with optional reference images, lyrics, music-style controls, visual-style controls, aspect ratio selection, and resolution options. It is designed for AI music videos, lyric-driven visuals, artist promos, character-led MV concepts, and other audio-to-video workflows.
Why Choose This?
-
Audio-to-music-video generation
Turn a song or audio track into a full music video from a single workflow. -
Optional reference image guidance
Add up to5reference images to guide character appearance or visual direction. -
Music and MV style controls
Set bothmusic_styleandmv_styleto better match the tone of the final output. -
Flexible aspect ratios
Supports widescreen, vertical, and square outputs for different publishing platforms. -
Lyrics-aware workflow
Optionally providelyric_textto better align visuals with the song content. -
Production-ready API
Suitable for music promotion, social content, creator workflows, visualizer-style generation, and AI MV prototyping.
Parameters
| Parameter | Required | Description |
|---|---|---|
| audio | Yes | Input audio URL used to generate the music video. |
| image_references | No | Optional reference images for characters or visual guidance. Supports up to 5 entries. |
| music_style | No | Music style, such as Pop, Rock, Hip Hop, R&B, Jazz, Reggae, Country, Ambient, or Others. Default: Pop. |
| mv_style | No | Music video visual style, such as Cinematic, Lo-fi, Dreamscape, Vintage, or Painting. Default: Cinematic. |
| aspect_ratio | No | Generated video aspect ratio. Default: 16:9. |
| quality | No | Generated video quality. Supported values: 720p, 1080p. Default: 720p. |
| lyric_text | No | Optional lyrics text. |
| instrumental_switch | No | Enable this if the input audio is instrumental or has no vocals. Default: true. |
Reference Image Format
Each item in image_references supports:
| Field | Required | Description |
|---|---|---|
| image | Yes | Reference image URL. |
| ref_name | No | Reference image label sent to PixVerse. Default: character. |
How to Use
- Upload your audio — provide the song or audio track you want to turn into a music video.
- Add reference images (optional) — upload character or style references if you want more visual control.
- Set the music style — choose the genre or overall music direction.
- Set the MV style — choose the visual style for the generated video.
- Choose aspect ratio and quality — select the final video format and resolution.
- Add lyrics (optional) — provide
lyric_textif you want stronger lyric-aware visual guidance. - Set instrumental mode (optional) — enable
instrumental_switchwhen the audio has no vocals. - Submit — run the model and download the generated music video.
Example Use Case
Generate a cinematic 16:9 AI music video from a pop track, with character reference images, lyric guidance, and 1080p quality for social media release or artist promotion.
Pricing
Pricing depends on audio duration and quality.
Billing Rules
720pcosts $0.08 per billed second1080pcosts $0.12 per billed second- Audio duration is billed in whole seconds, rounded up
- Minimum billed duration is 10 seconds
- Maximum billed duration is 360 seconds
image_references,music_style,mv_style,aspect_ratio,lyric_text, andinstrumental_switchdo not affect pricing
Example Costs
| Quality | 10s | 30s | 60s | 120s | 360s |
|---|---|---|---|---|---|
| 720p | $0.80 | $2.40 | $4.80 | $9.60 | $28.80 |
| 1080p | $1.20 | $3.60 | $7.20 | $14.40 | $43.20 |
Best Use Cases
- AI music videos — Generate full MV-style visuals from a song.
- Artist promotion — Create visual promos for track launches and teasers.
- Lyric-driven content — Pair song lyrics with matching visual storytelling.
- Character-led music content — Use references to maintain a more stable cast or visual identity.
- Social media releases — Produce vertical or widescreen clips for modern distribution platforms.
Pro Tips
- Use
image_referenceswhen identity, style, or recurring characters matter. - Add
lyric_textwhen you want visuals to better follow the song content. - Leave
instrumental_switchenabled for instrumental tracks or beat-only audio. - Use
720pfor testing and iteration, then switch to1080pfor final-quality output. - Keep reference images visually consistent when you want more stable character appearance.
Notes
audiois required.- Audio duration is billed with a minimum of 10 seconds and a maximum of 360 seconds.
- Billing uses whole seconds and rounds duration up.
qualitydefaults to720p.aspect_ratiodefaults to16:9.instrumental_switchdefaults totrue.
Related Models
- MiniMax Music 3.0 — Generate complete songs with vocals and instrumentals from text prompts and lyrics.
- Music Video Generator — Generate music-video-style visuals from audio or soundtrack-driven inputs.
- Vidu One-Click V2 MV — Create music video clips with one-click MV generation workflows.
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'
{
"audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
"aspect_ratio": "16:9",
"quality": "720p",
"caption_switch": false,
"instrumental_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/music-mv-agent" \
-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 |
|---|---|---|---|---|---|
| audio | string | Yes | - | - | Input audio URL used to generate the music video. |
| image_references | array<object> | No | - | 0 ~ 5 items | Optional reference images for characters or visual guidance. At most 5 entries. |
| music_style | string | No | - | - | Music style (e.g. Pop, Rock, Hip Hop, R&B, Jazz, Reggae, Country, Ambient). Left unset, PixVerse picks one from the audio. |
| mv_style | string | No | - | - | Music video visual style (e.g. Cinematic, Lo-fi, Dreamscape, Vintage, Painting). Left unset, PixVerse picks one. |
| aspect_ratio | string | No | 16:9 | 16:9, 9:16, 1:1, 4:3, 3:4 | Generated video aspect ratio. |
| quality | string | No | 720p | 720p, 1080p | Generated video quality. |
| lyric_text | string | No | - | - | Optional lyrics text. |
| caption_switch | boolean | No | false | - | Burn lyric captions into the generated music video. |
| instrumental_switch | boolean | No | false | - | Set to true only when the input audio is instrumental or has no vocals. |
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 |