MiniMax H3 Open Weights | Try in Video Generator →

Describe Song | AI Music Generation API

mureka-ai/

Mureka AI Describe Song is a fast AI music analysis model that describes songs via the official Mureka API. Ready-to-use REST inference API for song description, music analysis, genre and mood understanding, audio metadata workflows, catalog tagging, creative music discovery, and professional music processing with simple integration, no coldstarts, and affordable pricing.

speech-to-text
Input

Idle

{
  "tags": [
    "dark",
    "atmospheric",
    "futuristic",
    "melancholic",
    "driving",
    "energetic",
    "club",
    "danceable",
    "neon",
    "rain",
    "digital",
    "past",
    "real",
    "lasting"
  ],
  "genres": [
    "Electro-Pop",
    "EDM",
    "Pop"
  ],
  "instrument": [
    "Lead Vocal (Female, Breathy, Ethereal)",
    "Backing Vocals",
    "Synth Bass",
    "Synthesizer (Pads, Arpeggios)",
    "Electronic Drum Kit"
  ],
  "description": "This track is an atmospheric and dark electro-pop piece with a strong EDM influence. It features a breathy, ethereal female lead vocal that floats over a driving synth bassline and a steady electronic drum beat. The arrangement is built upon layers of synthesizers, including pads that create a spacious and immersive soundscape, and arpeggiated synths that add rhythmic complexity. The overall mood is melancholic yet energized, evoking imagery of neon-lit cityscapes and rainy nights. The production is polished and modern, designed for a high-energy club or dance setting."
}

$0.1per run·~10 / $1

ExamplesView all

Related Models

README

Mureka AI Describe Song

Mureka AI Describe Song analyzes an uploaded audio track and generates a natural-language description of the song. It is suitable for music analysis, genre and mood understanding, metadata enrichment, catalog workflows, and other audio understanding tasks.

Why Choose This?

  • Song description workflow Generate a descriptive summary of an uploaded song or music clip.

  • Music analysis support Useful for understanding style, instrumentation, mood, arrangement, and overall sonic character.

  • Simple audio input Upload a single audio file and get a descriptive analysis without extra configuration.

  • Useful for metadata workflows Supports catalog enrichment, content tagging, discovery workflows, and professional music processing pipelines.

  • Production-ready API Easy to integrate into music tools, media workflows, and audio analysis systems.

Parameters

ParameterRequiredDescription
audioYesInput audio track to analyze and describe.

How to Use

  1. Upload your audio — provide the song or music clip you want to analyze.
  2. Submit — run the description request.
  3. Review the result — use the returned song description in your workflow.

Example Use Case

Upload a music clip to generate a descriptive summary for catalog tagging, playlist curation, or metadata enrichment.

Pricing

Just $0.10 per request.

Billing Rules

  • Each description request costs $0.10
  • Pricing is fixed per request

Best Use Cases

  • Music description — Generate natural-language summaries of songs and audio tracks.
  • Genre and mood analysis — Understand the overall feel and style of a track.
  • Metadata enrichment — Add descriptive text to music catalogs and media libraries.
  • Discovery workflows — Support search, recommendation, and playlist organization.
  • Audio analysis pipelines — Use descriptions as part of larger music-processing systems.

Pro Tips

  • Upload clear audio for better descriptive results.
  • Use the cleanest source clip available when possible.
  • Full tracks or representative excerpts usually produce more useful descriptions.
  • Avoid heavily distorted, noisy, or very low-quality uploads when accuracy matters.

Notes

  • audio is required.
  • Pricing is fixed at $0.10 per request.
  • Very noisy, low-quality, or heavily mixed audio may reduce description quality.

Related Models

Note:This website uses AI models provided by third parties.

Describe Song API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/mureka-ai/describe-song 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 Describe Song below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/mureka-ai/describe-song" \
  -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
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/mureka-ai/describe-song";
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({
        "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}),
});
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));
}
Python example
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 = {
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"
}

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/mureka-ai/describe-song", 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)

Describe Song API — Frequently asked questions

What is the Describe Song API?

Describe Song is a Mureka Ai model for AI inference, exposed as a REST API on WaveSpeedAI. Mureka AI Describe Song is a fast AI music analysis model that describes songs via the official Mureka API. Ready-to-use REST inference API for song description, music analysis, genre and mood understanding, audio metadata workflows, catalog tagging, creative music discovery, and professional music processing with simple integration, no coldstarts, and affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Describe Song API?

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/mureka-ai/mureka-ai-describe-song.

How much does Describe Song cost per run?

Describe Song starts at $0.10 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.

What inputs does Describe Song accept?

Key inputs: `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/mureka-ai/mureka-ai-describe-song.

How do I get started with the Describe Song API?

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.

Can I use Describe Song outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Mureka Ai). The license summary appears on the model card above; see WaveSpeedAI's Terms of Service for platform-level conditions.

Describe Song | AI Music Generation API on WaveSpeedAI