Browse API endpoints
post/create-stems

Split a song into vocals, drums, bass, and other stems

Send a song and choose the stems you need. Use a preset for vocals, drums, bass, guitar, and other common parts, or describe a custom sound. Your app or agent gets separate WAV files.

How this endpoint works

Use this API to build a vocal remover, remix tool, backing-track maker, practice app, sampling workflow, or sound-removal feature. Choose a fixed 2-, 4-, 6-, or 53-stem preset for reusable output names. Use SAM Audio when the user needs to describe a less common instrument, noise, or sound.

  1. 1

    Choose the stems

    Select a preset or describe the instrument, voice, noise, or sound you want to isolate.

  2. 2

    Wait for stem separation

    Send the audio ID, save creation_id, and poll the stem-splitting job until it finishes.

  3. 3

    Download separate WAV files

    Download each stem separately or package the selected stems into one ZIP archive.

Common use cases

Choose this operation when it matches the source and result your pipeline needs.

Build a vocal remover

Return vocal and instrumental WAV files for karaoke, remixing, practice, or sampling.

Create remix and production stems

Give users separate drums, bass, vocals, guitar, and instrument tracks inside your software.

Remove an unwanted sound

Isolate crowd noise, reverb, drums, effects, or another described sound from a recording.

Processing used by 80,000+ music makers

Results people rely on

“It can bring back clarity without making everything sound too artificial or overprocessed. Stem separation is also surprisingly clean.”
R

R.

Audio restoration and stem separation

“Does amazing job in restoring Audio from bad quality MP3s and badly extracted audio from CDs. Always my go to for audio restoration.”
N

N.

MP3 and CD audio restoration

“Amazing tool for audio. Clean, simple, and effective. I would spend hours in RX to get the same results. Give it a try. I can save you hours of production time.”

Dan Campbell ~Riffster

“Easy to use and high quality results.”
B

Bjark

Hear stem separation results

These shared user results demonstrate stem outputs available through the same processing system.

Choose the stems you want

2 tracks

preset="2_tracks"

Separate the singing from the instrumental. Get a cappella vocals or a karaoke version for your remixes.

Parameters
model_nameModel variantstring | null

Selects the model variant used by a compatible stem preset. For 2_tracks, use deux or leap. For denoise, use denoise or denoise_debleed. For decrowd, use decrowd or decrowd_mdx. For 5_1_upmix, use 5_1_upmix, 5_0_upmix_202609, or 5_0_upmix_202610. Presets without model variants ignore this field.

Allowed values

  • deuxDeux modelRecommended
  • leapLeap Xe

4 stems

preset="4_tracks"

Split the song into four tracks: bass, drums, vocals, and everything else.

6 stems

preset="6_tracks"

Split the song into six tracks: bass, drums, vocals, guitar, piano, and everything else.

53 stems

preset="mvsep_mega_53"

This model distinguishes up to 53 instrument tracks. Select the instruments present in your song. For the best quality, choose a specialized model when the instrument is available in the list.

Parameters
selected_stemsInstrument stems to keepArray<string> | null

Names the instrument outputs to keep from the 53-stem model. Supported when preset is mvsep_mega_53; other presets ignore this field. The residual 'other' stem is always generated from the original audio minus the selected outputs.

Allowed values

  • bassBass
  • bass_double-bassDouble Bass
  • drumsDrums
  • drums_congasCongas
  • drums_hhHi-Hats
  • drums_kickKick
  • drums_percussionPercussion
  • drums_snareSnare
  • drums_tambourineTambourine
  • drums_timpaniTimpani
  • drums_tomsToms
  • drums_triangleTriangle
  • guitarGuitar
  • guitar_acoustic-guitarAcoustic Guitar
  • guitar_dobroDobro
  • guitar_electric-guitarElectric Guitar
  • guitar_banjoBanjo
  • guitar_mandolinMandolin
  • guitar_sitarSitar
  • guitar_ukuleleUkulele
  • other_accordionAccordion
  • other_bellsBells
  • other_glockenspielGlockenspiel
  • other_marimbaMarimba
  • other_wind-chimesWind Chimes
  • pianoPiano
  • piano_digital-pianoDigital Piano
  • piano_harpsichordHarpsichord
  • piano_keysKeys
  • piano_organOrgan
  • piano_synthSynth
  • stringsStrings
  • strings_bowed_stringsBowed Strings
  • strings_celloCello
  • strings_harpHarp
  • strings_violaViola
  • strings_violinViolin
  • vocalsVocals
  • vocals_back-vocalBacking Vocal
  • vocals_lead-vocalLead Vocal
  • winds_bassoonBassoon
  • winds_brassBrass
  • winds_clarinetClarinet
  • winds_fluteFlute
  • winds_french-hornFrench Horn
  • winds_harmonicaHarmonica
  • winds_oboeOboe
  • winds_saxophoneSaxophone
  • winds_tromboneTrombone
  • winds_trumpetTrumpet
  • winds_tubaTuba
  • winds_windWind
  • winds_woodwindWoodwind
  • otherOther

