The TTS primitive module uses the legacy TTS system.This module supports both remote and local models.However, newer versions of Inworld TTS can only be used remotely and as a Node in the Graph system.
Run the Template
- Go to Assets/InworldRuntime/Scenes/Primitivesand play theTTSTemplatescene. 
- Toggle between RemoteandLocal, then pressConnect.
- Once connected, select a voice ID, then press Previewto listen.
- You can also type any text and press SENDto generate the TTS result.
Understanding the Template
Structure
- This demo has a single prefab under InworldController:TTS, which containsInworldTTSModule.
- When InworldControllerinitializes, it callsInitializeAsync()on the TTS module (see Primitives Overview).
- It creates a TTSFactory, which then creates aTTSInterfaceorVADInterfacebased onTTSConfig.
Workflow
At runtime, whenInworldController invokes OnFrameworkInitialized, the demo’s TTSConfigPanel in TTSCanvas listens for this event and enables the previously disabled UI.
When the user switches the voice ID, the system terminates the current TTSInterface and creates a new one with the updated voice ID.
When the user clicks the Preview button, the TTSConfigPanel calls InworldController.TTS.TextToSpeechAsync() with “Hello” as the parameter.
When the user presses Enter or clicks Send, TTSConfigPanel calls InworldController.TTS.TextToSpeechAsync() with the input text.
VoiceID
The voice ID identifies which voice is speaking. You can find the full list on the character page inCharacter Studio.
The primitive TTS module uses our legacy model. Voice IDs may differ from those in the 
TTS Playground.To find available voices, open Character Studio, go to the character editing page, and select voices there.

TTSInterface in the current Inworld Runtime DLL does not support changing voice IDs at runtime.
Therefore, changing the voice ID terminates the current TTSInterface and creates a new interface with the selected voice ID.