Show HN:Qwen Scribe – 适用于 Apple Silicon 的本地转录与听写工具
Show HN: Qwen Scribe – local transcription and dictation for Apple Silicon

原始链接: https://github.com/VladUZH/qwen-scribe

**Qwen Scribe** 是一款专为 Apple Silicon Mac 设计的私密本地转录与全局听写工具。它基于 Apple 的 MLX 框架运行 Qwen3-ASR 模型,所有音视频处理均在本地 GPU 上完成,无需账户、API 密钥或云服务。 **主要功能:** * **本地处理:** 音频、视频和转录文本绝不会离开您的 Mac。 * **全局听写:** 按住右侧 Command 键即可调出全局悬浮窗,将语音转录并直接粘贴到任何应用程序中。 * **灵活的界面:** 提供本地网页界面,支持拖拽媒体文件转录、SRT 字幕导出及历史记录管理。 * **性能表现:** 支持 0.6B(注重速度)和 1.7B(注重准确性)两种模型。 **当前状态:** 目前版本为 v0.1.0-beta.1。该软件仅提供源码,用户需使用提供的 `make` 命令在本地构建应用。要求 macOS 14+、Python 3.12+ 及 `ffmpeg` 环境。 **隐私保护:** 项目秉持“本地优先”原则,确保数据完全由用户掌控。听写助手功能需要必要的系统权限(麦克风、辅助功能和输入监听)。Qwen Scribe 是一个独立的开源项目(采用 Apache-2.0 许可证),与阿里云或 Apple 无关联。

```Hacker News 最新 | 过往 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Show HN: Qwen Scribe – 适用于 Apple Silicon 的本地转录与听写工具 (github.com/vladuzh) 10 分,作者 sidclaw,1 小时前 | 隐藏 | 过往 | 收藏 | 2 条评论 帮助 yuraoak 11 分钟前 | 下一条 [–] 它比 OpenAI 的 Whisper 更好吗? 回复 sidclaw 3 分钟前 | 父评论 | 下一条 [–] 以我的观点来看好得多。我经常需要在嘈杂的环境中录音,Whisper 在这种条件下表现并不理想。此外,Qwen 对语法的尊重程度很高,并且能准确地拆分句子。 回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请 YC | 联系 搜索:```
相关文章

原文

Qwen Scribe app icon

Private, local transcription and system-wide dictation for Apple Silicon.

CI status Latest release Apache-2.0 license macOS 14 or newer on Apple Silicon All processing happens on-device

Qwen Scribe transcribes audio and video with Qwen3-ASR running through mlx-qwen3-asr on the Mac's Metal GPU. There is no account, API key, or Qwen Scribe cloud service. Audio and transcript text stay on the Mac.

Project status: v0.1.0-beta.1. Core transcription, history, and dictation work. Releases are source-only for now: app builds are not yet Developer ID signed or notarized, so you build locally with make app. Signed and notarized binaries are planned for v0.2, see ROADMAP.md. Feedback and careful testing are welcome.

Qwen Scribe interface showing local transcription options, a synthetic transcript, and saved transcript history

The interface above uses synthetic demo text; no private recording or transcript is shown.

  • Drag-and-drop audio and video transcription in a focused local web interface
  • Qwen3-ASR 1.7B for accuracy or 0.6B for speed
  • Automatic language detection, optional forced language, vocabulary hints, word timestamps, and SRT export
  • Automatic local transcript history with reopen, individual delete, and delete-all controls
  • Hold right Command in any text field, speak, then release to transcribe locally and paste at the cursor
  • A non-focus-stealing HUD for Listening, Transcribing, success, and failure states
  • Localhost-only API with Host and browser-origin checks

Qwen Scribe dictation flow: Listening, Transcribing, then Text inserted

  • Apple Silicon Mac
  • macOS 14 or newer, as required by current MLX releases
  • Native Python 3.12 or newer, as required by the pinned NumPy in requirements-lock.txt
  • ffmpeg for non-WAV audio and video: brew install ffmpeg
  • Apple Command Line Tools to build the app from source: xcode-select --install

The 1.7B model needs roughly 3.4 GB of unified memory and the 0.6B model roughly 1.2 GB, in addition to normal application overhead. Model weights are not included in this repository.

Build and run the Mac app

From a downloaded or cloned source directory:

make app
open "dist/Qwen Scribe.app"

