# ksuriuri/index-tts-vllm architecture

> Architecture diagram of the GitHub repository ksuriuri/index-tts-vllm, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ksuriuri/index-tts-vllm
- Repository: https://github.com/ksuriuri/index-tts-vllm

## Overview

IndexTTS-vLLM is a speech-synthesis application that replaces the IndexTTS GPT inference stage with vLLM for faster generation. A client submits text and optional reference audio through the API or web UI; inference prepares text and voice conditioning, generates acoustic tokens, converts them to audio features, and vocodes a waveform. The repository also documents v1/v1.5 multi-reference voice mixing and v2 emotion controls, plus OpenAI-compatible speech and voice-list APIs. The graph reflects documented capabilities and sampled inference/model code; some subsystem wiring is based on the README because its implementation was not sampled.

Main entry points: [`indextts/infer_vllm_v2.py`](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm_v2.py) (v2 Inference), [`indextts/infer_vllm.py`](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm.py) (v1 Inference), [`api_server.py`](https://github.com/ksuriuri/index-tts-vllm/blob/master/api_server.py) (v1 API), [`api_server_v2.py`](https://github.com/ksuriuri/index-tts-vllm/blob/master/api_server_v2.py) (v2 API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User Interfaces"]
  node_api_v1["v1 API<br/>[api_server.py]"]
  node_api_v2["v2 API<br/>[api_server_v2.py]"]
  node_ui_v1["v1 Web UI<br/>[webui.py]"]
  node_ui_v2["v2 Web UI<br/>[webui_v2.py]"]
end

subgraph group_conditioning["Input Conditioning"]
  node_inference_v1["v1 Inference<br/>[infer_vllm.py]"]
  node_inference_v2["v2 Inference<br/>[infer_vllm_v2.py]"]
  node_text_frontend["Text Frontend<br/>[front.py]"]
  node_feature_extractors["Feature Extraction"]
  node_semantic_model["Semantic Encoder"]
  node_voice_condition["Voice Conditioning<br/>[DTDNN.py]"]
end

subgraph group_generation["Token Generation"]
  node_gpt_v1["v1 vLLM GPT<br/>[model_vllm.py]"]
  node_gpt_v2["v2 vLLM GPT<br/>[model_vllm_v2.py]"]
  node_gpt_v1_model["v1 GPT Model"]
  node_qwen_emotion["Emotion Inference<br/>[infer_vllm_v2.py]"]
end

subgraph group_audio["Audio Synthesis"]
  node_s2mel["S2Mel Synthesis"]
  node_audio_features["Audio Features<br/>[audio.py]"]
  node_vocoder_v1["BigVGAN Vocoder<br/>[bigvgan.py]"]
  node_vocoder_v2["BigVGAN Vocoder<br/>[bigvgan.py]"]
end

node_client(("Client"))
node_browser(("Browser User"))
node_waveform["Generated Audio"]
node_voice_list["Voice List"]

node_client -->|"requests speech"| node_api_v1
node_client -->|"requests speech"| node_api_v2
node_api_v1 -->|"invokes"| node_inference_v1
node_api_v2 -->|"invokes"| node_inference_v2
node_browser -->|"submits speech"| node_ui_v1
node_browser -->|"submits speech"| node_ui_v2
node_ui_v1 -->|"invokes"| node_inference_v1
node_ui_v2 -->|"invokes"| node_inference_v2
node_api_v1 -->|"serves voices"| node_voice_list
node_api_v2 -->|"serves voices"| node_voice_list
node_inference_v1 -->|"tokenizes text"| node_text_frontend
node_inference_v2 -->|"tokenizes text"| node_text_frontend
node_inference_v1 -->|"extracts features"| node_feature_extractors
node_inference_v2 -->|"extracts features"| node_feature_extractors
node_inference_v1 -->|"encodes voice"| node_voice_condition
node_inference_v2 -->|"encodes voice"| node_voice_condition
node_inference_v2 -->|"extracts semantics"| node_semantic_model
node_inference_v1 -->|"requests tokens"| node_gpt_v1
node_gpt_v1 -->|"runs model"| node_gpt_v1_model
node_inference_v2 -->|"requests tokens"| node_gpt_v2
node_inference_v2 -.->|"requests emotion"| node_qwen_emotion
node_inference_v1 -->|"converts tokens"| node_s2mel
node_inference_v2 -->|"converts tokens"| node_s2mel
node_s2mel -->|"produces features"| node_audio_features
node_inference_v1 -->|"vocodes features"| node_vocoder_v1
node_inference_v2 -->|"vocodes features"| node_vocoder_v2
node_vocoder_v1 -->|"produces audio"| node_waveform
node_vocoder_v2 -->|"produces audio"| node_waveform
node_inference_v1 -->|"returns audio"| node_waveform
node_inference_v2 -->|"returns audio"| node_waveform

click node_api_v1 "https://github.com/ksuriuri/index-tts-vllm/blob/master/api_server.py"
click node_api_v2 "https://github.com/ksuriuri/index-tts-vllm/blob/master/api_server_v2.py"
click node_ui_v1 "https://github.com/ksuriuri/index-tts-vllm/blob/master/webui.py"
click node_ui_v2 "https://github.com/ksuriuri/index-tts-vllm/blob/master/webui_v2.py"
click node_inference_v1 "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm.py"
click node_inference_v2 "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm_v2.py"
click node_text_frontend "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/utils/front.py"
click node_feature_extractors "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/utils/feature_extractors.py"
click node_semantic_model "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/wav2vecbert_extract.py"
click node_voice_condition "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/campplus/DTDNN.py"
click node_gpt_v1 "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/gpt/model_vllm.py"
click node_gpt_v2 "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/gpt/model_vllm_v2.py"
click node_gpt_v1_model "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/gpt/index_tts_gpt2_vllm_v1.py"
click node_qwen_emotion "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm_v2.py"
click node_s2mel "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/diffusion_transformer.py"
click node_audio_features "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/audio.py"
click node_vocoder_v1 "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/BigVGAN/bigvgan.py"
click node_vocoder_v2 "https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/bigvgan/bigvgan.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_api_v1,node_api_v2,node_ui_v1,node_ui_v2,node_client,node_browser toneBlue
class node_inference_v1,node_inference_v2,node_text_frontend,node_feature_extractors,node_semantic_model,node_voice_condition toneAmber
class node_gpt_v1,node_gpt_v2,node_gpt_v1_model,node_qwen_emotion toneMint
class node_s2mel,node_audio_features,node_vocoder_v1,node_vocoder_v2 toneRose
class node_waveform,node_voice_list toneIndigo
```

## Components

### User Interfaces

- [v1 API](https://github.com/ksuriuri/index-tts-vllm/blob/master/api_server.py): `api_server.py`
- [v2 API](https://github.com/ksuriuri/index-tts-vllm/blob/master/api_server_v2.py): `api_server_v2.py`
- [v1 Web UI](https://github.com/ksuriuri/index-tts-vllm/blob/master/webui.py): `webui.py`
- [v2 Web UI](https://github.com/ksuriuri/index-tts-vllm/blob/master/webui_v2.py): `webui_v2.py`

### Input Conditioning

- [v1 Inference](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm.py): `indextts/infer_vllm.py`
- [v2 Inference](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm_v2.py): `indextts/infer_vllm_v2.py`
- [Text Frontend](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/utils/front.py): `indextts/utils/front.py`
- [Feature Extraction](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/utils/feature_extractors.py): `indextts/utils/feature_extractors.py`
- [Semantic Encoder](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/wav2vecbert_extract.py): `indextts/s2mel/wav2vecbert_extract.py`
- [Voice Conditioning](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/campplus/DTDNN.py): `indextts/s2mel/modules/campplus/DTDNN.py`

### Token Generation

- [v1 vLLM GPT](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/gpt/model_vllm.py): `indextts/gpt/model_vllm.py`
- [v2 vLLM GPT](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/gpt/model_vllm_v2.py): `indextts/gpt/model_vllm_v2.py`
- [v1 GPT Model](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/gpt/index_tts_gpt2_vllm_v1.py): `indextts/gpt/index_tts_gpt2_vllm_v1.py`
- [Emotion Inference](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/infer_vllm_v2.py): `indextts/infer_vllm_v2.py`

### Audio Synthesis

- [S2Mel Synthesis](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/diffusion_transformer.py): `indextts/s2mel/modules/diffusion_transformer.py`
- [Audio Features](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/audio.py): `indextts/s2mel/modules/audio.py`
- [BigVGAN Vocoder](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/BigVGAN/bigvgan.py): `indextts/BigVGAN/bigvgan.py`
- [BigVGAN Vocoder](https://github.com/ksuriuri/index-tts-vllm/blob/master/indextts/s2mel/modules/bigvgan/bigvgan.py): `indextts/s2mel/modules/bigvgan/bigvgan.py`

### Other components

- **Client**
- **Browser User**
- **Generated Audio**
- **Voice List**

## Connections

- Client → v1 API: requests speech
- Client → v2 API: requests speech
- v1 API → v1 Inference: invokes
- v2 API → v2 Inference: invokes
- Browser User → v1 Web UI: submits speech
- Browser User → v2 Web UI: submits speech
- v1 Web UI → v1 Inference: invokes
- v2 Web UI → v2 Inference: invokes
- v1 API → Voice List: serves voices
- v2 API → Voice List: serves voices
- v1 Inference → Text Frontend: tokenizes text
- v2 Inference → Text Frontend: tokenizes text
- v1 Inference → Feature Extraction: extracts features
- v2 Inference → Feature Extraction: extracts features
- v1 Inference → Voice Conditioning: encodes voice
- v2 Inference → Voice Conditioning: encodes voice
- v2 Inference → Semantic Encoder: extracts semantics
- v1 Inference → v1 vLLM GPT: requests tokens
- v1 vLLM GPT → v1 GPT Model: runs model
- v2 Inference → v2 vLLM GPT: requests tokens
- v2 Inference → Emotion Inference: requests emotion
- v1 Inference → S2Mel Synthesis: converts tokens
- v2 Inference → S2Mel Synthesis: converts tokens
- S2Mel Synthesis → Audio Features: produces features
- v1 Inference → BigVGAN Vocoder: vocodes features
- v2 Inference → BigVGAN Vocoder: vocodes features
- BigVGAN Vocoder → Generated Audio: produces audio
- BigVGAN Vocoder → Generated Audio: produces audio
- v1 Inference → Generated Audio: returns audio
- v2 Inference → Generated Audio: returns audio
