Skip to content
Back to skills

Edge Tts

ASecurity

Text-to-speech conversion using `uvx edge-tts` for generating audio from text. Use when (1) User requests audio/voice output with the \"tts\" trigger or keyword. (2) Content needs to be spoken rather th

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 6, 2026
ai-agentspythongoshellexpressflask

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 6, 2026

npx -y skills add Kairos-ai-agent/kairos-code --skill edge-tts --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Edge Tts?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Edge Tts
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/kairos-ai-agent-edge-tts/badge)](https://www.skillsdirectory.com/skills/kairos-ai-agent-edge-tts)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: "edge-tts"
description: "Text-to-speech conversion using `uvx edge-tts` for generating audio from text. Use when (1) User requests audio/voice output with the \"tts\" trigger or keyword. (2) Content needs to be spoken rather th"
priority: 0.5
imported-from: "hermes"
source-path: "hermes/skills/openclaw-imports/edge-tts/SKILL.md"
---
# Edge-TTS

Generate high-quality text-to-speech audio using Microsoft Edge's neural TTS service via the `uvx edge-tts` command.
Supports multiple languages, voices, adjustable speed/pitch, and subtitle generation.

## Usage
```shell
uvx edge-tts --text "{msg}" --write-media {tempdir}/{filename}.mp3

# With subtitles
uvx edge-tts --text "{msg}" --write-media {tempdir}/{filename}.mp3 --write-subtitles -
```

## Changing rate(speed), volume and pitch
```shell
uvx edge-tts --text "{msg}" --write-media {tempdir}/{filename}.mp3 --rate=+50%
uvx edge-tts --text "{msg}" --write-media {tempdir}/{filename}.mp3 --volume=+50% --pitch=-50Hz
```

## Changing the voice
```shell
uvx edge-tts --text "{msg}" --write-media {tempdir}/{filename}.mp3 --voice zh-CN-XiaoxiaoNeural
```

## Available voices
```
Name                               Gender    ContentCategories      VoicePersonalities
en-GB-LibbyNeural                  Female    General                Friendly, Positive
en-GB-RyanNeural                   Male      General                Friendly, Positive
en-GB-SoniaNeural                  Female    General                Friendly, Positive
en-GB-ThomasNeural                 Male      General                Friendly, Positive
en-HK-SamNeural                    Male      General                Friendly, Positive
en-HK-YanNeural                    Female    General                Friendly, Positive
en-US-AnaNeural                    Female    Cartoon, Conversation  Cute
en-US-AndrewMultilingualNeural     Male      Conversation, Copilot  Warm, Confident, Authentic, Honest
en-US-AndrewNeural                 Male      Conversation, Copilot  Warm, Confident, Authentic, Honest
en-US-AriaNeural                   Female    News, Novel            Positive, Confident
en-US-AvaMultilingualNeural        Female    Conversation, Copilot  Expressive, Caring, Pleasant, Friendly
en-US-AvaNeural                    Female    Conversation, Copilot  Expressive, Caring, Pleasant, Friendly
en-US-BrianMultilingualNeural      Male      Conversation, Copilot  Approachable, Casual, Sincere
en-US-BrianNeural                  Male      Conversation, Copilot  Approachable, Casual, Sincere
en-US-ChristopherNeural            Male      News, Novel            Reliable, Authority
en-US-EmmaMultilingualNeural       Female    Conversation, Copilot  Cheerful, Clear, Conversational
en-US-EmmaNeural                   Female    Conversation, Copilot  Cheerful, Clear, Conversational
en-US-EricNeural                   Male      News, Novel            Rational
en-US-GuyNeural                    Male      News, Novel            Passion
en-US-JennyNeural                  Female    General                Friendly, Considerate, Comfort
en-US-MichelleNeural               Female    News, Novel            Friendly, Pleasant
en-US-RogerNeural                  Male      News, Novel            Lively
en-US-SteffanNeural                Male      News, Novel            Rational
fr-FR-DeniseNeural                 Female    General                Friendly, Positive
fr-FR-HenriNeural                  Male      General                Friendly, Positive
zh-CN-XiaoxiaoNeural               Female    News, Novel            Warm
zh-CN-YunjianNeural                Male      Sports,  Novel         Passion
zh-CN-liaoning-XiaobeiNeural       Female    Dialect                Humorous
zh-CN-shaanxi-XiaoniNeural         Female    Dialect                Bright
zh-HK-HiuGaaiNeural                Female    General                Friendly, Positive
zh-HK-WanLungNeural                Male      General                Friendly, Positive
zh-TW-HsiaoChenNeural              Female    General                Friendly, Positive
zh-TW-YunJheNeural                 Male      General                Friendly, Positive
```

Retrieve all available voices using shell commands:
```shell
uvx edge-tts --list-voices
```

## Flask Proxy for Web Apps

When integrating edge-tts into a web app (e.g. Kairos Canvas), wrap it as an OpenAI-compatible `/v1/audio/speech` endpoint:

```python
# edge_tts_server.py — minimal Flask proxy
import asyncio, io, edge_tts
from flask import Flask, request, Response
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route("/v1/audio/speech", methods=["POST"])
def speech():
    data = request.get_json(force=True)
    text = data.get("input", "")
    voice = data.get("voice", "zh-CN-XiaoxiaoNeural")
    speed = data.get("speed", 1.0)
    rate = f"+{int((speed-1)*100)}%" if speed >= 1 else f"{int((speed-1)*100)}%"
    comm = edge_tts.Communicate(text=text, voice=voice, rate=rate)
    buf = io.BytesIO()
    async def gen():
        async for chunk in comm.stream():
            if chunk["type"] == "audio":
                buf.write(chunk["data"])
    asyncio.run(gen())
    return Response(buf.getvalue(), mimetype="audio/mpeg")

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5050)
```

**Install:** `pip install edge-tts flask flask-cors`

**Call from JS:** `fetch("http://localhost:5050/v1/audio/speech", {method:"POST", headers:{"Content-Type":"application/json"}, body:JSON.stringify({input:"你好",voice:"xiaoxiao"})})`

**Voice name mapping:** Use short names (xiaoxiao, yunxi, jenny) mapped to full IDs (zh-CN-XiaoxiaoNeural, etc.) in the proxy. The proxy resolves names to edge-tts voice IDs.

**Limitations:** No voice cloning, no voice design, no style/emotion control, mp3 output only. For cloning, use MiMo TTS or GPT-SoVITS.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…