agentsclimarketplace

Voxtral tts api

Skill Yesterday-AI/skills/skills/capabilities/tts/voxtral-tts-api

Text-to-speech via Mistral Voxtral TTS API. Generate natural, emotionally expressive speech in 9 languages. Supports voice cloning from 3s audio samples, preset voices, streaming, and cross-lingual synthesis. Use when you need to generate speech, narrate content, create voice messages, or build voice agents.From its SKILL.md

Install
npx -y skills add Yesterday-AI/skills --skill voxtral-tts-api

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

4 things to look at

  • reads credentialsReads from 2 credential sources: `MISTRAL_API_KEY` and 1 more.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 8 commands, including `cat ~/.openclaw/secrets/mistral.key` and 7 more.
  • fetches URLsInstructs the agent to fetch 2 URLs, including https://api.mistral.ai/v1/audio/speech and 1 more.

SKILL.md

6.0 KB, ~1.7k tokens by cl100k_base, as published. Nobody here has run it

Voxtral TTS πŸŽ™οΈ

Text-to-speech via Mistral's Voxtral TTS API. 4B parameter model, 70ms latency, $0.016/1k chars.

Setup

export MISTRAL_API_KEY="your-key"
# or
cat ~/.openclaw/secrets/mistral.key

Quick Start

# Generate speech with a preset voice
curl -s "https://api.mistral.ai/v1/audio/speech" \
  -H "Authorization: Bearer $MISTRAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "Hello, this is a test.",
    "voice_id": "<voice-id>",
    "response_format": "mp3"
  }' | jq -r '.audio_data' | base64 -d > output.mp3

# Clone a voice from a 3-5 second sample
REF_AUDIO=$(base64 -w0 reference.wav)
curl -s "https://api.mistral.ai/v1/audio/speech" \
  -H "Authorization: Bearer $MISTRAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"input\": \"Speaking with a cloned voice.\",
    \"ref_audio\": \"$REF_AUDIO\",
    \"response_format\": \"mp3\"
  }" | jq -r '.audio_data' | base64 -d > cloned.mp3

API Reference

Generate Speech

POST https://api.mistral.ai/v1/audio/speech

ParameterTypeRequiredDescription
inputstringβœ…Text to speak
voice_idstringPreset or saved voice ID
ref_audiostringBase64-encoded audio for zero-shot voice cloning (3-25s)
response_formatstringmp3 (default), wav, pcm, flac, opus
modelstringModel override (default: voxtral-tts)
streamboolEnable SSE streaming (default: false)

Auth: Authorization: Bearer $MISTRAL_API_KEY

Response (non-streaming):

{"audio_data": "<base64-encoded-audio>"}

Response (streaming): SSE events:

event: speech.audio.delta
data: {"audio_data": "<base64-chunk>", "type": "speech.audio.delta"}

event: speech.audio.done
data: {"type": "speech.audio.done", "usage": {"prompt_tokens": 42, ...}}

Note: Either voice_id or ref_audio should be provided. If neither is given, a default voice is used.

Voice Management

List voices:

curl -s "https://api.mistral.ai/v1/audio/voices?limit=50" \
  -H "Authorization: Bearer $MISTRAL_API_KEY" | jq '.items[] | {id, name, gender, languages}'

Create a saved voice (from audio sample):

SAMPLE=$(base64 -w0 my-voice.wav)
curl -s -X POST "https://api.mistral.ai/v1/audio/voices" \
  -H "Authorization: Bearer $MISTRAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"name\": \"My Custom Voice\",
    \"sample_audio\": \"$SAMPLE\",
    \"sample_filename\": \"my-voice.wav\",
    \"gender\": \"male\",
    \"languages\": [\"en\", \"de\"]
  }" | jq '{id, name}'

Update voice metadata:

curl -s -X PATCH "https://api.mistral.ai/v1/audio/voices/<voice-id>" \
  -H "Authorization: Bearer $MISTRAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated Name", "tags": ["narrator", "warm"]}'

Delete voice:

