Design & media

speechfy

Try it

Multi-provider Text-to-Speech: Speechify API (primary) + Edge TTS (fallback). Gera .ogg (Opus) para voice messages.

What it does

Multi-provider Text-to-Speech: Speechify API (primary) + Edge TTS (fallback). Gera .ogg (Opus) para voice messages.

The skill document

Speechify TTS

Multi-provider Text-to-Speech: Speechify API (primary, Cristiane voice) with automatic Edge TTS fallback (FranciscaNeural). Outputs .ogg (Opus) ready for voice messages.

⚡ Quick Start

# Basic usage
python3 scripts/speechfy-tts.py "Hello, world!" /tmp/hello.ogg

# With custom voice via env
SPEECHIFY_VOICE=bruno python3 scripts/speechfy-tts.py "Texto" /tmp/saida.ogg

Architecture

Text (CLI)
    │
    ├── Speechify API ──► .mp3 ──► ffmpeg ──► .ogg (Opus)
    │   (primary)
    │
    └── Edge TTS ──────► .ogg (Opus)
        (fallback)

Speechify fails when:

  • No API key configured (env var or vault missing)
  • Monthly quota exceeded (HTTP 402 — spend_cap_exceeded)
  • Rate limited (HTTP 429)
  • Network timeout

Prerequisites

ToolRequiredInstall
Python 3.10+System package
ffmpeg (libopus)apt install ffmpeg / pacman -S ffmpeg
edge-tts (PyPI)For fallbackpip install edge-tts
vault-resolverOptionalHermes ecosystem

Configuration

All via environment variables (no hardcoded config):

VariableDefaultDescription
SPEECHIFY_API_KEYSpeechify API key (sk_...)
SPEECHIFY_VOICEcristianeVoice ID (see voices reference)
SPEECHIFY_MODELsimba-multilingualTTS model
SPEECHIFY_LANGpt-BRLanguage code
EDGE_TTS_VOICEpt-BR-FranciscaNeuralEdge TTS voice
EDGE_TTS_CMDedge-ttsEdge TTS CLI command
SPEECHIFY_OUTPUT/tmp/speech-output.oggDefault output path
SPEECHIFY_VAULT_ITEMspeechfy_keyVaultwarden item name
VAULT_RESOLVER/opt/data/bin/vault-resolverVault resolver path
SPEECHIFY_API_KEYOverrides vault (highest priority)

Resolution order: SPEECHIFY_API_KEY env var → vault-resolver → empty (skip).

Usage

CLI

# Simple text, default output
python3 scripts/speechfy-tts.py "Hello, how are you?"

# Custom output path
python3 scripts/speechfy-tts.py \
  "Important announcement" /tmp/alert.ogg

# SSML (Speech Synthesis Markup Language)
python3 scripts/speechfy-tts.py \
  'Excited'

Voice Messages (Telegram)

Include the .ogg path with MEDIA: prefix:

MEDIA:/tmp/speech-output.ogg

.ogg with Opus codec is the native voice bubble format on Telegram.

Programmatic (Python)

import subprocess

def generate_speech(text, output="/tmp/speech.ogg"):
    proc = subprocess.run(
        ["python3", "scripts/speechfy-tts.py", text, output],
        capture_output=True, text=True, timeout=60
    )
    if proc.returncode == 0:
        return output
    raise RuntimeError(f"TTS failed: {proc.stderr}")

Hermes Agent (skill integration)

import subprocess
output = "/tmp/response.ogg"
subprocess.run([
    "python3", "scripts/speechfy-tts.py",
    text, output
], check=True)

SSML Cheat Sheet

Speechify supports SSML via the input field. Pass XML as the text argument.

Emotions (``)


  Great news!
  
  Let's analyze calmly.

EmotionEffectTypical use
cheerfulOptimistic, excitedGood news
calmSerene, composedExplanations
brightLight, positiveSubtle irony
warmFriendly, welcomingPersonal chats
assertiveConfident, authoritativeDirect instructions
sadMelancholicSadness
angryIntense, irritatedDiscontent
surprisedAstonishedReactions
energeticDynamic, livelyExcitement
directStraight, no frillsObjective warnings

Prosody (pitch, rate, volume)


  Normal tone.
  5% higher pitch
  Lower and slower
  High and fast

Pitch: percentage (-83% to +100%) or levels (x-low to x-high) Rate: percentage or levels (x-slow to x-fast)

Pauses and Emphasis


  This is very important.
  
  And now this.

SSML Limitations

  • ⚠️ Input limit: 2,000 chars on /v1/audio/speech (including SSML tags)
  • ⚠️ For longer text: use streaming /v1/audio/stream (20,000 chars)
  • ⚠️ Escape special chars: &&amp;, <&lt;, >&gt;

Plans and Limits

TierSpeechifyEdge TTS
Free50K chars/month (hard cap)✅ Unlimited
Starter ($10/mo)1M chars, overage $10/1M✅ Unlimited
Pro ($99/mo)3M chars, overage $8/1M✅ Unlimited

Edge TTS is free and unlimited — always works as fallback.

Multi-platform

Hermes Agent

Use via terminal() or execute_code():

import subprocess
result = terminal(
    f"python3 scripts/speechfy-tts.py {shlex.quote(text)} /tmp/out.ogg"
)

OpenClaw

# Direct invocation
python3 scripts/speechfy-tts.py "Hello" /tmp/out.ogg

# With mcporter (if configured for Speechify MCP)
mcporter call speechify.synthesize text="Hello"

Troubleshooting

"No API key found"

  • Set SPEECHIFY_API_KEY env var, or
  • Add item to Vaultwarden with name matching SPEECHIFY_VAULT_ITEM

"Speechify HTTP 402"

  • Monthly quota exhausted (50K chars on free tier)
  • Script automatically falls back to Edge TTS

"Speechify HTTP 429"

  • Too many concurrent requests (free limit: 3 simultaneous)
  • Wait a few seconds and retry

Edge TTS not working

pip install edge-tts
edge-tts --voice pt-BR-FranciscaNeural --text "test" --write-media /tmp/test.ogg

ffmpeg not found

# Debian/Ubuntu
sudo apt install ffmpeg

# Arch/Manjaro
sudo pacman -S ffmpeg

Related skills

Converts text into speech-ready output for any TTS engine with normalization, prosody, and voice preferences.

58 installs2 stars

Generate speech or audio from text using OATDA's unified audio API. Triggers when the user wants to convert text to speech, create narration, voiceovers, acc...

14 installs

Generate expressive multilingual speech on PoYo / poyo.ai via `https://api.poyo.ai/api/generate/submit`; use for `xai-tts-1`, text-to-speech, voice presets,...

2 installs

MiniMax Text-to-Speech synthesis using the HTTP REST API. Generates high-quality audio from text in 40+ languages with ultra-realistic voices. Use when the u...

1 installs

Generate multilingual, highly natural audio using Gemini 2.5 text-to-speech. 使用 Gemini 2.5 强大的文本转语音能力,生成多语言、高自然度的音频。

61 installs

Use when the user asks for text-to-speech narration or voiceover, accessibility reads, audio prompts, or batch speech generation via the OpenAI Audio API; ru...

37 installs