Kahya TTS is a Turkish text-to-speech adaptation of OpenBMB's VoxCPM2, released by Alican Kiraz (the model repository has since been renamed Kızagan-TTS-v1.0). It produces mono 48 kHz speech, can clone a voice from a reference recording, and ships a reference-conditioned inference script for explicit sentence-by-sentence generation. A Space demo lets you try it online.
v1.0 packages the already evaluated, merged Step 1500 checkpoint. No additional fine-tuning or weight changes were made for this release; it adds a documented inference recipe, runnable commands and evaluation results.
Model and training provenance
| Item | Value |
|---|---|
| Base model | openbmb/VoxCPM2 |
| Fine-tuned checkpoint | AlicanKiraz0/Kizagan-TTS-step_1500 |
| Dataset | AlicanKiraz0/TR-Voice-TTS, a private Turkish single-speaker corpus |
| Adaptation | LoRA, rank 64, alpha 64, on LM + DiT attention projections |
| Release format | Full merged weights; load directly without re-applying the old adapter |
| Inference dtype / output | BF16 / mono 48 kHz |
The model in the Space demo has ~2.29B parameters, and its inference code is vendored from a pinned revision of OpenBMB/VoxCPM. The author notes that the original training input manifest and optimizer state were not recovered, so the card does not claim an independently reproduced training run.
Quick start
The card's commands target Linux with an NVIDIA CUDA GPU and Python 3.12, with VoxCPM pinned to the source revision used in evaluation:
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu130
python -m pip install "voxcpm @ git+https://github.com/OpenBMB/VoxCPM.git@f772e498a45fbb5fb8e13fbf9b9c48be9fe33e69" "huggingface_hub==1.30.0"
hf download AlicanKiraz0/Kizagan-TTS-v1.0 --local-dir ./Kizagan-TTS-v1.0
Clone a voice from a clean mono reference recording and synthesize new text:
python ./Kizagan-TTS-v1.0/inference.py \
--model ./Kizagan-TTS-v1.0 \
--reference ./speaker.wav \
--text "Merhaba, yeni bir metni referans sesle okuyorum." \
--output-dir ./Kizagan-voice-clone
Each run writes audio.wav, per-sentence sentence_*.wav files and metrics.json. The script fixes CFG 2.0, 16 diffusion steps and seed 42, disables compilation, denoising and automatic retries, and concatenates audio without adding silence, trimming or crossfading. The packaged command's smoke check produced 3.36 seconds of 48 kHz audio — listen to the sample.
Voice cloning
Kahya takes a reference recording at inference time and generates new text conditioned on it; a new recording does not train another adapter or change the weights. A transcript of the reference is optional — the packaged inference.py uses reference audio alone.
| Capability | How to use it | Evidence for this release |
|---|---|---|
| Reference-only cloning | --reference or Python reference_wav_path | Packaged command tested; limited same-speaker listening results |
| Long text with the same reference | --sentences-file, one utterance per line | Preferred in the two recorded long-text listening trials |
| Reference plus its transcript | Python prompt_wav_path + prompt_text | Inherited VoxCPM2 API (upstream "Ultimate Cloning"); functional check only |
| Emotion / pace guidance with a reference | Parenthesized natural-language instruction at the start of the text | Inherited control format; style accuracy not evaluated |
| Voice design without a reference | Voice description at the start of the text | Inherited control format; designed-voice quality not evaluated |
| Plain TTS without a reference | Python generate(text=...) | Inherited API; default-voice quality not evaluated |
| Streaming audio chunks | Python generate_streaming(...) | Python yields chunks; CLI saves completed WAVs |
Tips:
- Use your own voice or a recording you have permission to use: one speaker, a quiet room, clear pronunciation, no background music, overlapping speech or clipping. The evaluated reference was 6.175 s long, but that is an example, not an API limit.
- VoxCPM2 resamples the reference to 16 kHz internally; output is 48 kHz.
- This is voice-conditioned TTS from text, not a speech-to-speech voice converter.
- For long text, prepare a one-sentence-per-line file: every line starts from a fresh cache built from the same original reference, and generated sentences are not fed back as the next prompt.
Measured performance
From a fixed development run on an NVIDIA RTX PRO 6000 Blackwell Workstation Edition (96 GB), CUDA BF16, CFG 2.0, 16 diffusion steps, seed 42 and the same reference clip. These are observations from two texts, not a throughput SLA.
| Example | Sentences | Generated audio | Sum of call times | Aggregate RTF | Peak PyTorch reserved |
|---|---|---|---|---|---|
| Library, 151 words | 12 | 68.16 s | 24.521 s | 0.360 | 6,114 MiB |
| Train platform, 149 words | 13 | 66.72 s | 24.042 s | 0.360 | 6,114 MiB |
Aggregate RTF = sum of call seconds / sum of audio seconds, excluding model loading, file I/O and final assembly. Details are in evaluation/README.md.
Listening results
One Turkish listener compared sentence-by-sentence and whole-paragraph generation on two new development texts, with balanced A/B positions and matched loudness:
| Example | Sentence-by-sentence naturalness / similarity | Whole-paragraph naturalness / similarity | Preference |
|---|---|---|---|
| Library | 5/5 and 5/5 | 1/5 and 1/5 | Sentence-by-sentence |
| Train platform | 4/5 and 5/5 | 1/5 and 1/5 | Sentence-by-sentence |
The listener reported deterioration toward the end of both whole-paragraph outputs. Fixed ASR word-error counts (whole paragraph / sentence-by-sentence) were 1/151 vs 0/151 on the library text and 2/149 vs 2/149 on the platform text. The author stresses these support development use only — they are not population MOS and do not guarantee quality on arbitrary text.
Limitations
- Fine-tuning used a single-speaker corpus and listening tests used that same speaker, so cloning similarity for unfamiliar speakers, accents or languages is not established.
--textis a single call and does not split paragraphs; use a sentences file for long text.- The script does not resolve Turkish abbreviations, numbers or ambiguous sentence boundaries; spell numbers out as they should be spoken.
- Style instructions, voice design and streaming were only checked for successful execution, not by listening.
- No pauses or crossfades are added between sentences, so joins may be imperfect.
Links
- Model repository: AlicanKiraz0/Kahya-TTS-v1.0 (now Kizagan-TTS-v1.0)
- Online demo: hugging-apps/kahya-tts-v1
- Base model: openbmb/VoxCPM2; upstream implementation OpenBMB/VoxCPM
- Technical report: VoxCPM2 Technical Report
Built by Alican Kiraz. The VoxCPM2 base model is by OpenBMB.
