Downloads · 30 days
0
aruiki/stemstudio-htdemucs-onnx
stemstudio-htdemucs-onnx is a audio-to-audio model from aruiki. Use it for the audio-to-audio task on the model card, and read the license before you ship it in a product. It is set up for onnx. The card lists the license as mit.
Hybrid Transformer Demucs, exported to ONNX and prepared for in-browser inference with onnxruntime-web on the WebGPU backend. Used by stemstudio.jp for local, upload-free stem separation.
Downloads · 30 days
0
Access
Public
Updated Aug 13, 2026
Repo size
2.2 GB
Likes
0
Public
Click a slice to open those files.
.gzbin1.2 GB · 55%
From the Hugging Face model README
Hybrid Transformer Demucs, exported to ONNX and prepared for in-browser inference with onnxruntime-web on the WebGPU backend. Used by stemstudio.jp for local, upload-free stem separation.
Derived from facebookresearch/demucs
(MIT). See LICENSE — the upstream notice travels with these files.
| File | Transfer (gzip) | Inflated | Stems |
|---|---|---|---|
htdemucs_ft.opt.fp16.istft.onnx.gzbin | 141,591,461 | 172,746,888 | vocals / instrumental (fine-tuned) |
htdemucs_4s.opt.fp16.istft.onnx.gzbin | 141,601,329 | 172,746,888 | vocals / drums / bass / other |
htdemucs_6s.opt.fp16.istft.onnx.gzbin | 114,203,693 | 142,573,723 | + guitar / piano |
1. The .gzbin extension is deliberate. These are raw gzip streams stored
as ordinary files, and the browser inflates them with
DecompressionStream('gzip'). They are not named .gz, because some hosts
and dev servers see that extension and add content-encoding: gzip, at which
point the transport decompresses them and the application decompresses them
again — which fails with incorrect header check. Detect gzip by the leading
magic bytes (1f 8b), not by header or extension.
The compression is in the file rather than in the transport because model hosts
generally serve .onnx uncompressed regardless of Accept-Encoding.
2. Build order matters: optimize before fp16, not after. Running the
graph optimizer on an fp16 graph overflows folded constants to inf and every
output becomes NaN. Worse, nan > tolerance is false, so a naive comparison
reports "max diff 0.000e+00 / OK" on a completely broken model. The order used
here is: fp32 export → graph optimization → fp16 weights → inverse STFT folded
into the graph.
Measured on one 7.8 s segment, same model, same host:
| wasm heap | wasm infer | WebGPU session build | |
|---|---|---|---|
| unoptimized | 1,223 MB | 16.8 s | 15.6 s |
| optimized | 3,251 MB | 18.1 s | 1.4 s |
On WebGPU, session build gets ~11× faster. On wasm, heap grows 2.7× and inference gets slower. "Ship the optimized one and everyone gets faster" is false — pick per execution provider.
The upstream weights were trained on MUSDB18-HQ and additional sources. The MIT license covers the code and these derived graphs; the dataset carries its own terms, which are worth checking for your own use.