ElevenLabs Music generates original songs from text descriptions. Create instrumentals or full compositions with customizable duration. Ready-to-use REST inference API, best performance, no cold starts, affordable pricing.
Ожидание
$0.083за запуск·~12 / $1
Hard Trap, Hip Hop, 808 bass, energetic flow, confident male rap vocals, brass stabs, hype music, motivational sports anthem. [Verse] Laced up tight, ready to go Putting on a major show Sweat and tears on the floor Coming back to get some more [Chorus] Eyes on the prize, reach for the net The greatest game you ever met I take the shot, I make the play Doing this every single day [Outro] Nothing but net. Yeah, we winning.
High-energy cyberpunk synthwave, driving analog bassline, retro futuristic synthesizers, punchy electronic drums, neon noir atmosphere, 120 BPM, mechanical textures.
Modern deep house fashion runway music, stylish and elegant, groovy bass, rhythmic hi-hats, vocal chops, luxury brand advertisement vibe, confident and cool.
Steampunk ambient atmosphere, ticking clock sounds, mechanical gears clicking, steam hissing, soft acoustic guitar in the background, mysterious and studious.
ElevenLabs Music is an AI music generation model that creates songs with vocals or instrumental tracks from text prompts. Describe the genre, mood, and style, include lyrics with structure markers, and the model generates professional-quality music with flexible output formats.
Songs with vocals or instrumental Generate complete songs with AI vocals, or switch to instrumental-only mode.
Flexible song length Control output duration precisely with millisecond-level adjustment.
Multiple output formats Export as MP3 (standard/high quality) or WAV at various sample rates.
Style and lyrics in one prompt Combine style tags and structured lyrics in a single prompt field.
Prompt Enhancer Built-in tool to automatically improve your music descriptions.
| Parameter | Required | Description |
|---|---|---|
| prompt | Yes | Style description and lyrics with structure markers |
| music_length_ms | No | Output duration in milliseconds (default: 40000) |
| force_instrumental | No | Generate instrumental only without vocals (default: disabled) |
| output_format | No | Output format (see options below, default: mp3_standard) |
| Format | Description |
|---|---|
| mp3_standard | Standard quality MP3 |
| mp3_high_quality | High quality MP3 |
| wav_16khz | WAV at 16kHz sample rate |
| wav_22khz | WAV at 22kHz sample rate |
| wav_24khz | WAV at 24kHz sample rate |
| wav_cd_quality | WAV at CD quality (44.1kHz) |
Combine style tags and lyrics in the prompt field. Start with genre, mood, and instrument descriptions, then add structured lyrics:
Example:
Hard Trap, Hip Hop, 808 bass, energetic flow, confident male rap vocals, brass stabs, hype music, motivational sports anthem. [Verse] Laced up tight, ready to go Putting on a major show Sweat and tears on the floor Coming back to get some more [Chorus] We don't stop, we don't quit Every rep, every hit
| Duration | Cost |
|---|---|
| Per second | $0.0083 |
Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/elevenlabs/music 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 Music 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",
"music_length_ms": 10000,
"force_instrumental": true,
"output_format": "mp3_standard"
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/elevenlabs/music" \
-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=$(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 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) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "$STATUS" >&2; exit 1 ;;
esac
doneconst submitUrl = "https://api.wavespeed.ai/api/v3/elevenlabs/music";
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",
"music_length_ms": 10000,
"force_instrumental": true,
"output_format": "mp3_standard"
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = task.urls?.get ||
`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"].includes(result.status)) throw new Error(JSON.stringify(result));
if (!["created", "processing"].includes(result.status)) throw new Error("Unexpected status: " + result.status);
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",
"music_length_ms": 10000,
"force_instrumental": True,
"output_format": "mp3_standard"
}
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/elevenlabs/music", 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 = task.get("urls", {}).get("get") or 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"}:
raise RuntimeError(result)
if status not in {"created", "processing"}:
raise RuntimeError(f"Unexpected status: {status}")
time.sleep(2)Music is a ElevenLabs model for audio generation, exposed as a REST API on WaveSpeedAI. ElevenLabs Music generates original songs from text descriptions. Create instrumentals or full compositions with customizable duration. Ready-to-use REST inference API, best performance, no cold starts, 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/elevenlabs/elevenlabs-music.
Music starts at $0.083 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`, `force_instrumental`, `music_length_ms`, `output_format`. 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/elevenlabs/elevenlabs-music.
Median end-to-end generation time on WaveSpeedAI is around 12 seconds per request, based on recent successful runs. Queue time varies with global demand; live status is visible in the prediction record.
Commercial usage rights depend on the model's license, set by its provider (ElevenLabs). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.