IndexTTS-2.5 β the libwaifu package
IndexTTS-2.5, converted to the package format libwaifu reads. A few seconds of somebody speaking and a sentence in; the sentence, in that voice, out. The same six models drawing the same audio; a different file layout and one table instead of six.
By downloading these files you agree to the bilibili Model Use License Agreement, a copy of which is distributed here as
LICENSE. Commercial use beyond 100 million monthly active users or RMB 1 billion in annual revenue (Β§2.2) needs a separate license from bilibili; deployment in medical, autonomous-driving, military, critical-infrastructure, biometric-surveillance or automated-decision-making settings is prohibited outright (Β§4.2).This is a modified copy β see
NOTICEfor what was changed β and it is not an official bilibili or IndexTeam product and is not endorsed by either. The original weights are at IndexTeam/IndexTTS-2.5. Any modifications made here are not endorsed, warranted, or guaranteed by bilibili, who disclaims all liability related to this derivative work.Three further components are bundled in under their own, permissive licenses β see Attribution below.
What is here
| package | on disk | what it is |
|---|---|---|
indextts25.yaml and its parts |
5.1 GB | float32 throughout |
One manifest carries the whole pipeline: the GPT, the emotion path, w2v-bert's front end, CAMPPlus, the semantic codec's decoder, S2Mel and the BigVGAN vocoder, plus the tokenizer. Nothing else has to be fetched to speak.
Speaking with it
waifu draw -voice indextts25.yaml # the page's text2speech tab
cargo run --release --example speak -- indextts25.yaml voice.wav "Hello there." out.wav
let tts = IndexTts::from_manifest(Device::Cuda, Residency::Device, &manifest)?;
let voice = tts.listen(&recording)?; // once per voice
let sound = tts.say("δ»ε€©ε€©ζ°εΎε₯½γ", &voice, &options, &mut report)?;
Fifteen seconds of the target voice is what it reads; the sentence comes out in that voice,
English, Chinese, Japanese and Cantonese all understood. docs/indextts.md in the libwaifu
repository has the full pipeline β what each of the seven models does and in what order.
Where this package knowingly differs from upstream
- No beam search. Upstream samples inside a three-way beam search; this draws one sequence with the same temperature, top-k, top-p and repetition penalty.
- The language is guessed from the script, not asked for: Kana reads as Japanese, other CJK script as Chinese, everything else as English.
- The emotion cannot be set independently. Upstream can also take eight named emotions or read one out of an instruction with a small Qwen model; neither is here, so the voice sounds the way its reference recording felt.
Nothing is narrowed for size: upstream runs S2Mel and the vocoder with autocast off, in float32, and that is exactly where half a precision's worth of error would become audible in a vocoder β so the package stays about the size of the release.
Verifying it
Checked against upstream's own CAMPPlus, over three LibriSpeech speakers: sentences said in a
given voice come back 0.85β0.89 similar to that speaker's own recording by cosine similarity, and
0.32β0.63 similar to an unrelated one. docs/indextts.md has the fuller account, including a
by-hand transcription check against Whisper.
Attribution
IndexTTS-2.5 is licensed under the bilibili Model Use License Agreement β see https://huggingface.co/IndexTeam/IndexTTS-2.5/blob/main/LICENSE.
This package also bundles, converted the same way:
- w2v-bert-2.0 from facebook/w2v-bert-2.0 (MIT)
- CAMPPlus from funasr/campplus (Apache License 2.0)
- BigVGAN from nvidia/bigvgan_v2_22khz_80band_256x (MIT)
See NOTICE for exactly what was changed in each.
Model tree for ling0322/libwaifu-indextts-2.5
Base model
IndexTeam/IndexTTS-2.5