## 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.

```javascript
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](https://docs.upliftai.org/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 |