curl -s -X DELETE "https://api.mistral.ai/v1/audio/voices/<voice-id>" \
  -H "Authorization: Bearer $MISTRAL_API_KEY"

Languages

9 languages supported natively:

LanguageCodeDialects
EnglishenAmerican, British
FrenchfrFrench
GermandeGerman
SpanishesSpanish
DutchnlDutch
PortugueseptPortuguese
ItalianitItalian
HindihiHindi
ArabicarArabic

Features

Voice Cloning

Pass ref_audio (base64, 3-25 seconds) for zero-shot voice cloning. Captures accent, rhythm, intonation, pauses, and emotional patterns. No pre-registration needed.

Cross-Lingual Synthesis

The model handles cross-lingual voice adaptation: a French voice prompt with German text produces natural German speech with a French accent. Useful for translation pipelines.

Streaming

Set stream: true for SSE streaming. Useful for real-time voice agents. Events: speech.audio.delta (audio chunks) and speech.audio.done (completion + usage).

Long Text

The model natively generates up to 2 minutes of audio. The API handles longer text automatically with smart interleaving.

Pricing

$0.016 per 1,000 characters. A typical 500-character message costs ~$0.008.

Use Cases

Use CaseHow
Voice messages in chatGenerate mp3, send via message tool
Narrate contentFeed article/summary text, save as audio
Voice agentStream with stream: true, pipe to audio output
StorytellingUse ref_audio for character voices
AccessibilityConvert any text response to speech
Multilingual supportPass text in any supported language

Shell Helper

# One-liner: text to mp3 file
voxtral() {
  curl -s "https://api.mistral.ai/v1/audio/speech" \
    -H "Authorization: Bearer $MISTRAL_API_KEY" \
    -H "Content-Type: application/json" \
    -d "{\"input\": \"$1\", \"voice_id\": \"${2:-}\", \"response_format\": \"mp3\"}" \
    | jq -r '.audio_data' | base64 -d > "${3:-output.mp3}"
  echo "Saved: ${3:-output.mp3}"
}

# Usage:
# voxtral "Hallo Welt!" "voice-id" "hallo.mp3"
# voxtral "Quick test"  # uses default voice, saves to output.mp3

Comparison

FeatureVoxtral TTSElevenLabsOpenAI TTS
Price/1k chars$0.016$0.18 (v2)$0.015
Latency (TTFA)70ms~100ms~200ms
Voice Cloningβœ… (3s)βœ… (30s)❌
Languages92957
Streamingβœ…βœ…βœ…
Open Weightsβœ… (CC BY NC)❌❌
Self-Hostableβœ… (~3GB RAM)❌❌

v1.0 -- Voxtral TTS API skill. ManniTheRaccoon 2026-03-30. πŸŽ™οΈ

What ships with it: 1 file

561 B alongside SKILL.md

Gives 0 of the 12 instructions most video audio skills give in ~1.7k tokens

Counted across 619 of the 725 authors here whose files we hold, read 2026-09-06

  • Read product marketing context firstin 13 of 619, across 7 files
  • Define the core visual thesis in one sentencein 11 of 619, across 3 files
  • Break the concept into 3 to 6 scenesin 11 of 619, across 3 files
  • Render the smallest working version firstin 11 of 619, across 3 files
  • Start with a low-quality smoke test renderin 11 of 619, across 3 files
  • Add captions for accessibility and engagementin 11 of 619, across 5 files
  • Write the scene outline before writing codein 11 of 619, across 3 files
  • Specify subject, action, camera, style, and moodin 11 of 619, across 5 files
  • Decide what each scene provesin 10 of 619, across 2 files
  • Export one clean thumbnail framein 10 of 619, across 2 files
  • Pick the right tool for the jobin 10 of 619, across 4 files
  • Run the test suite before proposing a fixin 8 of 619, across 7 files

Said here and by no other author read

  • Provide either voice_id or ref_audio
  • Export the MISTRAL_API_KEY environment variable
  • Set stream to true for SSE streaming

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.