Kokoro speech

Kokoro 82M runs in a Node worker through onnxruntime-web. Inference stays local; no hosted speech API or key is required.

Choose a voice

TypeScript
await suitecut.narrate('The final report is ready.', {
  voice: 'af_heart',
  speed: 1,
  caption: 'The final report is ready.',
})

SuiteCut supports 28 English Kokoro voices. Useful starting points includeaf_heart, af_bella, am_michael, bf_emma, andbm_george.

Listen to voices

Heart

Voice af_heart. Speed 1. Bundled and available offline. Sample text: "This is the Heart voice, generated locally by SuiteCut."

Bella

Voice af_bella. Speed 1. Downloads once, then uses the local cache. Sample text: "This is the Bella voice, generated locally by SuiteCut."

TypeScript
await suitecut.narrate('The final report is ready.', {
  voice: 'af_bella',
  speed: 1,
})

Bundled default

The npm package includes the quantized model, tokenizer, and af_heart voice. These files add about 89 MB to the installed package. The default voice works without a download or network request.

Other supported voice profiles need network access on first use, then remain in the local cache. Set SUITECUT_MODEL_CACHE to choose another cache directory.

Use a macOS system voice

macos-say is optional and only works on macOS with an installed system voice. Kokoro with af_heart remains the default on every platform.

TypeScript
await suitecut.narrate('Use the installed system voice.', {
  provider: 'macos-say',
  voice: 'Samantha',
})

Timeline behavior

Narrations are serialized. SuiteCut pauses frame ingestion during synthesis, then records each caption for the measured audio duration. Model startup time does not appear in the video.

Other models

Install another model runtime as an audio plugin. SuiteCut keeps those dependencies outside the core package and loads the selected provider in the narration worker.