Transcription engines are selected by transcription.engine in ~/.whisper/config.toml, the macOS Settings app, the menu bar, or wh engine <name>. Engines are registered in src/whisper_voice/engines/__init__.py. Non-selected engines must stay lazy and must not load weights at startup.

Parakeet-TDT v3

Parakeet-TDT v3 is the default. It runs in-process through MLX, uses the mlx-community/parakeet-tdt-0.6b-v3 checkpoint, supports English plus 24 European languages, and handles long audio with overlapping chunks.

Qwen3-ASR

Qwen3-ASR runs in-process through a community-maintained MLX conversion and runtime, not Qwen’s official PyTorch stack. It uses model-side language detection and supports long audio through a large internal chunk duration. The mlx-community/Qwen3-ASR-1.7B-bf16 variant is the higher-quality default. Choose mlx-community/Qwen3-ASR-0.6B-bf16 when lower memory use and latency matter more than maximum recognition quality. Settings and wh config expose both variants; the selected snapshot downloads before the engine switches and then runs locally. Both catalog models declare contextual-prompting support. When Vocabulary and qwen3_asr.use_vocabulary are enabled, Local Whisper builds a prompt from each non-empty spoken-to-preferred replacement rule and passes it to Qwen as context and hotwords. The prompt stays in process and is capped at 4,096 characters per request. Custom Qwen model IDs do not receive Vocabulary context unless they are added to the validated model catalog.

WhisperKit

WhisperKit uses a local server at localhost:50060. Install it separately:
You can also install the CLI directly with brew install whisperkit-cli. Settings also exposes WhisperKit presets for large-v3-v20240930_turbo_632MB, large-v3-v20240930_turbo, large-v3-v20240930, small, and base, plus a custom model field.

Apple SpeechTranscriber

apple_speech uses Apple’s SpeechAnalyzer session API with its on-device SpeechTranscriber module. It requires macOS 26, supported Apple hardware, and an explicit locale. The same shared Swift core is used by the iOS app on supported iOS 26 devices. Apple manages language assets through AssetInventory. Local Whisper reports whether the locale is unsupported, available, downloading, or installed; it does not infer readiness from a private file path. Switching prepares the asset before unloading the current engine. Removing the model releases Local Whisper’s reservation and leaves final storage reclamation to the operating system.

Adding an engine

  1. Implement TranscriptionEngine in src/whisper_voice/engines/.
  2. Add an ENGINE_REGISTRY entry in src/whisper_voice/engines/__init__.py.
  3. Declare optional capabilities in the registry and implement their explicit engine protocol. Never pass feature-specific data to an undeclared engine.
  4. Add config schema/defaults if needed.
  5. Verify menu bar, CLI, Settings, startup, capability isolation, and lazy loading.