Voice design
Describe a voice. Hear it.
Write a plain-English description of the voice you want and hear it read your line. No parameter dropdowns, no preset library to dig through.
Start with a character. Tap one to hear it and load its brief.
Then edit the brief, or write your own.
How it works
A description in. A voice out.
No DSP knobs. No tagged parameters. Just plain English and audio back.
Describe
Write the voice you want.
Plain-English brief. Timbre, age, accent, pacing, register, emotional tone. The model parses the description into acoustic parameters.
Generate
Hear it speak any text.
Pass your brief and a line of text. The model renders speech that matches both, in roughly the time TTS takes.
Iterate
Tune the description, regenerate.
Adjust the brief and re-run. When you find a voice you like, keep the audio it renders; each request synthesizes a fresh speaker, so the takes are what you reuse.
What you can ask for
Six axes. All compositional.
Describe what you want in plain English. The model resolves parameters internally; you don't pick from dropdowns.
Timbre
Deep, light, gravelly, smooth, warm, bright, edgy, breathy.
Age
Young (mid-20s), middle-aged (30s–40s), elderly (60s+).
Accent
American (Midwest, Southern), British (RP, Cockney), Italian, Scottish, neutral, etc.
Register
Conversational, formal, dramatic, intimate, professional.
Pacing
Slow and measured, fast clip, deliberate with pauses, rapid.
Emotional tone
Calm, energetic, melancholic, confident, warm, detached.
For developers
A description goes where the voice ID would.
The same OpenAI-compatible speech endpoint. Send a brief instead of a preset, and the model renders a voice to match. One request, no design SDK to learn.
from openai import OpenAI
client = OpenAI(
api_key="sk-sprag-...",
base_url="https://api.sprag.ai/v1",
)
response = client.audio.speech.create(
model="chorus-design",
instructions=(
"A weathered old sea captain, seventy, thick gravelly "
"rasp, heavy West Country accent. Slow and salt-worn."
),
input="We do not sail past the point tonight.",
response_format="mp3",
)
with open("captain.mp3", "wb") as f:
f.write(response.content)- Write the briefPlain English: timbre, age, accent, register, pacing, tone. No parameters to tune.
- Call /v1/audio/speechPass the brief through instructions and the line through input. One round trip.
- Keep the takes you likeA designed voice has no stored ID. Render the lines you need and keep the audio, or save a take as a reference clip.
Plain-English briefs
No DSP knobs, no tagged parameters.
Same speech endpoint
The brief goes where the voice ID would.
10+ languages
Every designed voice speaks all of them.
Drop-in OpenAI
Call it from the client you already have.