Text-to-speech (TTS)
Mayros ElevenLabs, OpenAI या Edge TTS का उपयोग करके outbound replies को audio में convert कर सकता है। यह कहीं भी काम करता है जहां Mayros audio भेज सकता है; Telegram को एक round voice-note bubble मिलता है।
समर्थित सेवाएं
- ElevenLabs (primary या fallback provider)
- OpenAI (primary या fallback provider; summaries के लिए भी उपयोग किया जाता है)
- Edge TTS (primary या fallback provider;
node-edge-ttsका उपयोग करता है, कोई API keys नहीं होने पर डिफ़ॉल्ट)
Edge TTS नोट्स
Edge TTS node-edge-tts library के माध्यम से Microsoft Edge की online neural TTS service का उपयोग करता है। यह एक hosted service है (स्थानीय नहीं), Microsoft के endpoints का उपयोग करती है, और
API key की आवश्यकता नहीं है। node-edge-tts speech configuration विकल्प और
output formats को expose करता है, लेकिन सभी विकल्प Edge service द्वारा समर्थित नहीं हैं।
क्योंकि Edge TTS बिना published SLA या quota के एक public web service है, इसे best-effort के रूप में treat करें। यदि आपको guaranteed limits और support की आवश्यकता है, तो OpenAI या ElevenLabs का उपयोग करें। Microsoft की Speech REST API प्रति request 10‑मिनट की audio limit को document करती है; Edge TTS limits publish नहीं करता, इसलिए समान या कम limits मान लें।
वैकल्पिक keys
यदि आप OpenAI या ElevenLabs चाहते हैं:
ELEVENLABS_API_KEY(याXI_API_KEY)OPENAI_API_KEY
Edge TTS को API key की आवश्यकता नहीं है। यदि कोई API keys नहीं मिलते, तो Mayros डिफ़ॉल्ट रूप से
Edge TTS करता है (जब तक कि messages.tts.edge.enabled=false के माध्यम से अक्षम न हो)।
यदि कई providers कॉन्फ़िगर हैं, तो चयनित provider पहले उपयोग किया जाता है और अन्य fallback विकल्प हैं।
Auto-summary कॉन्फ़िगर किए गए summaryModel (या agents.defaults.model.primary) का उपयोग करता है,
इसलिए यदि आप summaries सक्षम करते हैं तो उस provider को भी प्रमाणित किया जाना चाहिए।
Service लिंक
- OpenAI Text-to-Speech guide
- OpenAI Audio API reference
- ElevenLabs Text to Speech
- ElevenLabs Authentication
- node-edge-tts
- Microsoft Speech output formats
क्या यह डिफ़ॉल्ट रूप से सक्षम है?
नहीं। Auto‑TTS डिफ़ॉल्ट रूप से बंद है। इसे कॉन्फ़िगरेशन में
messages.tts.auto या /tts always (alias: /tts on) के साथ प्रति session सक्षम करें।
Edge TTS TTS on होने के बाद डिफ़ॉल्ट रूप से सक्षम है, और स्वचालित रूप से उपयोग किया जाता है जब कोई OpenAI या ElevenLabs API keys उपलब्ध नहीं होते।
कॉन्फ़िगरेशन
TTS कॉन्फ़िगरेशन mayros.json में messages.tts के तहत रहता है।
पूर्ण schema Gateway configuration में है।
न्यूनतम कॉन्फ़िगरेशन (सक्षम + provider)
json5{ messages: { tts: { auto: "always", provider: "elevenlabs", }, }, }
ElevenLabs fallback के साथ OpenAI primary
json5{ messages: { tts: { auto: "always", provider: "openai", summaryModel: "openai/gpt-4.1-mini", modelOverrides: { enabled: true, }, openai: { apiKey: "openai_api_key", model: "gpt-4o-mini-tts", voice: "alloy", }, elevenlabs: { apiKey: "elevenlabs_api_key", baseUrl: "https://api.elevenlabs.io", voiceId: "voice_id", modelId: "eleven_multilingual_v2", seed: 42, applyTextNormalization: "auto", languageCode: "en", voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0, }, }, }, }, }
Edge TTS primary (कोई API key नहीं)
json5{ messages: { tts: { auto: "always", provider: "edge", edge: { enabled: true, voice: "en-US-MichelleNeural", lang: "en-US", outputFormat: "audio-24khz-48kbitrate-mono-mp3", rate: "+10%", pitch: "-5%", }, }, }, }
Edge TTS अक्षम करें
json5{ messages: { tts: { edge: { enabled: false, }, }, }, }
Custom limits + prefs path
json5{ messages: { tts: { auto: "always", maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.mayros/settings/tts.json", }, }, }
केवल inbound voice note के बाद audio reply
json5{ messages: { tts: { auto: "inbound", }, }, }
लंबे replies के लिए auto-summary अक्षम करें
json5{ messages: { tts: { auto: "always", }, }, }
फिर चलाएं:
/tts summary off
फ़ील्ड्स पर नोट्स
auto: auto‑TTS mode (off,always,inbound,tagged)।inboundकेवल inbound voice note के बाद audio भेजता है।taggedकेवल तब audio भेजता है जब reply में[[tts]]tags शामिल हों।
enabled: legacy toggle (doctor इसेautoमें migrate करता है)।mode:"final"(डिफ़ॉल्ट) या"all"(tool/block replies शामिल करता है)।provider:"elevenlabs","openai"या"edge"(fallback automatic है)।- यदि
providerunset है, तो Mayrosopenaiprefer करता है (यदि key), फिरelevenlabs(यदि key), अन्यथाedge। summaryModel: auto-summary के लिए वैकल्पिक cheap model;agents.defaults.model.primaryपर default करता है।provider/modelया configured model alias स्वीकार करता है।
modelOverrides: model को TTS directives emit करने दें (डिफ़ॉल्ट रूप से on)।allowProviderfalseपर default करता है (provider switching opt-in है)।
maxTextLength: TTS input के लिए hard cap (chars)। exceed होने पर/tts audiofail होता है।timeoutMs: request timeout (ms)।prefsPath: local prefs JSON path override करें (provider/limit/summary)।apiKeyvalues env vars (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY) पर fall back करते हैं।elevenlabs.baseUrl: ElevenLabs API base URL override करें।elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = normal)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: 2-letter ISO 639-1 (जैसेen,de)elevenlabs.seed: integer0..4294967295(best-effort determinism)edge.enabled: Edge TTS उपयोग अनुमति दें (डिफ़ॉल्टtrue; कोई API key नहीं)।edge.voice: Edge neural voice name (जैसेen-US-MichelleNeural)।edge.lang: language code (जैसेen-US)।edge.outputFormat: Edge output format (जैसेaudio-24khz-48kbitrate-mono-mp3)।- Valid values के लिए Microsoft Speech output formats देखें; सभी formats Edge द्वारा समर्थित नहीं हैं।
edge.rate/edge.pitch/edge.volume: percent strings (जैसे+10%,-5%)।edge.saveSubtitles: audio file के साथ JSON subtitles लिखें।edge.proxy: Edge TTS requests के लिए proxy URL।edge.timeoutMs: request timeout override (ms)।
Model-driven overrides (डिफ़ॉल्ट on)
डिफ़ॉल्ट रूप से, model एक single reply के लिए TTS directives emit कर सकता है।
जब messages.tts.auto tagged है, तो audio trigger करने के लिए ये directives आवश्यक हैं।
जब enabled हो, model एक single reply के लिए voice override करने के लिए [[tts:...]] directives emit कर सकता है, साथ ही expressive tags (laughter, singing cues, आदि) प्रदान करने के लिए एक वैकल्पिक [[tts:text]]...[[/tts:text]] block जो केवल audio में दिखाई देना चाहिए।
provider=... directives ignore किए जाते हैं जब तक modelOverrides.allowProvider: true न हो।
उदाहरण reply payload:
Here you go.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
उपलब्ध directive keys (जब enabled):
provider(openai|elevenlabs|edge,allowProvider: trueआवश्यक)voice(OpenAI voice) याvoiceId(ElevenLabs)model(OpenAI TTS model या ElevenLabs model id)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
सभी model overrides अक्षम करें:
json5{ messages: { tts: { modelOverrides: { enabled: false, }, }, }, }
वैकल्पिक allowlist (अन्य knobs configurable रखते हुए provider switching सक्षम करें):
json5{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false, }, }, }, }
Per-user preferences
Slash commands prefsPath (default:
~/.mayros/settings/tts.json, MAYROS_TTS_PREFS या
messages.tts.prefsPath से override करें) में local overrides लिखते हैं।
संग्रहीत फ़ील्ड्स:
enabledprovidermaxLength(summary threshold; डिफ़ॉल्ट 1500 chars)summarize(डिफ़ॉल्टtrue)
ये उस host के लिए messages.tts.* को override करते हैं।
Output formats (fixed)
- Telegram: Opus voice note (
opus_48000_64ElevenLabs से,opusOpenAI से)।- 48kHz / 64kbps एक अच्छा voice-note tradeoff है और round bubble के लिए आवश्यक है।
- अन्य channels: MP3 (
mp3_44100_128ElevenLabs से,mp3OpenAI से)।- 44.1kHz / 128kbps speech clarity के लिए डिफ़ॉल्ट balance है।
- Edge TTS:
edge.outputFormat(डिफ़ॉल्टaudio-24khz-48kbitrate-mono-mp3) का उपयोग करता है।node-edge-ttsएकoutputFormatस्वीकार करता है, लेकिन सभी formats Edge service से उपलब्ध नहीं हैं।- Output format values Microsoft Speech output formats (Ogg/WebM Opus सहित) का पालन करते हैं।
- Telegram
sendVoiceOGG/MP3/M4A स्वीकार करता है; guaranteed Opus voice notes के लिए OpenAI/ElevenLabs का उपयोग करें। - यदि configured Edge output format fail होता है, तो Mayros MP3 के साथ retry करता है।
OpenAI/ElevenLabs formats fixed हैं; Telegram voice-note UX के लिए Opus expect करता है।
Auto-TTS व्यवहार
जब सक्षम हो, तो Mayros:
- TTS skip करता है यदि reply में पहले से media या
MEDIA:directive है। - बहुत छोटे replies (< 10 chars) skip करता है।
- सक्षम होने पर
agents.defaults.model.primary(याsummaryModel) का उपयोग करके लंबे replies summarize करता है। - जेनरेट की गई audio को reply में attach करता है।
यदि reply maxLength से अधिक है और summary बंद है (या summary
model के लिए कोई API key नहीं), तो audio
skip है और सामान्य text reply भेजा जाता है।
Flow diagram
Reply -> TTS enabled?
no -> send text
yes -> has media / MEDIA: / short?
yes -> send text
no -> length > limit?
no -> TTS -> attach audio
yes -> summary enabled?
no -> send text
yes -> summarize (summaryModel or agents.defaults.model.primary)
-> TTS -> attach audio
Slash command उपयोग
एक single command है: /tts।
Enablement विवरण के लिए Slash commands देखें।
Discord नोट: /tts एक built-in Discord command है, इसलिए Mayros
/voice को native command के रूप में वहां register करता है। Text /tts ... अभी भी काम करता है।
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from Mayros
नोट्स:
- Commands को एक authorized sender की आवश्यकता है (allowlist/owner नियम अभी भी लागू होते हैं)।
commands.textया native command registration सक्षम होना चाहिए।off|always|inbound|taggedप्रति‑session toggles हैं (/tts on/tts alwaysके लिए alias है)।limitऔरsummarylocal prefs में संग्रहीत हैं, मुख्य कॉन्फ़िगरेशन में नहीं।/tts audioएक one-off audio reply जेनरेट करता है (TTS on नहीं करता)।
Agent tool
tts tool text को speech में convert करता है और एक MEDIA: path लौटाता है। जब
result Telegram-compatible है, तो tool [[audio_as_voice]] शामिल करता है ताकि
Telegram एक voice bubble भेजे।
Gateway RPC
Gateway methods:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers