Text-to-Speech (TTS)
Mayros kann ausgehende Antworten mit ElevenLabs, OpenAI oder Edge TTS in Audio umwandeln. Es funktioniert überall, wo Mayros Audio senden kann; Telegram erhält eine runde Voice-Note-Blase.
Unterstützte Services
- ElevenLabs (primärer oder Fallback-Provider)
- OpenAI (primärer oder Fallback-Provider; wird auch für Zusammenfassungen verwendet)
- Edge TTS (primärer oder Fallback-Provider; verwendet
node-edge-tts, Standard wenn keine API-Keys)
Edge TTS-Hinweise
Edge TTS verwendet den Online-Neural-TTS-Service von Microsoft Edge via der node-edge-tts-
Bibliothek. Es ist ein gehosteter Service (nicht lokal), verwendet Microsoft's Endpoints und benötigt
keinen API-Key. node-edge-tts exponiert Speech-Konfigurationsoptionen und
Output-Formate, aber nicht alle Optionen werden vom Edge-Service unterstützt.
Da Edge TTS ein öffentlicher Webservice ohne veröffentlichtes SLA oder Quote ist, behandeln Sie es als Best-Effort. Wenn Sie garantierte Limits und Support benötigen, verwenden Sie OpenAI oder ElevenLabs. Microsoft's Speech REST API dokumentiert ein 10-Minuten-Audio-Limit pro Request; Edge TTS veröffentlicht keine Limits, nehmen Sie also ähnliche oder niedrigere Limits an.
Optionale Keys
Wenn Sie OpenAI oder ElevenLabs möchten:
ELEVENLABS_API_KEY(oderXI_API_KEY)OPENAI_API_KEY
Edge TTS benötigt keinen API-Key. Wenn keine API-Keys gefunden werden, verwendet Mayros standardmäßig
Edge TTS (außer deaktiviert via messages.tts.edge.enabled=false).
Wenn mehrere Provider konfiguriert sind, wird der ausgewählte Provider zuerst verwendet und die anderen sind Fallback-Optionen.
Auto-Summary verwendet das konfigurierte summaryModel (oder agents.defaults.model.primary),
sodass dieser Provider ebenfalls authentifiziert sein muss, wenn Sie Zusammenfassungen aktivieren.
Service-Links
- OpenAI Text-to-Speech-Leitfaden
- OpenAI Audio-API-Referenz
- ElevenLabs Text to Speech
- ElevenLabs-Authentifizierung
- node-edge-tts
- Microsoft Speech-Output-Formate
Ist es standardmäßig aktiviert?
Nein. Auto-TTS ist standardmäßig aus. Aktivieren Sie es in der Config mit
messages.tts.auto oder pro Session mit /tts always (Alias: /tts on).
Edge TTS ist standardmäßig aktiviert, sobald TTS an ist, und wird automatisch verwendet, wenn keine OpenAI- oder ElevenLabs-API-Keys verfügbar sind.
Config
TTS-Config befindet sich unter messages.tts in mayros.json.
Vollständiges Schema in Gateway-Konfiguration.
Minimale Config (aktivieren + Provider)
json5{ messages: { tts: { auto: "always", provider: "elevenlabs", }, }, }
OpenAI primär mit ElevenLabs-Fallback
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 primär (kein 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 deaktivieren
json5{ messages: { tts: { edge: { enabled: false, }, }, }, }
Benutzerdefinierte Limits + Prefs-Pfad
json5{ messages: { tts: { auto: "always", maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.mayros/settings/tts.json", }, }, }
Nur mit Audio antworten nach eingehender Voice-Note
json5{ messages: { tts: { auto: "inbound", }, }, }
Auto-Summary für lange Antworten deaktivieren
json5{ messages: { tts: { auto: "always", }, }, }
Dann ausführen:
/tts summary off
Hinweise zu Feldern
auto: Auto-TTS-Modus (off,always,inbound,tagged).inboundsendet nur Audio nach einer eingehenden Voice-Note.taggedsendet nur Audio, wenn die Antwort[[tts]]-Tags enthält.
enabled: Legacy-Toggle (Doctor migriert dies zuauto).mode:"final"(Standard) oder"all"(enthält Tool/Block-Antworten).provider:"elevenlabs","openai"oder"edge"(Fallback ist automatisch).- Wenn
providernicht gesetzt ist, bevorzugt Mayrosopenai(wenn Key), dannelevenlabs(wenn Key), andernfallsedge. summaryModel: optionales günstiges Modell für Auto-Summary; standardmäßigagents.defaults.model.primary.- Akzeptiert
provider/modeloder einen konfigurierten Modell-Alias.
- Akzeptiert
modelOverrides: erlaubt dem Modell, TTS-Direktiven auszugeben (standardmäßig an).allowProviderist standardmäßigfalse(Provider-Switching ist opt-in).
maxTextLength: Hard-Cap für TTS-Input (Zeichen)./tts audioschlägt fehl, wenn überschritten.timeoutMs: Request-Timeout (ms).prefsPath: überschreibt den lokalen Prefs-JSON-Pfad (Provider/Limit/Summary).apiKey-Werte fallen auf Env-Vars zurück (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY).elevenlabs.baseUrl: überschreibt ElevenLabs-API-Base-URL.elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = normal)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: 2-Buchstaben-ISO 639-1 (z.B.en,de)elevenlabs.seed: Integer0..4294967295(Best-Effort-Determinismus)edge.enabled: erlaubt Edge TTS-Nutzung (Standardtrue; kein API-Key).edge.voice: Edge-Neural-Voice-Name (z.B.en-US-MichelleNeural).edge.lang: Sprachcode (z.B.en-US).edge.outputFormat: Edge-Output-Format (z.B.audio-24khz-48kbitrate-mono-mp3).- Siehe Microsoft Speech-Output-Formate für gültige Werte; nicht alle Formate werden von Edge unterstützt.
edge.rate/edge.pitch/edge.volume: Prozent-Strings (z.B.+10%,-5%).edge.saveSubtitles: schreibt JSON-Untertitel neben die Audio-Datei.edge.proxy: Proxy-URL für Edge TTS-Requests.edge.timeoutMs: Request-Timeout-Override (ms).
Modell-gesteuerte Overrides (standardmäßig an)
Standardmäßig kann das Modell TTS-Direktiven für eine einzelne Antwort ausgeben.
Wenn messages.tts.auto tagged ist, sind diese Direktiven erforderlich, um Audio auszulösen.
Wenn aktiviert, kann das Modell [[tts:...]]-Direktiven ausgeben, um die Stimme
für eine einzelne Antwort zu überschreiben, plus einen optionalen [[tts:text]]...[[/tts:text]]-Block, um
expressive Tags bereitzustellen (Lachen, Gesangs-Cues, etc.), die nur im
Audio erscheinen sollen.
provider=...-Direktiven werden ignoriert, außer wenn modelOverrides.allowProvider: true.
Beispiel-Reply-Payload:
Bitte sehr.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](lacht) Lies das Lied noch einmal.[[/tts:text]]
Verfügbare Direktiven-Keys (wenn aktiviert):
provider(openai|elevenlabs|edge, erfordertallowProvider: true)voice(OpenAI-Stimme) odervoiceId(ElevenLabs)model(OpenAI TTS-Modell oder ElevenLabs-Modell-ID)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Alle Modell-Overrides deaktivieren:
json5{ messages: { tts: { modelOverrides: { enabled: false, }, }, }, }
Optionale Allowlist (Provider-Switching aktivieren, während andere Knöpfe konfigurierbar bleiben):
json5{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false, }, }, }, }
Pro-Benutzer-Präferenzen
Slash-Befehle schreiben lokale Overrides in prefsPath (Standard:
~/.mayros/settings/tts.json, überschreiben mit MAYROS_TTS_PREFS oder
messages.tts.prefsPath).
Gespeicherte Felder:
enabledprovidermaxLength(Summary-Schwelle; Standard 1500 Zeichen)summarize(Standardtrue)
Diese überschreiben messages.tts.* für diesen Host.
Output-Formate (fest)
- Telegram: Opus Voice-Note (
opus_48000_64von ElevenLabs,opusvon OpenAI).- 48kHz / 64kbps ist ein guter Voice-Note-Tradeoff und erforderlich für die runde Blase.
- Andere Channels: MP3 (
mp3_44100_128von ElevenLabs,mp3von OpenAI).- 44.1kHz / 128kbps ist die Standard-Balance für Sprachklarheit.
- Edge TTS: verwendet
edge.outputFormat(Standardaudio-24khz-48kbitrate-mono-mp3).node-edge-ttsakzeptiert einoutputFormat, aber nicht alle Formate sind vom Edge-Service verfügbar.- Output-Format-Werte folgen Microsoft Speech-Output-Formaten (inkl. Ogg/WebM Opus).
- Telegram
sendVoiceakzeptiert OGG/MP3/M4A; verwenden Sie OpenAI/ElevenLabs, wenn Sie garantierte Opus-Voice-Notes benötigen. - Wenn das konfigurierte Edge-Output-Format fehlschlägt, versucht Mayros es mit MP3 erneut.
OpenAI/ElevenLabs-Formate sind fest; Telegram erwartet Opus für Voice-Note-UX.
Auto-TTS-Verhalten
Wenn aktiviert, macht Mayros:
- überspringt TTS, wenn die Antwort bereits Medien oder eine
MEDIA:-Direktive enthält. - überspringt sehr kurze Antworten (< 10 Zeichen).
- fasst lange Antworten zusammen, wenn aktiviert, unter Verwendung von
agents.defaults.model.primary(odersummaryModel). - hängt das generierte Audio an die Antwort an.
Wenn die Antwort maxLength überschreitet und Summary aus ist (oder kein API-Key für das
Summary-Modell), wird Audio
übersprungen und die normale Text-Antwort gesendet.
Flussdiagramm
Antwort -> TTS aktiviert?
nein -> Text senden
ja -> hat Medien / MEDIA: / kurz?
ja -> Text senden
nein -> Länge > Limit?
nein -> TTS -> Audio anhängen
ja -> Summary aktiviert?
nein -> Text senden
ja -> zusammenfassen (summaryModel oder agents.defaults.model.primary)
-> TTS -> Audio anhängen
Slash-Befehls-Nutzung
Es gibt einen einzigen Befehl: /tts.
Siehe Slash-Befehle für Aktivierungsdetails.
Discord-Hinweis: /tts ist ein eingebauter Discord-Befehl, sodass Mayros
/voice als nativen Befehl dort registriert. Text /tts ... funktioniert weiterhin.
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hallo von Mayros
Hinweise:
- Befehle erfordern einen autorisierten Absender (Allowlist/Owner-Regeln gelten weiterhin).
commands.textoder native Befehlsregistrierung muss aktiviert sein.off|always|inbound|taggedsind Pro-Session-Toggles (/tts onist ein Alias für/tts always).limitundsummarywerden in lokalen Prefs gespeichert, nicht in der Haupt-Config./tts audiogeneriert eine einmalige Audio-Antwort (schaltet TTS nicht an).
Agent-Tool
Das tts-Tool konvertiert Text zu Sprache und gibt einen MEDIA:-Pfad zurück. Wenn das
Ergebnis Telegram-kompatibel ist, enthält das Tool [[audio_as_voice]], sodass
Telegram eine Voice-Blase sendet.
Gateway RPC
Gateway-Methoden:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers