Skip to main content
skill Claude Code CX Codex Cursor GitHub Copilot

azure-text-to-speech — Claude Code skill: what it does, how to install

Synthesizes neural voiceover audio using the Azure AI Speech REST API. Ideal for OpenMontage pipelines that need multilingual narration voices.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add calesthio/OpenMontage --skill azure-text-to-speech -a claude-code
Open on GitHub

What azure-text-to-speech does

The skill exposes the azure_tts tool to generate audio directly via Azure's synchronous /cognitiveservices/v1 REST endpoint. It does not require token exchanges or storage polling. Output comes as delivery-ready mp3 (48kHz, 192kbit) or uncompressed wav (48kHz PCM) for mixing. Voices like en-US-AndrewMultilingualNeural (aliased as andrew) handle conversational tones, while parameters like rate and style adjust delivery speed and attitude.

It requires AZURE_SPEECH_KEY and either AZURE_SPEECH_REGION or AZURE_TTS_ENDPOINT. Because Azure Speech shares resources, one key handles both tasks. If Azure credentials are missing or the API returns an error, OpenMontage falls back automatically along the declared chain: elevenlabs_tts to openai_tts, and finally to local piper_tts.

Do not pre-escape text into SSML tags, because the tool escapes XML automatically and raw tags will distort the narration output.

What it helps with

  • synthesize voiceover audio for video script segments
  • adjust narration pace and pitch using SSML prosody parameters
  • export 48kHz WAV audio files for downstream audio mixing
  • switch narration from offline piper_tts to cloud Azure neural voices

Example prompts for the agent

  • Generate voiceover for this script section using the andrew voice at rate -4%
  • Render segment audio to wav using azure_tts with the narration-professional style
  • Synthesize this text in German using the de-DE-KatjaNeural voice into mp3

How to install azure-text-to-speech

1Skills CLI (Vercel)

npx skills add calesthio/OpenMontage --skill azure-text-to-speech -a claude-code

2Manually: put the files in place

~/.claude/skills/azure-text-to-speech/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/azure-text-to-speech/

From the same set28

The whole set →
video-understand calesthio This skill extracts video frames and transcribes audio locally with ffmpeg and Whisper. Use it to inspect video content without API keys. Claude Code CX Codex Cursor +1 1,300installs remotion calesthio Teaches AI agents toolkit-specific Remotion patterns, including custom transition shaders and 30 fps video rules. Claude Code CX Codex Cursor +1 1,200installs video-download calesthio Uses yt-dlp to fetch video, audio, subtitles, or URL metadata. Use it when you need a local file, a selected resolution, or details without downloading media. Claude Code CX Codex Cursor +1 1,200installs lottie-bodymovin calesthio Applies Disney's 12 animation principles to Lottie vector animations. Bridges After Effects setup with runtime JavaScript controls. Claude Code CX Codex Cursor +1 1,100installs create-video calesthio This skill turns a description into a finished video: write what you want to see, and HeyGen generates the script, picks an avatar, adds voiceover and editing. Good for quick demos, explainers and promos without tweaking every detail. Claude Code CX Codex Cursor +1 1,100installs video-toolkit calesthio Automates video creation: generates voiceovers, background music, animates talking heads, and composes scenes with Remotion. Requires Node.js, Python3, ffmpeg, and cloud GPU access (Modal or RunPod). Claude Code CX Codex Cursor +1 1,100installs text-to-speech calesthio Generates speech audio with HeyGen Starfish and lets you choose a voice, speed, and pitch. Useful for voiceovers, narration, and podcasts. Claude Code CX Codex Cursor +1 1,100installs bfl-api Black Forest Labs This skill helps connect BFL FLUX API for image generation and editing. It covers async requests, polling, rate limits, and webhooks. Claude Code CX Codex Cursor +1 1,000installs

Similar

firebase sickn33 Guides Firebase architecture, Firestore security rules, and Cloud Functions based on read-heavy query patterns and pricing limits. Claude Code CX Codex Cursor +1 1,600installs flow-nexus-swarm ruvnet Deploy cloud-based AI agent swarms and define event-driven workflows with message queues. Use it to coordinate tasks, inspect runs, and scale a swarm. Claude Code CX Codex Cursor +1 1,200installs flow-nexus-neural ruvnet Trains and deploys neural networks in isolated E2B sandboxes using Flow Nexus. Useful for running model training or inference directly through an AI coding agent. Claude Code CX Codex Cursor +1 1,100installs cloud-trace-querying official google This skill queries Cloud Trace spans, connects traces with Cloud Logging, and helps diagnose latency in Google Cloud services. Claude Code Gemini CLI CX Codex 835installs huggingface-llm-trainer huggingface Runs language and vision model fine-tuning on Hugging Face Jobs with TRL or Unsloth and converts checkpoints to GGUF without local GPUs. Claude Code CX Codex Cursor +1 2,200installs dsql awslabs A deprecated compatibility redirect that points the agent to the canonical Aurora DSQL skill. Use it when old dsql references still appear in a project. Claude Code CX Codex Cursor +1 540installs workers-best-practices cloudflare Guides coding agents on production Cloudflare Workers standards, Wrangler typing, observability setup, and runtime anti-pattern checks. Claude Code CX Codex Cursor +1 124,900installs cloudflare-email-service cloudflare A skill for Cloudflare Email Sending and Email Routing: it walks the agent through sending and receiving mail in Workers. Claude Code CX Codex Cursor +1 101,400installs

Questions about azure-text-to-speech

How to install azure-text-to-speech in Claude Code?

Run npx skills add calesthio/OpenMontage --skill azure-text-to-speech -a claude-code.

What does azure-text-to-speech do?

It connects to the Azure AI Speech REST endpoint to render voiceover audio segments with neural voices and prosody controls.

