Faceless YouTube TTS stack: script → Audra → editor — Audra
Batch narration pipelines need predictable MP3 output, not a realtime agent stack. Not for realtime voice agents or cloning.
Who this is for
- Teams shipping faceless YT stack as mastered MP3/WAV files
- Pipelines that already POST text over HTTP or the OpenAI SDK
- Builders comparing ElevenLabs list rates for non-cloning workloads
- Anyone who needs −16 LUFS without a separate loudness pass
How faceless YT stack pipelines usually look
Treat Audra as a file factory: chunk scripts server-side (or send up to 50k sync / 500k via jobs), keep one voice slug for brand consistency, and store mastered MP3s in your CDN. faceless YT stack is a batch HTTP workload — not a realtime agent stack.
- Stable voice slug across episodes/modules to avoid weekly voice drift
- −16 LUFS out of the API — skip a separate loudness pass for most uploads
- POST /v2/speech/jobs + webhook_url when a script exceeds sync limits
- Model cost on /calc before locking a course or channel budget
Request pattern
curl
curl https://audratalks.com/v2/speech \
-H "Authorization: Bearer sk-live-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"audra-essential","text":"Your narration script.","voice":"june","format":"mp3"}' \
--output out.mp3
Python
import requests
r = requests.post(
"https://audratalks.com/v2/speech",
headers={"Authorization": "Bearer sk-live-YOUR_KEY"},
json={
"model": "audra-essential",
"text": "Your narration script.",
"voice": "june",
"format": "mp3",
},
timeout=120,
)
r.raise_for_status()
open("out.mp3", "wb").write(r.content)
JavaScript
import { writeFile } from "node:fs/promises";
const res = await fetch("https://audratalks.com/v2/speech", {
method: "POST",
headers: {
Authorization: "Bearer sk-live-YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "audra-essential",
text: "Your narration script.",
voice: "june",
format: "mp3",
}),
});
if (!res.ok) throw new Error(await res.text());
await writeFile("out.mp3", Buffer.from(await res.arrayBuffer()));
OpenAI SDK users set baseURL to https://audratalks.com/v1 and model audra-essential — see /migrate. Next: model spend on /calc.
Cost sanity check
Want to hear a sample on your own script? Get an API key at /dashboard — 25k free characters, no card.
FAQ
Should I use sync /v2/speech or async jobs?
Sync for scripts up to 50k characters. Use POST /v2/speech/jobs (up to 500k) plus optional webhook_url for longer modules or episodes.
Do I need ffmpeg for loudness?
Usually no — Audra masters MP3 to −16 LUFS. Spot-check a sample episode before deleting your post-process step.
Does Audra support realtime voice agents?
No. Audra is a batch TTS API for mastered MP3/WAV files. For sub-200ms conversational agents, stay on a realtime-oriented provider.
Can I clone a custom brand voice?
No. Audra ships preset voices only. Use ElevenLabs (or similar) when cloning is a hard requirement — see /vs/elevenlabs.
Next steps
- Primary next step: model spend on /calc
- A/B voices on /compare
- Honest matrices: /vs/elevenlabs and /vs/openai-tts
- Read next: /blog/youtube-narration-tts-api
- Voice catalog: /voices