How sho-luv/voice works
Voice is a local macOS dictation app: the user triggers recording, speech is transcribed and optionally cleaned up, then text is inserted into the active app. The README also documents model management, settings, transcription history, and the floating status overlay. The supplied excerpts show the input monitor, cleanup logic, model-loading wrapper, and native engine; several app responsibilities are documented but their detailed wiring is not visible, so the graph omits uncertain links.
Main entry points: Voice.swift App controller · SpeechEngine.swift Speech engine wrapper · VoiceEngine.cpp Native ASR
Components 20
Dictation interaction
- Hotkey monitor
Voice.swift - Audio capture
Voice.swift - App controller
Voice.swift - Status overlay
Voice.swift - Text insertion
Voice.swift
Transcription and cleanup
- Speech engine wrapper
SpeechEngine.swift - Native ASR
engine/VoiceEngine.cpp - Whisper / Parakeet
engine/VoiceEngine.cpp - Transcript cleanup
Voice.swift - Native cleanup LLM
engine/VoiceEngine.cpp
Model management
- Model catalog
SpeechEngine.swift - Model downloader
Voice.swift - Local model files
SpeechEngine.swift
App features and storage
- Settings
Voice.swift - UserDefaults
- Transcript history
Voice.swift - Transcript files
Voice.swift
Other components
- User
- Active app
- Hugging Face
Connections 22
- User → Hotkey monitor: presses hotkey
- Hotkey monitor → App controller: signals recording
- App controller → Audio capture: starts / stops
- App controller → Speech engine wrapper: prepares and transcribes
- Audio capture → Speech engine wrapper: provides audio
- Speech engine wrapper → Native ASR: calls native API
- Native ASR → Whisper / Parakeet: runs inference
- App controller → Transcript cleanup: requests cleanup
- Transcript cleanup → Speech engine wrapper: requests LLM rewrite
- Speech engine wrapper → Native cleanup LLM: calls native API
- App controller → Text insertion: inserts transcript
- Text insertion → Active app: injects or pastes
- App controller → Status overlay: updates status
- User → Model downloader: requests download
- Model downloader → Hugging Face: downloads models
- Model downloader → Local model files: saves models
- Model catalog → Local model files: locates and verifies
- Settings → UserDefaults: persists preferences
- User → Settings: configures app
- App controller → Transcript history: saves finished transcript
- Transcript history → Transcript files: writes and searches
- User → Transcript history: browses history