Music Extractor does the opposite of a vocal remover: it throws the voice away and hands you the music that was playing under it. That is handy when the only copy you have is the final mix, whether it is a song, a vlog with a soundtrack, or a podcast with a theme under the talking.
What you can make
- A karaoke or backing track from a finished song.
- The background music of an old video when the original project files are gone.
- A clean music bed for a re-dub, so the narration can be recorded again in another language.
- Practice tracks for singers who want to sing over the original arrangement.
Settings that matter
- Input: a public http(s) link in
audio_url. The file must open without a login. - Defaults only: dereverb, engine choice and output formats beyond the standard one are not available in Kadraris yet, so every job runs with the stock settings.
- Billing basis: per started minute of the source, so trim the file to the part you need.
- Source quality: the higher the bitrate you start from, the fewer artifacts in the result.
- Opposite job: if you want the voice and not the music, send the same file to Vocal Remover.
Example job
input: audio_url = https://example.com/vlog-intro.mp3
result: instrumental track without the voiceBefore sending a long recording, cut it to the minute or two you will actually reuse.
Questions
How much does Music Extractor charge?
$0.50 per minute. If processing fails you pay nothing, and your prepaid balance stays on the account with no expiry date.
Which tool do I need: Music Extractor, Vocal Remover or Multistem Splitter?
Music Extractor returns the instrumental. Vocal Remover returns the voice. Multistem Splitter returns separate vocal, drum and bass files. The comparison page shows them side by side.
Will the result be perfectly clean?
Usually close, but busy mixes can leave traces of the voice in loud passages. Listen to the whole result before using it in a project.
Music Extractor in your code
curl https://kadraris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $KADRARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "music-extractor",
"input": {
"audio_url": "https://example.com/input.mp3"
}
}'import os, time, requests
API = "https://kadraris.com/v1"
H = {"Authorization": f"Bearer {os.environ['KADRARIS_API_KEY']}"}
task = requests.post(f"{API}/generate", headers=H, json={
"model": "music-extractor",
"input": {
"audio_url": "https://example.com/input.mp3"
}
}).json()
while task["status"] in ("queued", "running"):
time.sleep(3)
task = requests.get(f"{API}/tasks/{task['id']}", headers=H).json()
print(task["status"], task["cost"], [o["url"] for o in task["output"]])const API = "https://kadraris.com/v1";
const headers = { Authorization: `Bearer ${process.env.KADRARIS_API_KEY}`, "Content-Type": "application/json" };
let task = await (await fetch(`${API}/generate`, {
method: "POST",
headers,
body: JSON.stringify({
"model": "music-extractor",
"input": {
"audio_url": "https://example.com/input.mp3"
}
}),
})).json();
while (task.status === "queued" || task.status === "running") {
await new Promise((r) => setTimeout(r, 3000));
task = await (await fetch(`${API}/tasks/${task.id}`, { headers })).json();
}
console.log(task.status, task.cost, task.output.map((o) => o.url));
Input fields
| Parameter | Type | Allowed | Default |
|---|---|---|---|
audio_url * | string |
Fetch this list as JSON with GET /v1/models/music-extractor.























