Handy
cjpais/Handy加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你正在写一份技术方案,脑子里有三十页要写出来,但你的手腕不太舒适;或者你在跟海外客户开视频会,对方讲的是带口音的英文,你需要在聊天框里实时记下要点。市面上有一大把语音转文字工具——macOS 自带的听写、讯飞语记、各类输入法语音键——但它们几乎都有同一个前提:你的声音要先离开这台电脑。音频被上传到云端,服务器听写完再把文字吐回来。便利是真实的,代价也是真实的:你没法在断网的会议室里用,没法在不trusted的网络环境里用,也没办法确认自己的语音数据在服务器上被存了多久、会不会被用于模型训练。
Handy 是 2025 年 2 月由开发者 CJ(cjpais)发起的一个开源桌面应用,定位就是把这整条链路彻底搬回本机:按下快捷键 → 说话 → 松手 → 文字直接出现在你正在输入的那个文本框里。全过程离线,不连云。
到 2026 年 10 月,这个项目已经积累了 34,290 star、3,255 个 fork、175 位贡献者,在 Windows、macOS、Linux 三大平台都有正式发行版,并提供 Homebrew Cask 与 winget 安装通道——这在开源语音工具里属于相当扎实的生态位。

2023 到 2024 年,Whisper 开源让「本地语音识别」第一次变得人人可及。但当时能用的本地方案要么是给工程师准备的命令行工具,要么是各家 App 自己的封闭实现——普通用户想用,门槛依然很高。Whisper.cpp 让模型可以在笔记本上跑起来,Silero VAD 让「什么时候该开始转写」这个问题有了轻量级答案,但把这些零件拼成一个跨平台、带全局快捷键、能自动把文字贴进任意输入框的日常工具,几乎没有现成方案。
Handy 的出发点正是这个空白。它的作者在项目主页上写下了四条准则,条条直指当时语音转写工具的痛点:

