305 Commits
Author SHA1 Message Date
puke d9e41aac89 fix: 末尾加淡出,避免停止符采样偏早时留下咔哒声 (#806)
生成波形的长度来自 token 数而不是声学:target_lengths = (code_lens * 1.72),
其中 code_lens 是采样到的 stop_mel_token 的下标。解码是随机采样,因此少数情况下
停止符落得偏早,mel 在话音尚未结束时截止,文件最后一个采样点离零很远,播放时
这个阶跃就是一声咔哒。BigVGAN 在 mel 边界处感受野不完整,还可能再叠一段突发噪声。

在 utils/common.py 新增 fade_out_tail(),把拼接完成的波形末尾 20 ms 无条件用
升余弦斜坡降到零,并在四个组装最终波形的位置调用(infer.py 两处、infer_v2.py、
infer_v2_5.py)。

无条件施加而不先做检测:正常生成的尾部本来就是静音,斜坡在那里是空操作。
112 条正常生成实测,62 条逐比特未变,其余没有一条的任何采样点改动超过
-42.8 dBFS(中位 -76.8 dBFS)。10 条有问题的生成末值全部归零。

146 条实测中 11 条(7.5%)出现该问题,与 #523 中他人独立测得的约 5% 同量级。

不解决多吐高频嘶声那个子类型(11 条中 2 条),那需要检测器和阈值,应另开 PR。
流式路径不经过最终拼接,不受影响。

Refs #247, #488, #523, #633
2026-09-30 00:06:52 +08:00
ardssandardss d2e6e0b800 docs: fix uv tool install command for the modelscope CLI (fixes #811) (#812)
The 'modelscope' PyPI package ships no console entry points; the
'modelscope' CLI is provided by its dependency 'modelscope-hub'
(confirmed via the wheel's entry_points metadata, modelscope 1.40.1 /
modelscope-hub 0.4.3). Plain 'pip install modelscope' works because the
dependency lands in the same environment, but 'uv tool install
"modelscope"' creates an isolated tool environment and fails with
'No executables are provided by package modelscope'.

Verified locally: 'uv tool install modelscope-hub' installs cleanly and
'modelscope download ...' works.

Co-authored-by: ardss <ardss@users.noreply.github.com>
2026-09-30 00:06:39 +08:00
ardssandardss e3f3c60d45 perf(infer_v2_5): remove redundant W2V-BERT forward pass on speaker cache miss (fixes #796) (#813)
The speaker-reference cache-miss path calls get_emb twice with identical
inputs; the second result (S_ref) is never used (its only remaining
reference is a commented-out argument). The duplicate call runs a full
W2V-BERT forward on every cache miss (first synthesis for a new speaker,
or after service restart).

Measured on RTX 5060 8GB (fp32): get_emb count drops 3->2 for a single
inference call, and the microbenchmarked forward costs ~33s mean (8s
reference, range 18-40s) - this cost scales with reference-audio length,
so the waste grows for longer prompts. Outputs are unaffected since the
second result was never consumed.

Co-authored-by: ardss <ardss@users.noreply.github.com>
2026-09-30 00:06:26 +08:00
okmyworld c35e988ce4 Update webui.py (#769)
Add `share`: Enable the sharing mode of Gradio WebUI for easier use on platforms such as Colab.
2026-09-30 00:05:22 +08:00
Codada 9ebf46dd3e perf(infer_v2_5): reuse the resampled reference audio for CAMPPlus (#816)
The speaker cache-miss path decoded and resampled the reference audio
twice; the second call returns a bit-identical tensor to the audio_16k
already in scope (_load_and_cut_audio is deterministic), so reuse it,
as infer_v2.py already does at the equivalent spot. Saves one librosa
decode + truncation + resample per speaker cache miss.

Refs #796.
2026-09-30 00:05:07 +08:00
Codada 03a0cf1501 fix(webui): repair the preset handlers' early-exit return values (#807)
Two shapes returned by the preset handlers are rejected by Gradio, so
several ordinary interactions in the WebUI raised instead of no-oping.

`on_preset_save` returned a bare `gr.update()` when the name was empty.
Gradio serializes the no-argument form as the dict `{"__type__": "update"}`
-- its "skip" sentinel -- and `confirm_save_preset_from_modal` indexes that
result with `result[0]`/`result[1]`, so saving a preset without typing a
name raised `KeyError: 0` (index-tts#787). Return two updates instead, which
is what the sibling branches already do.

`on_preset_load` returned `{}` on its early-exit paths. Gradio wraps a lone
non-tuple value into a one-element list, so an empty dict fails its output
arity check -- "didn't return enough output values" -- for the 24-output
events this handler drives; that fires whenever the preset dropdown is
cleared, or a preset's audio files are gone. The sentinel is the correct
"update nothing" value: Gradio expands it to skip every output.

The two paths are covered by `tests/test_webui_handlers.py`, which reads
webui.py's AST rather than importing it (Gradio is an optional extra and
importing the module downloads checkpoints, so neither belongs in the
`not gpu` CI job).
2026-09-30 00:04:53 +08:00
david-bowiegxw 482d861328 fix(webui): keep duration factor v2.5-only (#778) 2026-09-30 00:04:39 +08:00
nanaotoandnanaoto 6e353fe261 fix: forward do_sample to inference_speech in both v2 and v2.5 (#768)
`infer_generator()` parses `do_sample` out of `generation_kwargs` and then
never uses it — the call to `inference_speech()` passes a literal `True`:

    indextts/infer_v2.py:536      do_sample = generation_kwargs.pop("do_sample", True)
    indextts/infer_v2.py:589      do_sample=True,

    indextts/infer_v2_5.py:731    do_sample = generation_kwargs.pop("do_sample", True)
    indextts/infer_v2_5.py:780    do_sample=True,

In both files the parsed local is dead: those two lines are its only mentions.
Because the value is `pop`ped rather than left in `generation_kwargs`, passing
`do_sample=False` is swallowed silently instead of reaching the model, so greedy
decoding has never been reachable through the public `infer()` API.

The value does have somewhere to arrive: `inference_speech()` collects
`**hf_generate_kwargs` and forwards them to `GPT2InferenceModel.generate()`
(`indextts/gpt/model_v2.py:820`, `indextts/gpt/model_v2_5.py:779`), which is
where HuggingFace reads `do_sample`.

Default behaviour is unchanged — the `pop` default is still `True`, and only an
explicit `do_sample=False` now takes effect.

Fixes #577. Supersedes #726, which fixed the v2 site only; 2.5 is the current
default path and had the same defect.

Verified: `uv run --extra test pytest -m "not gpu"` — 151 passed, with two
`test_model_download_reachable` failures from HuggingFace CDN SSL resets that
reproduce on unmodified main.

Co-authored-by: nanaoto <10inspiral@gmail.com>
2026-09-30 00:04:24 +08:00
Souptik Chakraborty ee40fa7d6c fix: normalize waveforms before torchaudio.save to avoid saturated WAVs (#773)
torchaudio 2.9 moved save() onto TorchCodec, whose compatibility shim
converts non-float32 input with a bare src.float() and no rescaling, then
treats the result as [-1, 1] audio. Every save site passed a PCM-scale
int16 tensor, so on 2.9+ roughly 99.99% of frames clipped to full scale
with no exception and no warning.

Add save_pcm_wav() in indextts/utils/common.py, which normalizes PCM-scale
input to float32 [-1, 1] and pins encoding="PCM_S"/bits_per_sample=16 on
the torchaudio versions that still honour them. Pinning matters: below 2.9
the WAV subtype is derived from the input dtype, so normalizing alone would
silently switch output from 16-bit PCM to 32-bit float. Above 2.9 the two
arguments are ignored and warn, so they are omitted there.

Route all six save sites in indextts/ and backends/trt/ through it.

Verified on torchaudio 2.7.1, 2.8.0, 2.9.0 and 2.11.0: identical 16-bit
PCM output, 0% clipped frames. Before the change 2.9.0 and 2.11.0 produced
only 3 distinct sample values with 99.9875% of frames at full scale.

Fixes #724
2026-08-18 14:52:28 +08:00
david-bowiegxw 82c2a6eaa1 fix(webui): preview IndexTTS 2.5 text segments (#777) 2026-08-18 14:43:57 +08:00
nanaoto 4f8792ff12 docs: link the IndexTTS-2.5 HuggingFace Space from the Model Zoo
The Space at IndexTeam/IndexTTS-2.5-Demo now runs 2.5, but the Demos
column only pointed at the demo page and the ModelScope studio. Add a
Space badge next to them in all five badge-style READMEs, and a plain
[HF Space] link in README2.5_ZH.md, which uses plain links instead.
2026-08-13 22:26:44 +08:00
Codada 39207d91c3 chore: remove tracked .DS_Store file (#731) v2.5.0 2026-08-13 18:13:28 +08:00
nanaotoandnanaoto a16fe86e3b fix: drop the non-functional use_gpt_latent option from IndexTTS-2.5 (#767)
The 2.5 inference path exposes `use_gpt_latent`, but enabling it has never
worked: the fusion at `S_infer + latent` raises

    RuntimeError: The size of tensor a (1706) must match the size of tensor b (853)

The two tensors are on different time bases by construction.
`EnhancedCodec.decode()` upsamples 2x (`indextts/codec/models.py:226`,
`F.interpolate(x, scale_factor=2, mode="nearest")`, with `downsample_scale=2` as
the constructor default and no override in the released config), while the GPT
latent stays at the code-token rate. 853 -> 1706 is exactly that factor.

This is 2.5-specific: 2.0 hardcodes `use_gpt_latent=True`
(`indextts/infer_v2.py:145`) and works, because it uses the maskgct codec, which
has no such upsampling step. When 2.5 switched codecs the latent path was left
wired to the old assumption.

Rather than guess an alignment, remove the option. The released 2.5 checkpoint
does carry six `gpt_layer` tensors, but that only records what the training run
built, not that this is a supported inference path — and if 2.5 had actually been
trained through this fusion, the lengths would agree. Any alignment added now
would be inferred rather than recovered from the training recipe, and getting it
wrong yields quietly degraded audio instead of a crash, which is worse.

No behaviour change for anyone: the parameter defaulted to False, and neither
`webui.py` nor `indextts/cli_v2.py` exposes it. `load_checkpoint2` iterates
`for key in model.models`, so the now-unbuilt `gpt_layer` weights are skipped
silently with no warning. `MyModel` keeps its `use_gpt_latent` argument, which
`backends/trt/export/*.py` still passes.

Also drops the `gpt_forward_time` counter, whose only accumulation site was
inside the removed block — it would otherwise print a constant `0.00` and read as
"this stage was free" rather than "this stage does not exist". 2.0 keeps its own.

Verified: 153 passed / 22 deselected, and a real MPS inference produces audio
with the default path untouched.

Co-authored-by: nanaoto <10inspiral@gmail.com>
2026-08-13 17:48:18 +08:00
RagnarokChan 4d347b5361 fix: use detected CUDA architectures for BigVGAN (#762) 2026-08-13 16:38:37 +08:00
nanaotoandnanaoto bfaf561d7b ci: run the lightweight checks on Windows too (#766)
* test: resolve temp paths in the CLI tests so they pass off Linux

These assertions compare a path the CLI printed against one built from
`tempfile.TemporaryDirectory()`. On Linux those agree; on macOS they do not,
because `/var` is a symlink to `/private/var` and the CLI resolves it:

    AssertionError: 'model_dir = "/var/folders/.../models"'
      not found in 'model_dir = "/private/var/folders/.../models"'

18 of 153 non-GPU tests failed that way. Windows has its own version of the same
problem — `RUNNER~1` 8.3 short names and drive-letter case — so this blocks CI on
any non-Linux runner.

Resolve at the point the temp directory is wrapped, which is what
`test_cli_v2_download.py` already does at its seven sites and why that file was
the only one passing. 129 call sites across the other four files; no behaviour
changes, the comparison just uses the same canonical form on both sides.

153 passed, 0 failed afterwards.

* ci: run the lightweight checks on Windows too

Everything platform-specific in this repo was unverified. `pyproject.toml`
carries three `sys_platform` markers — triton-windows gated to win32, and the
wetext / WeTextProcessing split on linux — and `cli_tests` branches three ways on
`sys.platform` for config and model-cache locations. CI only ever exercised the
Linux side of any of it. The triton-windows marker bug (#742, #749) was exactly
this shape: a Windows-only resolution failure that no amount of green Linux CI
could catch.

No GPU is needed. `-m "not gpu"` deselects the 22 GPU tests, and the one
remaining case that passes `--device cuda` runs against a hand-built
`SimpleNamespace` whose `is_available` is `lambda: True`
(`cli_tests/test_cli_v2_check.py:93-98`), so nothing looks for a real device.

`fail-fast: false` so a Windows failure still lets the Linux result through, and
the uv cache is enabled — the Windows job resolves a cu128 torch and there is no
reason to refetch it every run.

Blocking rather than advisory, because the previous commit fixed the path
assertions that would otherwise have failed there: 153 passed, 0 failed.

---------

Co-authored-by: nanaoto <10inspiral@gmail.com>
2026-08-13 16:33:16 +08:00
a371df7d07 webui: adapt precision and QwenEmotion loading to available VRAM (#755)
* webui: adapt precision and QwenEmotion loading to available VRAM

The WebUI hardcoded use_qwen_emo=True and tied precision to --fp16, which
defaults off, so a small card got the most expensive combination available.

Measured on a 4090, peak reserved memory for a short utterance:

    fp32 + QwenEmotion   8.15 GB   (the previous default)
    bf16 + QwenEmotion   6.54 GB
    bf16, no QwenEmotion 5.48 GB

Re-run under a hard per-process cap via set_per_process_memory_fraction, the
old default does complete on an 8 GB budget -- but only by peaking at exactly
8.00 GB, i.e. with no headroom for the display output and driver overhead a
real 8 GB card also has to fund. The new path leaves ~2.5 GB spare and still
runs under a 6 GB cap (5.44 GB peak).

So below 10 GB, enable half precision and skip QwenEmotion, reusing the
threshold infer_v2_5.py already applies for text chunking. --qwen_emo forces it
back on for someone who knows their card can take it.

Skipping that model removes emotion-control-from-text, so gate the UI on it
too: mode 3 disappears from the experimental choices, its examples are filtered
out, and a preset saved with it resets to the default with a warning. Without
this gating, selecting mode 3 raises "use_emo_text=True requires QwenEmotion"
from infer_v2_5.py at inference time.

Verified all three configurations start and report the intended decision, with
process memory matching the table above.

* Gate use_bf16 on torch.cuda.is_bf16_supported() and reset is_experimental on fallback

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

---------

Co-authored-by: nanaoto <10inspiral@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>
2026-08-12 17:18:03 +08:00
nanaotoandnanaoto 0d3a48bec5 docs: point the vLLM recipe links at the published page (#756)
The recipe has landed, so the links no longer need to reference the pull
request. Verified https://recipes.vllm.ai/IndexTeam/IndexTTS-2.5 returns 200
and titles itself "IndexTeam/IndexTTS-2.5 | vLLM Recipes".

Seven occurrences across the English, Chinese, Japanese, Spanish and Arabic
READMEs.

Co-authored-by: nanaoto <10inspiral@gmail.com>
2026-08-12 16:54:08 +08:00
nanaotoandnanaoto 6c99a9b404 docs: link the ModelScope studio from the Model Zoo (#757)
The 2.5 row's only Demos entry was index-tts2-5.github.io, which serves the
technical report rather than something you can talk to. Add the hosted studio
next to it so a reader can try the model without installing anything.

Verified https://modelscope.cn/studios/IndexTeam/IndexTTS-2.5 returns 200 and
titles itself "IndexTTS-2.5". English, Chinese, Japanese, Spanish and Arabic.

Co-authored-by: nanaoto <10inspiral@gmail.com>
2026-08-12 16:52:35 +08:00
Copilotandnanaoto 8887408e85 Normalize label-style Qwen emotion outputs in v2/v2.5 inference (#751)
* Initial plan

* fix: normalize label-style qwen emotion outputs

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

* test: cover qwen emotion label redirects

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

* style: fix qwen emotion test spacing

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>
2026-08-12 16:27:22 +08:00
Copilotandnanaoto 8b6ecba1f7 fix: correct indentation of gr.HTML block in webui.py (#752)
* Initial plan

* fix: correct indentation of gr.HTML block inside with demo context in webui.py

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>
2026-08-12 16:26:08 +08:00
Copilot f98774b471 Initial plan (#749)
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-08-12 16:22:39 +08:00
Copilotandnanaoto 143381c861 Fix WebUI block indentation regression (#750)
* Initial plan

* fix: restore webui HTML indentation

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

* test: clarify webui syntax assertion

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>
2026-08-12 14:36:40 +08:00
3376228d4b fix: repair Linux installs and README commands that fail on a clean machine (#742)
* fix: repair Linux installs and README commands that fail on a clean machine

Verified on a Linux GPU box using a fresh .venv and a separate UV_CACHE_DIR,
since a warm cache hides every one of these.

pyproject.toml:

- triton-windows had no platform marker, so `uv sync --extra accel` (or
  --all-extras) aborted on Linux: the package only publishes win_amd64 wheels.
  Linux already gets `triton` as a torch dependency.
- Replace `no-build-isolation-package` with `extra-build-dependencies`. That
  mode uses `.venv` itself as the build environment, and a fresh `.venv` has no
  setuptools yet, so deepspeed failed with `ModuleNotFoundError: No module
  named 'setuptools'` on any clean machine. Injecting torch with
  `match-runtime` keeps the CUDA-enabled build inputs while leaving isolation
  (and its setuptools) in place. It also lets flash-attn resolve a prebuilt
  wheel from its own torch version and C++ ABI flag instead of invoking nvcc.

README (and the zh/ja/es/ar translations):

- `examples/09.wav` does not exist in the demo space and is not in
  cases.jsonl; the on-demand download fetches `voice_09.wav`.
- `huggingface-hub` dropped its `cli` extra, so the install line warned.
- Example audio is fetched by the WebUI only, not by `infer_v2_5.py`, whose
  default --prompt_wav is `examples/voice_01.wav`. Say so and give a one-liner
  to fetch it.
- Drop `uv run indextts/infer_v2.py`: it is a benchmark loop hardcoded to
  `checkpoints/`, so with the documented `checkpoints_2` layout it dies on
  `vocab_file checkpoints/bpe.model does not exist`.
- `use_emo_text=True` needs `use_qwen_emo=True` at construction, which the
  init example omits.

webui.py: title and arXiv badge were hardcoded to IndexTTS2, so the 2.5 UI
announced itself as 2 and linked the 2.0 paper.

* docs: install huggingface-hub without extras

`hf-xet` is an unconditional base dependency of huggingface-hub on x86_64,
arm64 and aarch64, not just an extra, so `[hf_xet]` selected nothing that the
plain package does not already pull in. The plain install still provides the
`hf`, `huggingface-cli` and `tiny-agents` executables.

Applies to the remaining seven translations and archived READMEs too, which
still carried the `[cli,hf_xet]` form whose `cli` extra no longer exists.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: nanaoto <10inspiral@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-08-12 07:57:28 +08:00
b5ea881bec webui: default to IndexTTS-2.5 (#741)
* feat: default webui to IndexTTS-2.5

- webui.py: --version default 2 -> 2.5. The v2 default existed only
  because the empty-checkpoints auto-download fallback was implemented
  for v2 alone; 2.5 just exited. Now both versions auto-download their
  own repo (IndexTTS-2 / IndexTTS-2.5) when checkpoints are incomplete.
- webui.py: version-aware required_files. v2 checks bpe.model etc.;
  2.5 checks codec.pth + multilingual_zh_ja_yue_char_del.tiktoken
  (bpe.model is v2-only, 2.5 uses tiktoken).
- model_download.py: ensure_config_available takes version, downloads
  config.yaml from the matching repo instead of hardcoded IndexTTS-2.
- README: 2.5 launch is now 'uv run webui.py' (zero flags).

* Fix ensure_config_available version validation and sync localized READMEs

Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>

---------

Co-authored-by: nanaoto <10inspiral@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: nanaoto <19526637+nanaoto@users.noreply.github.com>
2026-08-11 20:27:54 +08:00
nanaoto 56eead7eb0 docs: add inference speed (RTF) comparison to README 2026-08-11 17:31:00 +08:00
nanaoto 5c46394097 fix: drop examples referencing missing wavs in 2.5 cases.jsonl 2026-08-11 17:12:08 +08:00
nanaoto 4b38d263e7 docs: mention vLLM deployment in 2.5 release notes 2026-08-11 16:42:18 +08:00
nanaotoandnanaoto 506e7ddfe8 docs+i18n: add Japanese, Spanish and Arabic localizations (#740)
- Add translated READMEs: docs/README_ja.md, docs/README_es.md,
  docs/README_ar.md (structure, code blocks and tables kept identical
  to the English README)
- Add WebUI locales: ja_JP.json, es_ES.json, ar_SA.json (110 keys
  each, covering every i18n key used in webui.py)
- Fill 3 missing keys in en_US.json (删除/情感向量/语言)
- Add language switcher links to the README headers

Co-authored-by: nanaoto <10inspiral@gmail.com>
2026-08-11 16:35:05 +08:00
nanaoto 9fced08672 fix: remove hardcoded cubefs paths from model_v2_5 and nemo_tn 2026-08-11 16:19:53 +08:00
nanaoto a8bd5617ed docs: mention speed control in intro and 2.5 release notes, enlarge logo 2026-08-11 16:15:13 +08:00
nanaoto d927fec7e2 docs: theme-aware transparent logo and header badges in READMEs
- Add light/dark transparent logo variants, switch via <picture>
  prefers-color-scheme so the header no longer shows a white box in
  GitHub dark mode
- Add stars / arXiv / Discord badges under the language links
2026-08-11 16:10:01 +08:00
nanaoto f37ef3ffd5 docs: restructure and clean up READMEs
- Reorganize both READMEs into a clear section order: header intro,
  model zoo, news, demos, getting started, usage, evaluation,
  community, citation, acknowledgements, license
- Fix BibTeX author separators (use 'and') and complete the 2.5
  author list in the zh README
- Add missing duration_factor and vLLM sections to the zh README
- Drop git-lfs steps (examples download on demand from HF/ModelScope)
- Remove uv advocacy block
2026-08-11 16:05:01 +08:00
nanaoto 00ff98127f docs: redesign evaluation tables with grouped headers 2026-08-11 15:59:29 +08:00
nanaoto ec5bae73cb chore: remove draft model_card_v2_5.md 2026-08-11 15:54:44 +08:00
nanaoto 1f989984f3 docs: default to 2.5 for downloads and webui, fix v2 checkpoint paths 2026-08-11 15:54:16 +08:00
nanaoto 4ae1a5ba4c fix: rename speed_factor to duration_factor in READMEs, add speed control to main README 2026-08-11 15:39:30 +08:00
nanaoto 9e1b5449c0 fix: correct 2.5 video link and cover image 2026-08-11 15:36:51 +08:00
nanaoto 9c87c46b84 fix: update 2.5 citation to match arXiv v4 author list 2026-08-11 15:33:53 +08:00
nanaoto fc0ef2211a fix: restore vLLM recipe link 2026-08-11 15:26:05 +08:00
nanaoto b049e1a698 Merge branch 'indextts-2.5' 2026-08-11 15:20:58 +08:00
nanaoto 711ba4b7c4 fix: typos and outdated paths in README 2026-08-11 15:20:54 +08:00
nanaoto a76ba73718 Merge branch 'indextts-2.5' 2026-08-11 15:19:07 +08:00
nanaoto a07e120893 fix: correct 2.5 release date to 2026/08/10 2026-08-11 15:19:03 +08:00
nanaoto 9e9cdff4d9 docs: sync README from internal repo, use badges and new icon 2026-08-11 15:14:39 +08:00
nanaoto b8cd22dd61 docs: sync README from internal repo, use badges and new icon 2026-08-11 15:14:02 +08:00
nanaoto 583d6d4c83 feat: IndexTTS-2.5 release (#738) 2026-08-11 15:08:26 +08:00
nanaoto 095f722ce0 test: add v2.5 GPU inference tests 2026-08-11 15:01:22 +08:00
nanaoto 1df6d4420a sync: merge xl branch updates (2.5 assets, README2.5_ZH, fugashi dep) 2026-08-11 14:53:21 +08:00
nanaoto ec07ffe4fe refactor: remove configs/ directory, use checkpoints/config.yaml 2026-08-11 12:29:28 +08:00
nanaoto bf2e967fac docs: update HuggingFace download links for IndexTTS-2.5 2026-08-10 18:42:45 +08:00