Поставьте "stream": true — и аудио поедет кусочками
(Transfer-Encoding: chunked), как только будут готовы первые байты. Так
задержка до первого звука минимальна — идеально для длинных текстов и живого
воспроизведения.
curl -N -X POST https://tryaxolotl.ru/v1/speech \
-H "Authorization: Bearer $AXOLOTL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Длинный текст для потоковой озвучки...","stream":true}' \
--output stream.mp3
Node.js
import { writeFile } from "node:fs/promises";
const res = await fetch("https://tryaxolotl.ru/v1/speech", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.AXOLOTL_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ text: "Привет из стрима!", stream: true }),
});
if (!res.ok) throw new Error(`Ошибка ${res.status}: ${await res.text()}`);
const chunks = [];
for await (const chunk of res.body) {
// Тут можно сразу проигрывать/пересылать кусок. Мы просто копим.
chunks.push(chunk);
}
await writeFile("stream.mp3", Buffer.concat(chunks));
Python
import os, requests
with requests.post(
"https://tryaxolotl.ru/v1/speech",
headers={"Authorization": f"Bearer {os.environ['AXOLOTL_API_KEY']}"},
json={"text": "Привет из стрима!", "stream": True},
stream=True,
) as res:
res.raise_for_status()
with open("stream.mp3", "wb") as f:
for chunk in res.iter_content(chunk_size=4096):
f.write(chunk)
При ошибке потоковый ответ может прийти вообще без аудио. Всегда проверяйте
HTTP-статус (res.ok) перед тем, как сохранять тело в файл.