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 workflow 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 60,000+ music makers

Results people rely on

Neural Analog makes me feel like a monkey with an AK-47, in the best way possible

AristA

Acapella extraction

Love it! Makes everything crisp!
TG

The Grim Tower

Sensacional
F

Francisco

Highend services!
TS

Tommi, Studionet

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"

Vocals (acapella), Instrumental (karaoke version)

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. Presets without model variants ignore this field.

Allowed values

  • deuxDeux modelRecommendedSingle Deux vocal/instrumental separator.
  • leapLeap XeRuns separate Leap Xe vocal and instrumental BS-Roformer models.

4 stems

preset="4_tracks"

Bass, Drums, Vocals, Others

6 stems

preset="6_tracks"

Bass, Drums, Vocals, Guitar, Piano, Others

53 stems (MVSEP Mega)

preset="mvsep_mega_53"

Ultra-granular instrument model. Select the instruments present in your song. For higher quality results, use instrument-specialized models.

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"

Name the instrument or sound to be isolated.

Parameters
promptSound to isolatestring | null

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

Example

"lead vocal"
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 SAM Audio processes stereo material. 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; 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"

Remove background noise and keep only speech and talking

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 SAM Audio processes stereo material. 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; 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}]

Denoise

preset="denoise"

Remove background noise from music or vocal tracks

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. Presets without model variants ignore this field.

Allowed values

  • denoiseDenoise modelRecommendedRemoves background noise.
  • denoise_debleedDenoise and Debleed modelRemoves background noise and source bleed.

Fast Decrowd

preset="decrowd"

Quickly remove crowd noise from live recordings

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. Presets without model variants ignore this field.

Allowed values

  • decrowdMelband RoformerRecommendedMost recent crowd-noise separator. Runs this only on Vocals stems to get more precise results.
  • decrowd_mdxMDX NetOlder crowd-noise separator.

Heavy Decrowd

preset="custom_music_singing"

Use SAM Audio Large to keep music and vocals while removing crowd, noise, talking, and 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 SAM Audio processes stereo material. 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; 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 SAM Audio processes stereo material. 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; 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 voice and remove instruments and ambience

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 SAM Audio processes stereo material. 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; 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"

Lead vocals, backing vocals

Duet Singers

preset="duet"

Singer 1, Singer 2

Main Singer

preset="custom_main_solo_singer"

Keep the main vocals and isolate backing vocals and others

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 SAM Audio processes stereo material. 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; 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"

No drums, Drums. Special model to separate drums from instrumental. Preserve high fullness in drums and instrumental.

5 drums tracks

preset="5_drums_tracks"

Split drums into Kick, Snare, Toms, Hi-hats, Cymbals

Isolate Any Percussion

preset="custom_remove_drums"

Remove cinematic percussions, shakers, cymbals...

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 SAM Audio processes stereo material. 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; 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}]

Dereverb

preset="dereverb"

Remove reverberation, delay, and echo

Keep Only Center Mono

preset="phantom_center"

Extracts the "phantom center", the content that should be mono in a track. Use this for: bass, kick drums, podcast voice. Removes phaser, chorus, or flanger from instrument stems. Good for mixing.

5.1 Upmix

preset="5_1_upmix"

Generate: LR (Front stereo), S (Sides stereo), LFE (Sub frequencies), C (Center front channel)

Guitar

preset="guitar"

Guitar, Other

Modern Bowed Strings

preset="modern_bowed_strings"

Strings, Other

Synth Lead

preset="synth_lead"

Synth lead, Other

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""denoise""denoise_debleed""dereverb""decrowd""decrowd_mdx""phantom_center""5_1_upmix"
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. Presets without model variants ignore this field.

"deux""leap""denoise""denoise_debleed""decrowd""decrowd_mdx"
bit_depth
optionalinteger

Output WAV bit depth for generated stems.

1624

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 SAM Audio processes stereo material. 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; 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