Getting Started with Chatterbox TTS Plugin Pack#
What is Chatterbox?#
Chatterbox is an open-source, MIT-licensed text-to-speech model developed by Resemble AI. It has quickly become one of the leading open-source voice AI models, consistently outperforming commercial alternatives like ElevenLabs in blind evaluations.
Why Chatterbox?
State-of-the-Art Quality: Natural prosody and rhythm with human-like speech output
Zero-Shot Voice Cloning: Clone any voice with just 5 seconds of reference audio—no training required
Real-Time Performance: Faster-than-realtime inference, perfect for interactive applications
Emotion Control: Emotion exaggeration control for expressive speech (Multilingual only — Turbo ignores the bake-in)
Paralinguistic Tags (Turbo only): Support for non-speech sounds like
[clear throat],[sigh],[shush],[cough],[groan],[sniff],[gasp],[chuckle],[laugh]
What is NVIGI Chatterbox TTS?#
The NVIDIA In-Game Inferencing (NVIGI) Chatterbox TTS Plugin Pack brings Chatterbox to PC applications and games through the NVIGI plugin architecture. This pack provides optimized integration with support for multiple inference backends (CUDA, Vulkan, D3D12) and seamless GPU sharing with graphics workloads.
Key Features#
High-Quality Speech Synthesis: Natural-sounding voice output using the Chatterbox Turbo (English) or Multilingual (23 languages) model
Multi-backend Support: Run on CUDA (NVIDIA GPUs), Vulkan (any Vulkan-capable GPU), or D3D12 (Windows)
Zero-Shot Voice Cloning: Create custom voices from just a few seconds of reference audio via speaker embeddings (each embedding is bound to either Turbo or Multilingual and is not interchangeable)
Long-Text Handling: Built-in text chunking for processing longer prompts (word-based by default; character-based for Multilingual
zh/ja)Paralinguistic Tags (Turbo only): Support for expressive tags like
[clear throat],[sigh],[shush],[cough],[groan],[sniff],[gasp],[chuckle],[laugh]. The Multilingual model’s vocabulary does not include these tags.CFG-Controlled Speech Pacing (Multilingual only): Runtime
cfg_weightfor tunable pacing. Turbo runs without CFG.Language-Specific Preprocessing (Multilingual only): Chinese Cangjie, Japanese Kanji→Hiragana, Korean Jamo, NFKD normalization, and Hebrew diacritization happen inside the plugin
CIG Support: CUDA In Graphics optimization for efficient GPU sharing with rendering
Full Voice Pipeline: Optional integration with GPT and ASR for complete voice-to-voice AI interactions
For the full per-feature breakdown of what is exclusive to Turbo vs Multilingual, see Model Feature Comparison in the Programming Guide.
Architecture#
The NVIGI SDK uses a plugin architecture where TTS functionality is provided through the nvigi.plugin.tts.chatterbox plugins. These plugins:
Implement the standard NVIGI plugin API for easy integration
Support CUDA, Vulkan, and D3D12 backends
Can be combined with GPT and ASR plugins for voice-to-voice AI pipelines
Integrate with D3D12/CUDA for concurrent graphics and AI workloads
Quick Start Guide#
Prerequisites#
Before getting started, ensure you have:
Hardware:
GPU: NVIDIA GPU with Compute Capability 7.0+ (RTX 20x0 series or newer)
Memory: 16 GB RAM minimum
VRAM: ~2.3 GB for Turbo TTS-only, ~3.5 GB for Multilingual TTS-only, ~8.5 GB+ for full pipeline (ASR + GPT + TTS with 3D sample)
Software:
Windows 10/11 (64-bit)
NVIDIA graphics driver r580 or newer
Visual Studio 2022 with C++ development tools (for rebuilding samples)
1. Set Up the Environment#
Before running any samples, you need to set up the required dependencies using the provided setup script:
Basic Setup (TTS Only):
.\setup_sample.bat
Or simply double-click setup_sample.bat in Windows Explorer to run it.
This downloads and installs the NVIGI Core SDK automatically.
Important: The NVIGI core runtime DLLs (
nvigi.core.framework.dll,nvigi.plugin.hwi.cuda.dll,nvigi.plugin.hwi.common.dll,nvigi.plugin.hwi.d3d12.dll,amd_ags_x64.dll) are not distributed with this pack — they are pulled in bysetup_sample.batfrom the NVIGI Core SDK via packman. Running any of the samples before executingsetup_sample.batwill fail at DLL load with a missingnvigi.core.framework.dll.
Full Setup (ASR + GPT + TTS):
To enable the complete voice-to-voice AI pipeline with GPT and ASR support:
Download the NVIGI Developer Full SDK from the NVIDIA In-Game Inferencing SDK page
Extract the downloaded SDK to a local directory
Run the setup script with the path to the extracted SDK:
.\setup_sample.bat "C:\path\to\nvigi_developer_full_sdk"
This will copy the GPT and ASR plugin DLLs and download the required models for voice-to-voice AI interactions.
2. Run Your First TTS Sample (Command-Line)#
The fastest way to experience TTS is with the pre-built command-line sample:
cd bin\x64\Release
.\nvigi.tts.chatterbox.exe --models ..\..\..\data\nvigi.models --speaker ..\..\..\data\nvigi.test\spk_emb\aaron_turbo.json --text "Hello from Chatterbox Turbo TTS." --output hello.wav --backend cuda
This will:
Initialize the Chatterbox TTS plugin with the Turbo model
Load the specified speaker embedding for voice characteristics
Generate speech from the input text
Save the output as a 24 kHz WAV file
Display timing statistics (inference time, audio length, RTF)
Tip — short game dialogue: Use complete sentences (>5 words) with standard punctuation for best quality. Very short utterances common in games — e.g.
"Yes","Help!","Over here!"— may produce audio artifacts because the model has too little context to anchor prosody. The simplest mitigation is to pad short lines ("Yes, I will."instead of"Yes.") or pre-render canned barks at build time. See Mitigations for short game dialogue for the full list of strategies.
Try different voices:
.\nvigi.tts.chatterbox.exe --models ..\..\..\data\nvigi.models --speaker ..\..\..\data\nvigi.test\spk_emb\lucy_turbo.json --text "This is Lucy speaking with Chatterbox Turbo." --output lucy_hello.wav --backend cuda
Try interactive mode (Windows only):
.\nvigi.tts.chatterbox.exe --models ..\..\..\data\nvigi.models --speaker ..\..\..\data\nvigi.test\spk_emb\aaron_turbo.json --interactive --backend cuda
Interactive mode allows you to enter text prompts continuously with real-time audio playback.
Try multilingual TTS (23 languages):
.\nvigi.tts.chatterbox.exe --models ..\..\..\data\nvigi.models --speaker ..\..\..\data\nvigi.test\spk_emb\french.json --multilingual --language fr --text "Bonjour le monde." --output bonjour.wav
The --multilingual flag selects the multilingual model, and --language specifies the target language code (e.g., fr, de, zh, ja, hi).
Batch mode (JSONL, one model load): For many utterances, pass --batch path/to/jobs.jsonl with --multilingual and your backend (--backend / -b). Each line is one JSON object with required string fields "out" (WAV path) and "text", and optional "lang" and "speaker" (defaults fall back to --language / --speaker). Use --batch_skip_existing true to skip lines whose output file already exists, and --batch_quiet true for less console output. The sample loads NVIGI once and reuses the same instance for every line.
For detailed CLI options, see CLI Sample documentation.
3. Try the 3D Interactive Sample#
Experience TTS in a full 3D application with GUI:
cd bin\x64\Release
.\nvigi.3d.exe
In D3D12 mode (default) - Full voice-to-voice pipeline with D3D12 backends (CUDA fallback):
Speak into your microphone (ASR transcribes your speech)
GPT generates a response to your input
Chatterbox TTS speaks the response aloud
Or type text directly and press Enter to interact
Uses D3D12 backends for TTS, GPT, and ASR when available (requires driver 580.61+)
Automatically falls back to CUDA backends if D3D12 plugins are unavailable
Note: D3D12 backend performance characteristics:
First inference may take approximately 6 seconds (one-time shader compilation cost).
Changing speaker embeddings may add approximately 1 second delay to the first inference after the change.
Mitigation: Run a one-off dummy inference during your application’s loading screen — and once per speaker embedding you intend to use during gameplay — so the user-visible inference always runs at steady-state speed. See D3D12 Warmup Latency for the full recipe and additional strategies.
In Vulkan mode - Full voice-to-voice pipeline with Vulkan backends:
.\nvigi.3d.exe -vk
Same full pipeline as D3D12 mode (ASR, GPT, TTS)
Uses Vulkan backends for TTS, GPT, and ASR inference
Note: When attempting to share the Vulkan device between the graphics pipeline and the Chatterbox TTS plugin, the generated output may be incorrect. The plugin creates its own separate Vulkan device (without sharing) to ensure correct output.
For detailed 3D sample usage, see 3D Sample documentation.
4. Explore the Models and Speaker Embeddings#
The pack includes Chatterbox TTS models and sample speaker embeddings:
Chatterbox Turbo Model (English-only): Located in
data/nvigi.models/nvigi.plugin.tts.chatterbox/{019BD494-0D97-7223-B9D5-C9286933B8B7}/Fastest inference (no CFG, no alignment analysis, single-step Meanflow decoder)
Supports paralinguistic tags (
[laugh],[sigh], etc.)Ignores
cfg_weightandlanguage_idruntime parametersGenerates 24 kHz audio output
Chatterbox Multilingual Model (23 languages): Located in
data/nvigi.models/nvigi.plugin.tts.chatterbox/{A60EB5CF-9551-4B86-865B-CDC3CDBE61C4}/CFG-controlled pacing (tunable via
cfg_weight, default 0.5)Built-in alignment analyzer suppresses early EOS / runaway generation
Language-specific preprocessing (Korean Jamo, NFKD normalization, lowercase) plus auto-discovered auxiliary assets for Chinese (
cangjie_mapping.json), Japanese (kanji_readings.json), and Hebrew (dicta-bert-q8*.gguf)language_idruntime parameter is required (ISO code such as"en","fr","zh")Does not support paralinguistic tags
Generates 24 kHz audio output
See Model Feature Comparison for the full feature-by-model matrix.
All models support CUDA, Vulkan, and D3D12 backends
Speaker Embeddings: Located in
data/nvigi.test/spk_emb/Turbo voices:
aaron_turbo.json,lucy_turbo.jsonMultilingual per-language voices:
arabic.json,chinese.json,danish.json,dutch.json,english.json,finnish.json,french.json,german.json,greek.json,hebrew.json,hindi.json,italian.json,japanese.json,korean.json,malay.json,norwegian.json,polish.json,portuguese.json,russian.json,spanish.json,swahili.json,swedish.json,turkish.json(23 total, one per supported language)Additional multilingual voices:
ethan_multilingual.json,meera_multilingual.json,speaker_base.jsonTurbo and Multilingual embeddings are not interchangeable — use one that matches the selected model type
Add your own custom voices via voice cloning
For full model details, see Models and Test Data.
5. Create Custom Voices with Voice Cloning#
The Chatterbox TTS plugin supports zero-shot voice cloning, allowing you to create custom speaker embeddings from just a few seconds of reference audio.
Voice Cloning Requirements#
Python 3.11 (automatically installed if not found)
NVIDIA GPU with CUDA support (recommended) or CPU
5-10 seconds of clear reference audio (WAV format)
Hugging Face account with access token (for downloading the Chatterbox model)
RTX 50-series (Blackwell) note: The packaged
torch==2.6.0+cu124(which matcheschatterbox-tts 0.1.7’s pin) does not containsm_120kernels, so on RTX 50-series cardsget_voice_embeddings.pyautomatically falls back to CPU and prints a clear[device] WARNINGblock at startup. Extraction still completes correctly and the resulting speaker JSON works at full GPU speed in the runtime TTS plugin — only this one-off extraction step is slower (~10–14 s per WAV vs ~1–2 s on a supported GPU). To opt into GPU extraction on Blackwell, see “Voice cloning runs on CPU even though the GPU is CUDA-capable” in docs/troubleshooting.md.
Setting Up the Voice Cloning Environment#
Open PowerShell and navigate to the
voice_cloningdirectory:
cd <PACK_ROOT>\voice_cloning
Run the setup script to create the Python virtual environment:
.\setup_venv.ps1
This script will:
Check for Python 3.11 (or install it automatically if not found)
Install all required dependencies (PyTorch, Chatterbox TTS, etc.)
Creating Speaker Embeddings#
Make sure venv is activated. Use the get_voice_embeddings.py script to extract speaker embeddings from a reference audio file:
Basic usage:
python get_voice_embeddings.py --wav path/to/reference_audio.wav --dump-json my_voice.json
With Hugging Face token (required for first-time model download):
python get_voice_embeddings.py --wav reference_audio.wav --dump-json my_voice.json --hf-token YOUR_HF_TOKEN
Or set the environment variable:
$env:HF_TOKEN = "YOUR_HF_TOKEN"
python get_voice_embeddings.py --wav reference_audio.wav --dump-json my_voice.json
With custom emotion exaggeration:
python get_voice_embeddings.py --wav reference_audio.wav --dump-json my_voice.json --exaggeration 0.8
Voice Cloning Command-line Options#
Argument |
Description |
|---|---|
|
Path to the reference WAV file (5-10 seconds recommended) |
`–model-type <turbo |
base |
|
Output path for the speaker embedding JSON file |
|
Emotion exaggeration value baked into the embedding (default: 0.5, range: 0.0-1.0). Affects Multilingual output only; ignored by Turbo. |
|
Hugging Face token for model download (or use |
Tips for Best Results#
Audio Quality: Use clean, high-quality audio with minimal background noise
Duration: 5-10 seconds of speech is optimal. Less may reduce quality, more won’t significantly improve it
Format: WAV format is required. Convert other formats using tools like FFmpeg
Content: Natural speech works best. Avoid music, singing, or heavily processed audio
Emotion: The
--exaggerationparameter controls how much emotion variation is captured (0.0 = neutral, 1.0 = highly expressive)
Using Custom Speaker Embeddings#
Once you’ve created a speaker embedding JSON file, copy it to the speaker embeddings directory:
copy my_voice.json <PACK_ROOT>\data\nvigi.test\spk_emb\
The new voice will appear in the speaker dropdown in the 3D sample, or can be used with the CLI sample:
nvigi.tts.chatterbox.exe --models ..\..\..\data\nvigi.models --speaker ..\..\..\data\nvigi.test\spk_emb\my_voice.json --text "Hello with my custom voice!" --output output.wav
Troubleshooting Voice Cloning#
See
docs/troubleshooting.mdfor a fuller list of common first-run failures.
Problem: ModuleNotFoundError: No module named 'chatterbox'
Solution: The venv was not activated in the current shell. Run .\venv\Scripts\Activate.ps1 from voice_cloning\ first, then python get_voice_embeddings.py .... setup_venv.ps1 activates the venv automatically only for the session that ran it.
Problem: Hugging Face authentication error
Solution: Provide a valid HF token via --hf-token or HF_TOKEN environment variable. Get your token from huggingface.co/settings/tokens
Problem: CUDA out of memory
Solution: The script will fall back to CPU if CUDA memory is insufficient. You can also close other GPU applications
Problem: Poor voice quality in output
Solution: Try different reference audio, ensure it’s 5-10 seconds of clear speech, and experiment with the --exaggeration parameter
6. Rebuild Samples from Source (Optional)#
To modify samples or debug integration:
Open a VS2022 Developer Command Prompt
Navigate to the pack root directory
Run
.\setup.batto generate build filesOpen
_project/vs2022/nvigi.chatterbox.slnin Visual Studio 2022Build the desired configuration (Debug/Release/Production)
Run
.\copy_sdk_binaries.bat Releaseto deploy binaries tobin/x64/Release
For detailed rebuild instructions, see Building the Sample from Source.
7. Integrate into Your Application#
Once familiar with the samples, integrating TTS into your own application follows a straightforward five-step pattern. Each step is covered in detail with code examples in the Programming Guide.
Integration Overview#
Include headers and load the NVIGI core library — Add
#include <nvigi.h>,#include <nvigi_ai.h>, and#include "nvigi_tts_chatterbox.h"to your project. At runtime, loadnvigi.core.framework.dlland retrieve the API function pointers (nvigiInit,nvigiLoadInterface, etc.). On Windows, if your EXE lives outsidebin\x64\<config>, also callSetDefaultDllDirectories(...)+AddDllDirectory(packageBinDir)before loading the core framework so the plugins can later resolve their CUDA / cuBLAS / ggml dependencies.Preferences.utf8PathsToPluginscovers NVIGI plugin discovery only — not the OS-level DLL search the plugins use for their own runtime deps. See Step 1: Initialize NVIGI.Load the TTS plugin interface — Choose the CUDA, Vulkan, or D3D12 plugin and call
nvigiGetInterfaceDynamic(passing thenvigiLoadInterfacefunction pointer) to get anITextToSpeechpointer. See Step 2: Load the TTS Interface.Create a TTS instance with your configuration — Set the model GUID, backend preference, model type (
eTurbooreMultilingual), and VRAM budget. For D3D12, provide device and command queues viaD3D12Parameters. Then callcreateInstance. See Step 3: Create a TTS Instance.Provide text and receive audio — Set the input text via data slots, configure runtime parameters (speaker embedding, temperature, chunking), and call
evaluate(). Receive generated PCM audio (24 kHz, 16-bit mono) through the callback. The plugin streams audio in chunks: handle bothkInferenceExecutionStateDataPending(intermediate chunks) andkInferenceExecutionStateDone(final chunk), and copy each chunk’s buffer before the callback returns. Callbacks that only handleDonesilently truncate multi-chunk utterances. See Step 4: Run Inference.Clean up — Destroy the instance, unload the interface, and shut down NVIGI. See Step 5: Cleanup.
Where to Start in the Code#
The two sample implementations serve as integration templates:
source/samples/nvigi.tts.chatterbox/sample_tts_chatterbox.cpp— Minimal command-line integration showing the full lifecycle (init, create, infer, cleanup) without any graphics dependencies. Start here for the simplest integration path.source/samples/nvigi.3d/src/nvigi/NVIGIContext.cpp— Real-world integration in a D3D12/Vulkan 3D application with CIG scheduling, showing how TTS fits alongside a rendering loop with GPU scheduling modes.
What’s Included in This Pack#
The Chatterbox TTS Plugin Pack provides everything needed to integrate text-to-speech into your applications:
Pre-Built Components#
TTS Plugins:
nvigi.plugin.tts.chatterbox.cuda.dll,nvigi.plugin.tts.chatterbox.vk.dll, andnvigi.plugin.tts.chatterbox.d3d12.dllNVIGI Core: Runtime libraries for the NVIGI plugin framework (downloaded via setup script)
TTS Models: Chatterbox Turbo (English) and Chatterbox Multilingual (23 languages) with all required components
Sample Applications: Pre-built executables demonstrating TTS integration
Headers & APIs: Complete SDK headers for plugin integration
Included Samples#
The pack includes two samples with full source code:
nvigi.tts.chatterbox - Command-line TTS demo
Text-to-speech with customizable parameters
Multiple backend support (CUDA, Vulkan, D3D12)
WAV file output
Located in:
source/samples/nvigi.tts.chatterbox/
nvigi.3d - 3D interactive sample with GUI
Full voice-to-voice AI pipeline (both D3D12 and Vulkan modes)
D3D12 backends (with CUDA fallback) or Vulkan backends for inference
Real-world integration example
Located in:
source/samples/nvigi.3d/
All samples are pre-built in bin/x64/ and ready to run after setup.
Test Data#
The pack includes speaker embeddings for testing in data/nvigi.test/spk_emb/:
Turbo (English):
aaron_turbo.json,lucy_turbo.jsonMultilingual per-language embeddings:
arabic.json,chinese.json,danish.json,dutch.json,english.json,finnish.json,french.json,german.json,greek.json,hebrew.json,hindi.json,italian.json,japanese.json,korean.json,malay.json,norwegian.json,polish.json,portuguese.json,russian.json,spanish.json,swahili.json,swedish.json,turkish.json(23 total, one per supported language)Additional multilingual voices:
ethan_multilingual.json,meera_multilingual.json,speaker_base.json
Known Issues and Important Notes#
Current Release#
General#
Voice Embedding Warmup: The user needs to manually trigger warmup each time they change voice embeddings. First inference with a new speaker embedding may have higher latency.
Sample applications require the NVIGI core DLLs to be present in the
bin/x64/directory. Runsetup_sample.batto set this up.
TTS Plugin Specific#
CUDA Backend: Recommended for best performance on NVIDIA GPUs.
Vulkan Backend: Alternative for broader GPU compatibility, but may have slightly lower performance.
Vulkan Device Sharing Limitation: When attempting to share the Vulkan device between the graphics pipeline and the Chatterbox TTS plugin, the generated output may be incorrect. The plugin creates its own separate Vulkan device (without sharing) to ensure correct output.
D3D12 Backend: Windows-only backend using D3D12 compute shaders. Requires providing a D3D12 device and command queues via
D3D12Parameters.Text Chunking: Long text is automatically split into chunks (default: 40 words per chunk). This improves quality but may add small pauses between chunks.
Paralinguistic Tags (Turbo only): Tags like
[clear throat],[sigh],[shush],[cough],[groan],[sniff],[gasp],[chuckle],[laugh]work best when used in appropriate context — surrounding text should match the emotion for natural results. Do not use these tags with the Multilingual model; its tokenizer does not contain them, so they will either be dropped or read out as individual letters.Short Inputs: For best quality, provide complete sentences (>5 words) with standard punctuation. Very short utterances common in games (1–2 words such as
"Yes","Help!","Over here!") may produce extra unintelligible audio because the model has too little context to anchor prosody. For dialogue-heavy applications, pad short lines ("Yes, I will."instead of"Yes."), use a paralinguistic anchor ("[gasp] Help!"), or pre-render canned barks at build time. See Mitigations for short game dialogue for the full list of strategies.
Building from Source#
Plugin DLLs are pre-built and cannot be rebuilt from this pack.
Sample applications can be rebuilt from source using the provided Visual Studio solution.
After building, run
.\copy_sdk_binaries.batto deploy binaries tobin/x64/.
Performance Considerations#
VRAM Usage: Turbo TTS-only requires ~2.3 GB VRAM, Multilingual TTS-only requires ~3.5 GB VRAM. Full pipeline (ASR + GPT + TTS) with 3D sample requires ~8.5 GB VRAM.
First Inference: Initial inference may be slower due to model warmup. On the D3D12 backend this is approximately 6 seconds for one-time shader compilation; CUDA and Vulkan see a smaller cold-start cost. Subsequent inferences run at steady-state speed.
Mitigation: Trigger a dummy inference (any short text, output discarded) on the loading screen so the user never observes this delay during gameplay. See D3D12 Warmup Latency for the recommended pattern.
Voice Changes: Switching speaker embeddings adds approximately 1 second to the first inference after the switch on the D3D12 backend.
Mitigation: Pre-warm each speaker embedding you intend to use during the loading screen, group dialogue by speaker in latency-sensitive sections to amortise the per-switch cost, and avoid swapping voices on hot paths.
Getting Help#
For issues, questions, or feedback:
Review the Programming Guide for detailed API documentation
Check Samples Documentation for usage examples and troubleshooting
See the Troubleshooting section in samples.md
Next Steps#
Now that you’re familiar with the basics:
Run the Samples - Start with the CLI sample for quick testing, then explore the 3D sample for full pipeline experience
Read the Programming Guide - Deep dive into the Chatterbox TTS API
Experiment with Voices - Try different speaker embeddings and explore voice cloning
Try Paralinguistic Tags (Turbo model only) - Add expressiveness with tags like
[clear throat],[sigh],[gasp],[laugh]Integrate into Your App - Use the samples as templates for your own application integration
For the best development experience, start with the command-line sample to understand TTS basics, then move to the 3D sample to see TTS in a complete voice-to-voice AI context.