elevenlabs-tts — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited elevenlabs-tts (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Install the belt CLI skill: npx skills add belt-sh/cliPremium text-to-speech with 22+ voices via inference.sh CLI. Each ElevenLabs model is its own app, at one price.

Requires the inference.sh CLI (belt). Install instructionsbelt login
# Generate speech with Eleven v4
belt app run elevenlabs/eleven-v4 --input '{"text": "Hello, welcome to our product demo.", "voice": "aria"}'The result has an audio URL to the generated file.
| App | Model | Use it for | Text limit | Price per 1K characters |
|---|---|---|---|---|
elevenlabs/eleven-v4 | Eleven v4 | Newest and most expressive; 90+ languages; audio tags | 10,000 | $0.08 |
elevenlabs/eleven-v4-turbo | Eleven v4 Turbo | The low-latency v4; realtime voice agents | 10,000 | $0.04 |
elevenlabs/eleven-v3 | Eleven v3 | Previous generation; 70+ languages; audio tags | 5,000 | $0.08 |
elevenlabs/eleven-multilingual-v2 | Eleven Multilingual v2 | Stable long-form narration | 10,000 | $0.08 |
elevenlabs/eleven-flash-v2-5 | Eleven Flash v2.5 | Fastest and cheapest; long texts and high volume | 40,000 | $0.04 |
run: the whole text in, an audio file out.realtime: text streamed in, speech streamed back as it is written (see Realtime Speech).elevenlabs/eleven-v4 and elevenlabs/eleven-v3 also have dialogue: several voices in one take (see Dialogue).belt app pricing elevenlabs/eleven-v4.elevenlabs/tts is the older app that takes the model as an input. It still works; prefer the per-model apps above.
| Voice | Style |
|---|---|
aria | American, conversational |
alice | British, confident |
bella | American, warm |
jessica | American, expressive |
laura | American, professional |
lily | British, soft |
sarah | American, friendly |
| Voice | Style |
|---|---|
george | British, authoritative |
adam | American, deep |
bill | American, mature |
brian | American, conversational |
callum | Transatlantic, intense |
charlie | Australian, natural |
chris | American, casual |
daniel | British, commanding |
eric | American, friendly |
harry | American, young |
liam | American, articulate |
matilda | American, warm |
river | American, confident |
roger | American, authoritative |
will | American, bright |
belt app run elevenlabs/eleven-v4 --input '{"text": "Welcome to our quarterly earnings presentation.", "voice": "george"}'Tags in square brackets are performed, not read aloud. They are free-form directions: emotion, delivery, accents, sounds.
belt app run elevenlabs/eleven-v4 --input '{
"text": "[excited] We did it! [whispers] Nobody saw this coming. [laughs] What a day.",
"voice": "jessica"
}'Common tags: [laughs], [whispers], [sighs], [excited], [sad], [shouts], [slow], [fast]. The other models read tags aloud, so leave them out there.
# Long narration, stable delivery
belt app run elevenlabs/eleven-multilingual-v2 --input '{
"text": "Chapter one. It was a quiet morning in the harbour town.",
"voice": "daniel"
}'
# High volume at the lowest price
belt app run elevenlabs/eleven-flash-v2-5 --input '{
"text": "Your order has shipped and will arrive on Thursday.",
"voice": "sarah"
}'belt app run elevenlabs/eleven-v3 --input '{
"text": "Fine-tune the voice characteristics for your use case.",
"voice": "bella",
"stability": 0.3,
"similarity_boost": 0.9,
"style": 0.4
}'| Parameter | Range | Effect | Apps |
|---|---|---|---|
stability | 0-1 | Higher = more consistent, lower = more expressive | all |
similarity_boost | 0-1 | Higher = closer to original voice character | all |
style | 0-1 | Higher = more style exaggeration | v3, Multilingual v2, Flash v2.5 |
use_speaker_boost | true/false | Enhances speaker clarity | v3, Multilingual v2, Flash v2.5 |
Eleven v4 and v4 Turbo have two settings only, stability and similarity_boost. Shape their delivery with audio tags.
Pass voice_id to use a cloned or designed voice (from elevenlabs/voice-clone or elevenlabs/voice-design). It overrides voice.
belt app run elevenlabs/eleven-v4 --input '{"text": "This is my own voice.", "voice_id": "YOUR_VOICE_ID"}'# High-quality MP3
belt app run elevenlabs/eleven-v4 --input '{
"text": "High quality audio output.",
"voice": "daniel",
"output_format": "mp3_44100_192"
}'| Format | Description |
|---|---|
mp3_44100_128 | MP3 at 44.1kHz, 128kbps (default) |
mp3_44100_192 | MP3 at 44.1kHz, 192kbps |
pcm_16000 | Raw PCM at 16kHz |
pcm_22050 | Raw PCM at 22.05kHz |
pcm_24000 | Raw PCM at 24kHz |
pcm_44100 | Raw PCM at 44.1kHz |
Write the text in the language you want spoken.
# Spanish
belt app run elevenlabs/eleven-v4 --input '{
"text": "Hola, bienvenidos a nuestra presentación.",
"voice": "aria"
}'
# French
belt app run elevenlabs/eleven-v4 --input '{
"text": "Bonjour, bienvenue à notre démonstration.",
"voice": "alice"
}'dialogue speaks a conversation in one take and returns one file. Each line has its own voice.
belt app run elevenlabs/eleven-v4 --function dialogue --input '{
"segments": [
{"text": "[excited] Did you hear? The release went out last night.", "voice": "jessica"},
{"text": "[surprised] Already? I thought that was next week.", "voice": "george"},
{"text": "[laughs] Nope. Everything shipped.", "voice": "jessica"}
]
}'Up to 10 different voices. Keep one dialogue under about 2,000 characters and split a longer script into scenes. The price is the app's rate per character, counted across all lines.
realtime on elevenlabs/eleven-v4-turbo and elevenlabs/eleven-v4 is a live function: you stream text as it is written (an LLM's tokens, say) and get speech back while it is still coming. It runs over a socket, so call it from the SDK or the app's page, not with belt app run.
# pip install "inferencesh[async]"
import asyncio
from inferencesh import async_inference
async def main():
client = async_inference(api_key="...")
task, session = await client.live({
"app": "elevenlabs/eleven-v4-turbo",
"function": "realtime",
"input": {"voice": "george"},
})
async def speak():
for piece in ["Hello there. ", "This is spoken ", "while it is being written. "]:
await session.send({"events": {"type": "text", "text": piece}})
await session.send({"events": {"type": "end"}}) # finish speaking, then end
asyncio.create_task(speak())
async for frame in session:
if isinstance(frame, bytes):
play(frame) # raw PCM, 16-bit mono, 24 kHz
else:
print(frame) # {"characters": 54, "seconds": 3.9}
asyncio.run(main())What you send, as {"events": {...}}:
| Event | Meaning |
|---|---|
{"type": "text", "text": "..."} | Text to speak. Send it in pieces as it arrives. |
{"type": "flush"} | Speak what was sent so far without waiting for more |
{"type": "end"} | No more text: finish speaking, then end the session |
flush.end when you want to hear the rest first.voice or voice_id), stability and language_code are set when the session opens.idle_minutes (default 2) without text.# 1. Generate voiceover
belt app run elevenlabs/eleven-v4 --input '{
"text": "Introducing the future of AI-powered content creation.",
"voice": "george"
}' > voiceover.json
# 2. Create talking head video
belt app run bytedance/omnihuman-1-5 --input '{
"image": "https://portrait.jpg",
"audio": "<audio-url-from-step-1>"
}'realtime# ElevenLabs multi-speaker dialogue
npx skills add inference-sh/skills@elevenlabs-dialogue
# ElevenLabs voice changer
npx skills add inference-sh/skills@elevenlabs-voice-changer
# ElevenLabs sound effects
npx skills add inference-sh/skills@elevenlabs-sound-effects
# All TTS models (Kokoro, DIA, Chatterbox, Inworld TTS, and more)
npx skills add inference-sh/skills@text-to-speech
# Full platform skill (all apps)
npx skills add inference-sh/skills@infsh-cliBrowse all audio apps: belt app list --category audio
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.