Skip to content

SpeechifyTTS

Convert text to speech using Speechify's Simba models via a simple REST API.

Use SpeechifyTTS when you want high-quality speech synthesis from Speechify’s Simba models via a simple REST call. Each synthesize() request returns the complete audio as a Blob — no WebSocket management required. Voices from Speechify’s catalog and instant voice cloning are both supported through the voiceId option.

Prerequisites

  • A Speechify API key or a CompositeVoice proxy server
  • No additional dependencies required. SpeechifyTTS uses native fetch internally.

Basic setup

import { CompositeVoice, NativeSTT, AnthropicLLM, SpeechifyTTS, BrowserAudioOutput } from 'composite-voice';

const voice = new CompositeVoice({
  providers: [
    new NativeSTT(),
    new AnthropicLLM({
      proxyUrl: '/api/proxy/anthropic',
      model: 'claude-haiku-4-5',
    }),
    new SpeechifyTTS({
      proxyUrl: '/api/proxy/speechify',
      voiceId: 'geffen_32',
      model: 'simba-3.2',
      audioFormat: 'mp3',
    }),
    new BrowserAudioOutput(),
  ],
});

await voice.initialize();
await voice.startListening();

Configuration options

OptionTypeDefaultDescription
apiKeystringSpeechify API key (direct mode)
proxyUrlstringProxy server URL (recommended for production)
voiceIdstringrequiredVoice identifier from GET /v1/voices or a cloned voice
modelstring'simba-english'simba-english, simba-multilingual, simba-3.0, simba-3.2
audioFormatstring'mp3'Output format: mp3, wav, ogg, aac
languagestringauto-detectISO 639-1 code with optional region (e.g. en-US)
loudnessNormalizationbooleanfalseNormalize output loudness
textNormalizationbooleanfalseNormalize numbers, dates, and abbreviations before synthesis
endpointstringCustom API endpoint URL
maxRetriesnumber3Retry count for failed requests

Available voices

List voices with Speechify’s GET /v1/voices endpoint, or create your own with instant voice cloning. The quickstart voice geffen_32 is a good starting point for the simba-3.2 model.

Output formats

FormatUse case
mp3Good compression, wide browser support (default)
wavUncompressed, highest quality
oggGood compression, open format
aacOptimized for mobile devices

Complete example

import { CompositeVoice, MicrophoneInput, DeepgramSTT, AnthropicLLM, SpeechifyTTS, BrowserAudioOutput } from 'composite-voice';

const tts = new SpeechifyTTS({
  proxyUrl: '/api/proxy/speechify',
  voiceId: 'geffen_32',
  model: 'simba-3.2',
  audioFormat: 'mp3',
  loudnessNormalization: true,
});

const voice = new CompositeVoice({
  providers: [
    new MicrophoneInput(),
    new DeepgramSTT({ proxyUrl: '/api/proxy/deepgram' }),
    new AnthropicLLM({
      proxyUrl: '/api/proxy/anthropic',
      model: 'claude-haiku-4-5',
    }),
    tts,
    new BrowserAudioOutput(),
  ],
});

voice.on('tts.start', () => console.log('Speaking...'));
voice.on('tts.end', () => console.log('Done speaking'));

await voice.initialize();
await voice.startListening();

Model selection

  • simba-english — English-only model optimized for latency. Best default for English voice pipelines.
  • simba-multilingual — Supports multiple languages; pair with the language option or let Speechify auto-detect.
  • simba-3.0 / simba-3.2 — Newer generation models with improved naturalness. simba-3.2 is the latest.

Tips

  • Emotion, pitch, and speed are controlled with SSML <prosody> tags in the input text rather than config options — see the Speechify SSML docs.
  • SpeechifyTTS is REST-based, not streaming. The full audio Blob is returned after the API processes the entire input. For real-time streaming, consider DeepgramTTS.
  • The Speechify API returns audio base64-encoded; SpeechifyTTS decodes it into a playable Blob for you.
  • Use proxyUrl in production so your API key stays server-side — set speechifyApiKey in your proxy config.

Further reading

© 2026 CompositeVoice. All rights reserved.

Font size
Contrast
Motion
Transparency