Skip to content

Voice (STT & TTS)

Ghast does voice both ways — listening (Whisper STT) and talking (Kokoro or Qwen TTS) — and runs both locally on your machine. No audio leaves the device for transcription or synthesis.

Speech-to-Text (Whisper)

Whisper is the local transcription engine. It runs in-process (via @fugood/whisper.node) on either CPU or Metal (Apple Silicon), at 16 kHz with automatic resampling.

Where you'll use it

  • Composer microphone — press the mic in the composer to dictate; transcription streams into the input.
  • Inbound voice messages — Telegram / Discord / WeChat voice clips are transcribed before the agent sees them.
  • Voice skill — explicit recording / transcription invoked from chat.

Settings

Settings → Whisper:

  • Backend — CPU or Metal (Apple Silicon only).
  • Model variant — choose between size/quality tradeoffs.
  • Language — auto-detect or pin a specific language (Whisper supports many; common ones in the picker).

The first time you use voice input, Ghast requests microphone permission and (on demand) downloads the chosen model.

Text-to-Speech (TTS)

Two local engines, picked by you in Settings → TTS.

EngineStrengthsAvailability
Kokoro82M model, runs anywhere, supports multiple languagesAll Macs
Qwen TTS (MLX)Higher quality, especially for MandarinApple Silicon only

Where you'll hear it

  • Voice replies in remote channels — when the user's message was voice, the agent's reply can be synthesised back to voice.
  • Voice skill — explicit playback in chat.
  • Optional read-aloud — for hands-free workflows.

Voice selection

Each engine ships several voices. The picker in Settings → TTS shows what's available; selection is per-engine. Voice changes apply immediately to the next utterance.

Bandwidth and footprint

  • Whisper model files are ~50–500 MB depending on variant; downloaded once.
  • TTS model files are similar in scale.
  • Inference happens on-device. No per-second cost; no network round-trip.

Privacy

  • Audio captured from the microphone is transcribed in-process and discarded. There is no audio log.
  • Inbound voice clips from messaging bridges are transcribed and stored only as text in conversation history (unless the original message URL is also retained by the bridge).
  • TTS output is rendered in-memory and either played directly or sent to the remote channel; no audio file is persisted unless you ask for one.

Failure modes

SymptomLikely causeAction
Mic input failsPermission not grantedSystem Settings → Privacy & Security → Microphone
Transcription quality is poorWrong language pinned, low-quality model variantSettings → Whisper → switch to a larger variant or auto-detect language
TTS voice sounds wrong on IntelQwen is selected but not availableSettings → TTS → switch to Kokoro
Voice in Telegram is missingThe Telegram bridge isn't configured for voice IOSettings → Channels → Telegram, enable voice