Music Extractor pulls the background music, the instrumental bed, out of a mixed audio file. It is the inverse of a vocal remover: instead of keeping the voice, it keeps everything behind it. You send a public audio URL in audio_url, and the job runs with the vendor's default settings. Dereverb, engine choice and output formats other than the default are not available in Jantaris yet. Typical sources are songs, vlogs and podcast recordings where speech or singing sits on top of a music track you want to keep.
Best for
- Karaoke and backing tracks from finished songs
- Recovering the music bed of a video when project files are lost
- Removing a voiceover so it can be recorded again in another language
- Practice tracks for singers
Prompting tips
- Feed it the cleanest, highest-bitrate version of the file you have.
- Trim the file to the section you need, since billing is per started minute.
- Host the file at a public http(s) URL that does not require a login.
- When you need the vocals instead, run the same file through Vocal Remover.
FAQ
How much does Music Extractor cost?
The rate is $0.50 per minute. Failed jobs are not charged, and the prepaid balance does not expire.
What is the difference between Music Extractor and Vocal Remover?
Music Extractor keeps the instrumental and removes the voice, while Vocal Remover keeps the voice. For separate vocal, drum and bass tracks, use Multistem Splitter.
Can I choose the output format?
Not yet. The engine supports several formats, but Jantaris returns the vendor's default format.
How to call Music Extractor via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_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://jantaris.com/v1"
H = {"Authorization": f"Bearer {os.environ['JANTARIS_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://jantaris.com/v1";
const headers = { Authorization: `Bearer ${process.env.JANTARIS_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));
Parameters
| Parameter | Type | Allowed | Default |
|---|---|---|---|
audio_url * | string |
The same schema is available from GET /v1/models/music-extractor.