Custom Prompt

preset="custom"

Describe the instrument or sound you want to isolate in the prompt.

Parameters
promptSound to isolatestring | null

Describe the instrument, voice, noise, or sound to isolate.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Speech Only

preset="custom_speech"

Keep the speech and remove background noise. For cleaning up recordings where the voice is the only sound you care about.

Parameters
promptSound promptstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Noise Reduction

preset="denoise"

Keep your music or voice and remove background noise. Choose the variant based on what you want to keep.

Parameters
promptSound to keepstring | null

Describe the sound to keep in the cleaned track.

Example

"lead vocal"
stereo_modeStereo modestring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mid_sidesStereo (Mid/Sides)DefaultRecommendedProcess Mid ((L + R) / 2) and Sides ((L - R) / 2) independently, then recombine them as stereo.
  • sides_onlySides onlyProcess the sides and keep the original center.
  • mid_onlyMid onlyProcess the center and keep the original sides.
  • left_rightStereo (L/R)Process the Left and Right channels independently.
  • monoMonoAverage Left and Right into one mono channel, then process it once.
spansSound hintsArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]
model_nameModel variantstring | null

Selects the model variant used by a compatible stem preset. For 2_tracks, use deux or leap. For denoise, use denoise or denoise_debleed. For decrowd, use decrowd or decrowd_mdx. For 5_1_upmix, use 5_1_upmix, 5_0_upmix_202609, or 5_0_upmix_202610. Presets without model variants ignore this field.

Allowed values

  • denoiseDenoiseRecommended
  • denoise_debleedDenoise and Debleed
  • custom_speechSpeech only
  • custom_music_singingMusic with singing
  • custom_musicMusic Only (no vocals)
  • custom_singingSinging only (no instruments)

Crowd Noise Reduction

preset="decrowd"

Quickly remove audience noise from your live recordings.

Parameters
promptSound to keepstring | null

Describe the sound to keep in the cleaned track.

Example

"lead vocal"
stereo_modeStereo modestring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mid_sidesStereo (Mid/Sides)DefaultRecommendedProcess Mid ((L + R) / 2) and Sides ((L - R) / 2) independently, then recombine them as stereo.
  • sides_onlySides onlyProcess the sides and keep the original center.
  • mid_onlyMid onlyProcess the center and keep the original sides.
  • left_rightStereo (L/R)Process the Left and Right channels independently.
  • monoMonoAverage Left and Right into one mono channel, then process it once.
spansSound hintsArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]
model_nameModel variantstring | null

Selects the model variant used by a compatible stem preset. For 2_tracks, use deux or leap. For denoise, use denoise or denoise_debleed. For decrowd, use decrowd or decrowd_mdx. For 5_1_upmix, use 5_1_upmix, 5_0_upmix_202609, or 5_0_upmix_202610. Presets without model variants ignore this field.

Allowed values

  • decrowdRoformerRecommended
  • decrowd_mdxMDX Net
  • custom_music_singingSAM Audio

Enhanced Crowd Noise Reduction

preset="custom_music_singing"

SAM Audio Large keeps music and singing, and removes conversations, crowd noise, and other audience sounds.

Parameters
promptSound promptstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Music Only (No Vocals)

preset="custom_music"

Keep the instruments and remove singing, speech, and background noise.

Parameters
promptSound promptstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Singing Only

preset="custom_singing"

Keep the singing and remove instruments and ambient noise. Get isolated vocals to remix or process separately.

Parameters
promptSound promptstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Lead / Backing Vocals

preset="lead_back"

Separate the lead vocal from the backing vocals. Rework the lead singer without affecting the background voices.

Duet Singers

preset="duet"

Separate the two singers into two tracks. Rework each voice separately.

Main Singer

preset="custom_main_solo_singer"

Keep only the lead singer's voice. Backing vocals and other sounds are isolated separately.

Parameters
promptSound promptstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Isolate Drums

preset="2_tracks_drums"

A specialized model for separating drums from the rest of the song. You get two tracks: the drums and a version without drums. The model preserves detail in both.

5 drums tracks

preset="5_drums_tracks"

