File size: 8,750 Bytes
3c19017 8ec1ae5 52bc50f 086f534 8ec1ae5 52bc50f af100d8 3c19017 8ec1ae5 83971e9 8ec1ae5 52bc50f 8ec1ae5 52bc50f af100d8 086f534 83971e9 b18f05f 52bc50f c2ba9d0 52bc50f bc35683 52bc50f 086f534 bc35683 086f534 52bc50f bc35683 52bc50f eb1c57d 52bc50f eb1c57d 52bc50f eb1c57d 52bc50f 004b868 bc35683 004b868 52bc50f b18f05f 52bc50f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | ---
license: apache-2.0
base_model: openbmb/VoxCPM2
pipeline_tag: text-to-speech
language:
- zh
datasets:
- pymaster/CrawlSinger-OS
tags:
- singing-voice-synthesis
- score-conditioned
- music
- arxiv:2607.27768
spaces:
- pymaster/VocalRender-demo
---
# VocalRender
**VocalRender: Score-Native Singing Voice Synthesis for Real-World Composition**
- [Paper](https://arxiv.org/abs/2607.27768)
- [Code and documentation](https://github.com/pymaster17/VocalRender)
- [Online inference demo](https://huggingface.co/spaces/pymaster/VocalRender-demo)
- [Open-source training dataset](https://huggingface.co/datasets/pymaster/CrawlSinger-OS)
VocalRender is a score-native singing voice synthesis (SVS) model designed for
real-world composition. It synthesizes 48 kHz singing directly from lyrics,
MIDI pitches, symbolic note values, and tempo through an original combination
of an interleaved lyric--note representation, continuous acoustic latents, and
autoregressive diffusion modeling. It does not require phoneme-level
durations, an explicit duration predictor, or a time-aligned acoustic
reference.

## For musicians: try it without writing code
You do not need to understand machine learning or install the model to try
VocalRender. Open the **[online VocalRender demo](https://huggingface.co/spaces/pymaster/VocalRender-demo)**
and work with familiar score formats in your browser.
### What VocalRender does
VocalRender sings a melody that you provide. You choose the lyrics, notes,
rhythm, tempo, and a short voice reference; the model renders them as a singing
voice. It is a score renderer rather than an automatic composer: it does not
write the melody or arrange an accompaniment for you.
### What to prepare
- **A melody:** paste ABC notation, upload an ABC file, or upload MusicXML from
notation software such as MuseScore. You can also enter notes manually.
- **Chinese lyrics:** embedded ABC `w:` or MusicXML lyrics can be imported. If
the score has no note-aligned lyrics, type or paste them in the lyrics box.
- **A voice reference:** select one of the included voices, or upload 2–8
seconds of clean, unaccompanied singing that you have permission to use. The
clip supplies the vocal color; it does not need to be the same song.
### Score-to-song workflow
1. Open **Import ABC notation or MusicXML**, provide your score, and press
**Parse score**.
2. Check the suggested vocal part, lyric line, and measure range. The demo
preselects a short range that fits the model; you can change it.
3. Press **Load selected range into editor**. Review the lyrics, pitches,
durations, and BPM, then press **Generate Singing**.
In the editor, MIDI pitch `60` means middle C (`C4`), and pitch `0` means a
rest. **+ Melisma note** lets one lyric syllable continue across multiple
notes. `SP` represents a rest or breath.
The released checkpoint currently works best with Mandarin Chinese and a
single vocal melody. Chord names in ABC, such as `"C"` or `"G7"`, are treated
as accompaniment labels and ignored, but actual simultaneous notes are not
supported. For piano or ensemble scores, select a monophonic vocal/melody part.
The demo reports unsupported passages instead of silently guessing which note
should be sung.
## How it works
VocalRender combines three components:
1. A score-native interleaved representation serializes BPM followed by each
lyric syllable and its associated `(pitch, note-value)` pairs. This retains
lyric-to-note alignment and supports melisma.
2. An Audio VAE represents singing as compact continuous acoustic latents.
3. An autoregressive diffusion model generates the latent sequence patch by
patch and decides when to stop. The VAE decoder renders the result as a
waveform.

## Checkpoints
This repository contains two variants with the **same architecture, parameter
count, and speech-pretrained base-model initialization**. Their only
difference is the training recipe (training corpus and schedule):
| Variant | Repository path | Training data and strategy | Paper results |
| --- | --- | --- | --- |
| **VocalRender** | `VocalRender/` | CrawlSinger-OS (>2,300 h); 40k-step synthetic pretraining followed by 20k-step real-data finetuning | Stronger subjective score following (MS-MOS 2.96) |
| **VocalRender-Pro** | `VocalRender-Pro/` | CrawlSinger (>5,600 h of in-house real singing); 160k training steps | Better intelligibility, speaker similarity, naturalness, and OOD robustness; MS-MOS 2.71 |
VocalRender-Pro reduces WER from 4.44 to 3.88 and improves speaker similarity
from 0.922 to 0.929 on Opencpop. On CrawlSinger-Eval, WER changes from 4.52 to
4.45 and similarity from 0.919 to 0.926. The paper relates these improvements
to the larger amount of real singing and broader singer coverage. VocalRender's
higher score-following score may reflect more reliable score annotations in
its real-data finetuning subset.
Each directory contains the model weights, AudioVAE, model configuration, and
extended SVS tokenizer required by the inference code. Both checkpoints have
the same model size; each is approximately 9.5 GB to download.
## Installation
```bash
git clone --recurse-submodules https://github.com/pymaster17/VocalRender.git
cd VocalRender
uv sync
source .venv/bin/activate
```
## Download
Download either checkpoint into the repository's `pretrained_models/`
directory:
```bash
# VocalRender
hf download pymaster/VocalRender \
--include "VocalRender/*" \
--local-dir pretrained_models
# Or VocalRender-Pro
hf download pymaster/VocalRender \
--include "VocalRender-Pro/*" \
--local-dir pretrained_models
```
## Quick inference
The GitHub repository includes three ready-to-use prompt/score pairs selected
from OpenCpop. This command runs the first demo:
```bash
python scripts/infer_vocalrender_svs_single.py \
--ckpt_dir pretrained_models/VocalRender \
--json_file examples/opencpop_demo.json \
--item_name 2003000087 \
--prompt_audio examples/prompt_audio/2003000081.wav \
--output demo_2003000087.wav
```
Additional bundled pairs are `2017000646` with prompt `2017000644.wav`, and
`2044001652` with prompt `2044001666.wav`. The prompt clips are 4.19-6.17
seconds long and do not overlap their paired target segment. Clone the
[GitHub repository](https://github.com/pymaster17/VocalRender) to obtain the
scripts and examples. The excerpts remain subject to the
[OpenCpop](https://wenet.org.cn/opencpop/) terms.
Use `pretrained_models/VocalRender-Pro` as `--ckpt_dir` to run the Pro model.
Full generation requires a CUDA-capable compute node. Prompt audio is required:
the released checkpoints were trained with prompt audio on every sample
(`prompt_audio_prob=1.0`), so prompt-free inference is unsupported and may
substantially degrade quality. Use a clean 2-8 second singing clip, which also
provides the target timbre. See the
[repository README](https://github.com/pymaster17/VocalRender#batch-inference) for
batch-inference options.
## Input format
```json
{
"item_name": "demo",
"word": ["我", "的", "孤", "独"],
"pitch": [65, 64, 64, 65, 67, 65],
"note": ["<NOTE_8>", "<NOTE_32>", "<NOTE_16>", "<NOTE_16>", "<NOTE_16>", "<NOTE_8>"],
"pitch2word": [0, 1, 2, 2, 2, 3],
"bpm": 64
}
```
`pitch2word[i]` identifies the lyric index associated with note `i`, allowing
one lyric syllable to span multiple notes. `word_dur` and `pitch_dur` are
optional fields used only for visualization and evaluation; they are not model
inputs.
## Limitations
- The released checkpoints primarily target Mandarin Chinese singing.
- Checkpoint loading and generation require substantial disk space, system
memory, and GPU memory.
- Output quality depends on the musical validity and lyric-to-note alignment of
the input score.
## Model foundation
The released implementation initializes its ARDM backbone from the
speech-pretrained [VoxCPM2](https://huggingface.co/openbmb/VoxCPM2) weights.
The score-native representation, SVS formulation, data pipeline, and singing
training recipe are introduced by VocalRender.
## Citation
```bibtex
@article{chen2026vocalrender,
title = {VocalRender: Score-Native Singing Voice Synthesis for Real-World Composition},
author = {Chen, Yukun and Wang, Tianrui and Mu, Zhaoxi and Yang, Xinyu and Chng, EngSiong},
journal = {arXiv preprint arXiv:2607.27768},
year = {2026},
url = {https://arxiv.org/abs/2607.27768}
}
```
## License
Apache License 2.0. See the repository's `LICENSE` file for details.
|