Vocal music
Elo · AA-Music-Vocal v1.1
Compose music from a style prompt and lyrics. Generate a complete song or an instrumental track, then retrieve the finished audio.
MiniMax Music 2.6 generates complete songs or instrumentals from a style prompt and optional lyrics. MiniMax describes it as a model for fully arranged tracks, with control over tempo, key, structure, vocal performance and emotional progression.
The prompt (10–2,000 characters) carries style, mood and scenario. Naming instruments, tempo and how the energy should build gives the model more to work with than a genre label. Lyrics (10–3,000 characters) can use [Verse], [Chorus] and [Bridge] tags to shape the song. Without lyrics, turn on lyrics_optimizer to write them from the prompt, or is_instrumental for a track without vocals.
In Artificial Analysis blind listening tests, Music 2.6 sits mid-table: Elo 998 on the vocal board and 1001 on the instrumental board, level with Eleven Music and MiniMax Music 2.5+. Suno v6 leads both boards by more than 140 points. Use Music 2.6 to sketch and iterate on ideas, and audition several takes before choosing one.
Generation runs as a task. Submit the request, keep the returned ID and poll until the status is completed, then download audio_file.url. In audio_setting, choose MP3, WAV or PCM, a sample rate up to 44.1 kHz and a bitrate up to 256 kbps.
Blind listening tests place MiniMax Music 2.6 mid-table on both Artificial Analysis music boards.
Elo · AA-Music-Vocal v1.1
Elo · AA-Music-Instrumental v1.1
Same five models on both boards. Music 2.6 is within the margin of error of Eleven Music and MiniMax Music 2.5+. Lyria 2, also on AI/ML API, scores 926 on the instrumental board (#18 of 19). Snapshot 2026-10-30.
| Usage | Price | Unit |
|---|---|---|
| Music generation | $0.15 | generation |
AI/ML API rates for music models billed per generation.
| Model | Per generation |
|---|---|
| $0.15 | |
| $0.10 |
Eleven Music is billed per second of audio, so it is not compared here.
Each request is one generation. Budget for several takes per finished track.
| Generations | Cost on AI/ML API |
|---|---|
| 1 track | $0.15 |
| 10 tracks | $1.50 |
| 100 tracks | $15.00 |
| 1,000 tracks | $150.00 |
Give your agent the model details, code and documentation.
export AIMLAPI_KEY="8f2b4c7d9a1e6b3f…"curl 'https://api.aimlapi.com/v2/generate/audio' \
-H "Authorization: Bearer $AIMLAPI_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "minimax/music-2.6",
"prompt": "Warm, unhurried instrumental jazz with brushed drums and mellow piano.",
"is_instrumental": true,
"audio_setting": {
"format": "mp3"
}
}'import os
import time
import requests
headers = {"Authorization": "Bearer " + os.environ["AIMLAPI_KEY"]}
payload = {
"model": "minimax/music-2.6",
"prompt": "Warm, unhurried instrumental jazz with brushed drums and mellow piano.",
"is_instrumental": True,
"audio_setting": {
"format": "mp3"
}
}
response = requests.post(
"https://api.aimlapi.com/v2/generate/audio",
headers=headers,
json=payload,
timeout=120,
)
response.raise_for_status()
data = response.json()
generation_id = data["id"]
for attempt in range(60):
if data["status"] in ("completed", "error"):
break
time.sleep(10)
result = requests.get(
"https://api.aimlapi.com/v2/generate/audio",
headers=headers,
params={"generation_id": generation_id},
timeout=120,
)
result.raise_for_status()
data = result.json()
if data["status"] == "error":
raise RuntimeError(data.get("error"))
if data["status"] != "completed":
raise TimeoutError("Generation is still running: " + generation_id)
print(data["audio_file"]["url"])async function main() {
const headers = {
Authorization: "Bearer " + process.env.AIMLAPI_KEY,
"Content-Type": "application/json",
};
const response = await fetch(
"https://api.aimlapi.com/v2/generate/audio",
{
method: "POST",
headers,
body: JSON.stringify({
"model": "minimax/music-2.6",
"prompt": "Warm, unhurried instrumental jazz with brushed drums and mellow piano.",
"is_instrumental": true,
"audio_setting": {
"format": "mp3"
}
}),
},
);
if (!response.ok) throw new Error(await response.text());
let data = await response.json();
const generationId = data.id;
for (let attempt = 0; attempt < 60; attempt++) {
if (["completed", "error"].includes(data.status)) break;
await new Promise(resolve => setTimeout(resolve, 10000));
const result = await fetch(
"https://api.aimlapi.com/v2/generate/audio?generation_id=" + encodeURIComponent(generationId),
{ headers },
);
if (!result.ok) throw new Error(await result.text());
data = await result.json();
}
if (data.status === "error") throw new Error(JSON.stringify(data.error));
if (data.status !== "completed") throw new Error("Still running: " + generationId);
console.log(data.audio_file.url);
}
main().catch(error => {
console.error(error);
process.exitCode = 1;
});Save the returned id, then poll this endpoint while the status is queued or generating. A completed task includes audio_file.url.
GET /v2/generate/audio?generation_id=…No. It composes music, with or without sung vocals. For spoken narration or voice agents, use a text-to-speech model such as Eleven v4 Turbo.
AI/ML API charges $0.15 per generation, whatever the length of the prompt or lyrics. 100 generations cost $15.
Yes. Send 10–3,000 characters in lyrics, using tags such as [Verse], [Chorus] and [Bridge] to guide the structure. Or set lyrics_optimizer to true and the model writes lyrics from your prompt.
Yes. Set is_instrumental to true and describe the music in the prompt. The default is a track with vocals.
POST /v2/generate/audio returns an ID. Poll GET /v2/generate/audio with generation_id while the status is queued or generating. When it is completed, download the file from audio_file.url.
MP3, WAV and PCM, set in audio_setting.format. You can also set a sample rate of 16, 24, 32 or 44.1 kHz and a bitrate from 32 to 256 kbps.
On the Artificial Analysis Music Arena (October 30, 2026), it scores Elo 998 on the vocal board (#11 of 13) and 1001 on the instrumental board (#12 of 19). Suno v6 leads both.