--- pipeline_tag: audio-to-audio library_name: onnxruntime tags: - stem-separation - open-unmix - umxl - onnx - on-device - android license: mit --- # Open-Unmix UMX-L — ONNX Stem Separation Models 4 source-specific ONNX models for stem separation, exported from [Open-Unmix UMX-L](https://github.com/sigsep/open-unmix-pytorch). ## Models | File | Source | Size | Format | |------|--------|------|--------| | `umxl_vocals.onnx` | Vocals | ~108 MB | ONNX opset 17 | | `umxl_drums.onnx` | Drums | ~108 MB | ONNX opset 17 | | `umxl_bass.onnx` | Bass | ~108 MB | ONNX opset 17 | | `umxl_other.onnx` | Other | ~108 MB | ONNX opset 17 | ## Architecture Open-Unmix operates in the **spectrogram domain** (not waveform). Each model: - **Input**: Magnitude spectrogram `(batch, 2, 2049, nb_frames)` — stereo, 2049 frequency bins - **Output**: Masked spectrogram `(batch, 2, 2049, nb_frames)` — same shape - **Internal**: Linear → BatchNorm → LSTM (3 layers) → Linear → Output scaling → ReLU masking ## Usage STFT and ISTFT must be performed on-device: 1. **STFT**: `n_fft=4096`, `n_hop=1024`, sample rate `44100 Hz` 2. **Magnitude**: Compute `|STFT(audio)|` → `(1, 2, 2049, frames)` 3. **Model**: Run each source model on the magnitude spectrogram 4. **Reconstruct**: Multiply masked spectrogram with complex STFT phase 5. **ISTFT**: Invert back to waveform ## Config `config.json` contains STFT parameters: ```json { "n_fft": 4096, "n_hop": 1024, "nb_bins": 2049, "sample_rate": 44100, "sources": ["vocals", "drums", "bass", "other"], "model": "umxl" } ``` ## Verification All models verified with ONNX Runtime (max absolute diff < 0.00001 vs PyTorch). ## For DJNed App These models are used by the DJNed Android app for on-device stem separation. Download is managed by the app's Model Manager.