What happens if AZURE_SPEECH_KEY is not configured?

The pipeline skips Azure and falls back through elevenlabs_tts, openai_tts, or local offline piper_tts.

Source text

SKILL.md · MIT
---
name: azure-text-to-speech
description: Generate neural narration audio using Azure AI Speech (REST text-to-speech). Use when synthesizing voiceovers or narration in OpenMontage. Optional cloud TTS provider — preferred when AZURE_SPEECH_KEY is configured; the local piper_tts remains the default offline path. Shares one Speech resource with azure_stt.
license: MIT
compatibility: Requires internet access and an Azure AI Speech resource (AZURE_SPEECH_KEY + AZURE_SPEECH_REGION).
metadata: {"openclaw": {"requires": {"env": ["AZURE_SPEECH_KEY", "AZURE_SPEECH_REGION"]}, "primaryEnv": "AZURE_SPEECH_KEY"}}
---

# Azure AI Speech — Text-to-Speech

Generate narration with **Azure neural TTS** — high-quality multilingual voices,
SSML prosody control, and express-as styles, served synchronously by the REST
`/cognitiveservices/v1` endpoint (no token exchange, Blob storage, or job
polling). In OpenMontage this is exposed through the `azure_tts` tool
(`capability=tts`, `provider=azure`). It is an **optional cloud TTS provider** —
when `AZURE_SPEECH_KEY` is configured, prefer it for high-quality cloud
narration. The local `piper_tts` remains the **default offline path** and the
fallback when Azure is unavailable; `elevenlabs_tts` remains the choice for
voice cloning.

> Docs: [REST text to speech](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech) · [Voice gallery](https://speech.microsoft.com/portal/voicegallery)

## Setup

Same Speech resource as `azure_stt` — **one key/region unlocks both directions**
(STT and TTS). Create a **Speech** resource in the
[Azure portal](https://portal.azure.com); copy the key and region from its
**Keys and Endpoint** page.

```bash
export AZURE_SPEECH_KEY=your_speech_resource_key
export AZURE_SPEECH_REGION=eastus        # your resource's region
# export AZURE_TTS_ENDPOINT=https://...  # optional: full custom TTS host
#   (the TTS host is https://<region>.tts.speech.microsoft.com — a different
#    subdomain than the STT endpoint, hence the separate override var)
```

`azure_tts` reports `AVAILABLE` once `AZURE_SPEECH_KEY` plus either
`AZURE_SPEECH_REGION` or `AZURE_TTS_ENDPOINT` are set.

## Using it in a pipeline

Route through `tts_selector` as usual (it auto-discovers `azure_tts`), or call
the provider tool directly when the user has approved Azure:

```python
from tools.tool_registry import registry
registry.discover()
tts = registry._tools["azure_tts"]

result = tts.execute({
    "text": "Every design decision in this dashboard has a reason.",
    "voice": "andrew",                 # alias or full Azure short name
    "rate": "-4%",                     # slightly slower for narration
    # "style": "narration-professional",  # for voices that support styles
    "output_path": "projects/my-video/assets/audio/seg_001.mp3",
    "output_format": "mp3",            # or "wav" (48kHz PCM) for mixing
})
```

If `azure_tts` is unavailable (no key) or errors, fall back per its declared
chain: `elevenlabs_tts` → `openai_tts` → `piper_tts`.

## Voice selection

Curated shortlist (aliases accepted by the `voice` param):

| Alias | Voice | Character |
|-------|-------|-----------|
| `andrew` | en-US-AndrewMultilingualNeural | warm, confident, conversational — the default; founder/explainer register |
| `brandon` | en-US-BrandonMultilingualNeural | deeper, measured |
| `ava` | en-US-AvaMultilingualNeural | confident, bright female |
| `guy` | en-US-GuyNeural | authoritative |
| `jenny` | en-US-JennyNeural | friendly, clear |

Any valid Azure voice short name may be passed verbatim (e.g.
`de-DE-KatjaNeural`); the *Multilingual* voices handle non-English text well —
set `locale` to match the text's language for correct SSML.

## Parameters that matter

- **`rate` / `pitch`** — SSML prosody. Narration usually reads best slightly
  slowed (`"-4%"` to `"-8%"`); leave pitch at `"0%"` unless correcting a voice.
- **`style`** — express-as style for voices that support it
  (`narration-professional`, `calm`, `newscast`). Unsupported styles are
  silently ignored by Azure, so listen to a sample before batch runs.
- **`output_format`** — `mp3` (48kHz/192kbit) for delivery, `wav` (48kHz PCM)
  when the segment feeds `audio_mixer` for further processing.
- Determinism: a fixed voice + SSML re-renders effectively identical audio —
  safe to regenerate individual segments without re-recording the whole set.

## Cost

Azure neural TTS Standard tier bills roughly **$16 per 1M characters** (~$0.016
per 1k chars; a 150-word narration segment ≈ $0.015). The tool reports
per-call `cost_usd` for the cost tracker. See
[Azure AI Speech pricing](https://azure.microsoft.com/pricing/details/cognitive-services/speech-services/) for current rates.

## Limits & tips

- One `execute` call = one narration segment. Generate per script section (the
  asset stage convention) rather than one giant paragraph — smaller segments
  align cleanly to scene timings and are cheap to regenerate.
- The synchronous endpoint caps a request at 10 minutes of audio — far above
  any segment OpenMontage generates.
- Text is XML-escaped automatically; do not pre-escape or wrap in SSML — pass
  plain text plus the `rate`/`pitch`/`style` params.
- Verify quality: listen to the first generated segment before batch-running a
  full script (voice/style fit is a creative decision — surface it at the
  proposal stage per the Decision Communication Contract).

© calesthio · MIT · calesthio/OpenMontage

See also

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor