> ## Documentation Index
> Fetch the complete documentation index at: https://docs.upliftai.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Stream Text to Speech

> HTTP streaming with client.tts.createStream() for low-latency playback

## `client.tts.createStream(request)`

Returns a `Readable` stream. The first chunk arrives quickly — use this for real-time playback where you want to start playing audio before the full response is ready.

```typescript theme={null}
import UpliftAI from '@upliftai/sdk-js';
import { createWriteStream } from 'fs';

const client = new UpliftAI({
  apiKey: 'your-api-key',
});

const { stream, metadata } = await client.tts.createStream({
  text: 'اردو میں ایک لمبا جملہ، جو سٹریمنگ کی جانچ کے لیے ہے',
  voiceId: 'v_meklc281',
  outputFormat: 'MP3_22050_64',
});

console.log(`Request ID: ${metadata.requestId}`);
console.log(`Content-Type: ${metadata.contentType}`);

const fileStream = createWriteStream('output.mp3');
let totalBytes = 0;

for await (const chunk of stream) {
  totalBytes += chunk.length;
  fileStream.write(chunk);
  process.stdout.write(`\rReceived ${totalBytes} bytes`);
}

fileStream.end();
console.log('\nDone!');
```

### Request Parameters

| Parameter                   | Type     | Required | Description                                                    |
| --------------------------- | -------- | -------- | -------------------------------------------------------------- |
| `text`                      | `string` | Yes      | Text to synthesize                                             |
| `voiceId`                   | `string` | Yes      | Voice profile ID                                               |
| `outputFormat`              | `string` | No       | Audio format — defaults to `WAV_22050_32`                      |
| `phraseReplacementConfigId` | `string` | No       | ID from [phrase replacements](/sdk/nodejs/phrase-replacements) |

### Response

| Field                  | Type       | Description                             |
| ---------------------- | ---------- | --------------------------------------- |
| `stream`               | `Readable` | Node.js readable stream of audio chunks |
| `metadata.requestId`   | `string`   | Request ID for debugging                |
| `metadata.contentType` | `string`   | MIME type of the audio                  |
| `metadata.sampleRate`  | `number`   | Audio sample rate                       |

### When to Use Streaming vs Sync

| Method               | Best For                                                         |
| -------------------- | ---------------------------------------------------------------- |
| `tts.create()`       | Batch processing, saving files, when you need the full buffer    |
| `tts.createStream()` | Real-time playback, large texts, when first-byte latency matters |