Split the drums into five tracks: kick, snare, toms, hi-hat, and cymbals.

Isolate Any Percussion

preset="custom_remove_drums"

Remove all percussion, including shakers, cymbals, and cinematic percussion.

Parameters
promptSound promptstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example

"lead vocal"
stereo_modeStereo handlingstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

Allowed values

  • mono
  • mid_sidesDefault
  • left_right
  • sides_only
  • mid_only
spansPrompt hint rangesArray<{ start: number; end: number }> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example

[{"end":42,"start":12.5}]

Remove Reverb

preset="dereverb"

Remove reverberation, delay, and echo from a track.

Keep Only Center Mono

preset="phantom_center"

This model keeps the mono center of a track and removes the content spread across the sides. Handy for isolating a bass, kick drum, or podcast voice. You can also use it to remove phaser, chorus, or flanger from an instrument.

Multichannel upmix

preset="5_1_upmix"

This model distributes the sound into a front stereo pair, a side stereo pair, and a center channel. The 5.1 version also adds a channel for sub-bass.

Parameters
model_nameModel variantstring | null

Selects the model variant used by a compatible stem preset. For 2_tracks, use deux or leap. For denoise, use denoise or denoise_debleed. For decrowd, use decrowd or decrowd_mdx. For 5_1_upmix, use 5_1_upmix, 5_0_upmix_202609, or 5_0_upmix_202610. Presets without model variants ignore this field.

Allowed values

  • 5_1_upmix5.1 upmixRecommendedThe first upmix model, for film soundtracks.
  • 5_0_upmix_2026095.0 upmix JasperA newer upmix model for film soundtracks. Offers better quality than the first version.
  • 5_0_upmix_2026105.0 upmix GillianThis upmix model was trained only on music. Choose it for your songs.

Speech / Music / SFX

preset="speech_music_sfx"

Split a TV show, film, or video soundtrack into three tracks: speech, music, and sound effects. Remove the music from a video or keep only the dialogue.

Guitar

preset="guitar"

Isolate the guitar in one track. The rest of the song is kept in another.

Modern Bowed Strings

preset="modern_bowed_strings"

Isolate the bowed strings in one track and keep the rest of the song separate.

Synth Lead

preset="synth_lead"

Isolate the synth lead and keep the rest of the song in another track.

Code examples

Server-side example

JavaScript (Node.js)
import { writeFile } from "node:fs/promises";

const API_URL = "https://api.neuralanalog.com";
const API_KEY = process.env.NEURALANALOG_API_KEY;

async function waitForCompletion(objectType, objectId) {
  while (true) {
    const response = await fetch(`${API_URL}/status/${objectType}/${objectId}`, {
      headers: { "X-API-Key": API_KEY },
    });
    if (!response.ok) {
      throw new Error(`Status check failed with ${response.status}`);
    }

    const status = await response.json();
    if (status.is_failed) {
      throw new Error(status.error_message || `${objectType} processing failed`);
    }
    if (status.is_complete) {
      return status;
    }
    await new Promise((resolve) => setTimeout(resolve, 5000));
  }
}

const requestResponse = await fetch(`${API_URL}/create-stems`, {
  method: "POST",
  headers: {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
  "audio_id": "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a",
  "preset": "4_tracks",
  "bit_depth": 24
}),
});
if (!requestResponse.ok) {
  throw new Error(`Stem separation request failed with ${requestResponse.status}`);
}

const result = await requestResponse.json();
const jobId = result["creation_id"];
const status = await waitForCompletion("stem_split", jobId);

for (const artifact of result["audio_stems"]) {
  const artifactId = artifact["stem_id"];
  const response = await fetch(
    `${API_URL}/download/stem/${artifactId}`,
    { headers: { "X-API-Key": API_KEY }, redirect: "follow" },
  );
  if (!response.ok) {
    throw new Error(`Download failed with ${response.status}`);
  }
  await writeFile(`${artifactId}.wav`, Buffer.from(await response.arrayBuffer()));
}

Parameters

Send the API key from a trusted server. Never expose it in client-side JavaScript.

JSON request body

preset
requiredstring

Selects which stems or cleanup result the separation job returns. Some presets support an additional model_name variant; incompatible variants are rejected.

"acapella""instrumental""2_tracks""2_tracks_leap""4_tracks""6_tracks""5_drums_tracks""2_tracks_drums""custom""lead_back""duet""modern_bowed_strings""guitar""synth_lead""mvsep_mega_53""speech_music_sfx""denoise""denoise_debleed""dereverb""decrowd""decrowd_mdx""phantom_center""5_1_upmix""5_0_upmix_202609""5_0_upmix_202610"
source_transcription_id
optionalstring | null

