Coqui TTS (package name TTS) is a Python library for advanced Text-to-Speech generation. It bundles dozens of pretrained neural voices in 1100+ languages, a one-line command-line tool, a Python API, a local web server, and full training recipes — so you can turn text into natural-sounding speech, clone a voice from a few seconds of reference audio, or convert one speaker's voice into another.
This guide covers everything you need to use the released models: installing the package, choosing a voice, synthesizing speech from the command line and from Python, voice cloning, voice conversion, and running the local demo server. Training your own models, architecture internals, and security hardening live in the companion Admin Guide.
Note
Coqui TTS is documented here at version 0.22.0 (commit
dbf1a08). The original company behind Coqui has since shut down, so the project is effectively frozen at this release and community-maintained. The voices and code below work, but expect compatibility friction with very new versions of PyTorch andtransformers— see Troubleshooting.
1. Quick Start
Install the package, then make your computer talk in two lines.
Important
Coqui TTS requires Python ≥ 3.9 and < 3.12. Installation fails on Python 3.12+ with a
RuntimeError. Use a 3.9–3.11 virtual environment.
Command line
pip install TTS
tts --text "Hello world, spoken by Coqui." --out_path hello.wav
> tts_models/en/ljspeech/tacotron2-DDC is downloaded.
> Text: Hello world, spoken by Coqui.
> Saving output to hello.wav
Python
from TTS.api import TTS
tts = TTS("tts_models/en/ljspeech/tacotron2-DDC")
tts.tts_to_file(text="Hello world, spoken by Coqui.", file_path="hello.wav")
The first run downloads the default English model (tts_models/en/ljspeech/tacotron2-DDC) and writes a .wav file you can play in any audio player.
Tip
No model specified means Coqui uses its default LJSpeech English voice. To pick a different voice, see Choosing a Voice.
To clone a voice instead, point the high-quality XTTS v2 model at a reference clip:
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2")
tts.tts_to_file(
text="This sentence is spoken in a cloned voice.",
speaker_wav="reference.wav", # a few seconds of the voice to clone
language="en",
file_path="cloned.wav",
)
2. What You Can Do
| Capability | How | Best model to start with |
|---|---|---|
| Synthesize speech from text | tts CLI or Python tts_to_file() |
tts_models/en/ljspeech/tacotron2-DDC |
| Voice cloning from a reference clip | --speaker_wav / speaker_wav= |
tts_models/multilingual/multi-dataset/xtts_v2 |
| Multilingual speech (17 languages, one model) | XTTS v2 with language= |
xtts_v2 |
| Multi-speaker voices (pick from a roster) | --speaker_idx / speaker= |
tts_models/en/vctk/vits (109 speakers) |
| Voice conversion (recast one voice as another) | voice_conversion_to_file() |
voice_conversion_models/multilingual/vctk/freevc24 |
| 1100+ languages via Meta's MMS/Fairseq voices | tts_models/<iso>/fairseq/vits |
e.g. tts_models/deu/fairseq/vits |
| Serve a web/HTTP TTS endpoint | tts-server |
any tts_models name |
Note
Coqui ships several model families with different strengths: end-to-end models (XTTS, VITS, YourTTS, Bark, Tortoise) and classic two-stage spectrogram models (Tacotron2, Glow-TTS, FastPitch, Speedy-Speech, Overflow) that pair with a separate vocoder. XTTS v2 is the most capable all-rounder for cloning and multilingual work.
3. Installation
3.1 From PyPI (recommended for synthesis only)
If you only want to generate speech with the released models, install from PyPI:
pip install TTS
3.2 From source (for training or development)
git clone https://github.com/coqui-ai/TTS
cd TTS
pip install -e .[all,dev,notebooks] # select the extras you need
Available extras: all, dev, notebooks, ja (Japanese support).
3.3 On Ubuntu / Debian
A Makefile provides convenience targets:
make system-deps # installs OS-level audio/build dependencies (Ubuntu/Debian only)
make install # installs TTS in editable mode
3.4 With Docker (no install)
Coqui publishes prebuilt images so you can run TTS without installing anything locally:
docker run --rm -it -p 5002:5002 --entrypoint /bin/bash ghcr.io/coqui-ai/tts-cpu
python3 TTS/server/server.py --list_models # see available models
python3 TTS/server/server.py --model_name tts_models/en/vctk/vits # start the server
Then open http://[::1]:5002/ in a browser. GPU image variants are also published.
Warning
The hard Python version gate lives in
setup.py: installing on Python 3.12 or newer raisesRuntimeError: TTS requires python >= 3.9 and < 3.12. Create your environment with a supported interpreter before installing — for examplepython3.11 -m venv .venv.
3.5 Verify the install
tts --list_models
Name format: type/language/dataset/model
1: tts_models/multilingual/multi-dataset/xtts_v2
2: tts_models/multilingual/multi-dataset/xtts_v1.1
...
If tts --list_models prints a numbered model list, you're ready.
4. Choosing a Voice (the Model Zoo)
Every Coqui voice has a four-part name:
<model_type>/<language>/<dataset>/<model_name>
For example tts_models/en/ljspeech/tacotron2-DDC is a TTS model, English, trained on the LJSpeech dataset, using the Tacotron2-DDC architecture. The three model types are:
| Type prefix | What it produces |
|---|---|
tts_models/... |
Text → speech |
vocoder_models/... |
Mel-spectrogram → waveform (paired with two-stage TTS models) |
voice_conversion_models/... |
Recast a source voice as a target voice |
4.1 Browse and inspect models
# List every available model
tts --list_models
# Show details for a model by its full name
tts --model_info_by_name tts_models/en/ljspeech/tacotron2-DDC
# Show details for a model by its index in --list_models
tts --model_info_by_idx tts_models/3
4.2 Headline models
| Model name | Languages | Notes |
|---|---|---|
tts_models/multilingual/multi-dataset/xtts_v2 |
17 | Best quality; voice cloning; streaming-capable. Requires accepting a license (see note below). |
tts_models/multilingual/multi-dataset/your_tts |
EN/FR/PT + more | Cross-language voice cloning. |
tts_models/multilingual/multi-dataset/bark |
many | Suno's Bark; expressive, unconstrained cloning. |
tts_models/en/multi-dataset/tortoise-v2 |
EN | High quality, slower (Tortoise). |
tts_models/en/ljspeech/tacotron2-DDC |
EN | Fast default single-speaker voice. |
tts_models/en/ljspeech/vits |
EN | End-to-end, no separate vocoder needed. |
tts_models/en/vctk/vits |
EN | 109 speakers — multi-speaker. |
tts_models/de/thorsten/tacotron2-DDC |
DE | German single-speaker. |
tts_models/<iso>/fairseq/vits |
1100+ | Meta MMS voices, e.g. tts_models/deu/fairseq/vits. |
Important
XTTS v2 is not open source. It ships under the Coqui Public Model License (CPML), which restricts commercial use, and it is gated: the first time you load it you must accept the terms. To pre-accept non-interactively (for scripts/servers), set the environment variable
COQUI_TOS_AGREED=1. Other voices carry their own licenses (Apache-2.0, MPL, CC-BY-SA, MIT, etc.) — check--model_info_by_namebefore any commercial use.
Tip
Fairseq / MMS voices unlock 1100+ languages with one naming convention:
tts_models/<lang-iso_code>/fairseq/vits. Look up ISO codes in Meta's MMS language table. These are single-speaker but cover the long tail of languages no dedicated Coqui voice exists for.
4.3 Where models are stored
Downloaded models are cached on disk so they download only once. The cache location is resolved in this order:
$TTS_HOME/tts/ifTTS_HOMEis set$XDG_DATA_HOME/tts/ifXDG_DATA_HOMEis set- otherwise
~/.local/share/tts/
See the Reference for these environment variables.
5. Synthesizing Speech from the Command Line
The tts command is installed as a console script. Its single most-used form is:
tts --text "Text to speak" --out_path speech.wav
5.1 Common recipes
# Default English voice
tts --text "Text for TTS" --out_path output/speech.wav
# Pick a specific model
tts --text "Text for TTS" \
--model_name "tts_models/en/ljspeech/glow-tts" \
--out_path output/speech.wav
# Pick a model AND a specific vocoder
tts --text "Text for TTS" \
--model_name "tts_models/en/ljspeech/glow-tts" \
--vocoder_name "vocoder_models/en/ljspeech/univnet" \
--out_path output/speech.wav
# Run your own trained model (uses Griffin-Lim if no vocoder given)
tts --text "Text for TTS" \
--model_path path/to/model.pth \
--config_path path/to/config.json \
--out_path output/speech.wav
# Pipe the wav straight to an audio player instead of a file
tts --text "Text for TTS" --pipe_out --out_path output/speech.wav | aplay
> Text: Text for TTS
> Saving output to output/speech.wav
5.2 Multi-speaker models
Models like tts_models/en/vctk/vits contain many voices. List them, then pick one:
# 1. See the available speaker IDs
tts --model_name "tts_models/en/vctk/vits" --list_speaker_idxs
# 2. Synthesize with a chosen speaker
tts --text "Text for TTS." \
--model_name "tts_models/en/vctk/vits" \
--speaker_idx p225 \
--out_path output/speech.wav
> Available speaker ids: (Set --speaker_idx flag to one of these values to use the multi-speaker model.
{'p225': 0, 'p226': 1, 'p227': 2, ...}
5.3 Multilingual models
For XTTS and other multilingual models, list and select a language ID:
tts --model_name "tts_models/multilingual/multi-dataset/xtts_v2" --list_language_idxs
tts --text "Bonjour le monde." \
--model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--language_idx fr \
--speaker_wav reference.wav \
--out_path output/fr.wav
5.4 Voice cloning from the command line
Pass one or more reference clips with --speaker_wav (multiple files are averaged):
tts --text "This is a cloned voice." \
--model_name "tts_models/multilingual/multi-dataset/xtts_v2" \
--language_idx en \
--speaker_wav my_voice_1.wav my_voice_2.wav \
--out_path cloned.wav
5.5 Voice conversion from the command line
Convert the voice in --source_wav into the voice from --target_wav:
tts --model_name "voice_conversion_models/multilingual/vctk/freevc24" \
--source_wav my_voice.wav \
--target_wav target_voice.wav \
--out_path converted.wav
5.6 Full CLI flag reference
Note
Running
ttswith none of--text,--list_models,--list_speaker_idxs,--list_language_idxs,--reference_wav,--model_info_by_idx,--model_info_by_name,--source_wav, or--target_wavset simply prints the help screen.
| Flag | Type | Default | Purpose |
|---|---|---|---|
--text |
str | None |
Text to synthesize. |
--out_path |
str | tts_output.wav |
Output .wav file path. |
--model_name |
str | tts_models/en/ljspeech/tacotron2-DDC |
Pretrained model to use. |
--vocoder_name |
str | None |
Pretrained vocoder (defaults to the model's own). |
--model_path |
str | None |
Path to your own model checkpoint. |
--config_path |
str | None |
Path to your own model config. |
--vocoder_path |
str | None |
Path to your own vocoder checkpoint. |
--vocoder_config_path |
str | None |
Path to your own vocoder config. |
--encoder_path |
str | None |
Path to a speaker encoder checkpoint. |
--encoder_config_path |
str | None |
Path to a speaker encoder config. |
--speakers_file_path |
str | None |
speakers.json for a custom multi-speaker model. |
--language_ids_file_path |
str | None |
language_ids.json for a custom multilingual model. |
--speaker_idx |
str | None |
Target speaker ID (multi-speaker models). |
--language_idx |
str | None |
Target language ID (multilingual models). |
--speaker_wav |
str(s) | None |
One or more reference clips for cloning (averaged). |
--reference_wav |
str | None |
Reference wav to convert into the target voice. |
--reference_speaker_idx |
str | None |
Speaker ID of the reference wav speaker. |
--gst_style |
str | None |
Wav file for GST (global style token) style reference. |
--capacitron_style_wav |
str | None |
Prosody reference wav for Capacitron models. |
--capacitron_style_text |
str | None |
Transcription of the Capacitron prosody reference. |
--source_wav |
str | None |
Source audio for voice conversion. |
--target_wav |
str | None |
Target voice for voice conversion. |
--voice_dir |
str | None |
Voice directory for the Tortoise model. |
--list_models |
bool | False |
List all available models and exit. |
--model_info_by_name |
str | None |
Print model info by full name. |
--model_info_by_idx |
str | None |
Print model info by <type>/<idx>. |
--list_speaker_idxs |
bool | False |
List speaker IDs for the chosen model. |
--list_language_idxs |
bool | False |
List language IDs for the chosen model. |
--use_cuda |
bool | False |
Run the model on CUDA (GPU). |
--device |
str | cpu |
Device to run on (e.g. cuda, cpu). |
--pipe_out |
bool | False |
Write the wav to stdout for shell piping. |
--save_spectogram |
bool | False |
Also save the raw spectrogram to out_path. |
--progress_bar |
bool | True |
Show a download progress bar. |
6. Synthesizing Speech from Python
The TTS class in TTS.api is the programmatic entry point. Construct it with a model name (or your own paths), then call tts() (returns waveform samples) or tts_to_file() (writes a .wav).
6.1 Single-speaker model
import torch
from TTS.api import TTS
device = "cuda" if torch.cuda.is_available() else "cpu"
tts = TTS("tts_models/de/thorsten/tacotron2-DDC").to(device)
tts.tts_to_file(text="Ich bin eine Testnachricht.", file_path="de.wav")
Tip
Use
tts.to("cuda")to move the model to the GPU. The oldergpu=Trueconstructor argument still works but is deprecated — prefer.to(device).
6.2 Multi-speaker, multilingual model (XTTS)
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to("cuda")
# Voice cloning requires a reference clip + a language for XTTS
wav = tts.tts(text="Hello world!", speaker_wav="reference.wav", language="en")
tts.tts_to_file(text="Hello world!", speaker_wav="reference.wav", language="en", file_path="out.wav")
Note
Coqui validates your arguments against the model. If a model is multi-speaker you must pass
speakerorspeaker_wav; if it is multilingual you must passlanguage. Passingspeaker/languageto a model that doesn't support them also raises aValueError. See Troubleshooting.
6.3 Inspect the loaded model
tts.is_multi_speaker # True/False
tts.is_multi_lingual # True/False
tts.speakers # list of speaker names, or None
tts.languages # list of language codes, or None
print(TTS().list_models()) # browse the zoo
6.4 Fairseq / MMS voices (1100+ languages)
from TTS.api import TTS
api = TTS("tts_models/deu/fairseq/vits")
api.tts_to_file("Wie geht es dir?", file_path="de_fairseq.wav")
6.5 The tts() and tts_to_file() parameters
| Parameter | Default | Meaning |
|---|---|---|
text |
— | Input text to synthesize. |
speaker |
None |
Speaker name for multi-speaker models. |
language |
None |
Language code for multilingual models (XTTS). |
speaker_wav |
None |
Reference clip(s) for voice cloning. |
split_sentences |
True |
Split text into sentences, synthesize each, then concatenate. |
file_path (file variant) |
output.wav |
Output path. |
pipe_out (file variant) |
None |
Stream the wav to a pipe. |
Tip
Leave
split_sentences=True(the default) for long passages — it keeps each chunk within a model's text-length and VRAM limits. Set it toFalseonly for short single sentences where you want to avoid the small concatenation seams; it uses more VRAM.
Caution
The
emotionandspeedparameters exist ontts()/tts_to_file()but only ever worked with the discontinued Coqui Studio cloud models. Passing both together raisesValueError: Emotion and speed can only be used with Coqui Studio models. Which is discontinued.Leave them unset with local models.
7. Voice Cloning
Voice cloning recreates a target voice from a short reference clip. Use a cloning-capable model (XTTS v2, YourTTS, Bark) and pass the reference with speaker_wav.
from TTS.api import TTS
tts = TTS("tts_models/multilingual/multi-dataset/your_tts").to("cuda")
tts.tts_to_file("This is voice cloning.",
speaker_wav="my/cloning/audio.wav", language="en", file_path="en.wav")
tts.tts_to_file("C'est le clonage de la voix.",
speaker_wav="my/cloning/audio.wav", language="fr-fr", file_path="fr.wav")
tts.tts_to_file("Isso é clonagem de voz.",
speaker_wav="my/cloning/audio.wav", language="pt-br", file_path="pt.wav")
Tip
Use a clean, mono reference clip of a few seconds with minimal background noise. You can pass multiple clips (
speaker_wav=["a.wav","b.wav"]); their speaker embeddings are averaged for a steadier voice. Coqui does not enforce a fixed clip length in code, but very short or noisy references degrade quality.
7.1 Clone any voice with two-stage conversion
Even models that can't clone directly can be combined with a voice-conversion model using tts_with_vc_to_file(). Coqui synthesizes the text in the base voice, then converts it to your reference speaker:
from TTS.api import TTS
tts = TTS("tts_models/de/thorsten/tacotron2-DDC")
tts.tts_with_vc_to_file(
"Wie sage ich auf Italienisch, dass ich dich liebe?",
speaker_wav="target/speaker.wav",
file_path="output.wav",
)
8. Voice Conversion
Voice conversion recasts the speaker identity of an existing recording without changing the words. Coqui ships FreeVC for this.
from TTS.api import TTS
tts = TTS("voice_conversion_models/multilingual/vctk/freevc24").to("cuda")
tts.voice_conversion_to_file(
source_wav="my/source.wav", # the words / performance to keep
target_wav="my/target.wav", # the voice to adopt
file_path="output.wav",
)
Note
source_wavsupplies the content and timing;target_wavsupplies the voice. The output says whatsource_wavsaid, in the voice oftarget_wav.
9. The Local Demo Server
Coqui includes a Flask web server with a browser UI and an HTTP API, installed as the tts-server console script.
9.1 Start the server
# Start with a chosen model on the default port 5002
tts-server --model_name tts_models/en/vctk/vits
# Or list models first
tts-server --list_models
Open http://localhost:5002/ for the web UI, or call the HTTP API directly.
9.2 HTTP API
| Method | Path | Purpose |
|---|---|---|
GET |
/ |
Web UI (HTML page). |
GET |
/details |
Model detail page (when --show_details true). |
GET / POST |
/api/tts |
Synthesize speech; returns audio/wav. |
GET |
/locales |
MaryTTS-compatible locale list. |
GET |
/voices |
MaryTTS-compatible voice list. |
GET / POST |
/process |
MaryTTS-compatible synthesis endpoint. |
# Synthesize via the HTTP API
curl "http://localhost:5002/api/tts?text=Hello%20from%20the%20server" --output speech.wav
For multi-speaker or multilingual models, add speaker_id, language_id, or style_wav query parameters.
9.3 Server flags
| Flag | Default | Purpose |
|---|---|---|
--model_name |
tts_models/en/ljspeech/tacotron2-DDC |
Pretrained model to serve. |
--vocoder_name |
None |
Pretrained vocoder. |
--model_path / --config_path |
None |
Serve your own model. |
--vocoder_path / --vocoder_config_path |
None |
Serve your own vocoder. |
--speakers_file_path |
None |
speakers.json for a custom multi-speaker model. |
--port |
5002 |
Port to listen on. |
--use_cuda |
False |
Run on GPU. |
--debug |
False |
Enable Flask debug mode. |
--show_details |
False |
Enable the /details page. |
--list_models |
False |
List models and exit. |
Caution
The demo server is built for local experimentation only. It binds to all network interfaces, has no authentication, and the MaryTTS-compatibility layer is minimal. Do not expose
tts-serverdirectly to the public internet — put it behind your own authenticated proxy if you need remote access. See the Admin Guide's security section.
10. Running on a GPU
Coqui uses PyTorch, so it runs on CPU by default and on NVIDIA GPUs when available.
Python
import torch
from TTS.api import TTS
device = "cuda" if torch.cuda.is_available() else "cpu"
tts = TTS("tts_models/multilingual/multi-dataset/xtts_v2").to(device)
Command line
tts --text "On the GPU" --model_name tts_models/en/ljspeech/vits --device cuda --out_path out.wav
# or the legacy flag:
tts --text "On the GPU" --use_cuda true --out_path out.wav
Tip
Large models like XTTS v2, Bark, and Tortoise are slow on CPU. Use a GPU for interactive work. Lightweight VITS and Tacotron2 models are usable on CPU for short text.
11. Troubleshooting
Error: RuntimeError: TTS requires python >= 3.9 and < 3.12 ...
Cause: You're installing on Python 3.12 or newer (or older than 3.9). The version is gated in setup.py.
Solution: Create a 3.9–3.11 environment: python3.11 -m venv .venv && source .venv/bin/activate, then pip install TTS.
Prevention: Check python --version before installing.
Error: ImportError: cannot import name 'isin_mps_friendly' from 'transformers.pytorch_utils'
Cause: Your installed transformers version is incompatible. Coqui pins transformers>=4.33.0 and breaks against transformers 5.x.
Solution: Pin a compatible version, e.g. pip install "transformers>=4.33,<5".
Prevention: Install Coqui in a clean environment so its pinned dependencies resolve correctly.
Error: AttributeError: 'GenerationConfig' object has no attribute 'do_stream'
Cause: XTTS streaming code is incompatible with transformers 5.0.0.
Solution: Downgrade transformers below 5.0 (see above).
Prevention: Avoid upgrading transformers past the 4.x line while using this release of Coqui.
Error: ModuleNotFoundError: No module named 'pkg_resources'
Cause: setuptools is missing or too new (it removed the legacy pkg_resources module) in your environment.
Solution: pip install setuptools<81 (or install a setuptools version that still provides pkg_resources).
Prevention: Use the dependency set Coqui installs rather than a bare interpreter.
Error: Exception: [!] You must agree to the terms of service to use this model.
Cause: You loaded a gated model (e.g. XTTS v2, license CPML) without accepting its terms.
Solution: Accept interactively when prompted, or set COQUI_TOS_AGREED=1 in the environment for non-interactive scripts and servers.
Prevention: Set COQUI_TOS_AGREED=1 in your service environment for gated models.
Error: ValueError: Model is multi-speaker but no 'speaker' is provided.
Cause: The model has multiple voices and you didn't choose one.
Solution: Pass speaker="<id>" (or speaker_wav=... for cloning). List options with tts.speakers or tts --list_speaker_idxs.
Prevention: Check tts.is_multi_speaker before synthesizing.
Error: ValueError: Model is multi-lingual but no 'language' is provided.
Cause: A multilingual model (XTTS) needs a target language.
Solution: Pass language="en" (or --language_idx en). List options with tts.languages / --list_language_idxs.
Prevention: Check tts.is_multi_lingual.
Error: ValueError: Model is not multi-speaker but 'speaker' is provided.
Cause: You passed speaker/language to a single-voice model that doesn't accept it.
Solution: Remove the speaker/language argument for single-speaker, single-language models.
Error: RuntimeError: The hash of {file} does not match. Delete the file manually and retry.
Cause: A model download was corrupted or interrupted; its checksum doesn't match. Solution: Delete the cached file at the path shown and re-run to re-download. Prevention: Ensure a stable connection during the first download of large models.
Error: NotImplementedError: [!] only supports tar.gz, tgz, and zip archives.
Cause: A custom model URL points to an unsupported archive format.
Solution: Repackage the model as .zip, .tar.gz, or .tgz.
Error: NotImplementedError: XTTS has a dedicated trainer ...
Cause: You tried to train/fine-tune XTTS through the generic training path.
Solution: Use the dedicated XTTS fine-tuning recipe (see the XTTS docs and recipes/ljspeech).
Issue: A voice's first word is sometimes skipped
Cause: A known artifact in some attention-based models (community issue #4016). Solution: Prepend a short pause or punctuation, or try a different model (VITS/XTTS) for the same text.
Issue: coqui.ai links don't work / look wrong
Cause: The original Coqui company shut down and the coqui.ai domain is no longer controlled by the project (community issues #4418, #4392).
Solution: Rely on the GitHub repository, the cached models, and this guide. Treat any content now served from coqui.ai with caution.
Tip
When something goes wrong,
tts/bin/collect_env_info.py(run aspython -m TTS.bin.collect_env_info) prints your environment details — useful when comparing against a known-good setup.
12. FAQ
Q: Do I need a GPU? No. Coqui runs on CPU. Lightweight models (VITS, Tacotron2) are fine on CPU for short text; large models (XTTS, Bark, Tortoise) are much faster on a GPU.
Q: Which model should I use for the best quality and voice cloning?
tts_models/multilingual/multi-dataset/xtts_v2. It covers 17 languages and clones from a reference clip. Note its non-commercial CPML license.
Q: Can I use Coqui voices commercially?
It depends on the specific model's license. XTTS v2 is CPML (non-commercial). Others range from Apache-2.0 and MIT to CC-BY-NC. Always run tts --model_info_by_name <name> and check the license field before commercial use.
Q: How many languages are supported?
The dedicated Coqui voices cover ~20 languages; via Meta's Fairseq/MMS voices (tts_models/<iso>/fairseq/vits) you reach 1100+ languages.
Q: How do I clone a voice?
Load a cloning-capable model (XTTS v2, YourTTS, Bark) and pass speaker_wav="reference.wav". For models that can't clone directly, use tts_with_vc_to_file().
Q: Where are downloaded models stored?
Under $TTS_HOME/tts/, else $XDG_DATA_HOME/tts/, else ~/.local/share/tts/. Delete a model's folder there to force a re-download.
Q: How do I avoid the license prompt on a server?
Set COQUI_TOS_AGREED=1 in the environment before loading a gated model.
Q: Can I run a long document through it?
Yes — keep split_sentences=True (default). Coqui splits the text into sentences, synthesizes each, and concatenates them.
Q: Is the company still around?
No. Coqui shut down, so this codebase is frozen at v0.22.0 and community-maintained. The models and code work, but new PyTorch/transformers releases may need version pinning.
Q: What's the difference between a "tts_model" and a "vocoder_model"? Two-stage TTS models produce a spectrogram that a separate vocoder turns into audio. End-to-end models (VITS, XTTS) do both in one model and need no separate vocoder. Coqui auto-selects each model's default vocoder for you.
Q: How do I serve TTS over HTTP?
Run tts-server --model_name <name> and call GET/POST /api/tts. Keep it behind your own auth — it has none built in.
13. Reference
13.1 Model name format
<model_type>/<language>/<dataset>/<model_name>
# examples:
tts_models/en/ljspeech/tacotron2-DDC
tts_models/multilingual/multi-dataset/xtts_v2
vocoder_models/en/ljspeech/hifigan_v2
voice_conversion_models/multilingual/vctk/freevc24
tts_models/deu/fairseq/vits
13.2 Environment variables
| Variable | Purpose |
|---|---|
TTS_HOME |
Base directory for the model cache ($TTS_HOME/tts/). Highest priority. |
XDG_DATA_HOME |
Fallback cache base ($XDG_DATA_HOME/tts/) if TTS_HOME is unset. |
COQUI_TOS_AGREED |
Set to 1 to pre-accept the terms of service for gated models (XTTS). |
13.3 Console scripts
| Command | Entry point | Purpose |
|---|---|---|
tts |
TTS.bin.synthesize:main |
Command-line synthesis & model browsing. |
tts-server |
TTS.server.server:main |
Local Flask demo server + HTTP API. |
13.4 Python API surface (from TTS.api import TTS)
| Method | Purpose |
|---|---|
TTS(model_name, ...) |
Construct and load a model. |
.to(device) |
Move the model to CPU/GPU. |
.tts(text, ...) |
Synthesize; return waveform samples. |
.tts_to_file(text, ..., file_path=...) |
Synthesize and write a .wav. |
.voice_conversion(source_wav, target_wav) |
Convert a voice; return samples. |
.voice_conversion_to_file(source_wav, target_wav, file_path=...) |
Convert and write a .wav. |
.tts_with_vc(text, speaker_wav=..., ...) |
Synthesize, then convert to a target voice. |
.tts_with_vc_to_file(...) |
Same, written to a file. |
.list_models() / .models |
Browse the model zoo. |
.is_multi_speaker, .is_multi_lingual, .speakers, .languages |
Inspect the loaded model. |
13.5 Key dependencies
PyTorch (torch>=2.1) and torchaudio for the models; librosa, soundfile, scipy, numpy for audio; transformers>=4.33.0 for XTTS/Tortoise; gruut, pysbd, jieba/pypinyin (Chinese), jamo/g2pkk (Korean), bangla/bnnumerizer (Bangla) for text processing; flask for the demo server; trainer and coqpit for training/config. See the Admin Guide for the complete breakdown.