Text-to-speech where you describe any voice in natural language.
murmr is a text-to-speech API that creates voices from natural language descriptions. No preset voices, no audio samples -- just describe what you want and murmr generates it.
- Voice Design -- describe any voice in plain English (age, accent, tone, pace) and get speech back
- OpenAI TTS-compatible -- drop-in replacement, change the base URL and key to migrate
- 10 languages -- Chinese, English, Japanese, Korean, German, French, Russian, Portuguese, Spanish, Italian
- Multiple delivery modes -- SSE streaming (~450ms to first chunk), real-time WebSocket, and batch
- Official SDKs -- Node.js (
@murmr/sdk) and Python (murmr) with streaming, long-form chunking, and error recovery built in
curl -N -X POST "https://api.murmr.dev/v1/voices/design/stream" \
-H "Authorization: Bearer $MURMR_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: text/event-stream" \
-d '{
"text": "Welcome to our app. Let me show you around.",
"voice_description": "A warm, friendly female voice, calm and clear",
"language": "English"
}'import { MurmrClient } from '@murmr/sdk';
import { writeFileSync } from 'node:fs';
const client = new MurmrClient({ apiKey: process.env.MURMR_API_KEY! });
const wav = await client.voices.design({
input: 'Welcome to our app. Let me show you around.',
voice_description: 'A warm, friendly female voice, calm and clear',
language: 'English',
});
writeFileSync('welcome.wav', wav);import os
from murmr import MurmrClient
with MurmrClient(api_key=os.environ["MURMR_API_KEY"]) as client:
wav = client.voices.design(
input="Welcome to our app. Let me show you around.",
voice_description="A warm, friendly female voice, calm and clear",
language="English",
)
with open("welcome.wav", "wb") as f:
f.write(wav)Sign up at murmr.dev for a free API key (50,000 characters/month).
| Document | Description |
|---|---|
| Installation | SDK setup for Node.js and Python, REST API basics |
| Quickstart | Generate audio, stream it, save a voice, and reuse it in 5 minutes |
| Authentication | API key format, Bearer auth, usage headers, security best practices |
| Document | Description |
|---|---|
| Speech Generation | Batch and streaming endpoints for saved voices (/v1/audio/speech) |
| Voice Design | Create voices from natural language descriptions (/v1/voices/design) |
| Streaming | SSE format, chunk structure, browser playback with Web Audio API |
| Voice Management | Save, list, and delete voices |
| Audio Formats | WAV, MP3, Opus, AAC, FLAC, PCM -- specs and when to use each |
| Document | Description |
|---|---|
| Real-time WebSocket | Bidirectional WebSocket API for voice agents and LLM integration |
| WebSocket Protocol | Full protocol reference: message types, binary mode, text buffering, close codes |
| Browser Client | Connect to the WebSocket endpoint from the browser with native APIs |
| Document | Description |
|---|---|
| Long-Form Audio | Generate audio from text of any length with automatic chunking |
| Async Jobs | Submit batch jobs, poll for results, receive webhook notifications |
| Portable Embeddings | Extract voice identity as compact embeddings for multi-tenant apps |
| Voice Agents | Build conversational agents by streaming LLM tokens into murmr |
| Document | Description |
|---|---|
| Crafting Voice Descriptions | What works in voice descriptions: demographics, emotion, pace, accent |
| Style Instructions | Control delivery style with the instruct parameter for saved voices |
| Text Formatting | How whitespace and punctuation affect prosody and pacing |
| OpenAI Migration | Migrate from OpenAI TTS with minimal code changes |
| Languages | Supported languages, cross-lingual synthesis, language auto-detection |
| Document | Description |
|---|---|
| Errors | HTTP status codes, structured error format, troubleshooting |
| Rate Limits | Per-plan limits, concurrent requests, usage headers, overage pricing |
| Node.js SDK Reference | Complete @murmr/sdk API: all methods, parameters, and return types |
| Python SDK Reference | Complete murmr SDK API: sync and async clients, all methods and types |
These docs are indexed by Context7, which means AI coding assistants can pull them automatically when you work with murmr.
In Cursor or Claude Code, just mention murmr in your prompt:
"Use murmr to add text-to-speech to my Express app"
The assistant will fetch the relevant docs via Context7 and generate working code with correct API usage.
Direct MCP query (for custom setups):
Use context7 to look up murmr-tts/docs, then show me how to stream audio with voice design
| Website | murmr.dev |
| Dashboard | murmr.dev/en/dashboard |
| npm | @murmr/sdk |
| PyPI | murmr |
| Context7 | context7.com/murmr-tts/docs |