Multistem Splitter separates one source audio file into several stems in a single task. The engine supports up to 6 stems (vocals, drums, piano, bass, electric and acoustic guitar), but Jantaris does not let you choose the stem list yet, so jobs use the vendor's default set: vocals, drums and bass. Extraction levels, engine choice and dereverb are not exposed either. The source is passed as a public audio URL, and the vendor bills each minute of audio once per returned stem. It saves running several single-purpose separations when you want a full arrangement pulled apart, for example to remix, transcribe or practice a song.
Best for
- Remixing and re-arranging finished songs
- Practice tracks with one instrument muted
- Transcribing a bass line or a drum pattern
- Sampling individual parts for production
Prompting tips
- Trim the song to the section you need, since every minute is billed once per stem.
- Check each stem: dense arrangements can bleed between tracks.
- Start from a lossless or high-bitrate source for cleaner stems.
- If you only need vocals or only the instrumental, Vocal Remover and Music Extractor are single-purpose alternatives.
FAQ
How much does Multistem Splitter cost?
The rate is $1.50 per minute of audio for all three returned stems together (each stem is billed separately upstream, so this is already the total). Failed jobs are not charged.
Which stems can Multistem Splitter extract?
On Jantaris: vocals, drums and bass. The engine can also extract piano and guitars, but choosing stems is not available in Jantaris yet.
Can I use stems from commercial songs?
The tool processes any audio you supply, but publishing stems or remixes requires rights to the original recording.
How to call Multistem Splitter via API
curl https://jantaris.com/v1/generate?wait=60 \
-H "Authorization: Bearer $JANTARIS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "multistem-splitter",
"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": "multistem-splitter",
"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": "multistem-splitter",
"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/multistem-splitter.









