MLX-native audio stem separation for Apple Silicon
Reason this release was yanked:
mislabeled version string
Project description
mlx-audio-separator
MLX-native stem separation for Apple Silicon Macs.
This project ports the inference paths from audio-separator (upstream repo: nomadkaraoke/python-audio-separator) to MLX so separation runs on Apple Silicon without requiring PyTorch or ONNX Runtime at inference time. Core runtime components are powered by mlx-audio-io (audio I/O) and mlx-spectro (spectral transforms).
Requirements
- macOS 13+ (Ventura or later)
- Apple Silicon (M1/M2/M3/M4)
- Python 3.10+
Installation
pip install mlx-audio-separator
If you need first-run conversion from upstream checkpoints (.ckpt/.onnx/Demucs weights), install conversion extras:
pip install "mlx-audio-separator[convert]"
Quick Start
CLI
# Separate with default model
mlx-audio-separator song.mp3
# Use a specific model
mlx-audio-separator song.mp3 -m htdemucs_ft.yaml
# List supported models
mlx-audio-separator --list_models
Python
from mlx_audio_separator import Separator
sep = Separator()
sep.load_model()
outputs = sep.separate("song.mp3")
print(outputs)
Supported Architectures
- Roformer (BS-Roformer and MelBand-Roformer families)
- MDXC (including MDX23C-style checkpoints)
- MDX
- VR
- Demucs
Validation Snapshot
Release validation snapshot (2026-02-24 to 2026-02-26):
| Check | Result |
|---|---|
| Full-catalog benchmark gate | 163/163 models ok (0 failures) |
| Unit tests | 167 passed, 1 skipped |
MLX vs audio-separator parity smoke |
4/4 models passed (rel L2 <= 5e-2) |
Scope: Apple Silicon (M4 mini), MUSDB18-HQ test subset, release gate + parity smoke model set.
Detailed evidence and provenance: docs/release-validation.md.
Performance Snapshot
MLX vs audio-separator (ABBA, 12-song MUSDB18-HQ test subset, M4 mini):
| Model | MLX speedup vs PAS |
|---|---|
htdemucs_ft.yaml |
1.40x |
model_bs_roformer_ep_317_sdr_12.9755.ckpt |
2.16x |
mel_band_roformer_instrumental_instv7n_gabox.ckpt |
2.50x |
UVR-MDX-NET-Inst_HQ_3.onnx |
1.53x |
Median speedup across the 4-model overlap set: 1.847x.
These numbers are scoped to the benchmark settings above and are not universal guarantees for all machines, models, or audio inputs.
Stable Runtime Tuning
Release-facing stable controls:
--speed_mode {default,latency_safe,latency_safe_v2}--cache_clear_policy {aggressive,deferred}--write_workers <int>
Example:
mlx-audio-separator song.mp3 \
--speed_mode latency_safe \
--cache_clear_policy deferred \
--write_workers 2
Basic benchmark command:
mlx-audio-separator \
--benchmark song.mp3 \
--benchmark_warmup 1 \
--benchmark_repeats 3 \
--benchmark_profile
Documentation
| Document | Description |
|---|---|
docs/release-validation.md |
Release evidence snapshot |
docs/release-first.md |
Release execution playbook |
docs/reproducibility.md |
Reproducibility guide |
docs/wave4-opt-in.md |
Wave 4 opt-in/experimental roadmap |
CHANGELOG.md |
Changelog |
THIRD_PARTY_NOTICES.md |
Third-party attribution and license notices |
License
This project is MIT licensed.
Acknowledgments
mlx-audio-separator is derived from audio-separator (upstream repo: nomadkaraoke/python-audio-separator, MIT) by beveradb and the nomadkaraoke community. Substantial portions of the architecture, model loading, and separation logic are adapted from that project. If you find this package useful, please also star and support the upstream project.
The models used by this project were trained by the Ultimate Vocal Remover community, primarily @Anjok07 and @aufr33. See THIRD_PARTY_NOTICES.md for full attribution and license details.
Additional references:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mlx_audio_separator-0.1.2rc1.tar.gz.
File metadata
- Download URL: mlx_audio_separator-0.1.2rc1.tar.gz
- Upload date:
- Size: 298.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c90c9a6928e71f96807445dd484d51dc00e36f490fedcb710f6cf5902e7264f
|
|
| MD5 |
2213a00261c72341f70942d249db85bb
|
|
| BLAKE2b-256 |
5958340bfbcc98b5ed6fbc1a25345bde18ecb0c95b4161c39409ddec72ecf63e
|
Provenance
The following attestation bundles were made for mlx_audio_separator-0.1.2rc1.tar.gz:
Publisher:
release-pypi.yml on ssmall256/mlx-audio-separator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mlx_audio_separator-0.1.2rc1.tar.gz -
Subject digest:
9c90c9a6928e71f96807445dd484d51dc00e36f490fedcb710f6cf5902e7264f - Sigstore transparency entry: 1004089194
- Sigstore integration time:
-
Permalink:
ssmall256/mlx-audio-separator@ef7742bbb01f537bf42eeb7b9a570cd7b60ad896 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ssmall256
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@ef7742bbb01f537bf42eeb7b9a570cd7b60ad896 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file mlx_audio_separator-0.1.2rc1-py3-none-any.whl.
File metadata
- Download URL: mlx_audio_separator-0.1.2rc1-py3-none-any.whl
- Upload date:
- Size: 326.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
802aa8824dbcb5328a97f000722ec239526c2a81ab944577d6cc47fbef277c13
|
|
| MD5 |
ff7d2a51a52bc909c5bfae0222ce9937
|
|
| BLAKE2b-256 |
c526ff703d2d0857e60010faa006fea4a50fbf336dfceb827cab31e68b599070
|
Provenance
The following attestation bundles were made for mlx_audio_separator-0.1.2rc1-py3-none-any.whl:
Publisher:
release-pypi.yml on ssmall256/mlx-audio-separator
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
mlx_audio_separator-0.1.2rc1-py3-none-any.whl -
Subject digest:
802aa8824dbcb5328a97f000722ec239526c2a81ab944577d6cc47fbef277c13 - Sigstore transparency entry: 1004089199
- Sigstore integration time:
-
Permalink:
ssmall256/mlx-audio-separator@ef7742bbb01f537bf42eeb7b9a570cd7b60ad896 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/ssmall256
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-pypi.yml@ef7742bbb01f537bf42eeb7b9a570cd7b60ad896 -
Trigger Event:
workflow_dispatch
-
Statement type: