Separate vocals, drums, bass, and other stems from any audio file — directly inside N8N. n8n-nodes-stemsplit connects your workflows to the StemSplit API, letting you remove vocals from a song, isolate instrumentals, extract drum tracks, or split full 6-stem mixes (vocals, drums, bass, guitar, piano, other) — without any ML infrastructure.
Submit audio via URL or binary upload, wait for processing, and get presigned download URLs for each stem — all as native N8N nodes.
Accepts audio via public URL or binary file upload. Submits to the StemSplit API for processing. Returns presigned download URLs for each stem.
| Operation | When to use it |
|---|---|
| Separate Stems (Wait) | You want vocals, drums, bass, etc. back immediately in the same workflow — submits and polls until complete |
| Separate Stems | Fire-and-forget — submit many jobs in parallel and poll status later |
| Get Job | Check status or retrieve output URLs for a previously submitted job |
| List Jobs | Browse job history or filter by status (PENDING, PROCESSING, COMPLETED, FAILED) |
| Get Balance | Check remaining credits before a batch run |
Outputs presigned download URLs for: vocals · instrumental · drums · bass · piano · guitar · other
- Open Settings → Community Nodes
- Click Install a community node
- Enter
n8n-nodes-stemsplit - Click Install
npm install n8n-nodes-stemsplit- Go to stemsplit.io/app/settings/api and generate an API key (format:
sk_live_...). - In N8N, add a new StemSplit API credential and paste your key.
The node sends Authorization: Bearer <key> on every request to https://stemsplit.io/api/v1.
Submits audio for processing and returns immediately with a job ID. Use this when you want to submit many jobs in parallel and poll status later with Get Job.
Input source:
- Binary File — pass audio as a binary N8N item (from an HTTP Request, Read Binary File, or any binary-capable node)
- URL — provide a publicly accessible URL; StemSplit fetches it server-side
Parameters:
| Parameter | Default | Description |
|---|---|---|
| Output Type | VOCALS + Instrumental |
Which stems to extract (see Output Types below) |
| Quality | Best |
Processing quality: Fast, Balanced, or Best |
| Output Format | MP3 |
Output file format: MP3, WAV, or FLAC |
| File Name | (auto) | Override the job's display name |
| Metadata | {} |
Custom JSON echoed back in all job responses |
Output fields: id, status, progress, creditsRequired, estimatedSeconds, createdAt, options, input, metadata
Submits audio and polls until the job reaches COMPLETED — or throws on FAILED or timeout. Returns presigned download URLs for every stem.
Additional parameters:
| Parameter | Default | Description |
|---|---|---|
| Timeout (Seconds) | 600 |
Give up after this many seconds |
| Poll Interval (Seconds) | 5 |
How often to check job status |
Additional output fields:
vocalsUrl/vocalsExpiresAtinstrumentalUrl/instrumentalExpiresAtdrumsUrl,bassUrl,otherUrl,pianoUrl,guitarUrl(when applicable)
Note: Presigned URLs expire 1 hour after job completion. Output files are deleted 14 days after creation.
Fetch a single job by ID. Returns the same fields as Separate Stems (Wait), including all available output URLs.
Returns a paginated list of jobs. Optional status filter (PENDING, PROCESSING, COMPLETED, FAILED) and pagination via limit/offset.
Returns your current credit balance:
{
"balanceSeconds": 3600,
"balanceMinutes": 60,
"balanceFormatted": "60 minutes",
"updatedAt": "2026-05-21T00:00:00Z"
}Credit model: 1 credit = 1 second of audio. Credits are deducted at job submission. If your balance is insufficient, the node throws a 402 INSUFFICIENT_CREDITS error.
| Value | Stems produced |
|---|---|
VOCALS |
Vocals only |
INSTRUMENTAL |
Instrumental only |
BOTH |
Vocals + Instrumental |
FOUR_STEMS |
Vocals, Drums, Bass, Other |
SIX_STEMS |
Vocals, Drums, Bass, Other, Piano, Guitar (requires Best quality) |
Input: mp3, wav, flac, m4a, ogg, webm, aac, wma
Max file size: 50 MB
[HTTP Request: download audio]
→ [StemSplit: Separate Stems (Wait)]
→ [HTTP Request: download vocals URL]
→ [Write Binary File: save vocals.mp3]
[Read Binary File: song.mp3]
→ [StemSplit: Separate Stems (Wait), Output: SIX_STEMS]
→ [Split In Batches]
→ [HTTP Request: upload each stem to S3]
[Webhook trigger]
→ [StemSplit: Separate Stems] ← returns job ID instantly
→ [Set: store job ID in DB]
→ [Cron: poll every 30s via Get Job]
→ [IF: status === COMPLETED]
→ [HTTP Request: notify downstream service]
StemSplit runs state-of-the-art source separation models (HTDemucs and similar) on GPU infrastructure purpose-built for audio. If you need to separate vocals online without managing your own ML stack, StemSplit's API gives you:
- Sub-minute turnaround on most tracks (Fast/Balanced quality)
- High-fidelity six-stem output — vocals, drums, bass, piano, guitar, other
- Simple credit model — pay per second of audio processed, no subscriptions required
- No file hosting needed — pass a URL and StemSplit fetches it server-side
Full API docs: stemsplit.io/docs/api
OpenAPI spec: GET https://stemsplit.io/api/v1/openapi
- N8N v0.200 or later
- A StemSplit account with an API key — sign up at stemsplit.io
- Sufficient credit balance for your audio files (check with Get Balance)
MIT © StemSplit