Transcription rendered into temporary_mix_key; retained as source lineage.

source_effects_applied
optionalboolean | null

Whether the rendered source includes FX; false preserves live FX when selecting the output.

audio_id
optionalstring | null

Source audio asset to split. Provide either audio_id or stem_id.

Example: "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a"

stem_id
optionalstring | null

Existing stem to split further. When provided with audio_id, stem_id takes priority.

Example: "abf8a992-1c4e-4935-93f0-197116e77e49"

model_name
optionalstring | null

Selects the model variant used by a compatible stem preset. For 2_tracks, use deux or leap. For denoise, use denoise or denoise_debleed. For decrowd, use decrowd or decrowd_mdx. For 5_1_upmix, use 5_1_upmix, 5_0_upmix_202609, or 5_0_upmix_202610. Presets without model variants ignore this field.

"deux""leap""denoise""denoise_debleed""decrowd""decrowd_mdx""sam_audio""5_1_upmix""5_0_upmix_202609""5_0_upmix_202610"
bit_depth
optionalinteger

Output WAV bit depth for generated stems; 32 is float.

162432

Default: 24

hq_streaming_format
optionalstring

Selects the compressed format generated for browser playback and streaming alongside the WAV stem output.

"aac""mp3""flac"

Default: "aac"

prompt
optionalstring | null

Describes the sound SAM Audio should isolate, for example 'lead vocal' or 'snare and kick'. Supported when preset is custom; other stem presets ignore this field. Long prompts are trimmed before validation.

Example: "lead vocal"

stereo_mode
optionalstring

Controls how stereo material is processed. mono is fastest, sides_only/mid_only process one component while preserving the other, mid_sides preserves center/side detail, and left_right processes channels separately. Supported when preset is custom (default mid_sides) or speech_music_sfx (default left_right); other stem presets ignore this field.

"mono""mid_sides""left_right""sides_only""mid_only"

Default: "mid_sides"

spans
optionalarray<object> | null

Provides optional start and end times where SAM Audio should focus on the prompted sound. Supported when preset is custom; other stem presets ignore this field. Omit it to split without time hints.

Example: [{"end":42,"start":12.5}]

selection
optionalobject | null

Optional source region to process. When provided, the backend trims the source to this region before running separation.

Example: {"end":42,"start":12.5}

upscaled_id
optionalstring | null

Restored version to use as the stem separation source.

Example: "d66cf940-bf26-45bb-80f7-332f26b6859a"

mastered_id
optionalstring | null

Mastered version to use as the stem separation source.

Example: "f5db8e4b-2e74-4198-a8de-0c3a398620e9"

temporary_mix_key
optionalstring | null

Short-lived Current Main Mix or Current All Stems Mix R2 source key.

restoration_params
optionalobject | null

Queues restoration for generated stems as part of the same workflow. The nested restoration preset determines which nested parameters are used. Ordinary stem splitting ignores this field.

Example: {"preset":"universal_enhancer","strength":0.8}

stem_processing
optionalobject | null

Queues one operation for every generated, non-silent stem. Supports restoration, mastering, and audio-to-MIDI transcription. Omit it to return the separated stems without additional processing. restoration_params remains supported as a legacy restoration-only alias.

selected_stems
optionalarray<string> | null

Names the instrument outputs to keep from the 53-stem model. Supported when preset is mvsep_mega_53; other presets ignore this field. The residual 'other' stem is always generated from the original audio minus the selected outputs.

Example: ["drums","vocals","bass","piano","strings","piano_synth","guitar","other"]

Successful response

200Successful Response
status
requiredstring

Status after the stem job is queued.

Example: "processing"

message
requiredstring

Human-readable queueing result.

Example: "Stem separation queued"

audio_id
requiredstring

Source audio asset ID.

Example: "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a"

user_id
requiredstring

User that owns the job.

Example: "2fe9c052-e34f-43b7-9ad5-5186d31cb7ec"

creation_id
requiredstring

Stem split job ID.

Example: "18d67d83-c9f6-4d7f-bb72-09e40c62671e"

audio_stems
optionalarray<object>

No description provided.

upscaled_audios
optionalarray<object>

No description provided.

mastered_audios
optionalarray<object>

No description provided.

transcriptions
optionalarray<object>

No description provided.

Errors

A missing or invalid X-API-Key returns an authentication error. Validation errors use the declared 422 response below.
422Validation Error
detail
optionalarray<object>

No description provided.

Next steps