Skip to main content
Back to Showcase

Kahya TTS: Turkish Voice-Cloning Speech Synthesis Fine-Tuned from VoxCPM2

Author:Alican KirazModel:VoxCPM2

Turkish TTS fine-tuned from VoxCPM2 with reference-based voice cloning

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​

ItemValue
Base modelopenbmb/VoxCPM2
Fine-tuned checkpointAlicanKiraz0/Kizagan-TTS-step_1500
DatasetAlicanKiraz0/TR-Voice-TTS, a private Turkish single-speaker corpus
AdaptationLoRA, rank 64, alpha 64, on LM + DiT attention projections
Release formatFull merged weights; load directly without re-applying the old adapter
Inference dtype / outputBF16 / 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:

Bash
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:

Bash
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.

CapabilityHow to use itEvidence for this release
Reference-only cloning--reference or Python reference_wav_pathPackaged command tested; limited same-speaker listening results
Long text with the same reference--sentences-file, one utterance per linePreferred in the two recorded long-text listening trials
Reference plus its transcriptPython prompt_wav_path + prompt_textInherited VoxCPM2 API (upstream "Ultimate Cloning"); functional check only
Emotion / pace guidance with a referenceParenthesized natural-language instruction at the start of the textInherited control format; style accuracy not evaluated
Voice design without a referenceVoice description at the start of the textInherited control format; designed-voice quality not evaluated
Plain TTS without a referencePython generate(text=...)Inherited API; default-voice quality not evaluated
Streaming audio chunksPython 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.

ExampleSentencesGenerated audioSum of call timesAggregate RTFPeak PyTorch reserved
Library, 151 words1268.16 s24.521 s0.3606,114 MiB
Train platform, 149 words1366.72 s24.042 s0.3606,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:

ExampleSentence-by-sentence naturalness / similarityWhole-paragraph naturalness / similarityPreference
Library5/5 and 5/51/5 and 1/5Sentence-by-sentence
Train platform4/5 and 5/51/5 and 1/5Sentence-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.
  • --text is 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.

Built by Alican Kiraz. The VoxCPM2 base model is by OpenBMB.

Project info

Model
VoxCPM2
Author
Alican Kiraz