Skip to main content
Version: 9.5.0

Text to Speech

Generate natural-sounding speech from text, ready to save as a WAV file or play back in your app.

Quick start

Add a NobodyWhoTts node to your scene, then use it from a script:

extends Node

@onready var tts: NobodyWhoTts = $NobodyWhoTts

func _ready():
tts.source = "hf://NobodyWho/Kokoro-82M" # Hugging Face repo ID or local folder with the model files.
tts.voice = "bf_emma" # Voice to use from the model.
tts.language = "en-gb" # Language code for the input text.

tts.start_worker()
await tts.worker_started

# Generate WAV bytes for this sentence.
var result: Dictionary = await tts.synthesize("Hello from NobodyWho!")
if not result.ok:
push_error(result.error)
return

# Save the audio to a file.
var file = FileAccess.open("user://out.wav", FileAccess.WRITE)
file.store_buffer(result.wav)

Models and sources

NobodyWho supports two speech synthesis architectures, both in ONNX format:

source can be a Hugging Face repo (hf://owner/repo) as shown above, a Godot path (res:// or user://), or a local filesystem directory laid out the same way as that repo. See Local model folder format and Architecture for setup details.

Kokoro

For Kokoro, set voice and language together. They must agree with the model's available voices.

tts.source = "hf://NobodyWho/Kokoro-82M"
tts.voice = "bf_emma"
tts.language = "en-gb"

Optional settings include:

  • voice: voice to use from the model, e.g. bf_emma. See the Kokoro voices folder for the full list. Defaults to bf_emma.
  • language: input language code. Supported values are listed on the Kokoro model page. Defaults to en-gb.
  • speed: speech speed multiplier. 1.0 is normal speed, lower values are slower, higher values are faster. Set 0 to use the architecture default.

Supertonic

For Supertonic, you can start with the default voice and language, or set them explicitly.

tts.source = "hf://Supertone/supertonic-3"
tts.language = "en"

Optional settings include:

  • voice: voice style. Supported values are M1 to M5 and F1 to F5. Defaults to M1.
  • language: input language code. See the Supertonic model page for the full list. Defaults to en.
  • speed: speech speed multiplier. 1.0 is normal speed, lower values are slower, higher values are faster. Set 0 to use the architecture default.
  • steps: denoising steps. Higher values can improve quality but are slower. Lower values are faster but can sound rougher. Set 0 to use the architecture default.
  • silence_duration: seconds of silence between long text chunks. Higher values add longer pauses. Set -1 to use the architecture default.

Architecture

architecture is the TTS model family behind a source. In most cases, you do not need to set it because NobodyWho can infer it by looking for "kokoro" or "supertonic" in the source string.

Set architecture when you use a local directory, Godot path, or a custom source that NobodyWho cannot recognize:

tts.source = "res://models/kokoro-folder"
tts.architecture = "kokoro"

Supported architecture values are kokoro and supertonic.

GPU

TTS uses GPU acceleration by default when available. Disable it with device = "cpu":

tts.source = "hf://Supertone/supertonic-3"
tts.device = "cpu"
tts.start_worker()

Local model folder format

When source is a local directory or Godot path, point it at the top-level model folder and set the matching architecture.

Use the Hugging Face file browsers as the reference layouts:

For Supertonic, that top-level folder must include both the onnx/ and voice_styles/ directories. Download the model files with the same relative paths, then pass that folder as source.