Puter
Speak with a Speechify voice from puter.ai.txt2speech(), on puter.com or on your own Puter instance.
Overview
Puter is an open-source internet OS with a serverless SDK, puter.js, that gives web apps auth, storage, and AI from a single script tag.
Its text-to-speech call, puter.ai.txt2speech(), includes a native Speechify provider, selected with provider: 'speechify'.
For the hosted path, Puter’s Speechify tutorial has the full walkthrough. The rest of this page covers a self-hosted instance.
Prerequisites
- Speechify API key (platform.speechify.ai/api-keys)
- A Puter instance running a build that includes the Speechify TTS provider (Node 24+,
npm install && npm start) - A Puter account on that instance (
txt2speechprompts sign-in on the first call; the first boot prints admin credentials)
Enable the provider on your instance
Create config.json in the Puter repo root (or point PUTER_CONFIG_PATH at a config file) with your key under providers.speechify:
The instance registers the provider at boot. Without this entry, provider: 'speechify' is not available, so restart after adding it. The key stays in the instance’s server-side config; pages calling puter.ai.txt2speech() never see it, and synthesis is billed to the Speechify account the key belongs to.
Use the Speechify provider
puter.js is JavaScript-only, so there are no Python or cURL variants of this integration: the whole point is calling TTS straight from the page.
txt2speech resolves to an HTMLAudioElement, ready to play(). With no other options, the Speechify provider defaults to the simba-3.2 model and the geffen_32 voice.
puter.js targets the instance that serves the page. For a standalone page against your own instance, open it with the puter.api_origin query parameter (e.g. ?puter.api_origin=http://api.puter.localhost:4100), which puter.js reads at load time.
Options
The provider calls POST /v1/audio/speech, which accepts up to 2,000 spoken characters per call. The <speak> tags the provider wraps plain text in don’t count, so 2,000 characters of plain text fit in one call. Puter’s own client allows 3,000, so the API’s limit is the one you hit first.
simba-3.2 is English-only, and it is the provider’s only current model (see the table above). For non-English speech today, call the Speechify API directly with simba-3.5, which speaks 48 languages (see Models).
Retired model ids: simba-english and simba-multilingual
Retired model ids: simba-english and simba-multilingual
Puter’s provider also lists simba-english and simba-multilingual, the Simba 1.6 models. They are retired from API version 2026-09-21, and from 2026-11-21 served by our current models. Use simba-3.2 instead.
Test without hitting the API
Pass test_mode: true (or the testMode positional argument) while developing:
Troubleshooting
Resources
puter.ai.txt2speech()reference- Puter’s Speechify tutorial (hosted puter.com, no API key)
- Puter on GitHub
- Speechify TTS models