The generated app is self-contained except for Python dependencies and model weights, which it installs or downloads on first use. You may move both apps from dist/ to /Applications after building:

  • Qwen Scribe.app starts the server and desktop dictation helper.
  • Stop Qwen Scribe.app stops only processes started by Qwen Scribe.

An app built locally is ad-hoc signed. If Gatekeeper blocks a downloaded build, right-click it and choose Open once. Stable public binaries should be signed with an Apple Developer ID and notarized; see ROADMAP.md.

Server logs are written to ~/Library/Logs/QwenScribe.log.

Then open http://127.0.0.1:8990. The first transcription downloads the selected model once. Subsequent use works offline once dependencies and weights are cached.

Desktop dictation permissions

Desktop dictation starts with the Mac app. On first launch, allow Qwen Scribe in System Settings → Privacy & Security for:

  • Microphone — records while right Command is held
  • Input Monitoring — detects that modifier while another app is active
  • Accessibility — pastes the finished text into the focused field

After changing Input Monitoring or Accessibility, stop and reopen Qwen Scribe. File transcription remains available when these optional permissions are not granted.

The helper watches modifier-change events and reacts only to the right Command key. It snapshots the pasteboard in memory, pastes the transcription, and restores the previous pasteboard if it has not changed. Without Accessibility access it cannot insert text at all, so it leaves the transcript on the clipboard and reports the failure instead of claiming success. See PRIVACY.md for the complete data and permission behavior.

Data Default location
Saved transcripts ~/Library/Application Support/Qwen Scribe/transcripts
Private runtime ~/Library/Application Support/Qwen Scribe/runtime
Diagnostic log ~/Library/Logs/QwenScribe.log
Downloaded models ~/.cache/huggingface/hub

Saved transcripts are readable, unencrypted JSON. Use the history controls to delete one or all. Normal filesystem deletion is not secure erasure, and local backups may retain copies.

These are read by server.py, so they apply to ./run.sh and to the server the Mac app starts:

Variable Default Purpose
QWEN_SCRIBE_DATA_DIR ~/Library/Application Support/Qwen Scribe Where transcript history is stored
QWEN_SCRIBE_MODEL_DIR ./models Where a locally quantized model is looked up
QWEN_SCRIBE_PORT 8990 Port for the local server

QWEN_SCRIBE_PORT only applies when you start the server yourself with ./run.sh. The Mac app and the desktop dictation helper both address 127.0.0.1:8990 directly, so dictation will not find a server on another port.

make setup       # create .venv and install the reviewed dependency lock
make test        # run lightweight API/history tests without model weights
make check       # tests, source compilation, and publication hygiene
make app         # build ad-hoc-signed app bundles in dist/
make package     # create a beta release zip in dist/

make app compiles native/DictationHelper.m as the arm64 bundle executable, embeds the server launcher and tracked sources as signed resources, validates its property lists, signs it, and verifies the result. Keeping the privacy-sensitive recorder as the bundle executable gives macOS one stable app identity for Accessibility, Input Monitoring, and Microphone access. Set CODESIGN_IDENTITY to a Developer ID identity for a release build; notarization is intentionally a separate release-owner step.

Optional 8-bit conversion

For source-based use, a local 8-bit conversion can reduce decoding latency:

source .venv/bin/activate
python quantize_8bit.py
python compare_models.py path/to/representative-recording.m4a

This creates a multi-gigabyte models/ directory that is intentionally ignored by Git. Validate names and numbers on representative recordings before relying on a quantized model.

Browser UI ──localhost──> FastAPI job queue ──> MLX / Qwen3-ASR
                                  │
                                  └──> local JSON transcript history

Right Command ──> native macOS helper ──> temporary WAV ──> same job queue
        focused app <── restored clipboard + Command-V <── transcript

The API serializes GPU jobs to avoid memory contention. Media is staged under a random temporary filename and removed when processing finishes.

Contributing and security

Read CONTRIBUTING.md before proposing changes. Please report vulnerabilities according to SECURITY.md, not in a public issue. The planned release sequence is documented in ROADMAP.md.

Project source and issue tracking live at VladUZH/qwen-scribe.

License and project identity

Qwen Scribe is licensed under Apache-2.0. Third-party licenses and attribution are listed in THIRD_PARTY_NOTICES.md.

Qwen Scribe is an independent community project. It is not affiliated with, endorsed by, or sponsored by Alibaba Cloud, the Qwen team, or Apple Inc. Qwen and other names may be trademarks of their respective owners.

联系我们 contact @ memedata.com