Restore SVC models that have been disguised as OpenUTAU-compatible DiffSinger voicebanks, and run inference on the recovered model.
Some packed "DiffSinger" voicebanks in the wild are not DiffSinger at all — they
are existing SVC models (RVC, DDSP-SVC) repackaged to run on a DiffSinger ONNX
API. This harms the open community's trust and safety. ds2svc identifies such
banks, extracts the genuine SVC model back out, and provides inference.
pip install ds2svc # detection + extraction only
pip install 'ds2svc[infer]' # + inference (torch, transformers, librosa)
pip install 'ds2svc[infer,realtime]' # + realtime GUI (sounddevice, FreeSimpleGUI)
pip install 'ds2svc[infer,webui]' # + Streamlit WebUI
PyTorch note:
torchis not distributed via PyPI in all configurations. If the install fails, install PyTorch separately following the official guide, then run the pip command again.
git clone https://github.com/KakaruHayate/ds2svc.git
cd ds2svc
pip install -e .[infer,realtime]
Several model weights need to be downloaded before inference works. See the manual download guide for details and URLs.
cvec_units + f0).Supported disguises:
| Source | Based on | Disguise | Genuine model recovered |
|---|---|---|---|
| UTAI | RVC | RVC packed as a "vocoder" | (units[768], f0) → waveform |
| DDSP-SVS | DDSP-SVC | DDSP-SVC packed inside the "acoustic" model | (units[768], f0, volume) → mel → pc-nsf-hifigan |
# 1. Detect a voicebank
ds2svc detect suspicious_bank.zip
# → verdict: utai_rvc (RVC-based)
# 2. Extract the SVC model
ds2svc extract suspicious_bank.zip --out artifacts/my_svc
# 3. Run inference on a dry vocal
ds2svc infer artifacts/my_svc --in vocal.wav --out converted.wav --f0 fcpe
pip install 'ds2svc[infer,webui]'
streamlit run $(python -c "import ds2svc.webui.app; print(ds2svc.webui.app.__file__)")
pip install 'ds2svc[infer,realtime]'
ds2svc realtime artifacts/my_svc
Detection trusts the ONNX graph, not the config (config fields are easy to fake, and unusual-but-legit banks exist):
net_g/flow)
beside net_g/enc_p and an NSF decoder net_g/dec: the RVC SynthesizerTrn.STFT op (legit DiffSinger
acoustics have none) plus ddsp_model/unit2ctrl, istft_method, melext, and
a backend_reflow ReFlow stage.Sin/Cos/CumSum/RandomNormalLike) are not used — they
also appear in genuine DiffSinger diffusion backbones.Tests reference private voicebanks by anonymized IDs. Copy
tests/fixtures/local_banks.example.json → local_banks.json (gitignored) and
point the IDs at your local archives, then:
pip install 'ds2svc[dev]'
pytest
MIT. This project is for community safety and lawful recovery of open or self-owned models. Respect the licenses of upstream RVC / DDSP-SVC / DiffSinger.
7 commits
Python
100.0%
Restore SVC models that have been disguised as OpenUTAU-compatible DiffSinger voicebanks, and run inference on the recovered model.
Some packed "DiffSinger" voicebanks in the wild are not DiffSinger at all — they
are existing SVC models (RVC, DDSP-SVC) repackaged to run on a DiffSinger ONNX
API. This harms the open community's trust and safety. ds2svc identifies such
banks, extracts the genuine SVC model back out, and provides inference.
pip install ds2svc # detection + extraction only
pip install 'ds2svc[infer]' # + inference (torch, transformers, librosa)
pip install 'ds2svc[infer,realtime]' # + realtime GUI (sounddevice, FreeSimpleGUI)
pip install 'ds2svc[infer,webui]' # + Streamlit WebUI
PyTorch note:
torchis not distributed via PyPI in all configurations. If the install fails, install PyTorch separately following the official guide, then run the pip command again.
git clone https://github.com/KakaruHayate/ds2svc.git
cd ds2svc
pip install -e .[infer,realtime]
Several model weights need to be downloaded before inference works. See the manual download guide for details and URLs.
cvec_units + f0).Supported disguises:
| Source | Based on | Disguise | Genuine model recovered |
|---|---|---|---|
| UTAI | RVC | RVC packed as a "vocoder" | (units[768], f0) → waveform |
| DDSP-SVS | DDSP-SVC | DDSP-SVC packed inside the "acoustic" model | (units[768], f0, volume) → mel → pc-nsf-hifigan |
# 1. Detect a voicebank
ds2svc detect suspicious_bank.zip
# → verdict: utai_rvc (RVC-based)
# 2. Extract the SVC model
ds2svc extract suspicious_bank.zip --out artifacts/my_svc
# 3. Run inference on a dry vocal
ds2svc infer artifacts/my_svc --in vocal.wav --out converted.wav --f0 fcpe
pip install 'ds2svc[infer,webui]'
streamlit run $(python -c "import ds2svc.webui.app; print(ds2svc.webui.app.__file__)")
pip install 'ds2svc[infer,realtime]'
ds2svc realtime artifacts/my_svc
Detection trusts the ONNX graph, not the config (config fields are easy to fake, and unusual-but-legit banks exist):
net_g/flow)
beside net_g/enc_p and an NSF decoder net_g/dec: the RVC SynthesizerTrn.STFT op (legit DiffSinger
acoustics have none) plus ddsp_model/unit2ctrl, istft_method, melext, and
a backend_reflow ReFlow stage.Sin/Cos/CumSum/RandomNormalLike) are not used — they
also appear in genuine DiffSinger diffusion backbones.Tests reference private voicebanks by anonymized IDs. Copy
tests/fixtures/local_banks.example.json → local_banks.json (gitignored) and
point the IDs at your local archives, then:
pip install 'ds2svc[dev]'
pytest
MIT. This project is for community safety and lawful recovery of open or self-owned models. Respect the licenses of upstream RVC / DDSP-SVC / DiffSinger.
7 commits
Python
100.0%