audio-separator


Nameaudio-separator JSON
Version 0.16.6 PyPI version JSON
download
home_pagehttps://github.com/karaokenerds/python-audio-separator
SummaryEasy to use audio stem separation, using various models from UVR trained primarily by @Anjok07
upload_time2024-04-26 14:56:09
maintainerNone
docs_urlNone
authorAndrew Beveridge
requires_python>=3.9
licenseMIT
keywords audio sound karaoke
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Audio Separator ๐ŸŽถ

[![PyPI version](https://badge.fury.io/py/audio-separator.svg)](https://badge.fury.io/py/audio-separator)
[![Conda Version](https://img.shields.io/conda/vn/conda-forge/audio-separator.svg)](https://anaconda.org/conda-forge/audio-separator)
[![Docker pulls](https://img.shields.io/docker/pulls/beveradb/audio-separator.svg)](https://hub.docker.com/r/beveradb/audio-separator/tags)
[![codecov](https://codecov.io/gh/karaokenerds/python-audio-separator/graph/badge.svg?token=N7YK4ET5JP)](https://codecov.io/gh/karaokenerds/python-audio-separator)

Summary: Easy to use audio stem separation from the command line or as a dependency in your own Python project, using the amazing MDX-Net, VR Arch, Demucs and MDXC models available in UVR by @Anjok07 & @aufr33.

Audio Separator is a Python package that allows you to separate an audio file into various stems, using models trained by @Anjok07 for use with UVR (https://github.com/Anjok07/ultimatevocalremovergui).

The simplest (and probably most utilized) use case for this package is to separate an audio file into two stems, Instrumental and Vocals which can be very useful for producing Karaoke videos! However, the models available in UVR can separate audio into many more stems, such as Drums, Bass, Piano, Guitar, and perform other audio processing tasks such as denoising and removing echo / reverb.

## Features

- Separate audio into multiple stems, e.g. instrumental and vocals.
- Supports all common audio formats (WAV, MP3, FLAC, M4A, etc.)
- Ability to inference using a pre-trained model in PTH or ONNX format.
- CLI support for easy use in scripts and batch processing.
- Python API for integration into other projects.

## Installation ๐Ÿ› ๏ธ

### ๐Ÿณ Docker

If you're able to use docker, you don't actually need to _install_ anything - there are [images published on Docker Hub](https://hub.docker.com/r/beveradb/audio-separator/tags) for GPU (CUDA) and CPU inferencing, for both `amd64` and `arm64` platforms.

You probably want to volume-mount a folder containing whatever file you want to separate, which can then also be used as the output folder.

For instance, if your current directory has the file `input.wav`, you could execute `audio-separator` as shown below (see [usage](#usage-) section for more details):

```
docker run -it -v `pwd`:/workdir beveradb/audio-separator input.wav
```

If you're using a machine with a GPU, you'll want to use the GPU specific image and pass in the GPU device to the container, like this:

```
docker run -it --gpus all -v `pwd`:/workdir beveradb/audio-separator:gpu input.wav
```

If the GPU isn't being detected, make sure your docker runtime environment is passing through the GPU correctly - there are [various guides](https://www.celantur.com/blog/run-cuda-in-docker-on-linux/) online to help with that.


### ๐ŸŽฎ Nvidia GPU with CUDA or ๐Ÿงช Google Colab

**Supported CUDA Versions:** 11.8 and 12.2

๐Ÿ’ฌ If successfully configured, you should see this log message when running `audio-separator --env_info`:
 `ONNXruntime has CUDAExecutionProvider available, enabling acceleration`

Conda: `conda install pytorch=*=*cuda* onnxruntime=*=*cuda* audio-separator -c pytorch -c conda-forge`

Pip: `pip install "audio-separator[gpu]"`

Docker: `beveradb/audio-separator:gpu`

### ๏ฃฟ Apple Silicon, macOS Sonoma+ with M1 or newer CPU (CoreML acceleration)

๐Ÿ’ฌ If successfully configured, you should see this log message when running `audio-separator --env_info`:
 `ONNXruntime has CoreMLExecutionProvider available, enabling acceleration`

Pip: `pip install "audio-separator[cpu]"`

### ๐Ÿข No hardware acceleration, CPU only:

Conda: `conda install audio-separator-c pytorch -c conda-forge`

Pip: `pip install "audio-separator[cpu]"`

Docker: `beveradb/audio-separator`


### ๐ŸŽฅ FFmpeg dependency

๐Ÿ’ฌ If successfully configured, you should see a `FFmpeg installed` log message when running `audio-separator --env_info`

If you installed `audio-separator` using `conda` or `docker`, FFmpeg should already be avaialble in your environment.

If not, you'll separately need to ensure you have `ffmpeg` installed.
This should be easy to install on most platforms, e.g.:

๐Ÿง Debian/Ubuntu: `apt-get update; apt-get install -y ffmpeg`

๏ฃฟ macOS:`brew update; brew install ffmpeg`


## GPU / CUDA specific installation steps with Pip

In theory, all you should need to do to get `audio-separator` working with a GPU is install it with the `[gpu]` extra as above.

However, sometimes getting both PyTorch and ONNX Runtime working with CUDA support can be a bit tricky so it may not work that easily.

You may need to reinstall both packages directly, allowing pip to calculate the right versions for your platform, for example:

- `pip uninstall torch onnxruntime`
- `pip cache purge`
- `pip install --force-reinstall torch torchvision torchaudio`
- `pip install --force-reinstall onnxruntime-gpu`

I generally recommend installing the latest version of PyTorch for your environment using the command recommended by the wizard here:
https://pytorch.org/get-started/locally/

### Multiple CUDA library versions may be needed 
Depending on your CUDA version and environment, you may need to install specific version(s) of CUDA libraries for ONNX Runtime to use your GPU.

๐Ÿงช Google Colab, for example, now uses CUDA 12 by default, but ONNX Runtime still needs CUDA 11 libraries to work.

If you see the error `Failed to load library` or `cannot open shared object file` when you run `audio-separator`, this is likely the issue.

You can install the CUDA 11 libraries _alongside_ CUDA 12 like so:
- `apt update; apt install nvidia-cuda-toolkit`

> Note: if anyone knows how to make this cleaner so we can support both different platform-specific dependencies for hardware acceleration without a separate installation process for each, please let me know or raise a PR!


## Usage ๐Ÿš€

### Command Line Interface (CLI)

You can use Audio Separator via the command line, for example:

```
audio-separator /path/to/your/input/audio.wav --model_filename UVR-MDX-NET-Inst_HQ_3.onnx
```

This command will download the specified model file, process the `audio.wav` input audio and generate two new files in the current directory, one containing vocals and one containing instrumental.

**Note:** You do not need to download any files yourself - audio-separator does that automatically for you!

To see a list of supported models, run `audio-separator --list_models`

Any file listed in the list models output can be specified (with file extension) with the model_filename parameter (e.g. `--model_filename UVR_MDXNET_KARA_2.onnx`) and it will be automatically downloaded to the `--model_file_dir` (default: `/tmp/audio-separator-models/`) folder on first usage.

### Full command-line interface options:

```sh
usage: audio-separator [-h] [-v] [-d] [-e] [-l] [--log_level LOG_LEVEL] [-m MODEL_FILENAME] [--output_format OUTPUT_FORMAT] [--output_dir OUTPUT_DIR] [--model_file_dir MODEL_FILE_DIR] [--invert_spect]
                       [--normalization NORMALIZATION] [--single_stem SINGLE_STEM] [--sample_rate SAMPLE_RATE] [--mdx_segment_size MDX_SEGMENT_SIZE] [--mdx_overlap MDX_OVERLAP] [--mdx_batch_size MDX_BATCH_SIZE]
                       [--mdx_hop_length MDX_HOP_LENGTH] [--mdx_enable_denoise] [--vr_batch_size VR_BATCH_SIZE] [--vr_window_size VR_WINDOW_SIZE] [--vr_aggression VR_AGGRESSION] [--vr_enable_tta]
                       [--vr_high_end_process] [--vr_enable_post_process] [--vr_post_process_threshold VR_POST_PROCESS_THRESHOLD] [--demucs_segment_size DEMUCS_SEGMENT_SIZE] [--demucs_shifts DEMUCS_SHIFTS]
                       [--demucs_overlap DEMUCS_OVERLAP] [--demucs_segments_enabled DEMUCS_SEGMENTS_ENABLED] [--mdxc_segment_size MDXC_SEGMENT_SIZE] [--mdxc_use_model_segment_size] [--mdxc_overlap MDXC_OVERLAP]
                       [--mdxc_batch_size MDXC_BATCH_SIZE] [--mdxc_pitch_shift MDXC_PITCH_SHIFT]
                       [audio_file]

Separate audio file into different stems.

positional arguments:
  audio_file                                             The audio file path to separate, in any common format.

options:
  -h, --help                                             show this help message and exit

Info and Debugging:
  -v, --version                                          Show the program's version number and exit.
  -d, --debug                                            Enable debug logging, equivalent to --log_level=debug.
  -e, --env_info                                         Print environment information and exit.
  -l, --list_models                                      List all supported models and exit.
  --log_level LOG_LEVEL                                  Log level, e.g. info, debug, warning (default: info).

Separation I/O Params:
  -m MODEL_FILENAME, --model_filename MODEL_FILENAME     model to use for separation (default: UVR-MDX-NET-Inst_HQ_3.onnx). Example: -m 2_HP-UVR.pth
  --output_format OUTPUT_FORMAT                          output format for separated files, any common format (default: FLAC). Example: --output_format=MP3
  --output_dir OUTPUT_DIR                                directory to write output files (default: <current dir>). Example: --output_dir=/app/separated
  --model_file_dir MODEL_FILE_DIR                        model files directory (default: /tmp/audio-separator-models/). Example: --model_file_dir=/app/models

Common Separation Parameters:
  --invert_spect                                         invert secondary stem using spectogram (default: False). Example: --invert_spect
  --normalization NORMALIZATION                          max peak amplitude to normalize input and output audio to (default: 0.9). Example: --normalization=0.7
  --single_stem SINGLE_STEM                              output only single stem, e.g. Instrumental, Vocals, Drums, Bass, Guitar, Piano, Other. Example: --single_stem=Instrumental
  --sample_rate SAMPLE_RATE                              modify the sample rate of the output audio (default: 44100). Example: --sample_rate=44100

MDX Architecture Parameters:
  --mdx_segment_size MDX_SEGMENT_SIZE                    larger consumes more resources, but may give better results (default: 256). Example: --mdx_segment_size=256
  --mdx_overlap MDX_OVERLAP                              amount of overlap between prediction windows, 0.001-0.999. higher is better but slower (default: 0.25). Example: --mdx_overlap=0.25
  --mdx_batch_size MDX_BATCH_SIZE                        larger consumes more RAM but may process slightly faster (default: 1). Example: --mdx_batch_size=4
  --mdx_hop_length MDX_HOP_LENGTH                        usually called stride in neural networks, only change if you know what you're doing (default: 1024). Example: --mdx_hop_length=1024
  --mdx_enable_denoise                                   enable denoising during separation (default: False). Example: --mdx_enable_denoise

VR Architecture Parameters:
  --vr_batch_size VR_BATCH_SIZE                          number of batches to process at a time. higher = more RAM, slightly faster processing (default: 4). Example: --vr_batch_size=16
  --vr_window_size VR_WINDOW_SIZE                        balance quality and speed. 1024 = fast but lower, 320 = slower but better quality. (default: 512). Example: --vr_window_size=320
  --vr_aggression VR_AGGRESSION                          intensity of primary stem extraction, -100 - 100. typically 5 for vocals & instrumentals (default: 5). Example: --vr_aggression=2
  --vr_enable_tta                                        enable Test-Time-Augmentation; slow but improves quality (default: False). Example: --vr_enable_tta
  --vr_high_end_process                                  mirror the missing frequency range of the output (default: False). Example: --vr_high_end_process
  --vr_enable_post_process                               identify leftover artifacts within vocal output; may improve separation for some songs (default: False). Example: --vr_enable_post_process
  --vr_post_process_threshold VR_POST_PROCESS_THRESHOLD  threshold for post_process feature: 0.1-0.3 (default: 0.2). Example: --vr_post_process_threshold=0.1

Demucs Architecture Parameters:
  --demucs_segment_size DEMUCS_SEGMENT_SIZE              size of segments into which the audio is split, 1-100. higher = slower but better quality (default: Default). Example: --demucs_segment_size=256
  --demucs_shifts DEMUCS_SHIFTS                          number of predictions with random shifts, higher = slower but better quality (default: 2). Example: --demucs_shifts=4
  --demucs_overlap DEMUCS_OVERLAP                        overlap between prediction windows, 0.001-0.999. higher = slower but better quality (default: 0.25). Example: --demucs_overlap=0.25
  --demucs_segments_enabled DEMUCS_SEGMENTS_ENABLED      enable segment-wise processing (default: True). Example: --demucs_segments_enabled=False

MDXC Architecture Parameters:
  --mdxc_segment_size MDXC_SEGMENT_SIZE                  larger consumes more resources, but may give better results (default: 256). Example: --mdxc_segment_size=256
  --mdxc_use_model_segment_size                          use model default segment size instead of the value from the config file. Example: --mdxc_use_model_segment_size
  --mdxc_overlap MDXC_OVERLAP                            amount of overlap between prediction windows, 2-50. higher is better but slower (default: 8). Example: --mdxc_overlap=8
  --mdxc_batch_size MDXC_BATCH_SIZE                      larger consumes more RAM but may process slightly faster (default: 1). Example: --mdxc_batch_size=4
  --mdxc_pitch_shift MDXC_PITCH_SHIFT                    shift audio pitch by a number of semitones while processing. may improve output for deep/high vocals. (default: 0). Example: --mdxc_pitch_shift=2
```

### As a Dependency in a Python Project

You can use Audio Separator in your own Python project. Here's how you can use it:

```
from audio_separator.separator import Separator

# Initialize the Separator class (with optional configuration properties below)
separator = Separator()

# Load a machine learning model (if unspecified, defaults to 'UVR-MDX-NET-Inst_HQ_3.onnx')
separator.load_model()

# Perform the separation on specific audio files without reloading the model
output_files = separator.separate('audio1.wav')

print(f"Separation complete! Output file(s): {' '.join(output_files)}")
```

#### Batch processing, or processing with multiple models

You can process multiple separations without reloading the model, to save time and memory.

You only need to load a model when choosing or changing models. See example below:

```
from audio_separator.separator import Separator

# Initialize the Separator with other configuration properties below
separator = Separator()

# Load a model
separator.load_model(model_filename='UVR-MDX-NET-Inst_HQ_3.onnx')

# Separate multiple audio files without reloading the model
output_file_paths_1 = separator.separate('audio1.wav')
output_file_paths_2 = separator.separate('audio2.wav')
output_file_paths_3 = separator.separate('audio3.wav')

# Load a different model
separator.load_model(model_filename='UVR_MDXNET_KARA_2.onnx')

# Separate the same files with the new model
output_file_paths_4 = separator.separate('audio1.wav')
output_file_paths_5 = separator.separate('audio2.wav')
output_file_paths_6 = separator.separate('audio3.wav')
```

## Parameters for the Separator class

- log_level: (Optional) Logging level, e.g., INFO, DEBUG, WARNING. Default: DEBUG
- log_formatter: (Optional) The log format. Default: None, which falls back to '%(asctime)s - %(levelname)s - %(module)s - %(message)s'
- model_file_dir: (Optional) Directory to cache model files in. Default: /tmp/audio-separator-models/
- output_dir: (Optional) Directory where the separated files will be saved. If not specified, uses the current directory.
- output_format: (Optional) Format to encode output files, any common format (WAV, MP3, FLAC, M4A, etc.). Default: WAV
- normalization_threshold: (Optional) The threshold for audio normalization. Default: 0.9
- output_single_stem: (Optional) Output only a single stem, either 'instrumental' or 'vocals'. Default: None
- invert_using_spec: (Optional) Flag to invert using spectrogram. Default: False
- sample_rate: (Optional) Modify the sample rate of the output audio. Default: 44100
- mdx_params: (Optional) MDX Architecture Specific Attributes & Defaults. Default: {"hop_length": 1024, "segment_size": 256, "overlap": 0.25, "batch_size": 1}
- vr_params: (Optional) VR Architecture Specific Attributes & Defaults. Default: {"batch_size": 16, "window_size": 512, "aggression": 5, "enable_tta": False, "enable_post_process": False, "post_process_threshold": 0.2, "high_end_process": False}
- demucs_params: (Optional) VR Architecture Specific Attributes & Defaults. {"segment_size": "Default", "shifts": 2, "overlap": 0.25, "segments_enabled": True}

## Requirements ๐Ÿ“‹

Python >= 3.9

Libraries: torch, onnx, onnxruntime, numpy, librosa, requests, six, tqdm, pydub

## Developing Locally

This project uses Poetry for dependency management and packaging. Follow these steps to setup a local development environment:

### Prerequisites

- Make sure you have Python 3.9 or newer installed on your machine.
- Install Conda (I recommend Miniforge: https://github.com/conda-forge/miniforge) to manage your Python virtual environments

### Clone the Repository

Clone the repository to your local machine:

```
git clone https://github.com/YOUR_USERNAME/audio-separator.git
cd audio-separator
```

Replace YOUR_USERNAME with your GitHub username if you've forked the repository, or use the main repository URL if you have the permissions.

### Create and activate the Conda Environment

To create and activate the conda environment, use the following commands:

```
conda env create
conda activate audio-separator-dev
```

### Install Dependencies

Once you're inside the conda env, run the following command to install the project dependencies:

```
poetry install
```


### Running the Command-Line Interface Locally

You can run the CLI command directly within the virtual environment. For example:

```
audio-separator path/to/your/audio-file.wav
```

### Deactivate the Virtual Environment

Once you are done with your development work, you can exit the virtual environment by simply typing:

```
conda deactivate
```

### Building the Package

To build the package for distribution, use the following command:

```
poetry build
```

This will generate the distribution packages in the dist directory - but for now only @beveradb will be able to publish to PyPI.

## Contributing ๐Ÿค

Contributions are very much welcome! Please fork the repository and submit a pull request with your changes, and I'll try to review, merge and publish promptly!

- This project is 100% open-source and free for anyone to use and modify as they wish. 
- If the maintenance workload for this repo somehow becomes too much for me I'll ask for volunteers to share maintainership of the repo, though I don't think that is very likely
- Development and support for the MDX-Net separation models is part of the main [UVR project](https://github.com/Anjok07/ultimatevocalremovergui), this repo is just a CLI/Python package wrapper to simplify running those models programmatically. So, if you want to try and improve the actual models, please get involved in the UVR project and look for guidance there!

## License ๐Ÿ“„

This project is licensed under the MIT [License](LICENSE).

- **Please Note:** If you choose to integrate this project into some other project using the default model or any other model trained as part of the [UVR](https://github.com/Anjok07/ultimatevocalremovergui) project, please honor the MIT license by providing credit to UVR and its developers!

## Credits ๐Ÿ™

- [Anjok07](https://github.com/Anjok07) - Author of [Ultimate Vocal Remover GUI](https://github.com/Anjok07/ultimatevocalremovergui), which almost all of the code in this repo was copied from! Definitely deserving of credit for anything good from this project. Thank you!
- [DilanBoskan](https://github.com/DilanBoskan) - Your contributions at the start of this project were essential to the success of UVR. Thank you!
- [Kuielab & Woosung Choi](https://github.com/kuielab) - Developed the original MDX-Net AI code. 
- [KimberleyJSN](https://github.com/KimberleyJensen) - Advised and aided the implementation of the training scripts for MDX-Net and Demucs. Thank you!
- [Hv](https://github.com/NaJeongMo/Colab-for-MDX_B) - Helped implement chunks into the MDX-Net AI code. Thank you!
- [zhzhongshi](https://github.com/zhzhongshi) - Helped add support for the MDXC models in `audio-separator`. Thank you!

## Contact ๐Ÿ’Œ

For questions or feedback, please raise an issue or reach out to @beveradb ([Andrew Beveridge](mailto:andrew@beveridge.uk)) directly.

## Sponsors

<!-- sponsors --><!-- sponsors -->


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/karaokenerds/python-audio-separator",
    "name": "audio-separator",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "audio, sound, karaoke",
    "author": "Andrew Beveridge",
    "author_email": "andrew@beveridge.uk",
    "download_url": "https://files.pythonhosted.org/packages/09/c9/a9c5e61bd35835b0d4c49313bfae3ea88240fb0d6a06e182053f41531fcd/audio_separator-0.16.6.tar.gz",
    "platform": null,
    "description": "# Audio Separator \ud83c\udfb6\n\n[![PyPI version](https://badge.fury.io/py/audio-separator.svg)](https://badge.fury.io/py/audio-separator)\n[![Conda Version](https://img.shields.io/conda/vn/conda-forge/audio-separator.svg)](https://anaconda.org/conda-forge/audio-separator)\n[![Docker pulls](https://img.shields.io/docker/pulls/beveradb/audio-separator.svg)](https://hub.docker.com/r/beveradb/audio-separator/tags)\n[![codecov](https://codecov.io/gh/karaokenerds/python-audio-separator/graph/badge.svg?token=N7YK4ET5JP)](https://codecov.io/gh/karaokenerds/python-audio-separator)\n\nSummary: Easy to use audio stem separation from the command line or as a dependency in your own Python project, using the amazing MDX-Net, VR Arch, Demucs and MDXC models available in UVR by @Anjok07 & @aufr33.\n\nAudio Separator is a Python package that allows you to separate an audio file into various stems, using models trained by @Anjok07 for use with UVR (https://github.com/Anjok07/ultimatevocalremovergui).\n\nThe simplest (and probably most utilized) use case for this package is to separate an audio file into two stems, Instrumental and Vocals which can be very useful for producing Karaoke videos! However, the models available in UVR can separate audio into many more stems, such as Drums, Bass, Piano, Guitar, and perform other audio processing tasks such as denoising and removing echo / reverb.\n\n## Features\n\n- Separate audio into multiple stems, e.g. instrumental and vocals.\n- Supports all common audio formats (WAV, MP3, FLAC, M4A, etc.)\n- Ability to inference using a pre-trained model in PTH or ONNX format.\n- CLI support for easy use in scripts and batch processing.\n- Python API for integration into other projects.\n\n## Installation \ud83d\udee0\ufe0f\n\n### \ud83d\udc33 Docker\n\nIf you're able to use docker, you don't actually need to _install_ anything - there are [images published on Docker Hub](https://hub.docker.com/r/beveradb/audio-separator/tags) for GPU (CUDA) and CPU inferencing, for both `amd64` and `arm64` platforms.\n\nYou probably want to volume-mount a folder containing whatever file you want to separate, which can then also be used as the output folder.\n\nFor instance, if your current directory has the file `input.wav`, you could execute `audio-separator` as shown below (see [usage](#usage-) section for more details):\n\n```\ndocker run -it -v `pwd`:/workdir beveradb/audio-separator input.wav\n```\n\nIf you're using a machine with a GPU, you'll want to use the GPU specific image and pass in the GPU device to the container, like this:\n\n```\ndocker run -it --gpus all -v `pwd`:/workdir beveradb/audio-separator:gpu input.wav\n```\n\nIf the GPU isn't being detected, make sure your docker runtime environment is passing through the GPU correctly - there are [various guides](https://www.celantur.com/blog/run-cuda-in-docker-on-linux/) online to help with that.\n\n\n### \ud83c\udfae Nvidia GPU with CUDA or \ud83e\uddea Google Colab\n\n**Supported CUDA Versions:** 11.8 and 12.2\n\n\ud83d\udcac If successfully configured, you should see this log message when running `audio-separator --env_info`:\n `ONNXruntime has CUDAExecutionProvider available, enabling acceleration`\n\nConda: `conda install pytorch=*=*cuda* onnxruntime=*=*cuda* audio-separator -c pytorch -c conda-forge`\n\nPip: `pip install \"audio-separator[gpu]\"`\n\nDocker: `beveradb/audio-separator:gpu`\n\n### \uf8ff Apple Silicon, macOS Sonoma+ with M1 or newer CPU (CoreML acceleration)\n\n\ud83d\udcac If successfully configured, you should see this log message when running `audio-separator --env_info`:\n `ONNXruntime has CoreMLExecutionProvider available, enabling acceleration`\n\nPip: `pip install \"audio-separator[cpu]\"`\n\n### \ud83d\udc22 No hardware acceleration, CPU only:\n\nConda: `conda install audio-separator-c pytorch -c conda-forge`\n\nPip: `pip install \"audio-separator[cpu]\"`\n\nDocker: `beveradb/audio-separator`\n\n\n### \ud83c\udfa5 FFmpeg dependency\n\n\ud83d\udcac If successfully configured, you should see a `FFmpeg installed` log message when running `audio-separator --env_info`\n\nIf you installed `audio-separator` using `conda` or `docker`, FFmpeg should already be avaialble in your environment.\n\nIf not, you'll separately need to ensure you have `ffmpeg` installed.\nThis should be easy to install on most platforms, e.g.:\n\n\ud83d\udc27 Debian/Ubuntu: `apt-get update; apt-get install -y ffmpeg`\n\n\uf8ff macOS:`brew update; brew install ffmpeg`\n\n\n## GPU / CUDA specific installation steps with Pip\n\nIn theory, all you should need to do to get `audio-separator` working with a GPU is install it with the `[gpu]` extra as above.\n\nHowever, sometimes getting both PyTorch and ONNX Runtime working with CUDA support can be a bit tricky so it may not work that easily.\n\nYou may need to reinstall both packages directly, allowing pip to calculate the right versions for your platform, for example:\n\n- `pip uninstall torch onnxruntime`\n- `pip cache purge`\n- `pip install --force-reinstall torch torchvision torchaudio`\n- `pip install --force-reinstall onnxruntime-gpu`\n\nI generally recommend installing the latest version of PyTorch for your environment using the command recommended by the wizard here:\nhttps://pytorch.org/get-started/locally/\n\n### Multiple CUDA library versions may be needed \nDepending on your CUDA version and environment, you may need to install specific version(s) of CUDA libraries for ONNX Runtime to use your GPU.\n\n\ud83e\uddea Google Colab, for example, now uses CUDA 12 by default, but ONNX Runtime still needs CUDA 11 libraries to work.\n\nIf you see the error `Failed to load library` or `cannot open shared object file` when you run `audio-separator`, this is likely the issue.\n\nYou can install the CUDA 11 libraries _alongside_ CUDA 12 like so:\n- `apt update; apt install nvidia-cuda-toolkit`\n\n> Note: if anyone knows how to make this cleaner so we can support both different platform-specific dependencies for hardware acceleration without a separate installation process for each, please let me know or raise a PR!\n\n\n## Usage \ud83d\ude80\n\n### Command Line Interface (CLI)\n\nYou can use Audio Separator via the command line, for example:\n\n```\naudio-separator /path/to/your/input/audio.wav --model_filename UVR-MDX-NET-Inst_HQ_3.onnx\n```\n\nThis command will download the specified model file, process the `audio.wav` input audio and generate two new files in the current directory, one containing vocals and one containing instrumental.\n\n**Note:** You do not need to download any files yourself - audio-separator does that automatically for you!\n\nTo see a list of supported models, run `audio-separator --list_models`\n\nAny file listed in the list models output can be specified (with file extension) with the model_filename parameter (e.g. `--model_filename UVR_MDXNET_KARA_2.onnx`) and it will be automatically downloaded to the `--model_file_dir` (default: `/tmp/audio-separator-models/`) folder on first usage.\n\n### Full command-line interface options:\n\n```sh\nusage: audio-separator [-h] [-v] [-d] [-e] [-l] [--log_level LOG_LEVEL] [-m MODEL_FILENAME] [--output_format OUTPUT_FORMAT] [--output_dir OUTPUT_DIR] [--model_file_dir MODEL_FILE_DIR] [--invert_spect]\n                       [--normalization NORMALIZATION] [--single_stem SINGLE_STEM] [--sample_rate SAMPLE_RATE] [--mdx_segment_size MDX_SEGMENT_SIZE] [--mdx_overlap MDX_OVERLAP] [--mdx_batch_size MDX_BATCH_SIZE]\n                       [--mdx_hop_length MDX_HOP_LENGTH] [--mdx_enable_denoise] [--vr_batch_size VR_BATCH_SIZE] [--vr_window_size VR_WINDOW_SIZE] [--vr_aggression VR_AGGRESSION] [--vr_enable_tta]\n                       [--vr_high_end_process] [--vr_enable_post_process] [--vr_post_process_threshold VR_POST_PROCESS_THRESHOLD] [--demucs_segment_size DEMUCS_SEGMENT_SIZE] [--demucs_shifts DEMUCS_SHIFTS]\n                       [--demucs_overlap DEMUCS_OVERLAP] [--demucs_segments_enabled DEMUCS_SEGMENTS_ENABLED] [--mdxc_segment_size MDXC_SEGMENT_SIZE] [--mdxc_use_model_segment_size] [--mdxc_overlap MDXC_OVERLAP]\n                       [--mdxc_batch_size MDXC_BATCH_SIZE] [--mdxc_pitch_shift MDXC_PITCH_SHIFT]\n                       [audio_file]\n\nSeparate audio file into different stems.\n\npositional arguments:\n  audio_file                                             The audio file path to separate, in any common format.\n\noptions:\n  -h, --help                                             show this help message and exit\n\nInfo and Debugging:\n  -v, --version                                          Show the program's version number and exit.\n  -d, --debug                                            Enable debug logging, equivalent to --log_level=debug.\n  -e, --env_info                                         Print environment information and exit.\n  -l, --list_models                                      List all supported models and exit.\n  --log_level LOG_LEVEL                                  Log level, e.g. info, debug, warning (default: info).\n\nSeparation I/O Params:\n  -m MODEL_FILENAME, --model_filename MODEL_FILENAME     model to use for separation (default: UVR-MDX-NET-Inst_HQ_3.onnx). Example: -m 2_HP-UVR.pth\n  --output_format OUTPUT_FORMAT                          output format for separated files, any common format (default: FLAC). Example: --output_format=MP3\n  --output_dir OUTPUT_DIR                                directory to write output files (default: <current dir>). Example: --output_dir=/app/separated\n  --model_file_dir MODEL_FILE_DIR                        model files directory (default: /tmp/audio-separator-models/). Example: --model_file_dir=/app/models\n\nCommon Separation Parameters:\n  --invert_spect                                         invert secondary stem using spectogram (default: False). Example: --invert_spect\n  --normalization NORMALIZATION                          max peak amplitude to normalize input and output audio to (default: 0.9). Example: --normalization=0.7\n  --single_stem SINGLE_STEM                              output only single stem, e.g. Instrumental, Vocals, Drums, Bass, Guitar, Piano, Other. Example: --single_stem=Instrumental\n  --sample_rate SAMPLE_RATE                              modify the sample rate of the output audio (default: 44100). Example: --sample_rate=44100\n\nMDX Architecture Parameters:\n  --mdx_segment_size MDX_SEGMENT_SIZE                    larger consumes more resources, but may give better results (default: 256). Example: --mdx_segment_size=256\n  --mdx_overlap MDX_OVERLAP                              amount of overlap between prediction windows, 0.001-0.999. higher is better but slower (default: 0.25). Example: --mdx_overlap=0.25\n  --mdx_batch_size MDX_BATCH_SIZE                        larger consumes more RAM but may process slightly faster (default: 1). Example: --mdx_batch_size=4\n  --mdx_hop_length MDX_HOP_LENGTH                        usually called stride in neural networks, only change if you know what you're doing (default: 1024). Example: --mdx_hop_length=1024\n  --mdx_enable_denoise                                   enable denoising during separation (default: False). Example: --mdx_enable_denoise\n\nVR Architecture Parameters:\n  --vr_batch_size VR_BATCH_SIZE                          number of batches to process at a time. higher = more RAM, slightly faster processing (default: 4). Example: --vr_batch_size=16\n  --vr_window_size VR_WINDOW_SIZE                        balance quality and speed. 1024 = fast but lower, 320 = slower but better quality. (default: 512). Example: --vr_window_size=320\n  --vr_aggression VR_AGGRESSION                          intensity of primary stem extraction, -100 - 100. typically 5 for vocals & instrumentals (default: 5). Example: --vr_aggression=2\n  --vr_enable_tta                                        enable Test-Time-Augmentation; slow but improves quality (default: False). Example: --vr_enable_tta\n  --vr_high_end_process                                  mirror the missing frequency range of the output (default: False). Example: --vr_high_end_process\n  --vr_enable_post_process                               identify leftover artifacts within vocal output; may improve separation for some songs (default: False). Example: --vr_enable_post_process\n  --vr_post_process_threshold VR_POST_PROCESS_THRESHOLD  threshold for post_process feature: 0.1-0.3 (default: 0.2). Example: --vr_post_process_threshold=0.1\n\nDemucs Architecture Parameters:\n  --demucs_segment_size DEMUCS_SEGMENT_SIZE              size of segments into which the audio is split, 1-100. higher = slower but better quality (default: Default). Example: --demucs_segment_size=256\n  --demucs_shifts DEMUCS_SHIFTS                          number of predictions with random shifts, higher = slower but better quality (default: 2). Example: --demucs_shifts=4\n  --demucs_overlap DEMUCS_OVERLAP                        overlap between prediction windows, 0.001-0.999. higher = slower but better quality (default: 0.25). Example: --demucs_overlap=0.25\n  --demucs_segments_enabled DEMUCS_SEGMENTS_ENABLED      enable segment-wise processing (default: True). Example: --demucs_segments_enabled=False\n\nMDXC Architecture Parameters:\n  --mdxc_segment_size MDXC_SEGMENT_SIZE                  larger consumes more resources, but may give better results (default: 256). Example: --mdxc_segment_size=256\n  --mdxc_use_model_segment_size                          use model default segment size instead of the value from the config file. Example: --mdxc_use_model_segment_size\n  --mdxc_overlap MDXC_OVERLAP                            amount of overlap between prediction windows, 2-50. higher is better but slower (default: 8). Example: --mdxc_overlap=8\n  --mdxc_batch_size MDXC_BATCH_SIZE                      larger consumes more RAM but may process slightly faster (default: 1). Example: --mdxc_batch_size=4\n  --mdxc_pitch_shift MDXC_PITCH_SHIFT                    shift audio pitch by a number of semitones while processing. may improve output for deep/high vocals. (default: 0). Example: --mdxc_pitch_shift=2\n```\n\n### As a Dependency in a Python Project\n\nYou can use Audio Separator in your own Python project. Here's how you can use it:\n\n```\nfrom audio_separator.separator import Separator\n\n# Initialize the Separator class (with optional configuration properties below)\nseparator = Separator()\n\n# Load a machine learning model (if unspecified, defaults to 'UVR-MDX-NET-Inst_HQ_3.onnx')\nseparator.load_model()\n\n# Perform the separation on specific audio files without reloading the model\noutput_files = separator.separate('audio1.wav')\n\nprint(f\"Separation complete! Output file(s): {' '.join(output_files)}\")\n```\n\n#### Batch processing, or processing with multiple models\n\nYou can process multiple separations without reloading the model, to save time and memory.\n\nYou only need to load a model when choosing or changing models. See example below:\n\n```\nfrom audio_separator.separator import Separator\n\n# Initialize the Separator with other configuration properties below\nseparator = Separator()\n\n# Load a model\nseparator.load_model(model_filename='UVR-MDX-NET-Inst_HQ_3.onnx')\n\n# Separate multiple audio files without reloading the model\noutput_file_paths_1 = separator.separate('audio1.wav')\noutput_file_paths_2 = separator.separate('audio2.wav')\noutput_file_paths_3 = separator.separate('audio3.wav')\n\n# Load a different model\nseparator.load_model(model_filename='UVR_MDXNET_KARA_2.onnx')\n\n# Separate the same files with the new model\noutput_file_paths_4 = separator.separate('audio1.wav')\noutput_file_paths_5 = separator.separate('audio2.wav')\noutput_file_paths_6 = separator.separate('audio3.wav')\n```\n\n## Parameters for the Separator class\n\n- log_level: (Optional) Logging level, e.g., INFO, DEBUG, WARNING. Default: DEBUG\n- log_formatter: (Optional) The log format. Default: None, which falls back to '%(asctime)s - %(levelname)s - %(module)s - %(message)s'\n- model_file_dir: (Optional) Directory to cache model files in. Default: /tmp/audio-separator-models/\n- output_dir: (Optional) Directory where the separated files will be saved. If not specified, uses the current directory.\n- output_format: (Optional) Format to encode output files, any common format (WAV, MP3, FLAC, M4A, etc.). Default: WAV\n- normalization_threshold: (Optional) The threshold for audio normalization. Default: 0.9\n- output_single_stem: (Optional) Output only a single stem, either 'instrumental' or 'vocals'. Default: None\n- invert_using_spec: (Optional) Flag to invert using spectrogram. Default: False\n- sample_rate: (Optional) Modify the sample rate of the output audio. Default: 44100\n- mdx_params: (Optional) MDX Architecture Specific Attributes & Defaults. Default: {\"hop_length\": 1024, \"segment_size\": 256, \"overlap\": 0.25, \"batch_size\": 1}\n- vr_params: (Optional) VR Architecture Specific Attributes & Defaults. Default: {\"batch_size\": 16, \"window_size\": 512, \"aggression\": 5, \"enable_tta\": False, \"enable_post_process\": False, \"post_process_threshold\": 0.2, \"high_end_process\": False}\n- demucs_params: (Optional) VR Architecture Specific Attributes & Defaults. {\"segment_size\": \"Default\", \"shifts\": 2, \"overlap\": 0.25, \"segments_enabled\": True}\n\n## Requirements \ud83d\udccb\n\nPython >= 3.9\n\nLibraries: torch, onnx, onnxruntime, numpy, librosa, requests, six, tqdm, pydub\n\n## Developing Locally\n\nThis project uses Poetry for dependency management and packaging. Follow these steps to setup a local development environment:\n\n### Prerequisites\n\n- Make sure you have Python 3.9 or newer installed on your machine.\n- Install Conda (I recommend Miniforge: https://github.com/conda-forge/miniforge) to manage your Python virtual environments\n\n### Clone the Repository\n\nClone the repository to your local machine:\n\n```\ngit clone https://github.com/YOUR_USERNAME/audio-separator.git\ncd audio-separator\n```\n\nReplace YOUR_USERNAME with your GitHub username if you've forked the repository, or use the main repository URL if you have the permissions.\n\n### Create and activate the Conda Environment\n\nTo create and activate the conda environment, use the following commands:\n\n```\nconda env create\nconda activate audio-separator-dev\n```\n\n### Install Dependencies\n\nOnce you're inside the conda env, run the following command to install the project dependencies:\n\n```\npoetry install\n```\n\n\n### Running the Command-Line Interface Locally\n\nYou can run the CLI command directly within the virtual environment. For example:\n\n```\naudio-separator path/to/your/audio-file.wav\n```\n\n### Deactivate the Virtual Environment\n\nOnce you are done with your development work, you can exit the virtual environment by simply typing:\n\n```\nconda deactivate\n```\n\n### Building the Package\n\nTo build the package for distribution, use the following command:\n\n```\npoetry build\n```\n\nThis will generate the distribution packages in the dist directory - but for now only @beveradb will be able to publish to PyPI.\n\n## Contributing \ud83e\udd1d\n\nContributions are very much welcome! Please fork the repository and submit a pull request with your changes, and I'll try to review, merge and publish promptly!\n\n- This project is 100% open-source and free for anyone to use and modify as they wish. \n- If the maintenance workload for this repo somehow becomes too much for me I'll ask for volunteers to share maintainership of the repo, though I don't think that is very likely\n- Development and support for the MDX-Net separation models is part of the main [UVR project](https://github.com/Anjok07/ultimatevocalremovergui), this repo is just a CLI/Python package wrapper to simplify running those models programmatically. So, if you want to try and improve the actual models, please get involved in the UVR project and look for guidance there!\n\n## License \ud83d\udcc4\n\nThis project is licensed under the MIT [License](LICENSE).\n\n- **Please Note:** If you choose to integrate this project into some other project using the default model or any other model trained as part of the [UVR](https://github.com/Anjok07/ultimatevocalremovergui) project, please honor the MIT license by providing credit to UVR and its developers!\n\n## Credits \ud83d\ude4f\n\n- [Anjok07](https://github.com/Anjok07) - Author of [Ultimate Vocal Remover GUI](https://github.com/Anjok07/ultimatevocalremovergui), which almost all of the code in this repo was copied from! Definitely deserving of credit for anything good from this project. Thank you!\n- [DilanBoskan](https://github.com/DilanBoskan) - Your contributions at the start of this project were essential to the success of UVR. Thank you!\n- [Kuielab & Woosung Choi](https://github.com/kuielab) - Developed the original MDX-Net AI code. \n- [KimberleyJSN](https://github.com/KimberleyJensen) - Advised and aided the implementation of the training scripts for MDX-Net and Demucs. Thank you!\n- [Hv](https://github.com/NaJeongMo/Colab-for-MDX_B) - Helped implement chunks into the MDX-Net AI code. Thank you!\n- [zhzhongshi](https://github.com/zhzhongshi) - Helped add support for the MDXC models in `audio-separator`. Thank you!\n\n## Contact \ud83d\udc8c\n\nFor questions or feedback, please raise an issue or reach out to @beveradb ([Andrew Beveridge](mailto:andrew@beveridge.uk)) directly.\n\n## Sponsors\n\n<!-- sponsors --><!-- sponsors -->\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Easy to use audio stem separation, using various models from UVR trained primarily by @Anjok07",
    "version": "0.16.6",
    "project_urls": {
        "Documentation": "https://github.com/karaokenerds/python-audio-separator/blob/main/README.md",
        "Homepage": "https://github.com/karaokenerds/python-audio-separator",
        "Repository": "https://github.com/karaokenerds/python-audio-separator"
    },
    "split_keywords": [
        "audio",
        " sound",
        " karaoke"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9056c8dd4f0274e77f92ae66e528b4cb3fecd436d0b29e42787de8ad52c5b9f9",
                "md5": "884ea91cab5b03daab1ebed755862b46",
                "sha256": "6f0769beb928c8d4bd5f72ca04204095b8dc2ff45d23537cd6a8cd06212d233f"
            },
            "downloads": -1,
            "filename": "audio_separator-0.16.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "884ea91cab5b03daab1ebed755862b46",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 160653,
            "upload_time": "2024-04-26T14:56:06",
            "upload_time_iso_8601": "2024-04-26T14:56:06.962072Z",
            "url": "https://files.pythonhosted.org/packages/90/56/c8dd4f0274e77f92ae66e528b4cb3fecd436d0b29e42787de8ad52c5b9f9/audio_separator-0.16.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "09c9a9c5e61bd35835b0d4c49313bfae3ea88240fb0d6a06e182053f41531fcd",
                "md5": "a9a7502df130927ef2cef595971fc5ca",
                "sha256": "83e8db4bb417d3a20a5e3eb524da19296ecd49495509d23435e615cae250b405"
            },
            "downloads": -1,
            "filename": "audio_separator-0.16.6.tar.gz",
            "has_sig": false,
            "md5_digest": "a9a7502df130927ef2cef595971fc5ca",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 123288,
            "upload_time": "2024-04-26T14:56:09",
            "upload_time_iso_8601": "2024-04-26T14:56:09.156418Z",
            "url": "https://files.pythonhosted.org/packages/09/c9/a9c5e61bd35835b0d4c49313bfae3ea88240fb0d6a06e182053f41531fcd/audio_separator-0.16.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-26 14:56:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "karaokenerds",
    "github_project": "python-audio-separator",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "audio-separator"
}
        
Elapsed time: 0.24554s