A native macOS menu bar app for voice transcription using local AI (WhisperKit) with optional cloud API fallback.
- Global Hotkeys: Configurable system-wide hotkeys for triggering recording
- Two Recording Modes: Push-to-talk (hold to record) or Toggle (press to start/stop)
- Local Transcription: Uses WhisperKit for on-device transcription with Apple Silicon optimization
- Cloud Fallback: Optional OpenAI Whisper API integration for fallback or as primary engine
- Visual Overlay: Floating recording indicator with audio waveform visualization
- Direct Text Insertion: Transcribed text is automatically typed at your cursor position
- macOS 14.0 (Sonoma) or later
- Apple Silicon Mac (M1/M2/M3) recommended for best WhisperKit performance
- Microphone access permission
- Accessibility permission (for global hotkeys and text insertion)
cd Overwhisper
swift build- Open the project folder in Xcode
- Select Product > Build (⌘B)
- Run with Product > Run (⌘R)
- Launch the app - Overwhisper will appear in your menu bar
- Grant Permissions:
- Microphone: Required for audio recording
- Accessibility: Required for global hotkeys and text insertion
- Configure Hotkey: Open Settings (⌘,) and set your preferred hotkey
- Choose Model: Select a WhisperKit model size based on your needs:
- Tiny/Base: Fastest, lower accuracy
- Small: Good balance
- Medium/Large: Best accuracy, slower
- Focus on any text input field (Notes, browser, IDE, etc.)
- Press your configured hotkey
- Speak clearly
- Release the hotkey (push-to-talk) or press again (toggle mode)
- Wait for transcription
- Text is automatically inserted at your cursor
- Hotkey: Global keyboard shortcut to trigger recording
- Mode: Push-to-talk or Toggle
- Overlay Position: Where the recording indicator appears
- Start at Login: Auto-launch on system startup
- Engine: WhisperKit (local) or OpenAI API
- Model: WhisperKit model size (tiny to large)
- Language: Auto-detect or specify language
- Cloud Fallback: Use OpenAI API if local transcription fails
- Sound: Play completion sound
- Notifications: Show error notifications
Overwhisper/
├── App/
│ ├── OverwhisperApp.swift # Entry point
│ ├── AppDelegate.swift # Menu bar and coordination
│ └── AppState.swift # Global state management
├── Audio/
│ └── AudioRecorder.swift # AVAudioEngine recording
├── Hotkey/
│ └── HotkeyManager.swift # Global hotkey handling
├── Transcription/
│ ├── TranscriptionEngine.swift # Protocol
│ ├── WhisperKitEngine.swift # Local AI transcription
│ ├── OpenAIEngine.swift # Cloud API transcription
│ └── ModelManager.swift # Model downloading/management
├── Output/
│ └── TextInserter.swift # Clipboard + paste insertion
└── UI/
├── OverlayWindow.swift # Floating NSPanel
├── OverlayView.swift # SwiftUI recording animation
└── SettingsView.swift # Settings interface
- WhisperKit - Local Whisper transcription
- HotKey - Global hotkey handling
- All audio processing happens locally on your device when using WhisperKit
- Audio files are temporary and deleted after transcription
- OpenAI API key is stored securely in macOS Keychain
- No data is collected or transmitted except when using the OpenAI API option
MIT License