KakaruHayate/ds2svc

Convert the "DiffSinger" model to an SVC (such as RVC) model

12

stars

7

commits

Python

primary language

Jun 16, 2026

updated

README

ds2svc

PyPI version Python versions Ask DeepWiki

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.

Installation

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: torch is not distributed via PyPI in all configurations. If the install fails, install PyTorch separately following the official guide, then run the pip command again.

From source

git clone https://github.com/KakaruHayate/ds2svc.git
cd ds2svc
pip install -e .[infer,realtime]

Weights

Several model weights need to be downloaded before inference works. See the manual download guide for details and URLs.


What it does

  1. Detect — load a voicebank ZIP, read its yaml manifest, and inspect the ONNX graph internals (not just config) to decide whether it is a legitimate DiffSinger bank or a disguised SVC model.
  2. Extract — recover the SVC ONNX with clean inputs (cvec_units + f0).
  3. Infer — run inference via CLI, Streamlit WebUI, or realtime GUI.

Supported disguises:

SourceBased onDisguiseGenuine model recovered
UTAIRVCRVC packed as a "vocoder"(units[768], f0) → waveform
DDSP-SVSDDSP-SVCDDSP-SVC packed inside the "acoustic" model(units[768], f0, volume) → mel → pc-nsf-hifigan

Quick start

# 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

WebUI

pip install 'ds2svc[infer,webui]'
streamlit run $(python -c "import ds2svc.webui.app; print(ds2svc.webui.app.__file__)")

Realtime GUI

pip install 'ds2svc[infer,realtime]'
ds2svc realtime artifacts/my_svc

Detection signatures

Detection trusts the ONNX graph, not the config (config fields are easy to fake, and unusual-but-legit banks exist):

  • UTAI / RVC — the payload graph contains a normalizing flow (net_g/flow) beside net_g/enc_p and an NSF decoder net_g/dec: the RVC SynthesizerTrn.
  • DDSP-SVS — the acoustic graph contains a real STFT op (legit DiffSinger acoustics have none) plus ddsp_model/unit2ctrl, istft_method, melext, and a backend_reflow ReFlow stage.
  • DSP ops alone (Sin/Cos/CumSum/RandomNormalLike) are not used — they also appear in genuine DiffSinger diffusion backbones.

Development

Tests reference private voicebanks by anonymized IDs. Copy tests/fixtures/local_banks.example.jsonlocal_banks.json (gitignored) and point the IDs at your local archives, then:

pip install 'ds2svc[dev]'
pytest

License

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.

Contributors

KakaruHayate

7 commits

KakaruHayate/ds2svc

Convert the "DiffSinger" model to an SVC (such as RVC) model

12

stars

7

commits

Python

primary language

Jun 16, 2026

updated

README

ds2svc

PyPI version Python versions Ask DeepWiki

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.

Installation

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: torch is not distributed via PyPI in all configurations. If the install fails, install PyTorch separately following the official guide, then run the pip command again.

From source

git clone https://github.com/KakaruHayate/ds2svc.git
cd ds2svc
pip install -e .[infer,realtime]

Weights

Several model weights need to be downloaded before inference works. See the manual download guide for details and URLs.


What it does

  1. Detect — load a voicebank ZIP, read its yaml manifest, and inspect the ONNX graph internals (not just config) to decide whether it is a legitimate DiffSinger bank or a disguised SVC model.
  2. Extract — recover the SVC ONNX with clean inputs (cvec_units + f0).
  3. Infer — run inference via CLI, Streamlit WebUI, or realtime GUI.

Supported disguises:

SourceBased onDisguiseGenuine model recovered
UTAIRVCRVC packed as a "vocoder"(units[768], f0) → waveform
DDSP-SVSDDSP-SVCDDSP-SVC packed inside the "acoustic" model(units[768], f0, volume) → mel → pc-nsf-hifigan

Quick start

# 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

WebUI

pip install 'ds2svc[infer,webui]'
streamlit run $(python -c "import ds2svc.webui.app; print(ds2svc.webui.app.__file__)")

Realtime GUI

pip install 'ds2svc[infer,realtime]'
ds2svc realtime artifacts/my_svc

Detection signatures

Detection trusts the ONNX graph, not the config (config fields are easy to fake, and unusual-but-legit banks exist):

  • UTAI / RVC — the payload graph contains a normalizing flow (net_g/flow) beside net_g/enc_p and an NSF decoder net_g/dec: the RVC SynthesizerTrn.
  • DDSP-SVS — the acoustic graph contains a real STFT op (legit DiffSinger acoustics have none) plus ddsp_model/unit2ctrl, istft_method, melext, and a backend_reflow ReFlow stage.
  • DSP ops alone (Sin/Cos/CumSum/RandomNormalLike) are not used — they also appear in genuine DiffSinger diffusion backbones.

Development

Tests reference private voicebanks by anonymized IDs. Copy tests/fixtures/local_banks.example.jsonlocal_banks.json (gitignored) and point the IDs at your local archives, then:

pip install 'ds2svc[dev]'
pytest

License

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.

Contributors

KakaruHayate

7 commits

Languages

Python

100.0%