DJ Stem Separation Workflow
~20 minCreate 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.
๐ค 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
RecommendedGet everything you need in one click: BPM, Key, Camelot code, beat grid, and Rekordbox XML export.
Option A: DJ Mode (Recommended)
The fastest way to get DJ-ready stems with analysis:
- Go to DJ Mode
- Paste any YouTube URL
- Get stems + BPM + Key + Camelot + beat grid automatically
- Click "Export to Rekordbox" to download XML
- 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
Option B: Standard Web Interface
For more control over stem types:
- Go to stemsplit.io
- Upload your track or paste a YouTube URL
- Select what you want (vocals, instrumental, all stems)
- 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
Option C: Batch Process with API
For processing many tracks at once, use the API with this Python script:
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()- Put your tracks in
./tracks/ - Run:
python dj_batch_process.py - Stems appear in
./stems/TrackName/
Organize Your Stems
Good organization is key for finding stems quickly during sets:
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
Import to Your DJ Software
Serato DJ
- Drag your stems folder into Serato's library
- Analyze the files (they'll get BPM/key detected)
- Add to crates like "Acapellas" or "Drums"
- Set cue points on the drops!
RekordboxDJ Mode Ready!
With DJ Mode (recommended):
- Use DJ Mode to process your track
- Click "Export to Rekordbox" to download XML
- In Rekordbox: File โ Import โ rekordbox xml
- Track appears with correct BPM, key, and beat grid!
Manual import:
- File โ Import โ Folder
- Let Rekordbox analyze for BPM and key
- Create playlists: "Stems - Vocals", "Stems - Drums"
- Export to USB for CDJ use
Traktor
- Drag folder to Collection
- Right-click โ Analyze (Async)
- Use the Browser to create playlists
- Perfect for Remix Decks!
Virtual DJ
- Add folder to Virtual Folders
- VDJ will auto-analyze everything
- Use the Stems panel to mix components live
- 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 Length | Credits Used | Example |
|---|---|---|
| 3 min song | 180 credits | Pop single |
| 5 min song | 300 credits | Club track |
| 7 min extended mix | 420 credits | DJ edit |
| 60 min DJ set | 3,600 credits | Full set stems |