Show HN: Qwen Scribe – local transcription and dictation for Apple Silicon
Qwen Scribe: Local Transcription & Dictation for Apple Silicon
Qwen Scribe is a privacy-focused tool designed for Apple Silicon Macs, providing system-wide dictation and audio/video transcription. It leverages the Qwen3-ASR model via mlx-qwen3-asr, utilizing the Mac's Metal GPU for high-performance, local processing.
[!IMPORTANT] Currently, releases are provided as source-only. Because the app builds are
not yet notarized or signed with a Developer ID, users must compile the application locally. Official signed binaries are slated for the release.
🛠️ System Architecture
The following diagram illustrates how Qwen Scribe handles audio input to produce text:
✨ Key Highlights
- Local Transcription: A dedicated web interface allowing you to drag-and-drop media files for transcription.
- Model Flexibility:
1.7Bmodel: Optimized for high accuracy.0.6Bmodel: Optimized for maximum speed.
- Advanced Controls: Includes automatic language detection, the ability to force a specific language, vocabulary hints, word-level timestamps, and
.srtfile exports. - Transcript Management: A local history system that allows you to reopen, delete specific entries, or wipe all history.
- System-Wide Dictation:
- Action: Hold the right Command () key Speak Release.
- Result: The audio is transcribed locally and pasted directly at your cursor.
- User Experience: A non-intrusive HUD displays current states:
Listening,Transcribing,Success, orFailure. - Security: The API is restricted to
localhostwith strict browser-origin and host checks.
📋 Requirements
To run Qwen Scribe, your system must meet the following specifications:
| Requirement | Specification |
|---|---|
| Hardware | Apple Silicon Mac |
| OS | macOS 14+ (required by MLX) |
| Python | Native version |
| Dependencies | ffmpeg (for non-WAV files) & Xcode Command Line Tools |
Memory Footprint
The unified memory requirements are approximately:
- 1.7B Model:
- 0.6B Model: (Note: These figures exclude general application overhead.)
🚀 Installation and Setup
Building the App
Follow these steps to get the application running from the source:
- Clone the repository or download the source.
- Install dependencies and build the app:
make app
open "dist/Qwen Scribe.app"
- (Optional) Move
Qwen Scribe.appfromdist/to your/Applicationsfolder.
Note: On first launch, the app will automatically download the necessary model weights and Python dependencies. If macOS Gatekeeper blocks the app, right-click the binary and select Open.
Alternative: Terminal Execution
If you prefer not to use the .app wrapper:
./run.sh
# Then navigate to http://127.0.0.1:8990 in your browser
🔐 Permissions & Privacy
For the system-wide dictation feature to function, you must grant the following permissions in System Settings Privacy & Security:
- Microphone: To capture your voice while the right Command key is held.
- Input Monitoring: To detect the modifier key while other apps are in focus.
- Accessibility: To programmatically paste the transcribed text into the active field.
Warning: If Accessibility is not granted, the app will simply copy the text to your clipboard and report a failure instead of pasting.
Data Storage Locations
All data remains on your device:
| Data Type | Path |
|---|---|
| Transcripts | ~/Library/Application Support/Qwen Scribe/transcripts |
| Runtime Data | ~/Library/Application Support/Qwen Scribe/runtime |
| Logs | ~/Library/Logs/QwenScribe.log |
| Models | ~/.cache/huggingface/hub |
Note: Transcripts are stored as unencrypted JSON. Standard deletion is not a secure erase.
⚙️ Configuration
The server.py script recognizes the following environment variables:
| Variable | Default Value | Description |
|---|---|---|
QWEN_SCRIBE_DATA_DIR | ~/Library/Application Support/Qwen Scribe | History storage path |
QWEN_SCRIBE_MODEL_DIR | ./models | Path for local quantized models |
QWEN_SCRIBE_PORT | 8990 | Local server port (only for ./run.sh) |
[!TIP] The Mac app and dictation helper are hardcoded to
127.0.0.1:8990. Changing the port via environment variables will break the dictation helper's connection.
🛠️ Development
To contribute or test the software, use the following commands:
# Initialize virtual environment and install locked dependencies
make setup
# Execute lightweight API tests
make test