Chimera, ready for your app.
Speech, singing, a live instrument and animal voices from a simulated airway. Bring Chimera's physical voice model into your app, with streaming, precise control and immediate interruption.

- ~10 ms
- to the first sound
- 274 KB
- the whole engine, gzipped
- 0
- servers, accounts or models to download
- 1 engine
- speech, singing, beatbox and creatures
const voice = await createVoice({ body: "female" }); const t = take(voice.plan("I never said she stole my money.")); // tap a word, drag the line or pick a mood play(voice.stream(t.score), voice.sampleRate);
It starts talking before the text is finished.
Plug it into a chatbot: Chimera Kit cuts the answer at each comma and full stop while it is still being written, and speaks each piece as soon as it is complete. Below, words arrive at a language model's pace, 40 tokens a second. Interrupt stops the sound at once: nothing is queued on a server.

A different voice for every user, from a name or a number.
A voice is a dozen numbers: body size, throat, tongue, lips, breathiness, tension. bodyFromSeed turns any name or number into one, the same on every device, so each user, agent or game character gets a voice of its own with nothing to download. It describes a kind of voice, not a real person's.
More of the body
It sings, in harmony.
Give it lyrics and notes and the same engine sings them. Drag a note to change the melody. Add a part and a second simulated singer joins in, on a harmony worked out from your notes.

Nobody taught me how to sing, I only have a tube of air.
Play the voice live.
The same throat, played by hand: across the pad is two octaves of pitch, up opens the jaw. Pick a vowel while you hold. It also beatboxes, with lips and tongue rather than samples.
Animals, from the same physics.
Change the anatomy and CHIMERA gives a songbird, a seal, an alligator or an elephant. No samples: each call is computed when you press it.
A language model can use it as a tool.
One import gives a model three tools, in the formats the Anthropic and OpenAI APIs expect: say, sing and set the voice. A bad call comes back as a message the model can read and fix, never as a crash. The calls below are scripted so this page needs no account, but they run through the same code.

Speak calmly
NextSay "Of course. I will keep it short."
View tool call
{ "tool": "say", "arguments": { "text": "Of course. I will keep it short.", "mood": "calm" } }Change the voice
NextUse a child voice for the next calls.
View tool call
{ "tool": "set_voice", "arguments": { "body": "child" } }Try a melody with a rest
NextSing "here it comes" with a silent beat between the notes.
View tool call
{ "tool": "sing", "arguments": { "lyrics": "here it comes", "melody": "E4:1 G4:1 r:1 C5:2", "bpm": 110 } }Correct the melody and sing
NextHold the previous note for that beat instead of inserting a rest.
View tool call
{ "tool": "sing", "arguments": { "lyrics": "here it comes", "melody": "E4:1 G4:2 C5:2", "bpm": 110, "vibrato": 30 } }
No neural network. A simulated throat.
Most modern text to speech runs a neural network trained on recordings of people. Chimera Kit runs CHIMERA, a physical model of the human voice by Jameson Hodge: vocal folds, a throat, a tongue and lips, simulated sample by sample. Every sound comes from those movements. That is why each word can be moved exactly, and why the whole engine fits in 274 KB. Each step below is plain data you can read, change and hand back.
"Hello there.", { delivery: "calm" }words, syllables, stress, where to breatheplanning...tongue, lips, jaw and velum moving to their targetsair through a tube, 48,000 times a secondSpeech recognizers miss about 23 % of its words, far more than for a neural voice: it is not trying to pass for a person. In exchange it starts at once, weighs almost nothing and does exactly what the program tells it.
Latency, crowds, and consonants.
Measured on your device, every time.
Each press computes a word from nothing, on this device. Each bar is the time to its first sample. Keys 1 to 8 work too.
What it costs, and what it does not do.
| Engine | 274 KB gzipped, WebAssembly |
|---|---|
| JavaScript to speak | 2.1 KB gzipped |
| Pronouncing dictionary | 869 KB, optional |
| First sound | about 10 ms after the call, on an Apple M2 |
| Processor | about a third of one core per voice speaking |
| Network | none after the engine loads |
| Output | the same text and options always give the same samples |
- It sounds synthetic. Every sound is computed from a simulated throat, not copied from a recording.
- It speaks English only, for now.
- It does not clone a person's voice. A body describes a kind of voice.
- Timings on phones have not been measured yet.
- It is a private preview: not on npm yet, and the API will change.