Voice (STT, TTS, realtime)
Navin supports microphone transcription (STT) on all plans, and a realtime
voice session (STT + TTS + barge-in) on Pro, Ultra, and Team (or when
voice.realtime_enabled is set in settings).
STT (transcription)
Configured under Settings → Voice / transcription providers (Groq Whisper, OpenAI, OpenRouter, AssemblyAI, SiliconFlow, …).
WebSocket: transcribe_audio → transcription_result / transcription_error.
Code: navin/audio/transcription.py, navin/webui/transcription_ws.py,
webui/src/hooks/useVoiceRecorder.ts.
TTS and realtime session
| Piece | Path |
|---|---|
| TTS synthesize | navin/audio/tts.py, navin/audio/tts_registry.py |
| Providers | navin/providers/tts.py (OpenAI / OpenRouter / Groq speech) |
| Config | VoiceConfig in navin/config/schema.py (tts_provider, voice, auto_speak, realtime_enabled) |
| Session WS | navin/webui/voice_session_ws.py |
| WebUI hook | webui/src/hooks/useVoiceSession.ts |
Session messages (summary): voice_session_start, audio chunks,
transcript_partial, tts_audio, voice_session_end.
Barge-in cancels in-progress TTS when the user starts speaking again.
Plan gate
Realtime voice defaults to Pro / Ultra / Team. Free and Plus keep STT only
unless voice.realtime_enabled is enabled locally.
Tests
tests/test_tts.py
Related
- Mobile usage PWA (mic on phone)
- Configuration