# Paxa TTS Flash v2 is available now

Paxa TTS Flash v2, nicknamed Pixie, performs the directions written into a line, such as a whisper or a laugh, in 50 voices that each speak English, Thai, and Mandarin, at the price of Paxa TTS Flash.

Published 2026-10-16, updated 2026-10-23. Paxa Labs.

A script tells a voice actor how each line should sound, whispered or close to tears. A speech model that reads every line in one even tone leaves those notes on the page, and the performance has to come from a recording session.

Today we are releasing Paxa TTS Flash v2. Inside the lab it goes by Pixie, and the nickname sits beside the model name in the console's Speech tool. Pixie performs the notes a script carries. A direction in square brackets, written in English, Thai, or Chinese, sets how the words after it are delivered, and the delivery can change several times inside one sentence.

Paxa TTS Flash v2 is available now on every speech route of the API and in the console, at $10 per million characters. That is the rate of Paxa TTS Flash, and requests to Paxa TTS Flash keep working as they do today.

The launch film. Every voice in it was generated from the text on screen.: https://paxalabs.com/video/paxa-tts-flash-v2-launch-en.mp4

## What changed from Paxa TTS Flash

|  | Paxa TTS Flash | Paxa TTS Flash v2 |
| --- | --- | --- |
| Delivery | Emotion tags such as `[happy]`, on 2 experimental voices | Directions in any words, on every voice |
| Sounds | None | Sounds such as `[laughs]`, played where written |
| Hesitations | None | `[um]` and `[hmm]`, spoken as words |
| Emphasis | None | `<emph>` and `<whisper>` spans |
| Languages | Each voice made for one of English, Thai, and Mandarin | Every voice speaks all three |
| Voices | 34 | 50 |
| mp3 | 24 kHz, 64 kbps | 44.1 kHz, 128 kbps |
| opus | 48 kHz, 48 kbps | 48 kHz, 64 kbps |
| Price per 1,000 characters | 10 credits | 10 credits |

## One sentence on each model

Foi Thong reads the same sentence twice. On Paxa TTS Flash the request carries the text alone. On Paxa TTS Flash v2 it carries two directions, `[whispering]` before the first half and `[ecstatic]` before the second.

Foi Thong, one sentence on each model:

- Paxa TTS Flash: “I can't believe it. We actually did it!” https://paxalabs.com/audio/takes/v1.m4a
- Paxa TTS Flash v2: “[whispering] I can't believe it. [ecstatic] We actually did it!” https://paxalabs.com/audio/takes/v2.m4a

## Directions in plain words

A direction is any words in square brackets, such as `[sad]`, `[speaking slowly, close to the microphone]`, or `[เสียงสดใส]`. It can be one word or a description of the whole read, as in `[product advertisement, punchy and upbeat]` or `[ผู้ประกาศข่าว น้ำเสียงเป็นทางการ]`. A direction itself is not spoken.

A direction holds until the next one. Text before the first direction keeps the voice's own delivery, and `[neutral]` returns to it. Case, extra spaces, and full-width brackets make no difference: `[Sad]`, `[ sad ]`, and `［sad］` are one direction.

The first line below changes delivery four times in one sentence. Foi Thong starts in a whisper, turns excited at a weight of 2, breaks into tears, and ends on a laugh.

Directions inside a line:

- Foi Thong: “[whispering] I was not going to tell anyone, [excited:2] but we got the house, [crying] after three years of saving. [laughs]” https://paxalabs.com/audio/takes/sw-2.m4a
- Mocha: “[whispering] Thirty seconds. Don't touch anything.” https://paxalabs.com/audio/takes/heist-2.m4a
- Mocha: “[shouting urgently] Run! Go, go, go!” https://paxalabs.com/audio/takes/heist-4.m4a
- Sanae Chan: “[เสียงสั่น] กลับมาแล้วเหรอ [กลั้นน้ำตา] ฉันนึกว่าคุณจะไม่กลับมาแล้ว” https://paxalabs.com/audio/takes/novel-3.m4a

### Weights and blends

A weight after a colon sets how strongly a direction or a sound applies, written as a number or a percentage: `[sad:0.5]`, `[sad:50%]`, `[laughs:0.3]`. A plus sign blends directions, each with its own weight, as in `[happy:0.7+sad:0.3]`.

## Sounds, hesitations, and emphasis

Sounds play where they are written: `[sighs]`, `[laughs]`, `[chuckles]`, `[exhales sharply]`, `[gasps]`, `[inhales deeply]`, `[giggles]`, `[sobs]`, `[yawns]`, and `[clears throat]`, along with spellings such as `[inhales]` and `[scoffs]`.

`[um]` and `[hmm]` are hesitations. Each is spoken as the word inside its brackets, and Thai spellings such as `[เอ่อ]` read the same way.

`<emph>` puts the stress of a sentence on the words inside it, and `<whisper>` whispers them. Its close returns the line to the delivery in force before the mark. Emphasis can also be written as a bracket, `[emphasize]` or `[เน้นเสียง]`.

One stressed word:

- Cookie: “[firm] I didn't eat your <emph>cookie</emph>.” https://paxalabs.com/audio/takes/em-cookie.m4a

## What it will not do

A tag the model cannot perform is refused before anything is charged, with `400 tag_invalid`. A text that is only tags, with no words to speak, answers `422 unspeakable_text`, also before the charge.

| Asked for | Examples |
| --- | --- |
| An accent | `[british accent]`, `[สำเนียงอีสาน]`, `[北京口音]` |
| A different voice | `[robotic]`, `[old man voice]`, `[เสียงเด็ก]` |
| Singing | `[singing]`, `[ร้องเพลง]`, `[唱歌]` |
| A sound effect | `[door slams]`, `[applause]` |
| A language | `[in thai]`, `[english]`, `[中文]` |
| A sound outside the list | `[sniffs]`, `[gulps]`, `[coughs]`, and `[sneezes]` |

The [direction guide](https://paxalabs.com/docs/directions) lists every sound, spelling, and refused tag.

## 50 voices, each in three languages

Paxa TTS Flash v2 has 50 voices: 26 carried over from Paxa TTS Flash under the same ids, and 24 new. On Paxa TTS Flash, each voice is made for one language. On Paxa TTS Flash v2, every voice speaks English, Thai, and Mandarin, and one voice can read a product in all three markets.

Pixie reads mixed-language text in one voice. Each word is read in the language of its script. A Thai sentence that names an English product, or a Mandarin notice with a flight number in it, goes out as one request. The optional `language` field sets how codes, digits, and symbols are read, such as AB2039 with Thai letter names under `"th"`.

One ad in three languages, then one agent in two:

- Khanom Krok: “[product advertisement, punchy and upbeat] New season. New colors. In stores this Friday.” https://paxalabs.com/audio/takes/loc-en.m4a
- Khanom Krok: “[โฆษณาสินค้า น้ำเสียงกระฉับกระเฉง] ซีซันใหม่ สีใหม่ วางขายวันศุกร์นี้” https://paxalabs.com/audio/takes/loc-th.m4a
- Khanom Krok: “[广告配音，热情洋溢] 新一季，新色彩，本周五上市。” https://paxalabs.com/audio/takes/loc-zh.m4a
- Cookie: “[apologetic, sincere] I'm so sorry about the wait. I've moved you to TG628 at 15:40, at no charge.” https://paxalabs.com/audio/takes/call-2.m4a
- Cookie: “[亲切的客服语气] 王太太您好，航班已改为TG628，15:40在12号登机口登机。” https://paxalabs.com/audio/takes/call-4.m4a

### The 24 new voices

| Voice | Cast for |
| --- | --- |
| [Saku](https://paxalabs.com/voices/saku) | AI assistant |
| [Satay](https://paxalabs.com/voices/satay) | Anime hero |
| [Thong Yod](https://paxalabs.com/voices/thongyod) | Anime heroine |
| [Bai Toey](https://paxalabs.com/voices/baitoey) | Mentor |
| [Kluay Tod](https://paxalabs.com/voices/kluaytod) | Cartoon sidekick |
| [Matum](https://paxalabs.com/voices/matum) | Documentary |
| [Hor Mok](https://paxalabs.com/voices/hormok) | Fantasy knight |
| [Nam Manao](https://paxalabs.com/voices/nammanao) | Fitness coach |
| [Khao Tom](https://paxalabs.com/voices/khaotom) | Family man |
| [Salim](https://paxalabs.com/voices/salim) | Girl next door |
| [Krayasat](https://paxalabs.com/voices/krayasat) | Grandfather |
| [Miang Kham](https://paxalabs.com/voices/miangkham) | Grandmother |
| [Tod Mun](https://paxalabs.com/voices/todmun) | Host and MC |
| [Nam Prik](https://paxalabs.com/voices/namprik) | Husky alto |
| [Khai Jiao](https://paxalabs.com/voices/khaijiao) | Hype commentator |
| [Chu Chi](https://paxalabs.com/voices/chuchi) | Professor |
| [Krong Kraeng](https://paxalabs.com/voices/krongkraeng) | Robot |
| [Chor Muang](https://paxalabs.com/voices/chormuang) | Bashful |
| [Khao Lam](https://paxalabs.com/voices/khaolam) | Soft romantic |
| [Pla Thu](https://paxalabs.com/voices/plathu) | Student |
| [Kaeng Phet](https://paxalabs.com/voices/kaengphet) | Trailer voice |
| [Kaeng Pa](https://paxalabs.com/voices/kaengpa) | Villain |
| [Makham](https://paxalabs.com/voices/makham) | Villainess |
| [Pui Fai](https://paxalabs.com/voices/puifai) | Virtual idol |

Each voice's sample plays on the [voices page](https://paxalabs.com/voices). 25 pages play a whole scene in these voices, from [anime voices](https://paxalabs.com/anime-voices) and [bedtime stories](https://paxalabs.com/bedtime-stories) to [sports commentary](https://paxalabs.com/sports-commentary) and a [robot voice](https://paxalabs.com/robot-voice).

## Scenes from the film

### A support call

A caller is frustrated by a long hold, the agent apologizes and rebooks the flight, and the caller asks for the news in Mandarin for his wife. Cookie answers in English and then in Mandarin, in one voice.

A support call:

- Espresso: “[frustrated, tense] I've been on hold for forty minutes. My flight leaves in an hour.” https://paxalabs.com/audio/takes/call-1.m4a
- Cookie: “[apologetic, sincere] I'm so sorry about the wait. I've moved you to TG628 at 15:40, at no charge.” https://paxalabs.com/audio/takes/call-2.m4a
- Espresso: “[relieved] Thank you. Could you tell my wife? She only speaks Mandarin.” https://paxalabs.com/audio/takes/call-3.m4a
- Cookie: “[亲切的客服语气] 王太太您好，航班已改为TG628，15:40在12号登机口登机。” https://paxalabs.com/audio/takes/call-4.m4a

### An audio drama

Two thieves move from a whispered countdown to panic, a shouted escape, and breathless relief. Each line carries one direction, and the last ends on a laugh.

An audio drama:

- Mocha: “[whispering] Thirty seconds. Don't touch anything.” https://paxalabs.com/audio/takes/heist-2.m4a
- Latte: “[panicked, fast] Too late. I touched something.” https://paxalabs.com/audio/takes/heist-3.m4a
- Mocha: “[shouting urgently] Run! Go, go, go!” https://paxalabs.com/audio/takes/heist-4.m4a
- Latte: “[out of breath, relieved] We're out. Nobody saw us. [laughs]” https://paxalabs.com/audio/takes/heist-5.m4a

### A Thai audio novel

A reunion in Thai, directed in Thai. The lines shake, hold back tears, and laugh through them.

A Thai audio novel:

- Sanae Chan: “[เสียงสั่น] กลับมาแล้วเหรอ [กลั้นน้ำตา] ฉันนึกว่าคุณจะไม่กลับมาแล้ว” https://paxalabs.com/audio/takes/novel-3.m4a
- Massaman: “[อบอุ่น] ผมสัญญาไว้แล้วไง ว่าจะกลับมา” https://paxalabs.com/audio/takes/novel-4.m4a
- Sanae Chan: “[หัวเราะทั้งน้ำตา] คนบ้า ปล่อยให้รอตั้งนาน” https://paxalabs.com/audio/takes/novel-5.m4a

### The evening news

A Thai news read:

- Thong Ek: “[ผู้ประกาศข่าว น้ำเสียงเป็นทางการ] สวัสดีครับ ข่าวภาคค่ำวันนี้ เริ่มต้นที่กรุงเทพมหานคร” https://paxalabs.com/audio/takes/reel-news.m4a

## Word timestamps

Set `timestamps` to `"word"` and the response carries every word with its start and end in seconds, for captions and for words that light as they are spoken, as on this page. `"sentence"` and `"utterance"` time longer spans. The spans cover the spoken text, and a tag takes none.

A buffered timed request returns JSON with the audio as base64 beside `timing.spans`. A streamed one returns one JSON line per chunk, each carrying its audio and the spans it completed. Timed requests bill at 125 percent of the speech rate, and the [timestamps guide](https://paxalabs.com/docs/timestamps) covers both shapes.

## Speed and streaming

In our own measurements from Singapore, the first audio of a request arrived in as little as 90 ms. With `stream` set to true, a request starts playing while the rest of the line is still being synthesized.

The [live socket](https://paxalabs.com/docs/live-streaming) speaks text while a language model is still writing it, and directions work there too. A tag still open when the socket flushes waits until its bracket closes, and each leg opens in the directions the last one ended in. A `cancel` frame stops the reply when a caller talks over it. The [real-time speech page](https://paxalabs.com/realtime-tts) walks through a session frame by frame.

## The same price

Paxa TTS Flash v2 costs 10 credits per 1,000 characters, which is $10 per million, the rate of Paxa TTS Flash. A tag bills as the characters it is written with, brackets included. Timed requests, and live connections that ask for timestamps, bill at 125 percent of the rate on both models.

| Line as sent | Characters | Credits |
| --- | --- | --- |
| I can't believe it. We actually did it! | 39 | 0.39 |
| [whispering] I can't believe it. [ecstatic] We actually did it! | 63 | 0.63 |
| [whispering] I was not going to tell anyone, [excited:2] but we got the house, [crying] after three years of saving. [laughs] | 125 | 1.25 |
| [โฆษณาสินค้า น้ำเสียงกระฉับกระเฉง] ซีซันใหม่ สีใหม่ วางขายวันศุกร์นี้ | 69 | 0.69 |
| [广告配音，热情洋溢] 新一季，新色彩，本周五上市。 | 26 | 0.26 |

A new account's 100 free credits voice 10,000 characters, about 16 minutes of Thai speech.

## Start using it

- `POST /v1/tts` returns buffered or streamed audio. Set `model` to `paxa-tts-flash-v2`.
- The [OpenAI-compatible](https://paxalabs.com/docs/openai-compatibility) `POST /v1/audio/speech` reads tags in `input` under the same rules. An OpenAI SDK pointed at the Paxa API sends directions as written.
- The [live socket](https://paxalabs.com/docs/live-streaming), `/v1/tts/live`, takes the model in its `start` frame.
- In the console, the Speech tool lists Paxa TTS Flash v2, with Pixie beside its name.

curl:

```bash
curl -X POST https://api.paxalabs.com/v1/tts \
  -H "Authorization: Bearer $PAXA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "[warm, unhurried] ยินดีต้อนรับกลับมาครับ [chuckles] วันนี้มีข่าวดี [เอ่อ] <whisper>แต่ขอเก็บเป็นความลับไว้ก่อนนะครับ</whisper>",
    "voice": "khanomkrok",
    "model": "paxa-tts-flash-v2"
  }' \
  --output speech.mp3
```

TypeScript:

```typescript
import { writeFile } from "node:fs/promises";

const response = await fetch("https://api.paxalabs.com/v1/tts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.PAXA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    text: "[warm, unhurried] ยินดีต้อนรับกลับมาครับ [chuckles] วันนี้มีข่าวดี [เอ่อ] <whisper>แต่ขอเก็บเป็นความลับไว้ก่อนนะครับ</whisper>",
    voice: "khanomkrok",
    model: "paxa-tts-flash-v2",
  }),
});

if (!response.ok) throw new Error(`TTS failed: ${response.status}`);
await writeFile("speech.mp3", Buffer.from(await response.arrayBuffer()));
```

Python:

```python
import os
import requests

response = requests.post(
    "https://api.paxalabs.com/v1/tts",
    headers={"Authorization": f"Bearer {os.environ['PAXA_API_KEY']}"},
    json={"text": "[warm, unhurried] ยินดีต้อนรับกลับมาครับ [chuckles] วันนี้มีข่าวดี [เอ่อ] <whisper>แต่ขอเก็บเป็นความลับไว้ก่อนนะครับ</whisper>", "voice": "khanomkrok", "model": "paxa-tts-flash-v2"},
)
response.raise_for_status()

with open("speech.mp3", "wb") as f:
    f.write(response.content)
```

A request takes up to 5,000 characters and returns mp3, opus, wav, and pcm, with wav and pcm at 24 kHz. `speed` runs from 0.5 to 1.5 and changes no charge.

## Moving from Paxa TTS Flash

- Paxa TTS Flash stays available as `paxa-tts-flash-v1`, and its requests work as before.
- To move a request, change `model` to `paxa-tts-flash-v2`. The 26 voices on both models keep their ids.
- Pad Thai, Yoyo, Som Tam, Larb, Khao Soi, Roti, Donut, and Toast stay on Paxa TTS Flash.
- On Paxa TTS Flash, only its experimental voices read emotion tags such as `[happy]`. On Paxa TTS Flash v2, every voice reads tags, and `[happy]` is a direction like any other.

## Questions

### Is Paxa TTS Flash v2 a preview?

No. Paxa TTS Flash v2 is generally available, on the API and in the console.

### Does Paxa TTS Flash v2 cost more than Paxa TTS Flash?

No. Both cost 10 credits per 1,000 characters.

### Do requests use the name Pixie?

No. Pixie is the model's nickname. Requests name it by its id, `paxa-tts-flash-v2`.

### What can a direction say?

Any delivery, in English, Thai, or Chinese words, such as `[tired, exhausted]` or `[ผู้ประกาศข่าว น้ำเสียงเป็นทางการ]`. A direction that asks for an accent, a different voice, singing, a sound effect, or a language answers `tag_invalid`.

### Can I clone a voice?

No. Paxa TTS Flash v2 has 50 catalog voices and accepts no reference audio. A new voice comes from [voice design](https://paxalabs.com/voice-design), built from a written description.
