|
Download README.md from arraypress/stems-mdx: direct link, hf CLI and curl.
- Browser
- Download file 2.35 kB
-
https://huggingface.co/arraypress/stems-mdx/resolve/main/README.md
- Command line
-
hf download hf://arraypress/stems-mdx/README.md
-
curl -L -o README.md https://huggingface.co/arraypress/stems-mdx/resolve/main/README.md
2.35 kB
| license: mit | |
| pipeline_tag: audio-to-audio | |
| tags: | |
| - source-separation | |
| - vocal-separation | |
| - mdx23c | |
| - core-ai | |
| - apple-silicon | |
| # MDX23C InstVoc HQ β Core AI (float16) | |
| Vocal / instrumental separation for Apple silicon: **MDX23C-8KFFT-InstVoc_HQ** | |
| converted to a Core AI asset (`stems-mdx23c-instvoc-float16.aimodel`, 214 MB) for | |
| on-device use from Swift. | |
| ## Credit | |
| - **Architecture:** TFC-TDF-UNet v3 (MDX23C) β Kim & Lee. | |
| - **Implementation:** [ZFTurbo/Music-Source-Separation-Training](https://github.com/ZFTurbo/Music-Source-Separation-Training) (MIT). | |
| - **Weights:** `MDX23C-8KFFT-InstVoc_HQ` from [Ultimate Vocal Remover](https://github.com/Anjok07/ultimatevocalremovergui)'s public model repository (MIT). | |
| This repository only converts those weights; all credit for the model belongs to them. | |
| ## What the asset computes | |
| The network between the spectrogram and the stem spectrograms β the STFT, chunking and | |
| inverse STFT run in the host: | |
| - input `spec` `[1, 4, 4096, 256]` float32 β left re, left im, right re, right im; bins 0β4095 | |
| of an STFT with n_fft 8192, hop 1024, periodic Hann, centred; one chunk is 261,120 samples | |
| at 44.1 kHz. | |
| - output `stems` `[1, 8, 4096, 256]` float32 β vocals (4 channels), then instrumental. | |
| Weights and arithmetic are float16 behind float32 input and output. | |
| ## Measured (macOS 27, Apple silicon) | |
| | | this asset | float32 export | 8-bit Core ML package | | |
| |---|---|---|---| | |
| | one chunk vs PyTorch float32 | 62.6 dB | 123.9 dB | 35.3 dB | | |
| | time per chunk (GPU) | 0.27 s | 0.31 s | 0.74 s | | |
| | a 30 s mix, end to end | 3.0 s | 3.5 s | 6.9 s | | |
| On three 30-second mixes with a known vocal, all three scored the same vocal and | |
| instrumental SDR to within 0.01 dB. Repeated runs are bit-for-bit identical. The export | |
| asserts the converted network equals upstream's `model(chunk)` exactly before saving. | |
| ## Use | |
| With [`stems`](https://github.com/arraypress), which fetches this on first use: | |
| ```sh | |
| stems song.mp3 # song-vocal.wav + song-instrumental.wav | |
| ``` | |
| From Swift, with [swift-vocal-isolation](https://github.com/arraypress/swift-vocal-isolation): | |
| ```swift | |
| let separator = try await MDXSeparator(contentsOf: assetURL) | |
| let stems = try await separator.separate(contentsOf: songURL) | |
| ``` | |
| Converted with `Tools/export_mdx.py --precision float16` in swift-vocal-isolation. | |