Text-to-speech (TTS)
Mayros può convertire le risposte in uscita in audio utilizzando ElevenLabs, OpenAI o Edge TTS. Funziona ovunque Mayros possa inviare audio; Telegram ottiene una bolla voice-note rotonda.
Servizi supportati
- ElevenLabs (provider primario o fallback)
- OpenAI (provider primario o fallback; usato anche per riepiloghi)
- Edge TTS (provider primario o fallback; usa
node-edge-tts, predefinito quando nessuna chiave API)
Note Edge TTS
Edge TTS utilizza il servizio TTS neurale online di Microsoft Edge tramite la libreria node-edge-tts. È un servizio ospitato (non locale), usa gli endpoint di Microsoft, e non richiede una chiave API. node-edge-tts espone opzioni di configurazione speech e formati output, ma non tutte le opzioni sono supportate dal servizio Edge.
Poiché Edge TTS è un servizio web pubblico senza SLA pubblicato o quota, trattalo come best-effort. Se hai bisogno di limiti garantiti e supporto, usa OpenAI o ElevenLabs. L'API REST Speech di Microsoft documenta un limite audio di 10 minuti per richiesta; Edge TTS non pubblica limiti, quindi assumi limiti simili o inferiori.
Chiavi opzionali
Se vuoi OpenAI o ElevenLabs:
ELEVENLABS_API_KEY(oXI_API_KEY)OPENAI_API_KEY
Edge TTS non richiede una chiave API. Se non vengono trovate chiavi API, Mayros usa per default Edge TTS (a meno che non sia disabilitato tramite messages.tts.edge.enabled=false).
Se sono configurati più provider, il provider selezionato viene usato prima e gli altri sono opzioni fallback.
Il riepilogo automatico usa il summaryModel configurato (o agents.defaults.model.primary), quindi quel provider deve essere autenticato anche se abiliti i riepiloghi.
Link servizi
- Guida OpenAI Text-to-Speech
- Riferimento API Audio OpenAI
- ElevenLabs Text to Speech
- ElevenLabs Authentication
- node-edge-tts
- Formati output Speech Microsoft
È abilitato per impostazione predefinita?
No. Il TTS automatico è disattivato per impostazione predefinita. Abilitalo nella configurazione con messages.tts.auto o per sessione con /tts always (alias: /tts on).
Edge TTS è abilitato per impostazione predefinita una volta che TTS è attivo, ed è usato automaticamente quando non sono disponibili chiavi API OpenAI o ElevenLabs.
Configurazione
La configurazione TTS risiede in messages.tts in mayros.json.
Lo schema completo è in Configurazione Gateway.
Configurazione minima (abilita + provider)
json5{ messages: { tts: { auto: "always", provider: "elevenlabs", }, }, }
OpenAI primario con fallback ElevenLabs
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 primario (nessuna chiave API)
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%", }, }, }, }
Disabilita Edge TTS
json5{ messages: { tts: { edge: { enabled: false, }, }, }, }
Limiti personalizzati + percorso preferenze
json5{ messages: { tts: { auto: "always", maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.mayros/settings/tts.json", }, }, }
Rispondi solo con audio dopo una voice note in arrivo
json5{ messages: { tts: { auto: "inbound", }, }, }
Disabilita riepilogo automatico per risposte lunghe
json5{ messages: { tts: { auto: "always", }, }, }
Poi esegui:
/tts summary off
Note sui campi
auto: modalità TTS automatico (off,always,inbound,tagged).inboundinvia audio solo dopo una voice note in arrivo.taggedinvia audio solo quando la risposta include tag[[tts]].
enabled: toggle legacy (doctor migra questo inauto).mode:"final"(predefinito) o"all"(include risposte strumento/blocco).provider:"elevenlabs","openai", o"edge"(fallback è automatico).- Se
providerè non impostato, Mayros preferisceopenai(se chiave), poielevenlabs(se chiave), altrimentiedge. summaryModel: modello economico opzionale per riepilogo automatico; predefinito aagents.defaults.model.primary.- Accetta
provider/modelo un alias modello configurato.
- Accetta
modelOverrides: permette al modello di emettere direttive TTS (attivo per default).allowProviderpredefinito afalse(cambio provider è opt-in).
maxTextLength: limite rigido per input TTS (caratteri)./tts audiofallisce se superato.timeoutMs: timeout richiesta (ms).prefsPath: override percorso JSON preferenze locali (provider/limite/riepilogo).- I valori
apiKeyfallback a variabili env (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY). elevenlabs.baseUrl: override URL base API ElevenLabs.elevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = normale)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: ISO 639-1 a 2 lettere (es.en,de)elevenlabs.seed: intero0..4294967295(determinismo best-effort)edge.enabled: permette uso Edge TTS (predefinitotrue; nessuna chiave API).edge.voice: nome voce neurale Edge (es.en-US-MichelleNeural).edge.lang: codice lingua (es.en-US).edge.outputFormat: formato output Edge (es.audio-24khz-48kbitrate-mono-mp3).- Vedi formati output Speech Microsoft per valori validi; non tutti i formati sono supportati da Edge.
edge.rate/edge.pitch/edge.volume: stringhe percentuale (es.+10%,-5%).edge.saveSubtitles: scrivi sottotitoli JSON accanto al file audio.edge.proxy: URL proxy per richieste Edge TTS.edge.timeoutMs: override timeout richiesta (ms).
Override guidati da modello (predefinito attivo)
Per impostazione predefinita, il modello può emettere direttive TTS per una singola risposta. Quando messages.tts.auto è tagged, queste direttive sono richieste per attivare l'audio.
Quando abilitato, il modello può emettere direttive [[tts:...]] per sovrascrivere la voce per una singola risposta, più un blocco opzionale [[tts:text]]...[[/tts:text]] per fornire tag espressivi (risata, cue canto, ecc.) che dovrebbero apparire solo nell'audio.
Le direttive provider=... sono ignorate a meno che modelOverrides.allowProvider: true.
Esempio payload risposta:
Ecco qui.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](ride) Leggi la canzone ancora una volta.[[/tts:text]]
Chiavi direttiva disponibili (quando abilitate):
provider(openai|elevenlabs|edge, richiedeallowProvider: true)voice(voce OpenAI) ovoiceId(ElevenLabs)model(modello TTS OpenAI o id modello ElevenLabs)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
Disabilita tutti gli override modello:
json5{ messages: { tts: { modelOverrides: { enabled: false, }, }, }, }
Allowlist opzionale (abilita cambio provider mantenendo altre manopole configurabili):
json5{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false, }, }, }, }
Preferenze per utente
I comandi slash scrivono override locali in prefsPath (predefinito: ~/.mayros/settings/tts.json, override con MAYROS_TTS_PREFS o messages.tts.prefsPath).
Campi memorizzati:
enabledprovidermaxLength(soglia riepilogo; default 1500 caratteri)summarize(defaulttrue)
Questi sovrascrivono messages.tts.* per quell'host.
Formati output (fissi)
- Telegram: Voice note Opus (
opus_48000_64da ElevenLabs,opusda OpenAI).- 48kHz / 64kbps è un buon compromesso voice-note e richiesto per la bolla rotonda.
- Altri canali: MP3 (
mp3_44100_128da ElevenLabs,mp3da OpenAI).- 44.1kHz / 128kbps è il bilanciamento default per chiarezza speech.
- Edge TTS: usa
edge.outputFormat(defaultaudio-24khz-48kbitrate-mono-mp3).node-edge-ttsaccetta unoutputFormat, ma non tutti i formati sono disponibili dal servizio Edge.- I valori formato output seguono i formati output Speech Microsoft (incluso Ogg/WebM Opus).
- Telegram
sendVoiceaccetta OGG/MP3/M4A; usa OpenAI/ElevenLabs se hai bisogno di voice note Opus garantite. - Se il formato output Edge configurato fallisce, Mayros riprova con MP3.
I formati OpenAI/ElevenLabs sono fissi; Telegram si aspetta Opus per UX voice-note.
Comportamento TTS automatico
Quando abilitato, Mayros:
- salta TTS se la risposta contiene già media o una direttiva
MEDIA:. - salta risposte molto brevi (< 10 caratteri).
- riassume risposte lunghe quando abilitato usando
agents.defaults.model.primary(osummaryModel). - allega l'audio generato alla risposta.
Se la risposta supera maxLength e il riepilogo è disattivato (o nessuna chiave API per il modello riepilogo), l'audio viene saltato e viene inviata la normale risposta testo.
Diagramma flusso
Risposta -> TTS abilitato?
no -> invia testo
yes -> ha media / MEDIA: / breve?
yes -> invia testo
no -> lunghezza > limite?
no -> TTS -> allega audio
yes -> riepilogo abilitato?
no -> invia testo
yes -> riassumi (summaryModel o agents.defaults.model.primary)
-> TTS -> allega audio
Uso comando slash
C'è un singolo comando: /tts.
Vedi Comandi slash per dettagli abilitazione.
Nota Discord: /tts è un comando Discord integrato, quindi Mayros registra /voice come comando nativo lì. Il testo /tts ... funziona ancora.
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Ciao da Mayros
Note:
- I comandi richiedono un mittente autorizzato (regole allowlist/owner si applicano ancora).
commands.texto registrazione comando nativo deve essere abilitata.off|always|inbound|taggedsono toggle per sessione (/tts onè un alias per/tts always).limitesummarysono memorizzati nelle preferenze locali, non nella configurazione principale./tts audiogenera una risposta audio una tantum (non attiva TTS).
Strumento agente
Lo strumento tts converte testo in speech e restituisce un percorso MEDIA:. Quando il risultato è compatibile con Telegram, lo strumento include [[audio_as_voice]] così Telegram invia una bolla voce.
RPC Gateway
Metodi Gateway:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers