Skip to main content

DJ Stem Separation Workflow

~20 min

Create acapellas, instrumentals, and isolated stems for your sets

What You Can Create

Expand your DJ library with custom stems. Works with Serato, Rekordbox, Traktor, Virtual DJ, and any software that plays audio files.

Acapellas
Isolated vocals
Instrumentals
No vocals
Drums Only
For layering
Bass Isolated
Low end control

๐ŸŽค Mashup Creation

Extract acapellas to layer over different instrumentals. Create unique mashups that only you have.

๐Ÿฅ Drum Breaks

Isolate drums from any track. Layer them over other songs for extra energy.

๐ŸŽน Extended Mixes

Use instrumentals to create longer intro/outro sections for smoother mixing.

๐Ÿ”€ Live Remixes

Have stems ready to remix tracks live. Drop the bass, loop the drums, etc.

What You Need

  • StemSplit account with credits (see pricing)
  • High quality source files (320kbps MP3 or lossless)
  • Your DJ software (Serato, Rekordbox, Traktor, etc.)

NEW: DJ Mode

Recommended

Get everything you need in one click: BPM, Key, Camelot code, beat grid, and Rekordbox XML export.

BPM
Precise tempo
Key + Camelot
For harmonic mixing
Rekordbox
1-click XML export
Try DJ Mode
1

Option A: DJ Mode (Recommended)

The fastest way to get DJ-ready stems with analysis:

  1. Go to DJ Mode
  2. Paste any YouTube URL
  3. Get stems + BPM + Key + Camelot + beat grid automatically
  4. Click "Export to Rekordbox" to download XML
  5. Import XML into Rekordbox - track is ready with correct BPM and key!

Best for: DJs who want tracks pre-analyzed and ready for Rekordbox/CDJs

2

Option B: Standard Web Interface

For more control over stem types:

  1. Go to stemsplit.io
  2. Upload your track or paste a YouTube URL
  3. Select what you want (vocals, instrumental, all stems)
  4. Download and add to your DJ library

Best for: Processing a few tracks at a time, or when you need 4-stem/6-stem separation

3

Option C: Batch Process with API

For processing many tracks at once, use the API with this Python script:

dj_batch_process.py
import requests
import os
import time
from pathlib import Path

API_KEY = "sk_live_your_api_key"
INPUT_DIR = "./tracks"          # Your source tracks
OUTPUT_DIR = "./stems"          # Where stems will be saved
BASE_URL = "https://stemsplit.io/api/v1"

# What to extract (choose one)
# OPTIONS: "VOCALS", "INSTRUMENTAL", "ALL_STEMS"
OUTPUT_TYPE = "ALL_STEMS"

def upload_and_process(file_path):
    """Upload a track and get stems"""
    filename = os.path.basename(file_path)
    print(f"\n๐ŸŽต Processing: {filename}")
    
    # Step 1: Get presigned upload URL
    upload_response = requests.post(
        f"{BASE_URL}/upload",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={
            "filename": filename,
            "contentType": "audio/mpeg"
        }
    )
    upload_data = upload_response.json()
    
    # Step 2: Upload the file
    with open(file_path, "rb") as f:
        requests.put(upload_data["uploadUrl"], data=f)
    
    # Step 3: Create job
    job_response = requests.post(
        f"{BASE_URL}/jobs",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={
            "uploadKey": upload_data["key"],
            "outputType": OUTPUT_TYPE,
            "quality": "BEST",
            "outputFormat": "MP3"
        }
    )
    job = job_response.json()
    job_id = job["id"]
    
    # Step 4: Wait for completion
    while True:
        status = requests.get(
            f"{BASE_URL}/jobs/{job_id}",
            headers={"Authorization": f"Bearer {API_KEY}"}
        ).json()
        
        if status["status"] == "COMPLETED":
            break
        elif status["status"] == "FAILED":
            print(f"  โŒ Failed: {status.get('error', 'Unknown error')}")
            return
        
        print(f"  โณ Status: {status['status']}...")
        time.sleep(10)
    
    # Step 5: Download stems
    track_name = Path(filename).stem
    track_dir = os.path.join(OUTPUT_DIR, track_name)
    os.makedirs(track_dir, exist_ok=True)
    
    for stem_name, stem_data in status["outputs"].items():
        output_path = os.path.join(track_dir, f"{stem_name}.mp3")
        audio = requests.get(stem_data["url"]).content
        with open(output_path, "wb") as f:
            f.write(audio)
        print(f"  โœ“ Saved: {stem_name}.mp3")
    
    print(f"  โœ… Complete! Stems saved to: {track_dir}")

# Process all tracks in input directory
def main():
    os.makedirs(OUTPUT_DIR, exist_ok=True)
    
    audio_extensions = {".mp3", ".wav", ".flac", ".m4a", ".aac"}
    tracks = [f for f in os.listdir(INPUT_DIR) 
              if Path(f).suffix.lower() in audio_extensions]
    
    print(f"Found {len(tracks)} tracks to process")
    
    for track in tracks:
        upload_and_process(os.path.join(INPUT_DIR, track))
        time.sleep(2)  # Small delay between tracks
    
    print(f"\n๐ŸŽ‰ All done! Check {OUTPUT_DIR} for your stems")

if __name__ == "__main__":
    main()
Usage:
  1. Put your tracks in ./tracks/
  2. Run: python dj_batch_process.py
  3. Stems appear in ./stems/TrackName/
4

Organize Your Stems

Good organization is key for finding stems quickly during sets:

๐Ÿ“ DJ Music/
๐Ÿ“ Stems/
๐Ÿ“ Daft Punk - Around The World/
โ™ช vocals.mp3
โ™ช instrumental.mp3
โ™ช drums.mp3
โ™ช bass.mp3
โ™ช other.mp3
๐Ÿ“ Justice - D.A.N.C.E/
โ™ช vocals.mp3
...

Naming Convention for Quick Access

Consider prefixing stems with the type for easy searching:

  • [ACA] Artist - Song.mp3 - Acapella
  • [INST] Artist - Song.mp3 - Instrumental
  • [DRUMS] Artist - Song.mp3 - Drums only
5

Import to Your DJ Software

Serato DJ

  1. Drag your stems folder into Serato's library
  2. Analyze the files (they'll get BPM/key detected)
  3. Add to crates like "Acapellas" or "Drums"
  4. Set cue points on the drops!

RekordboxDJ Mode Ready!

With DJ Mode (recommended):

  1. Use DJ Mode to process your track
  2. Click "Export to Rekordbox" to download XML
  3. In Rekordbox: File โ†’ Import โ†’ rekordbox xml
  4. Track appears with correct BPM, key, and beat grid!

Manual import:

  1. File โ†’ Import โ†’ Folder
  2. Let Rekordbox analyze for BPM and key
  3. Create playlists: "Stems - Vocals", "Stems - Drums"
  4. Export to USB for CDJ use

Traktor

  1. Drag folder to Collection
  2. Right-click โ†’ Analyze (Async)
  3. Use the Browser to create playlists
  4. Perfect for Remix Decks!

Virtual DJ

  1. Add folder to Virtual Folders
  2. VDJ will auto-analyze everything
  3. Use the Stems panel to mix components live
  4. Works great with the built-in stem feature

Pro DJ Tips

  • โ€ข Match keys: Acapellas work best when keys match (use Mixed In Key or your DJ software)
  • โ€ข Use BEST quality: Higher quality = cleaner stems, especially for acapellas
  • โ€ข Process classics: Old tracks often don't have official acapellas available
  • โ€ข Layer drums: Add isolated drums from a hard-hitting track over softer songs
  • โ€ข Create edits: Use instrumentals for extended intros/outros
  • โ€ข Backup originals: Always keep your original high-quality files

๐Ÿ’ฐ Credit Usage

Plan your batch processing:

Track LengthCredits UsedExample
3 min song180 creditsPop single
5 min song300 creditsClub track
7 min extended mix420 creditsDJ edit
60 min DJ set3,600 creditsFull set stems