Run complete IndexTTS 2.5 reference-voice speech on a local CPU
Synthesize one original English utterance with the exact native IndexTTS 2.5 CPU pipeline and a real reader-recorded consented voice. The complete main/auxiliary composition is pinned, with strict checkpoint compatibility checks, pre-PCM finite guards and no silent reference truncation. Conditional Bilibili and auxiliary licenses apply; fit, speed and audio quality remain unmeasured.
- Hardware
- Intel Core i5-12400 desktop, 8 inference threads, 64 GiB RAM; selected Ubuntu22.04 reader OS
- Runtime
- Native IndexTTS 2.5 complete reference-voice CPU pipeline Native source d9e41aa; Python3.10; Torch2.8.0+cpu/torchaudio2.8.0+cpu; Transformers4.52.1; uv0.8.19 CPU adaptation · CPU
- Model format
- PyTorch checkpoints and safetensors · CPU FP32 selected for every native module; no quantization/offload · Unquantized native composition; CPU FP32 selected
- Workload
- 2,417 token context · 1 concurrent
Based on source documentation; this setup has not been executed by OpenTools. Memory: unknown. No compatible measurement available.
Read the complete setup guide
Before you start
- Use an owned Ubuntu 22.04 x86_64 CPU host with Python 3.10, allocated 64 GiB RAM, 80 GiB available disk and eight inference threads. These are planning resources, not measured minima or fit. Ubuntu 24.04/Python 3.12 is not substituted: the native project requires Python below 3.12.
- Read both exact Bilibili license texts before any model use. The English version says a RMB 1 billion revenue trigger, but its language clause gives the Chinese version priority; the Chinese threshold is revenue exceeding RMB 100 million in the previous calendar year, or a product/service exceeding 100 million monthly active users in the previous calendar month, including affiliates. If triggered, obtain the required written separate license before use; this guide grants no clearance.
- Comply with all remaining native license restrictions: downstream agreement and notice retention, derivative-change disclaimer, third-party authorizations, lawful/privacy-respecting outputs, restricted high-risk use, and the restriction on improving other AI models except the stated native/derivative or noncommercial exceptions. Generated output is included in its derivative definition. Preserve applicable MIT/Apache auxiliary and dependency terms; the Bilibili grant does not replace third-party rights.
- Prepare a real recording of your own voice or another speaker with explicit permission and all needed rights. Use a clear 3–10 second PCM16 WAV at 16–48 kHz with one or two channels, no music or other speakers. Listen to it and confirm it contains the intended consented human voice. File-format/silence checks cannot establish consent, speech validity or voice quality. No supplied synthetic wave or unlicensed public voice is used.
- Private educational service only: keep port 8996 on loopback on a trusted single-user host. This serial reader wrapper is not an official/public/production server. No paid API, login or new credential is needed for the captured public model metadata.
Exact model and requirements
- Artifact:
- IndexTeam / Bilibili; named independent auxiliary publishers / IndexTTS 2.5 full native reference-voice composition · checkpoint IndexTeam/IndexTTS-2.5
- Publisher revision:
- c39ce5ba981572cb187443877ff559dfb246ce63
- Artifact digest:
- Composite artifacts from four independent publisher snapshots have no single publisher whole-composition digest; all 19 selected files are individually pinned.
- Download size:
- 6.6 GiB
- Memory requirement (unknown):
- Unknown — No measured full CPU FP32 peak for complete native reference-voice TTS, strict preflight and auxiliary/audio/cache/beam state.
- System RAM / disk:
- Unknown / Unknown
- Placement:
- single device. One serial request and utterance; native beam search uses three hypotheses, not three concurrent users. All selected native components on one CPU host, no GPU/disk offload or external synthesis API.
- KV cache:
- Native GPT inference enables KV cache; CPU FP32 modules selected, but no actual cached tensor was inspected or measured.
- Workload:
- 2,417 token context; Unknown; Unknown; concurrency 1; batch 1; cache unknown; repetitions Unknown.
- Tokenizer:
- Native multilingual tiktoken vocabulary and WhisperTokenizer interface; English language prefix · c39ce5ba981572cb187443877ff559dfb246ce63
- Sampling / reasoning:
- Native reference-voice TTS: one real 3–10 second recording, fixed English words, text normalization disabled, complete text at most 120 positions and one segment; semantic-code cap 1500, EOS8193, three beams, sample temperature/top-p0.8, top-k30, repetition penalty10, length penalty0, duration factor1, seed12345. Native cap warning is fatal. Output is22.05kHz mono PCM16 WAV; manual listening required. No chat template or text reasoning. Inference GPT2 config2417 differs from base2420 and text/audio tables602/1818. Selected campplus global speaker conditioning yields3 positions; native prefill bound125 plus1500 speech-code cap stays below2417. These are source-derived workflow bounds, not actual request/output counts. Native acoustic feature/mel/sample units remain distinct.
- Runtime prerequisites:
- Ubuntu22.04 x86_64; See prerequisites above.
Bilibili custom conditional royalty-free grant; not Apache/MIT. Read native English and governing Chinese license. English revenue trigger is RMB 1 billion, but Chinese is RMB 100 million (previous calendar year); Chinese prevails. Exceeding that revenue or 100 million monthly users in the previous month, including affiliates, requires a separate written license before use. Retain notices/license; impose downstream terms; give derivative-change disclaimer. Restriction on improving other AI models has only native/derivative/noncommercial exceptions. Third-party authorizations, lawful/private outputs and high-risk restrictions apply; outputs are included in the derivative definition. No legal clearance/terms acceptance is provided. Mandatory W2V-BERT MIT-declared and CAMPPlus Apache2-declared publisher cards plus actual BigVGAN MIT license are separate grants; preserve them and dependency/source notices.
- IndexTeam/IndexTTS-2.5:gpt.pth · 3.04 GiB · revision c39ce5ba981572cb187443877ff559dfb246ce63
- IndexTeam/IndexTTS-2.5:codec.pth · 0.57 GiB · revision c39ce5ba981572cb187443877ff559dfb246ce63
- IndexTeam/IndexTTS-2.5:s2mel.pth · 0.39 GiB · revision c39ce5ba981572cb187443877ff559dfb246ce63
- IndexTeam/IndexTTS-2.5:wav2vec2bert_stats.pt · 0 GiB · revision c39ce5ba981572cb187443877ff559dfb246ce63
- IndexTeam/IndexTTS-2.5:feat1.pt · 0 GiB · revision c39ce5ba981572cb187443877ff559dfb246ce63
- IndexTeam/IndexTTS-2.5:feat2.pt · 0 GiB · revision c39ce5ba981572cb187443877ff559dfb246ce63
- facebook/w2v-bert-2.0:model.safetensors · 2.16 GiB · revision da985ba0987f70aaeb84a80f2851cfac8c697a7b
- funasr/campplus:campplus_cn_common.bin · 0.03 GiB · revision e4b6ede7ce16997aff4ae69fbca1f0175e2afede
- nvidia/bigvgan_v2_22khz_80band_256x:bigvgan_generator.pt · 0.42 GiB · revision 633ff708ed5b74903e86ff1298cf4a98e921c513
- 64 GiB RAM and 80 GiB free disk are planning allocations, not measured minima or proven fit.
- Selected checkpoint/tensor files total 7,081,568,990 bytes across the main model and mandatory auxiliary models; file bytes are not full FP32 RAM. Strict compatibility preflight, reference features, KV/beam state, acoustic activations and packages add unknown overhead.
- No target installation, model load, synthesis, fit, latency or quality measurement occurred.
One-time setup and hardware
- hardware
- Unknown — Existing desktop purchase price and incremental hardware cost depend on the reader; unknown.
- Existing desktop purchase price and incremental hardware cost depend on the reader; unknown. Tax: unknown.
- setup
- Unknown — Initial provisioning/build time and labor cost are unknown.
- Initial provisioning/build time and labor cost are unknown. Tax: unknown.
Recurring costs
- electricity
- Unknown — Actual wall power, electricity rate and powered hours are unknown; no TDP-to-wall-power conversion.
- Actual wall power, electricity rate and powered hours are unknown; no TDP-to-wall-power conversion. Tax: unknown.
- storage
- Unknown — Incremental cost of local disk capacity is unknown. The 80 GiB free-disk walkthrough allocation is an author choice, not a measured requirement.
- Incremental cost of local disk capacity is unknown. The 80 GiB free-disk walkthrough allocation is an author choice, not a measured requirement. Tax: unknown.
- egress
- Unknown — Data transfer price, allowances and traffic volume are unknown.
- Data transfer price, allowances and traffic volume are unknown. Tax: unknown.
- administration
- Unknown — Maintenance labor rate and hours are unknown.
- Maintenance labor rate and hours are unknown. Tax: unknown.
Install the runtime
1. Create the OS-correct native source environment
Use the source-supported Python 3.10 route on Ubuntu 22.04. The exact publisher source includes the model 2.5 module even though package metadata still says 2.0.0. Verify native source/configuration files before installing; no version-2 checkpoint is substituted.
Commandset -e sudo apt-get update sudo apt-get install -y python3.10 python3.10-venv python3.10-dev build-essential git curl ca-certificates openssl libsndfile1 mkdir -p "$HOME/indextts25-tts" cd "$HOME/indextts25-tts" python3.10 -m venv .venv .venv/bin/python -m pip install 'uv==0.8.19' git clone https://github.com/index-tts/index-tts.git native git -C native checkout --detach d9e41aac89fd00b3d71497fddb287b7f24613712 test "$(git -C native rev-parse HEAD)" = 'd9e41aac89fd00b3d71497fddb287b7f24613712' git -C native diff --exit-code HEAD printf '%s %s\n' '1da589548c52d8169bad728e479f70c50a43a95ae51fffa4f25f2250ac79458b' native/pyproject.toml '2bcec9c6bd4d20d733bdc0537a2f52b39fd67a2e88ad2308836f56fd72da1283' native/uv.lock | sha256sum --check -Expected result: Pinned source checkout and Python environment are created; source metadata checks pass.
2. Resolve the full native dependencies with CPU wheels
This is an explicit CPU installation adaptation using uv, not a claim of byte-equivalence to the publisher CUDA lock. The constraints retain upstream Linux/Python 3.10 selected package versions, changing only Torch/torchaudio to their exact official matching CPU wheels. --no-sources uses normal declared package metadata; no dependencies are stripped. Optional extras are not selected. Ordinary Whisper dependencies may install Triton, but no Whisper ASR model or accelerated GPU path is invoked by the selected tokenizer-only route. Save the actual resolution and stop on any resolver/import failure.
Commandset -e cd "$HOME/indextts25-tts" cat > cpu-constraints.txt <<'CONSTRAINTS' absl-py==2.3.1 accelerate==1.8.1 aiofiles==24.1.0 annotated-types==0.7.0 antlr4-python3-runtime==4.9.3 anyio==4.10.0 argbind==0.3.9 asttokens==3.0.0 audioread==3.0.1 brotli==1.1.0 certifi==2025.8.3 cffi==2.0.0 charset-normalizer==3.4.3 click==8.2.1 cn2an==0.5.22 colorama==0.4.6 contourpy==1.3.2 cycler==0.12.1 cython==3.0.7 decorator==5.2.1 deepspeed==0.17.1 descript-audiotools==0.7.2 distance==0.1.3 docstring-parser==0.17.0 einops==0.8.1 exceptiongroup==1.3.0 executing==2.2.1 fastapi==0.116.2 ffmpeg-python==0.2.0 ffmpy==0.6.1 filelock==3.19.1 fire==0.7.1 flash-attn==2.8.3.post1 flatten-dict==0.4.2 fonttools==4.60.0 fsspec==2025.9.0 fugashi==1.5.2 future==1.0.0 g2p-en==2.1.0 gradio==5.45.0 gradio-client==1.13.0 groovy==0.1.2 grpcio==1.75.0 h11==0.16.0 hf-xet==1.1.10 hjson==3.1.0 httpcore==1.0.9 httpx==0.28.1 huggingface-hub==0.35.0 idna==3.10 importlib-resources==6.5.2 inflect==7.5.0 iniconfig==2.3.0 ipython==8.37.0 ipython-pygments-lexers==1.1.1 jedi==0.19.2 jieba==0.42.1 jinja2==3.1.6 joblib==1.5.2 json5==0.10.0 julius==0.2.7 kaldifst==1.7.17 keras==2.9.0 kiwisolver==1.4.9 lazy-loader==0.4 librosa==0.10.2.post1 llvmlite==0.46.0 markdown==3.9 markdown-it-py==4.0.0 markdown2==2.5.4 markupsafe==3.0.2 matplotlib==3.10.0 matplotlib-inline==0.1.7 mdurl==0.1.2 modelscope==1.27.0 more-itertools==10.8.0 mpmath==1.3.0 msgpack==1.1.1 munch==4.0.0 networkx==3.4.2 ninja==1.13.0 nltk==3.9.1 numba==0.63.0 numpy==2.2.6 nvidia-cublas-cu12==12.8.4.1 nvidia-cuda-cupti-cu12==12.8.90 nvidia-cuda-nvrtc-cu12==12.8.93 nvidia-cuda-runtime-cu12==12.8.90 nvidia-cudnn-cu12==9.10.2.21 nvidia-cufft-cu12==11.3.3.83 nvidia-cufile-cu12==1.13.1.3 nvidia-curand-cu12==10.3.9.90 nvidia-cusolver-cu12==11.7.3.90 nvidia-cusparse-cu12==12.5.8.93 nvidia-cusparselt-cu12==0.7.1 nvidia-nccl-cu12==2.27.3 nvidia-nvjitlink-cu12==12.8.93 nvidia-nvtx-cu12==12.8.90 omegaconf==2.3.0 openai-whisper==20250625 opencv-python==4.9.0.80 orjson==3.11.3 packaging==25.0 pandas==2.3.2 parso==0.8.5 pexpect==4.9.0 pillow==11.3.0 platformdirs==4.4.0 pluggy==1.6.0 pooch==1.8.2 proces==0.1.7 prompt-toolkit==3.0.52 protobuf==3.19.6 psutil==7.0.0 ptyprocess==0.7.0 pure-eval==0.2.3 py-cpuinfo==9.0.0 pycparser==2.23 pydantic==2.11.9 pydantic-core==2.33.2 pydub==0.25.1 pygments==2.19.2 pyloudnorm==0.1.1 pynini==2.1.6 pyparsing==3.2.4 pyphen==0.17.2 pystoi==0.4.1 pytest==9.0.3 python-dateutil==2.9.0.post0 python-multipart==0.0.20 pytz==2025.2 pyyaml==6.0.2 randomname==0.2.1 regex==2025.9.1 requests==2.32.5 rich==14.1.0 ruff==0.13.0 safehttpx==0.1.6 safetensors==0.5.2 scikit-learn==1.7.2 scipy==1.15.3 semantic-version==2.10.0 sentencepiece==0.2.1 setuptools==80.9.0 shellingham==1.5.4 six==1.17.0 sniffio==1.3.1 soundfile==0.13.1 soxr==1.0.0 stack-data==0.6.3 starlette==0.48.0 sympy==1.14.0 tensorboard==2.20.0 tensorboard-data-server==0.7.2 termcolor==3.1.0 textstat==0.7.10 threadpoolctl==3.6.0 tiktoken==0.13.0 tokenizers==0.21.0 tomli==2.4.1 tomlkit==0.13.3 torch-stoi==0.2.3 tqdm==4.67.1 traitlets==5.14.3 transformers==4.52.1 triton==3.4.0 triton-windows==3.1.0.post17 typeguard==4.4.4 typer==0.17.4 typing-extensions==4.15.0 typing-inspection==0.4.1 tzdata==2025.2 unidic-lite==1.0.8 urllib3==2.5.0 uvicorn==0.35.0 wcwidth==0.2.13 websockets==15.0.1 werkzeug==3.1.3 wetext==0.1.0 wetextprocessing==1.0.4.1 torch==2.8.0+cpu torchaudio==2.8.0+cpu CONSTRAINTS printf '%s %s\n' 'c81484f2612fd9d61f5b95fc405ca4e076759f8a6fd8cf8290c1cbe7df1976ff' cpu-constraints.txt | sha256sum --check - .venv/bin/uv pip install --python .venv/bin/python --no-sources --constraint cpu-constraints.txt -e native 'https://download-r2.pytorch.org/whl/cpu/torch-2.8.0%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl#sha256=16d75fa4e96ea28a785dfd66083ca55eb1058b6d6c5413f01656ca965ee2077e' 'https://download-r2.pytorch.org/whl/cpu/torchaudio-2.8.0%2Bcpu-cp310-cp310-manylinux_2_28_x86_64.whl#sha256=c955835e470ebbde03d7d54ca5d8ba5722138bbfd66cfb86845234b3a5b9f9fa' .venv/bin/uv pip check --python .venv/bin/python .venv/bin/uv pip freeze --python .venv/bin/python > resolved-environment.txt .venv/bin/python - <<'PYVERS' import importlib.metadata as m,sys assert sys.version_info[:2]==(3,10) for name,version in {'uv':'0.8.19','torch':'2.8.0+cpu','torchaudio':'2.8.0+cpu','transformers':'4.52.1','numpy':'2.2.6','openai-whisper':'20250625','huggingface-hub':'0.35.0'}.items(): assert m.version(name)==version,(name,m.version(name)) print('Selected CPU core versions checked; normal dependency resolution saved') PYVERSExpected result: CPU versions match and full normal dependency checks pass; actual resolution is saved. Target installation/import/model compatibility remains unexecuted by the author.
Download the model
1. Write the complete native composition manifest
Nineteen exact files include the native 2.5 GPT, enhanced codec, S2Mel, feature banks/statistics and vocabulary, plus independently pinned W2V-BERT, CAMPPlus and BigVGAN weights/configs/license cards. Weight SHA256 comes from publisher LFS metadata; regular-file Git blob SHA1 is identified as Git identity, not modern adversarial integrity. The optional Qwen emotion model and older MaskGCT codec are not used by this exact default native 2.5 route.
Commandset -e cd "$HOME/indextts25-tts" cat > component-manifest.json <<'MANIFEST' { "files": [ { "local": "checkpoints/LICENSE", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "LICENSE", "bytes": 10553, "algorithm": "git-blob-sha1", "digest": "b96dffb19fc6e0e048edf010f1cd0d54e8ce103c" }, { "local": "checkpoints/config.yaml", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "config.yaml", "bytes": 2860, "algorithm": "git-blob-sha1", "digest": "b3f15b22f394f2327de574e9b5801c1d9654e203" }, { "local": "checkpoints/gpt.pth", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "gpt.pth", "bytes": 3259599833, "algorithm": "sha256", "digest": "43a8f4c30eccdf201958d3b9713511482c19d56dc20b0b1c4ee1e6b080b19d85" }, { "local": "checkpoints/codec.pth", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "codec.pth", "bytes": 607290935, "algorithm": "sha256", "digest": "d15cbed16a40f478438c961fb043f68dfa6353bf56c966761315db3433e9722c" }, { "local": "checkpoints/s2mel.pth", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "s2mel.pth", "bytes": 414908601, "algorithm": "sha256", "digest": "9b1b0003fc189c94cc349758d7ebc25f903b7eb2de4602879959cc64ce816456" }, { "local": "checkpoints/wav2vec2bert_stats.pt", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "wav2vec2bert_stats.pt", "bytes": 9343, "algorithm": "sha256", "digest": "c9c176c2b8850ab2e3ba828bbfa969deaf4566ce55db5f2687b8430b87526ad2" }, { "local": "checkpoints/feat1.pt", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "feat1.pt", "bytes": 57170, "algorithm": "sha256", "digest": "f219cb447d80216ba615666da2ff8d63ac544eee26657f3a7b278692bf7a67c4" }, { "local": "checkpoints/feat2.pt", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "feat2.pt", "bytes": 374866, "algorithm": "sha256", "digest": "9c4292e96dee535aea9a6206e9a0c856dd578dde9212acdb16dd3ada4d12bf80" }, { "local": "checkpoints/multilingual_zh_ja_yue_char_del.tiktoken", "repository": "IndexTeam/IndexTTS-2.5", "revision": "c39ce5ba981572cb187443877ff559dfb246ce63", "remote": "multilingual_zh_ja_yue_char_del.tiktoken", "bytes": 907395, "algorithm": "git-blob-sha1", "digest": "ac47fe685d24565030965a94c0d98e00e0331eaa" }, { "local": "checkpoints/hf_cache/w2v-bert-2.0/config.json", "repository": "facebook/w2v-bert-2.0", "revision": "da985ba0987f70aaeb84a80f2851cfac8c697a7b", "remote": "config.json", "bytes": 1874, "algorithm": "git-blob-sha1", "digest": "a383a594dac18459628cd2837168cd276342a31a" }, { "local": "checkpoints/hf_cache/w2v-bert-2.0/preprocessor_config.json", "repository": "facebook/w2v-bert-2.0", "revision": "da985ba0987f70aaeb84a80f2851cfac8c697a7b", "remote": "preprocessor_config.json", "bytes": 275, "algorithm": "git-blob-sha1", "digest": "5db61951cdf5edab6337fd84ee619500c27aaa3d" }, { "local": "checkpoints/hf_cache/w2v-bert-2.0/model.safetensors", "repository": "facebook/w2v-bert-2.0", "revision": "da985ba0987f70aaeb84a80f2851cfac8c697a7b", "remote": "model.safetensors", "bytes": 2322063736, "algorithm": "sha256", "digest": "eb890c9660ed6e3414b6812e27257b8ce5454365d5490d3ad581ea60b93be043" }, { "local": "checkpoints/hf_cache/w2v-bert-2.0/README.md", "repository": "facebook/w2v-bert-2.0", "revision": "da985ba0987f70aaeb84a80f2851cfac8c697a7b", "remote": "README.md", "bytes": 4792, "algorithm": "git-blob-sha1", "digest": "23115b6e9bf0776b4cc3d480fde0a90a2ff33011" }, { "local": "checkpoints/hf_cache/campplus_cn_common.bin", "repository": "funasr/campplus", "revision": "e4b6ede7ce16997aff4ae69fbca1f0175e2afede", "remote": "campplus_cn_common.bin", "bytes": 28036335, "algorithm": "sha256", "digest": "3388cf5fd3493c9ac9c69851d8e7a8badcfb4f3dc631020c4961371646d5ada8" }, { "local": "checkpoints/hf_cache/campplus-README.md", "repository": "funasr/campplus", "revision": "e4b6ede7ce16997aff4ae69fbca1f0175e2afede", "remote": "README.md", "bytes": 2020, "algorithm": "git-blob-sha1", "digest": "10b7ae7912f6c4eae3b67316ed59902963591a58" }, { "local": "checkpoints/hf_cache/bigvgan/config.json", "repository": "nvidia/bigvgan_v2_22khz_80band_256x", "revision": "633ff708ed5b74903e86ff1298cf4a98e921c513", "remote": "config.json", "bytes": 1405, "algorithm": "git-blob-sha1", "digest": "635bd8975629bd6d4b51c409986944a281cfe7be" }, { "local": "checkpoints/hf_cache/bigvgan/bigvgan_generator.pt", "repository": "nvidia/bigvgan_v2_22khz_80band_256x", "revision": "633ff708ed5b74903e86ff1298cf4a98e921c513", "remote": "bigvgan_generator.pt", "bytes": 449228171, "algorithm": "sha256", "digest": "e95ba25972d3de0628d99cd156e9315a9c018899bf739988959ebe3544080ced" }, { "local": "checkpoints/hf_cache/bigvgan/LICENSE", "repository": "nvidia/bigvgan_v2_22khz_80band_256x", "revision": "633ff708ed5b74903e86ff1298cf4a98e921c513", "remote": "LICENSE", "bytes": 1076, "algorithm": "git-blob-sha1", "digest": "45b7741b4516c22d7314c5f856b17f713bac91af" }, { "local": "checkpoints/hf_cache/bigvgan/README.md", "repository": "nvidia/bigvgan_v2_22khz_80band_256x", "revision": "633ff708ed5b74903e86ff1298cf4a98e921c513", "remote": "README.md", "bytes": 8038, "algorithm": "git-blob-sha1", "digest": "cb0adf5a6815c78cb7993b3b8083427d20e7357d" } ], "wholeCompositionDigest": null, "modelBodiesDownloaded": false } MANIFEST printf '%s %s\n' 'b1afeffa58e50b24ad40acf5489782fbb89e11cc1ca4786bdb820d6a3d77a314' component-manifest.json | sha256sum --check -Expected result: Exact component-manifest.json checksum passes.
2. Download and verify all required files
Each stream must match its pinned size and digest before replacement. Complete auxiliary flat paths prevent the native fallback auto-download branches. No whole-composition digest, raw weight equivalence or successful target load is fabricated. Preserve the model license and source Chinese license, auxiliary cards and BigVGAN license.
Commandset -e cd "$HOME/indextts25-tts" .venv/bin/python - <<'PYDOWNLOAD' import pathlib,json,urllib.request,hashlib,os m=json.load(open('component-manifest.json')) for row in m['files']: target=pathlib.Path(row['local']);target.parent.mkdir(parents=True,exist_ok=True);part=target.with_suffix(target.suffix+'.partial') url='https://huggingface.co/'+row['repository']+'/resolve/'+row['revision']+'/'+row['remote'] h=hashlib.sha256() if row['algorithm']=='sha256' else hashlib.sha1() if row['algorithm']=='git-blob-sha1':h.update(('blob '+str(row['bytes'])+'\0').encode()) n=0 with urllib.request.urlopen(url,timeout=60) as src,part.open('wb') as dst: for block in iter(lambda:src.read(1048576),b''):n+=len(block);h.update(block);dst.write(block) assert n==row['bytes'] and h.hexdigest()==row['digest'],row['local'] os.replace(part,target) print('19 exact selected files verified; no model load has run') PYDOWNLOADExpected result: All 19 files match. No model code has run in this download block.
Configure
1. Create the real reference recording
On a Linux desktop with your own microphone, speak the original phrase: This is my voice reference for a private speech experiment. Record about five seconds, listen back and keep only a clear consented human recording. Alternatively provide your own already recorded WAV satisfying the explicit bounds. The check rejects over ten seconds before native code can silently truncate at fifteen seconds. Never use silence, a sine wave or synthesized voice as proof of valid speaker conditioning.
Commandset -e sudo apt-get install -y alsa-utils cd "$HOME/indextts25-tts" test ! -e reference.wav || { echo 'Existing reference: preserve it or deliberately replace it before recording'; exit 1; } arecord -f S16_LE -r 22050 -c 1 -d 5 reference.wav aplay reference.wav sha256sum reference.wav > reference.sha256Expected result: A real consented voice recording exists and was manually auditioned. Its exact digest is reader-specific, not invented by the guide.
2. Write the checked native engine
Separate strict compatibility preflights create the native GPT, codec and S2Mel classes and require their checkpoint states to load with strict=True before the unchanged native constructor runs. W2V-BERT loading diagnostics must be four empty lists. Native Torch loads are forced to weights-only; no unsafe retry. Every native module uses CPU FP32 eval, including the codec. The output hooks check finite tensors before vocoder tanh/clamp/PCM conversion; native missing-EOS/cap warnings become errors before partial audio is returned.
Commandset -e cd "$HOME/indextts25-tts" cat > reader-reference-server.py <<'PYENGINE' """Reader-authored private IndexTTS2.5 experiment; not an official/production server.""" import base64,hashlib,hmac,io,json,math,pathlib,re,struct,wave from http.server import BaseHTTPRequestHandler,HTTPServer ROOT=pathlib.Path(__file__).resolve().parent TEXT='hello this is a private speech synthesis check' def reference_info(path): if path.is_symlink() or not path.is_file() or path.stat().st_size>2000000:raise ValueError('reference file boundary') raw=path.read_bytes() with wave.open(io.BytesIO(raw),'rb') as w: ch,sw,sr,n=w.getnchannels(),w.getsampwidth(),w.getframerate(),w.getnframes() if ch not in (1,2) or sw!=2 or not 16000<=sr<=48000 or w.getcomptype()!='NONE' or not 3*sr<=n<=10*sr:raise ValueError('use3to10seconds real PCM16 voice; reject before native15second truncation') pcm=w.readframes(n) if len(pcm)!=n*ch*2:raise ValueError('incomplete reference') if not any(abs(x[0])>30 for x in struct.iter_unpack('<h',pcm)):raise ValueError('silent reference') return {'sha256':hashlib.sha256(raw).hexdigest(),'frames':n,'sample_rate':sr,'channels':ch,'seconds':n/sr} def verify_assets(): for row in json.loads((ROOT/'component-manifest.json').read_text())['files']: f=ROOT/row['local'] if f.is_symlink() or not f.is_file() or f.stat().st_size!=row['bytes']:raise ValueError('asset size') h=hashlib.sha256() if row['algorithm']=='sha256' else hashlib.sha1() if row['algorithm']=='git-blob-sha1':h.update(('blob '+str(row['bytes'])+'\0').encode()) with f.open('rb') as stream: for block in iter(lambda:stream.read(1048576),b''):h.update(block) if h.hexdigest()!=row['digest']:raise ValueError('asset digest') def make_engine(): import os,gc,random,warnings os.environ.update(HF_HUB_OFFLINE='1',TRANSFORMERS_OFFLINE='1',TORCH_FORCE_WEIGHTS_ONLY_LOAD='1') ref=reference_info(ROOT/'reference.wav');verify_assets() import torch,numpy as np from omegaconf import OmegaConf from indextts.gpt.model_v2 import UnifiedVoice from indextts.codec.models import EnhancedCodec from indextts.s2mel.modules.commons import MyModel from transformers import Wav2Vec2BertModel cfg=OmegaConf.load(ROOT/'checkpoints/config.yaml') if float(cfg.version)!=2.5:raise ValueError('wrong native version') torch.set_num_threads(8);torch.set_num_interop_threads(1) modeldir=ROOT/'checkpoints' def loadfile(name):return torch.load(modeldir/name,map_location='cpu',weights_only=True) def strict(model,state): if not isinstance(state,dict) or not all(isinstance(k,str) and isinstance(v,torch.Tensor) and torch.isfinite(v).all() for k,v in state.items()):raise ValueError('nonfinite/malformed state') model.load_state_dict(state,strict=True) # Separate strict compatibility preflight; original native source stays unchanged. gpt=UnifiedVoice(**cfg.gpt,use_accel=False,spk_cond_mode='campplus') state=loadfile('gpt.pth');strict(gpt,state['model'] if 'model' in state else state) del gpt,state;gc.collect() codec=EnhancedCodec(**cfg.semantic_codec,cfg=cfg.semantic_codec) state=loadfile('codec.pth');strict(codec,state['model']);del codec,state;gc.collect() mel=MyModel(cfg.s2mel);state=loadfile('s2mel.pth')['net'] for name,model in mel.models.items(): strict(model,{k.removeprefix('module.'):v for k,v in state[name].items()}) del mel,state;gc.collect() semantic,info=Wav2Vec2BertModel.from_pretrained(str(modeldir/'hf_cache/w2v-bert-2.0'),local_files_only=True,use_safetensors=True,output_loading_info=True) keys={'missing_keys','unexpected_keys','mismatched_keys','error_msgs'} if not isinstance(info,dict) or set(info)!=keys or any(not isinstance(v,list) or v for v in info.values()):raise ValueError('semantic loading diagnostics') del semantic;gc.collect() stats=loadfile('wav2vec2bert_stats.pt') if not all(isinstance(stats[k],torch.Tensor) and stats[k].numel()==1024 and torch.isfinite(stats[k]).all() for k in ['mean','var']) or not (stats['var']>0).all():raise ValueError('invalid semantic statistics') del stats from indextts.infer_v2_5 import IndexTTS2 tts=IndexTTS2(cfg_path=str(modeldir/'config.yaml'),model_dir=str(modeldir),device='cpu',use_bf16=False,use_cuda_kernel=False,use_deepspeed=False,use_accel=False,use_torch_compile=False,use_qwen_emo=False) for model in [tts.gpt,tts.semantic_model,tts.semantic_codec,tts.s2mel,tts.campplus_model,tts.bigvgan]:model.float().cpu().eval() if tts.gpt.inference_model.config.n_positions!=2417 or tts.gpt.text_pos_embedding.emb.num_embeddings!=602 or tts.gpt.mel_pos_embedding.emb.num_embeddings!=1818:raise ValueError('native position configuration') prefix='<|en|> ' token_count=len(tts.tokenizer.encode(prefix+TEXT,allowed_special='all'))+2 if not 2<token_count<=120 or tts.split_text_by_tokens(TEXT,120,prefix)!=[TEXT]:raise ValueError('text bound; no segmentation/truncation') # Exact campplus route uses1speaker embedding plus2zero conditioning positions. # Native prepare_gpt_inputs upper bound: complete text120 +5padding/start/conditioning positions. if 125+1500>2417:raise ValueError('joint AR budget') def finite_output(module,inputs,output): if not isinstance(output,torch.Tensor) or not torch.isfinite(output).all():raise ValueError('nonfinite native tensor before PCM conversion') tts.s2mel.models['cfm'].estimator.register_forward_hook(finite_output) tts.bigvgan.conv_post.register_forward_hook(finite_output) # before native tanh/clamp/PCM coercion def run(): if reference_info(ROOT/'reference.wav')['sha256']!=ref['sha256']:raise ValueError('reference changed; restart deliberately') torch.manual_seed(12345);random.seed(12345);np.random.seed(12345) with warnings.catch_warnings(): warnings.simplefilter('error',RuntimeWarning) # native missing-EOS/cap warning must fail before partial audio sr,data=tts.infer(spk_audio_prompt=str(ROOT/'reference.wav'),text=TEXT,output_path=None,lang='EN',text_normalization=False,interval_silence=0,max_text_tokens_per_segment=120,max_mel_tokens=1500,num_beams=3,do_sample=True,top_p=.8,top_k=30,temperature=.8,length_penalty=0.,repetition_penalty=10.,duration_factor=1.,use_random=False,use_emo_text=False) if sr!=22050 or not isinstance(data,np.ndarray) or data.dtype!=np.int16 or data.ndim!=2 or data.shape[1]!=1 or not 1<=data.shape[0]<=60*sr or not np.any(data):raise ValueError('native PCM boundary') buf=io.BytesIO() with wave.open(buf,'wb') as w:w.setnchannels(1);w.setsampwidth(2);w.setframerate(sr);w.writeframes(data.astype('<i2',copy=False).tobytes()) raw=buf.getvalue() return {'sample_rate':sr,'channels':1,'frames':data.shape[0],'seconds':data.shape[0]/sr,'wav_base64':base64.b64encode(raw).decode(),'sha256':hashlib.sha256(raw).hexdigest(),'reference_sha256':ref['sha256'],'text_input_positions':token_count,'native_ar_context':2417,'generated_codec_tokens':None,'codec_generation_cap':1500} return run,{'reference':ref,'text_input_positions':token_count,'native_ar_context':2417,'codec_generation_cap':1500} PYENGINEExpected result: Native engine fragment is saved exactly; no model load occurs in this configure step.
3. Complete the private transport and stable key
The fixed original English text uses already spelled-out words with native text normalization explicitly disabled. Native language prefix, start/stop and single-segment bounds are checked before inference. The endpoint accepts only the fixed selector; no arbitrary voice upload, prompt, model, file, URL or tool action is exposed. Preserve an existing nonempty key; never silently rotate it.
Commandset -e cd "$HOME/indextts25-tts" cat >> reader-reference-server.py <<'PYHTTP' def server(engine,key,health,port=8996): if not isinstance(key,str) or not re.fullmatch('[0-9a-f]{64}',key):raise ValueError('key format') class Handler(BaseHTTPRequestHandler): def setup(self):super().setup();self.connection.settimeout(10) def log_message(self,*args):pass def send(self,code,value): data=json.dumps(value,allow_nan=False,separators=(',',':')).encode() self.send_response(code);self.send_header('Content-Type','application/json');self.send_header('Content-Length',str(len(data)));self.send_header('Connection','close');self.end_headers();self.wfile.write(data);self.close_connection=True def auth(self): a=self.headers.get_all('Authorization',[]) return len(a)==1 and hmac.compare_digest(a[0].encode(),('Bearer '+key).encode()) def do_GET(self): if not self.auth():return self.send(401,{'error':'unauthorized'}) if self.path!='/health':return self.send(404,{'error':'not_found'}) return self.send(200,dict(health,ready=True)) def do_POST(self): if not self.auth():return self.send(401,{'error':'unauthorized'}) if self.path!='/v1/fixed-speech':return self.send(404,{'error':'not_found'}) if self.headers.get_all('Transfer-Encoding',[]):return self.send(400,{'error':'framing'}) lens=self.headers.get_all('Content-Length',[]) if len(lens)!=1:return self.send(411,{'error':'length_required'}) if not re.fullmatch('[0-9]{1,4}',lens[0]) or not 1<=int(lens[0])<=128:return self.send(413,{'error':'body_limit'}) if self.headers.get_content_type()!='application/json':return self.send(415,{'error':'json_required'}) try: b=self.rfile.read(int(lens[0])) if len(b)!=int(lens[0]):return self.send(400,{'error':'incomplete_body'}) def unique(pairs): d={} for k,v in pairs: if k in d:raise ValueError('duplicate key') d[k]=v return d req=json.loads(b,object_pairs_hook=unique,parse_constant=lambda _:(_ for _ in ()).throw(ValueError('constant'))) if req!={'fixture':'reference-en'}:raise ValueError('fixed fixture only') except (TimeoutError,OSError):return self.send(408,{'error':'body_timeout'}) except (ValueError,UnicodeError,RecursionError):return self.send(400,{'error':'invalid_request'}) try:r=engine() except Exception:return self.send(500,{'error':'native_synthesis_failed'}) return self.send(200,r) return HTTPServer(('127.0.0.1',port),Handler) if __name__=='__main__': key=(ROOT/'server.key').read_text().strip() if not re.fullmatch('[0-9a-f]{64}',key):raise ValueError('key format before model loading') engine,health=make_engine() with server(engine,key,health) as s:s.serve_forever() PYHTTP .venv/bin/python -m py_compile reader-reference-server.py printf '%s %s\n' '2be76691c079111c07d21b14a8d2952800dbd7f56ca2cb86a8e7455bbebb4f7d' reader-reference-server.py | sha256sum --check - umask 077 if [ ! -e server.key ]; then openssl rand -hex 32 > server.key; fi chmod 600 server.key test -s server.keyExpected result: Exact wrapper hash/syntax and preserved private key pass.
Start the model
1. Start the complete native reference-voice service
Run foreground and leave this terminal open. Asset/reference checks precede encoders. Strict compatibility preflights add load time and memory; no fit or speed is promised. No native source patch, remote-code trust, offload, DeepSpeed, CUDA kernel, torch.compile or optional emotion-text model is enabled.
Commandset -e cd "$HOME/indextts25-tts" OMP_NUM_THREADS=8 MKL_NUM_THREADS=8 HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 TORCH_FORCE_WEIGHTS_ONLY_LOAD=1 .venv/bin/python reader-reference-server.pyExpected result: Only after all reader-side checks and native loading, authenticated loopback is ready. Stop on any checkpoint/config/import or reference error.
Connect to your endpoint
http://127.0.0.1:8996/v1/fixed-speech
Trusted host loopback only. Authenticated /health uses the same port; checks run on the server.
Access: loopback. Private bearer token from server.key. POST JSON contains fixture set to reference-en. Response contains base64 WAV, digest, reference digest, actual text positions, sample rate/frames, context and codec cap. No arbitrary prompts, voices, paths, URLs or tools are accepted. Duplicate keys, nonfinite JSON, unsupported framing, bad length and oversized bodies fail before synthesis.
Verify the setup
1. Check real readiness and missing-key rejection
Run in a second server terminal. Actual text/reference counts become visible only here; no author measurement is implied.
Commandset -e cd "$HOME/indextts25-tts" .venv/bin/python - <<'PYCHECK' import pathlib,urllib.request,json,urllib.error key=pathlib.Path('server.key').read_text().strip();base='http://127.0.0.1:8996' r=urllib.request.Request(base+'/health',headers={'Authorization':'Bearer '+key}) with urllib.request.urlopen(r,timeout=60) as response:d=json.load(response) assert d['ready'] is True and d['native_ar_context']==2417 and 2<d['text_input_positions']<=120 and d['codec_generation_cap']==1500 assert 3<=d['reference']['seconds']<=10 try:urllib.request.urlopen(base+'/health',timeout=30) except urllib.error.HTTPError as e:assert e.code==401 else:raise RuntimeError('Missing authentication was not rejected') print(d) PYCHECKExpected result: Ready true, native inference context 2417, checked complete text positions at most 120, reference 3–10 seconds and unauthenticated health 401.
2. Synthesize and inspect the original utterance
The fixed utterance is: hello this is a private speech synthesis check. Native sampling uses three beams, temperature/top-p 0.8, top-k 30, repetition penalty 10, cap 1500 semantic speech codes, duration factor 1 and seed 12345. The code cap is not an observed count or seconds. Validate the 22.05 kHz mono PCM16 WAV and its digest, then listen locally for every word, repetition/cutoff/artifacts and whether the consented reference conditioning is plausible. No accuracy, intelligibility, identity-similarity score or exact output is promised. A client timeout does not cancel inference.
Commandset -e cd "$HOME/indextts25-tts" .venv/bin/python - <<'PYSPEECH' import pathlib,urllib.request,json,hashlib,base64,io,wave key=pathlib.Path('server.key').read_text().strip();r=urllib.request.Request('http://127.0.0.1:8996/v1/fixed-speech',data=b'{"fixture":"reference-en"}',headers={'Authorization':'Bearer '+key,'Content-Type':'application/json'}) with urllib.request.urlopen(r,timeout=7200) as response:d=json.load(response) raw=base64.b64decode(d['wav_base64'],validate=True) assert len(raw)<=3000000 and hashlib.sha256(raw).hexdigest()==d['sha256'] assert d['reference_sha256']==hashlib.sha256(pathlib.Path('reference.wav').read_bytes()).hexdigest() assert d['native_ar_context']==2417 and d['codec_generation_cap']==1500 and d['generated_codec_tokens'] is None assert 2<d['text_input_positions']<=120 and d['sample_rate']==22050 and d['channels']==1 with wave.open(io.BytesIO(raw),'rb') as w: assert w.getnchannels()==1 and w.getsampwidth()==2 and w.getframerate()==22050 and 0<w.getnframes()<=60*22050 assert len(w.readframes(w.getnframes()))==2*w.getnframes() pathlib.Path('speech.wav').write_bytes(raw) print('Verified PCM WAV. Listen for the complete fixed sentence and inspect voice/quality; no exact output is promised.') PYSPEECHExpected result: Either a valid speech.wav for manual listening or an explicit failed request. A native missing-EOS/cap warning must fail, not return partial audio.
Performance evidence
No compatible measurement available. Documented support and estimated memory do not establish response speed.
Limits and troubleshooting
- Actual native inference GPT context is 2417 positions. The base GPT construction has 2420 positions, while learned text/audio tables are 602/1818; these are distinct configurations, not interchangeable global text maxima. The selected campplus speaker route has one speaker embedding plus two zero conditioning positions. Native prefill is conservatively at most 125 positions for complete text at most 120, so the 1500-code cap stays below 2417; these are source-derived bounds, not observed counts.
- Native voice conditioning uses real audio, W2V-BERT hidden features, CAMPPlus speaker embedding, enhanced semantic codec, S2Mel/DiT and BigVGAN. Reference audio samples/features, text-token positions, autoregressive speech-code positions, mel frames and output samples are distinct units. No ASR neural model is invoked: the Whisper dependency supplies the tokenizer interface and the native vocabulary is local.
- Input/code counts, peak memory, full CPU fit, speed, target installation/import compatibility and actual audio quality are unmeasured. Strict preflight may reject an incompatible native checkpoint instead of allowing the original permissive loader to retain initialized/missing/mismatched weights. Do not relax it or enable unsafe loading to force success.
- Real reference duration must be 3–10 seconds in this bounded guide. The native loader can silently cut at 15 seconds; this wrapper rejects earlier. Non-silence and PCM validity do not establish a valid voice embedding, consent or rights; manual recording review remains necessary. Changing the reference after startup is rejected until a deliberate restart.
- The governing Chinese Bilibili text sets the revenue trigger at RMB 100 million; the English text says RMB 1 billion. Both exact texts and the English Chinese-priority clause remain available. This guide does not declare equivalence, legal clearance, rights acceptance or a blanket unrestricted-commercial license. Model/output derivatives and all third-party rights remain subject to applicable terms.
- Eight threads, 64 GiB RAM and 80 GiB disk are planning allocations only. Native GPT enables a KV cache, reference features can be cached and strict preflight adds memory/load overhead; no cache dtype or throughput measurement is claimed.
- Serial HTTPServer blocks health while synthesizing. Socket/client timeouts are not an inference deadline. Ctrl+C ends the foreground process; this is not a production/multiuser service or a public voice-upload API.
- This source-qualified English reference-voice pair does not finalize the useful model scope. Other languages, emotion reference/vector/text modes and their optional Qwen bundle, pronunciation and duration modes, streaming and independently qualified GPU/vLLM routes remain open.
- Dependency, strict state, weights-only or offline auxiliary error
- Stop and retain the exact error. Verify all 19 files, native commit, Python 3.10 and CPU wheel pins, normal full resolution and flat auxiliary paths. Never ignore missing/mismatched weights, patch the native runtime, use weights_only=False, float versions or silently fetch a replacement model.
- Reference rejected, wrong speaker conditioning or speech sounds poor
- Use a clear real consented recording in the stated format/duration and listen to it yourself. Reject too-long audio rather than truncating it. A valid WAV or nonzero samples do not prove correct identity or intelligibility. Record the observed failure without a success claim.
- Native cap warning, nonfinite tensor, out-of-memory or very slow synthesis
- Treat cap/missing-EOS and finite guards as failures. Do not return partial audio or suppress warnings. Stop with Ctrl+C if needed, inspect resources and logs, and qualify another configuration before changing it; selected hardware does not prove fit.
Stop the model
1. Stop the foreground native service
Press Ctrl+C in its original terminal. In the second terminal confirm the loopback endpoint no longer responds. Closing a client request alone does not cancel synthesis.
Commandcurl --max-time 3 -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8996/health || trueExpected result: After Ctrl+C, connection fails/HTTP status 000. Stop and inspect if the endpoint still responds.
Uninstall
1. Remove the dedicated private experiment
Stop first, preserve any desired output/license/audit evidence, and confirm this dedicated path contains no unrelated files. This removes the consented voice recording and secret as well as checkpoints/code/venv. Shared uv cache/system packages remain; inspect them separately rather than deleting shared caches.
Commandcd "$HOME" rm -r -- "$HOME/indextts25-tts"Expected result: Dedicated private experiment is removed; no shared cache or system package is indiscriminately deleted.
Sources and verification
Sources checked Oct 16, 2026. Verification source
- https://huggingface.co/api/models/IndexTeam/IndexTTS-2.5?blobs=truepublisher · retrieved Oct 16, 2026
- https://huggingface.co/api/models?author=IndexTeam&limit=100publisher · retrieved Oct 16, 2026
- https://api.github.com/repos/index-tts/index-tts/commits/mainpublisher · retrieved Oct 16, 2026
- https://api.github.com/repos/index-tts/index-tts/releases?per_page=30publisher · retrieved Oct 16, 2026
- https://api.github.com/repos/index-tts/index-tts/tags?per_page=100publisher · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/README.mdpublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/LICENSEpublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/pyproject.tomlpublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/infer_v2.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://api.github.com/repos/index-tts/index-tts/git/trees/d9e41aac89fd00b3d71497fddb287b7f24613712?recursive=1publisher · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/infer_v2_5.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/cli_v2.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/examples_downloader.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/checkpoint.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/uv.lockpublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/maskgct_utils.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://huggingface.co/IndexTeam/IndexTTS-2.5/resolve/c39ce5ba981572cb187443877ff559dfb246ce63/README.mdpublisher · retrieved Oct 16, 2026 · revision c39ce5b
- https://huggingface.co/IndexTeam/IndexTTS-2.5/resolve/c39ce5ba981572cb187443877ff559dfb246ce63/LICENSEpublisher · retrieved Oct 16, 2026 · revision c39ce5b
- https://huggingface.co/IndexTeam/IndexTTS-2.5/resolve/c39ce5ba981572cb187443877ff559dfb246ce63/config.yamlpublisher · retrieved Oct 16, 2026 · revision c39ce5b
- https://huggingface.co/IndexTeam/IndexTTS-2.5/resolve/c39ce5ba981572cb187443877ff559dfb246ce63/qwen0.6bemo4-merge/config.jsonpublisher · retrieved Oct 16, 2026 · revision c39ce5b
- https://recipes.vllm.ai/IndexTeam/IndexTTS-2.5publisher · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/LICENSE_ZH.txtpublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/model_download.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/nemo_tn.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/tokenizer.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/codec/models.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/gpt/model_v2.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/s2mel/modules/commons.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/examples/cases.jsonlpublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/ja_g2p.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/front.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://api.github.com/repos/vllm-project/vllm-omni/commits/mainruntime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/vllm-project/vllm-omni/e1d77a38a7d645283e660b6add4dfb2439732d15/recipes/IndexTeam/IndexTTS-2_5.mdpublisher · retrieved Oct 16, 2026 · revision e1d77a3
- https://api.github.com/repos/vllm-project/vllm-omni/git/trees/e1d77a38a7d645283e660b6add4dfb2439732d15?recursive=1runtime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/s2mel/modules/diffusion_transformer.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/s2mel/modules/bigvgan/bigvgan.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://huggingface.co/api/models/facebook/w2v-bert-2.0?blobs=truepublisher · retrieved Oct 16, 2026
- https://huggingface.co/facebook/w2v-bert-2.0/resolve/da985ba0987f70aaeb84a80f2851cfac8c697a7b/README.mdpublisher · retrieved Oct 16, 2026 · revision da985ba
- https://huggingface.co/facebook/w2v-bert-2.0/resolve/da985ba0987f70aaeb84a80f2851cfac8c697a7b/config.jsonpublisher · retrieved Oct 16, 2026 · revision da985ba
- https://huggingface.co/facebook/w2v-bert-2.0/resolve/da985ba0987f70aaeb84a80f2851cfac8c697a7b/preprocessor_config.jsonpublisher · retrieved Oct 16, 2026 · revision da985ba
- https://huggingface.co/api/models/funasr/campplus?blobs=truepublisher · retrieved Oct 16, 2026
- https://huggingface.co/funasr/campplus/resolve/e4b6ede7ce16997aff4ae69fbca1f0175e2afede/README.mdpublisher · retrieved Oct 16, 2026 · revision e4b6ede
- https://huggingface.co/api/models/nvidia/bigvgan_v2_22khz_80band_256x?blobs=truepublisher · retrieved Oct 16, 2026
- https://huggingface.co/nvidia/bigvgan_v2_22khz_80band_256x/resolve/633ff708ed5b74903e86ff1298cf4a98e921c513/README.mdpublisher · retrieved Oct 16, 2026 · revision 633ff70
- https://huggingface.co/nvidia/bigvgan_v2_22khz_80band_256x/resolve/633ff708ed5b74903e86ff1298cf4a98e921c513/LICENSEpublisher · retrieved Oct 16, 2026 · revision 633ff70
- https://huggingface.co/nvidia/bigvgan_v2_22khz_80band_256x/resolve/633ff708ed5b74903e86ff1298cf4a98e921c513/config.jsonpublisher · retrieved Oct 16, 2026 · revision 633ff70
- https://raw.githubusercontent.com/vllm-project/vllm-omni/e1d77a38a7d645283e660b6add4dfb2439732d15/vllm_omni/deploy/indextts2_5.yamlruntime maintainer · retrieved Oct 16, 2026 · revision e1d77a3
- https://raw.githubusercontent.com/vllm-project/vllm-omni/e1d77a38a7d645283e660b6add4dfb2439732d15/vllm_omni/model_executor/models/registry.pyruntime maintainer · retrieved Oct 16, 2026 · revision e1d77a3
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/s2mel/modules/gpt_fast/model.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://raw.githubusercontent.com/index-tts/index-tts/d9e41aac89fd00b3d71497fddb287b7f24613712/indextts/utils/common.pypublisher · retrieved Oct 16, 2026 · revision d9e41aa
- https://pypi.org/pypi/uv/0.8.19/jsonruntime maintainer · retrieved Oct 16, 2026
- https://packages.ubuntu.com/jammy/python3.10runtime maintainer · retrieved Oct 16, 2026
- https://docs.astral.sh/uv/concepts/projects/sync/runtime maintainer · retrieved Oct 16, 2026
- https://docs.astral.sh/uv/concepts/python-versions/runtime maintainer · retrieved Oct 16, 2026
- https://pypi.org/pypi/openai-whisper/jsonruntime maintainer · retrieved Oct 16, 2026
- https://download.pytorch.org/whl/cpu/torch/runtime maintainer · retrieved Oct 16, 2026
- https://download.pytorch.org/whl/cpu/torchaudio/runtime maintainer · retrieved Oct 16, 2026
- https://docs.astral.sh/uv/concepts/projects/config/runtime maintainer · retrieved Oct 16, 2026
- https://docs.astral.sh/uv/pip/packages/runtime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/astral-sh/uv/0.8.19/crates/uv-cli/src/lib.rsruntime maintainer · retrieved Oct 16, 2026 · revision 0.8.19
- https://raw.githubusercontent.com/pytorch/pytorch/v2.8.0/torch/serialization.pyruntime maintainer · retrieved Oct 16, 2026 · revision v2.8.0
- https://raw.githubusercontent.com/openai/whisper/v20250625/whisper/__init__.pyruntime maintainer · retrieved Oct 16, 2026 · revision v20250625
- https://raw.githubusercontent.com/openai/whisper/v20250625/whisper/tokenizer.pyruntime maintainer · retrieved Oct 16, 2026 · revision v20250625
- https://raw.githubusercontent.com/openai/whisper/v20250625/LICENSEruntime maintainer · retrieved Oct 16, 2026 · revision v20250625
- https://raw.githubusercontent.com/astral-sh/uv/0.8.19/uv.schema.jsonruntime maintainer · retrieved Oct 16, 2026 · revision 0.8.19
- https://manpages.ubuntu.com/manpages/jammy/man1/arecord.1.htmlruntime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/pytorch/pytorch/v2.8.0/torch/nn/modules/module.pyruntime maintainer · retrieved Oct 16, 2026 · revision v2.8.0
- https://raw.githubusercontent.com/huggingface/transformers/v4.52.1/src/transformers/modeling_utils.pyruntime maintainer · retrieved Oct 16, 2026 · revision v4.52.1
- https://pypi.org/pypi/transformers/4.52.1/jsonruntime maintainer · retrieved Oct 16, 2026
- https://pypi.org/pypi/opencv-python/4.9.0.80/jsonruntime maintainer · retrieved Oct 16, 2026
- https://pypi.org/pypi/numpy/2.2.6/jsonruntime maintainer · retrieved Oct 16, 2026
- https://pypi.org/pypi/descript-audiotools/0.7.2/jsonruntime maintainer · retrieved Oct 16, 2026
- https://pypi.org/pypi/openai-whisper/20250625/jsonruntime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/modelscope/modelscope/v1.27.0/modelscope/__init__.pyruntime maintainer · retrieved Oct 16, 2026 · revision v1.27.0
- https://raw.githubusercontent.com/modelscope/modelscope/v1.27.0/modelscope/utils/hf_util/__init__.pyruntime maintainer · retrieved Oct 16, 2026 · revision v1.27.0
- https://raw.githubusercontent.com/modelscope/modelscope/v1.27.0/modelscope/utils/hf_util/auto_class.pyruntime maintainer · retrieved Oct 16, 2026 · revision v1.27.0
- https://pytorch.org/get-started/previous-versions/runtime maintainer · retrieved Oct 16, 2026
- https://packages.ubuntu.com/jammy/alsa-utilsruntime maintainer · retrieved Oct 16, 2026
- https://opentools.ai/llms/indexttsopentools · retrieved Oct 16, 2026 · revision private-reader-author-v1
- https://opentools.ai/api/llms/allopentools · retrieved Oct 16, 2026 · revision frozen157-20261016
- https://github.com/MacadellicTech/opentools-site/blob/44b24fd74a413f37824fe860402726442e9a67e4/components/llm-hosting/HostingGuides.jsopentools · retrieved Oct 16, 2026 · revision 44b24fd7
- https://www.intel.com/content/www/us/en/products/sku/134586/intel-core-i512400-processor-18m-cache-up-to-4-40-ghz/specifications.htmlmanufacturer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/docs/build.mdruntime maintainer · retrieved Oct 16, 2026 · revision 620d222
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/ggml/src/ggml-cpu/CMakeLists.txtruntime maintainer · retrieved Oct 16, 2026 · revision 620d222