# Vocal Remover & Stem Splitter (AI, Demucs) (`jumblemog/vocal-remover`) Actor

Remove vocals from songs or extract them with Meta's Demucs AI. Get a clean instrumental (karaoke) track and an a cappella vocal track, or split music into vocals, drums, bass and other instruments. MP3, WAV, FLAC or M4A out, from audio or video files.

- **URL**: https://apify.com/jumblemog/vocal-remover.md
- **Developed by:** [Jumble Mog](https://apify.com/jumblemog) (community)
- **Categories:** AI, For creators, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Vocal Remover & Stem Splitter (AI, Demucs)

**Remove the vocals from any song, or pull them out**, with [Demucs](https://github.com/facebookresearch/demucs), the open-source music separation AI from Meta AI Research. Give it an MP3, WAV, FLAC, M4A or a music video, and get back a clean **instrumental (karaoke) track** and an **a cappella vocal track**, or split the song into **vocals, drums, bass and other instruments**. Every track comes back as a download link, in MP3, WAV, FLAC or M4A. No GPU, no software to install, and you pay only for the minutes you separate.

![Spectrograms of a song, the vocals separated from it, and the instrumental without vocals](https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-spectrogram.jpg?signature=1nhWnMaUyFVQKUuk5pPZ0)

Listen: [the original recording (20 s)](https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-original.mp3?signature=F4TBgje9jkImaWD4UKAL), [the vocals it found](https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-vocals.mp3?signature=pxGnYKoLbsmq0mjxdWY0) and [the instrumental without vocals](https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-instrumental.mp3?signature=KAJFH2K92IoEBVuMchVP). *Sample: "America the Beautiful" by the United States Navy Band and Sea Chanters (public domain, U.S. government work).*

### What it does

- **Vocal remover**: an instrumental version of any song, for karaoke, covers, practice or background music.
- **Vocal extractor**: the isolated vocals (a cappella), for remixes, mashups, samples and lyric transcription.
- **4-stem splitter**: vocals, drums, bass and "other" (guitars, keys, synths, strings) as separate tracks, for remixing, DJ edits, practice and production.
- **Meta's latest Demucs model**: Hybrid Transformer Demucs (v4), one of the best open-source music separation models, run at full quality.
- **Whole songs in one go**: files up to 30 minutes are separated in steps with crossfaded joins, so there are no clicks or gaps.
- **Lossless output if you need it**: WAV or FLAC (16-bit, 44.1 kHz stereo) for your DAW, or MP3 at 320 kbps and M4A for everything else.
- **Takes files from anywhere**: direct links, Google Drive and Dropbox share links, uploads, and video files (the soundtrack is used). Up to 2 GB per file.
- **Peak level of every track** in the results, so you or your code can tell when a song has no singing.
- **Many songs per run**, each with its own row of download links. You pay per minute of audio; files that fail cost nothing.

### Who it's for

- **Singers, karaoke fans and music teachers** who want backing tracks of real songs.
- **DJs, producers and remixers** who need a cappellas, instrumentals and drum or bass stems.
- **Musicians** who practice along with a song with their own instrument taken out.
- **Video creators** who need a song's music without the vocals under their own voice-over.
- **App developers and AI agents** adding karaoke, remix or music analysis features, or cleaning vocals before transcribing lyrics or melodies.
- **Music researchers** separating many recordings at once.

### How to use it

1. Paste links to songs, or upload the files.
2. Pick the tracks you want: vocals and instrumental, or vocals, drums, bass and other.
3. Click **Start**. Each song appears in the **Output** tab with a download link for every track.

You can also run it through the [Apify API](https://docs.apify.com/api/v2), on a schedule, or from Make, n8n, Zapier and other integrations.

### Input

| Field | What it does |
| --- | --- |
| `audioUrls` | Links to audio or video files, or Google Drive and Dropbox share links. |
| `files` | Files uploaded from your computer or picked from an Apify key-value store. |
| `stems` | `two` (default): vocals and instrumental. `four`: vocals, drums, bass and other. `all`: the four stems plus the instrumental. Same price for each. |
| `outputFormat` | `mp3` (default, 320 kbps), `wav`, `flac` or `m4a`. |
| `maxFiles` | Stop after this many files (default 100). |

Example:

```json
{
  "audioUrls": [
    "https://example.com/music/my-song.mp3",
    "https://drive.google.com/file/d/YOUR_FILE_ID/view?usp=sharing"
  ],
  "stems": "four",
  "outputFormat": "wav"
}
```

### Output

Each song becomes one dataset item, and the tracks are saved in the run's key-value store:

```json
{
  "url": "https://example.com/music/my-song.mp3",
  "status": "ok",
  "error": null,
  "vocalsUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/001-my-song-vocals.mp3?signature=...",
  "instrumentalUrl": "https://api.apify.com/v2/key-value-stores/<store>/records/001-my-song-instrumental.mp3?signature=...",
  "drumsUrl": null,
  "bassUrl": null,
  "otherUrl": null,
  "stems": ["vocals", "instrumental"],
  "format": "mp3",
  "sourceFileUrl": "https://example.com/music/my-song.mp3",
  "durationSeconds": 214.5,
  "minutesBilled": 4,
  "peakLevelsDb": {"vocals": -3.2, "instrumental": -1.1},
  "processingSeconds": 182.4
}
```

Tracks you didn't ask for are `null`. A file that couldn't be downloaded or read gets `status: "failed"` and an `error` that says why, and isn't billed. Download your tracks within your plan's data retention period, or copy them to your own storage, because run storage expires.

### Pricing

You pay per **started minute of audio**, at the price shown on this page, whether you ask for two tracks or five. A 3½-minute song is 4 minutes; a 20-second clip is 1 minute. Files that fail are never charged. If you set a maximum cost per run, the Actor stops before a file that wouldn't fit.

### Speed

Separation takes about as long as the song itself. Measured on Apify at the default 8 GB of memory: a 3½-minute song took about 4 minutes and a 20-second clip about 20 seconds, plus a few seconds to start the run. The model runs on the CPU, and giving the run more memory gives it more CPU; 4 GB also works, but takes longer.

### Tips and limits

- **Studio recordings separate best.** Live recordings, heavy reverb and choirs can leave some bleed: a faint trace of the voice in the instrumental, or of instruments in the vocals.
- Backing vocals and harmonies count as vocals, so they're removed together with the lead.
- "Other" holds everything that isn't vocals, drums or bass: guitars, piano, synths, strings and winds.
- Tracks come out as 44.1 kHz stereo. Only the first audio track of a file is used.
- Links to YouTube, TikTok, Instagram, SoundCloud and Spotify aren't supported, because those platforms' terms don't allow downloading. Use your own copy of the file.
- Separating a song doesn't change who owns it. Use the tracks only in ways the song's rights allow.

### For AI agents and developers

This Actor works with the [Apify MCP server](https://mcp.apify.com), so AI agents can call it as a tool: pass `audioUrls` and read `vocalsUrl` and `instrumentalUrl` (or the drum, bass and other links) from each dataset item. Every item has the same documented fields, and `status` tells you whether a file succeeded. For a direct API call:

```bash
curl -X POST "https://api.apify.com/v2/acts/jumblemog~vocal-remover/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"audioUrls": ["https://example.com/music/my-song.mp3"]}'
```

The synchronous endpoint waits up to 5 minutes. For long songs or batches, start a run with `/runs` and read the dataset when it finishes.

### Privacy

Files are downloaded into the run, processed there and saved only to your own Apify storage. Nothing is sent to an outside service.

### Credits

- Music separation: [Demucs](https://github.com/facebookresearch/demucs) by Meta AI Research (MIT license), Hybrid Transformer Demucs from the paper "Hybrid Transformers for Music Source Separation" (Rouard, Massa and Défossez, ICASSP 2023). This Actor isn't affiliated with or endorsed by Meta.
- Audio decoding and encoding: [FFmpeg](https://ffmpeg.org).

# Actor input Schema

## `audioUrls` (type: `array`):

Direct links to audio or video files (MP3, WAV, FLAC, M4A, OGG, MP4, MOV and more), or Google Drive and Dropbox share links. YouTube, TikTok, Instagram, SoundCloud and Spotify links aren't supported because their terms don't allow downloading.

## `files` (type: `array`):

Upload audio or video files from your computer, or pick files you already stored in an Apify key-value store.

## `stems` (type: `string`):

two: vocals and instrumental (karaoke). four: vocals, drums, bass and other instruments. all: the four stems plus the instrumental. The price is the same for every option.

## `outputFormat` (type: `string`):

mp3 (320 kbps) is small and plays everywhere. wav and flac are lossless (16-bit) for editing in a DAW. m4a is AAC at 256 kbps.

## `maxFiles` (type: `integer`):

Stop after this many files, so the cost of a run stays predictable.

## Actor input object example

```json
{
  "audioUrls": [
    "https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-original.mp3?signature=F4TBgje9jkImaWD4UKAL"
  ],
  "stems": "two",
  "outputFormat": "mp3",
  "maxFiles": 100
}
```

# Actor output Schema

## `results` (type: `string`):

One item per song: links to the vocals, instrumental, drums, bass and other tracks that were requested.

## `files` (type: `string`):

The separated tracks saved in the run's key-value store.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "audioUrls": [
        "https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-original.mp3?signature=F4TBgje9jkImaWD4UKAL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jumblemog/vocal-remover").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "audioUrls": ["https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-original.mp3?signature=F4TBgje9jkImaWD4UKAL"] }

# Run the Actor and wait for it to finish
run = client.actor("jumblemog/vocal-remover").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "audioUrls": [
    "https://api.apify.com/v2/key-value-stores/Km5b4PG3kYHdZSb1E/records/vocal-remover-original.mp3?signature=F4TBgje9jkImaWD4UKAL"
  ]
}' |
apify call jumblemog/vocal-remover --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jumblemog/vocal-remover"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/rw5DEmSZWoTcQ0DdZ/builds/04y2yopy8c6ZWtBgB/openapi.json