有意思的是,为了支撑「可扩展」,作者后来把模型推理层单独拆了出来,做成了 transcribe.cpp(C/C++,跑在 ggml 运行时上),目前已经支持 16 个模型家族、60 多个变体,并提供 Metal、Vulkan、CUDA 三种 GPU 后端。Handy 本体则成为这个推理引擎最成熟的应用外壳。
如果把传统输入法想象成一位「必须先打电话问一下云端服务器」的秘书,Handy 更像你自己桌面上的一只本地速记员:你按一下它的开关,它竖起耳朵;你说完,它在本机用一本随身词典(Whisper / Parakeet 这类离线模型)当场把话写下来,然后主动把字塞进你正在用的那个输入框。
这里有三个关键设计决定了它好用:
模型矩阵是 Handy 最厚的一层资产。 官方维护的模型目录覆盖了当前几乎所有主流 ASR 家族:Whisper 全系列(base / small / medium / large-v2 / large-v3 / large-v3-turbo,支持 99+ 语言与翻译)、NVIDIA Parakeet(CPU 优化、自动语种识别、25 种欧洲语言)、Breeze ASR(台湾国语优化、支持中英混合)、SenseVoice、Moonshine(仅 0.03-0.28GB,体积最小的选择)、Granite Speech、Canary、GigaAM、Qwen3-ASR、Voxtral 等。官方还专门搭建了一个 WER 基准榜(models.handy.computer),用同一段音频横向对比 57 个模型的字错率与 CPU/GPU 加速倍率——这对要按场景选型的人非常实用。
硬件门槛分两档。 Whisper 系列在有 GPU 时可走 Metal(macOS)或 Vulkan(Windows/Linux)加速;Parakeet、Canary、Moonshine、SenseVoice、GigaAM 目前纯 CPU 运行,官方标注 GPU 加速「即将支持」。这意味着一台没有独显的旧笔记本也能跑得动,只是速度慢一些。
架构上,Handy 是一次教科书式的 Tauri 2.x 落地:
managers/(audio / model / transcription / history 四大核心管理器)、audio_toolkit/(录音 sink、VAD、音频分块、语言识别)、engine_supervisor/(推理进程协议与 worker)、shortcut/(全局快捷键)、paste_tx/(macOS / Windows 双平台文字注入)、commands/(Tauri IPC 暴露给前端)、helpers/、catalog/(模型目录)、memory.rs(glibc 分配器调优)。src/components、src/hooks、src/stores、src/overlay(录音悬浮窗)、src/i18n(i18next 国际化)。src-tauri/src/swift/ 是 macOS 原生 Swift 桥接;Windows 侧有专属 webview2-com、winreg 处理;src-tauri/build.rs 长达 24KB,承担了大量平台相关的构建编排;Nix flake(flake.nix)用于 Linux 可复现构建。几个能看出「认真做」的细节:Rust 侧 memory.rs 专门修复了 glibc 动态 mmap 阈值导致的内存泄漏(实测每 2 分钟听写残留约 15MB,修复后降到 0.5MB);secure_input.rs 处理 macOS 密码框的安全事件输入(Secure Event Input)会让全局快捷键失效的问题,通过 Carbon 路径影子注册做兜底;cli.rs 基于 clap 提供 --toggle-transcription、--cancel、--start-hidden、--no-tray 等命令行开关,可以接入 Raycast 等工具链;官方还维护了 Raycast 扩展(社区贡献)。
可选的 LLM 后处理:如果你接上自己的 OpenAI 兼容端点,Handy 可以在转写后做润色、改格式。llm_client.rs 里针对不同厂商做了细致适配——DeepSeek 用 thinking:{type:"disabled"},OpenRouter 用嵌套 reasoning:{exclude:true},不认识的端点先用通用 reasoning_effort,被拒了再去掉重试。这部分默认是你自配端点,不强制。
普通用户路线(推荐):从 handy.computer 或 GitHub Releases 下载对应平台的安装包,macOS 用 brew install --cask handy,Windows 用 winget install cjpais.Handy,Debian/Ubuntu 用 sudo apt install ./Handy_*.deb。装完授予麦克风与辅助功能权限,在设置里挑个顺手的快捷键(默认是按住式,也可切换为点按式),选好模型,首次使用时模型会自动下载。整个过程 5-15 分钟。
开发者路线:需要 Rust(最新 stable)、Bun、CMake,以及对应平台的音频开发库;bun install 后 bun run tauri dev 起开发环境,bun run tauri build 出包。开发环境还要额外准备 Silero VAD 模型(官方给了 HuggingFace 直链)。项目的 AGENTS.md 和 BUILD.md 写得相当细,CI 上有 build、test、code-quality、playwright、nix-check、release 六条流水线。
已知限制(README 里作者自己列的,很少见这么坦诚):macOS 上蓝牙耳麦麦克风录音时可能短暂降低播放音质;含 fn/Globe 键的快捷键只在苹果自家键盘上生效(这是 USB HID 规范限制,非项目缺陷);Linux 下文字注入依赖 xdotool 一类工具,稳定性弱于 macOS/Windows。
第一,安装包渠道的所有权不统一。 Homebrew Cask 和 winget 包由社区维护,官方明确声明「不由 Handy 开发者维护」——对普通用户来说,这是一个需要注意的信任边界。
第二,模型下载的体验仍偏重。 首次使用要下载 0.2GB 到 1.6GB 不等的模型文件,模型目录托管在 handy-computer 的 HuggingFace 与自有 blob 存储上;如果 blob 域名将来失效,旧版本用户的模型下载会受影响。
第三,测试覆盖明显偏薄。 整个仓库的自动化测试只有 tests/app.spec.ts 一个 Playwright 用例加上少量 Bun 单元测试,Rust 后端没有系统性的 cargo test 覆盖率统计。一个涉及音频采集、跨平台快捷键、系统级文字注入、GPU 后端的项目,测试密度理应更高——这也是「能跑」与「能放心用」之间的差距所在。
第四,品牌与代码分离。 源码是 MIT,但 Handy 这个名字、Logo、图标属于品牌资产,官方要求非官方分支必须换自己的品牌,不得暗示官方背书。
第五,GPU 支持仍不均衡。 非 Whisper 系模型目前只能跑 CPU,用户若期待 Parakeet 也能吃到显卡红利,只能等官方排期。
Handy 代表的是**「端侧 AI 工具」这条明确的技术路线**:把识别能力压进本地运行时(transcribe.cpp + ggml),把模型资产放在公开托管上(GGUF 量化格式,体积小、跨平台),把应用层做成开箱即用的安装包。这三件事单独看都不稀奇,凑在一起就构成了一个目前体验最完整的开源本地听写方案。
从 2025 年 2 月创建至今不到两年、34k star、175 位贡献者、十余个模型家族的持续扩张——这个项目的增长速度,本身就是市场对「语音数据不出本机」这类需求投票的结果。Simon Willison 式的开发者工具哲学在语音领域正在被复现:你需要的不是又一个把数据交给别人的订阅服务,而是把能力装进自己电脑里的那个程序。

对于企业内部场景——涉密会议录音、离线环境、批量语音转写、或者单纯想把说话内容接到自有脚本里(--toggle-transcription 天然适合做自动化)——Handy 提供了比商业云服务更可控的一条路。配合 transcribe.cpp 作为独立库使用,还能把它嵌进你自己的产品。