Skip to content
qqlzfmnPublic

About

高度插件化的 macOS 语音输入法:按住说话,本地/云端 ASR 流式识别 + 润色/翻译插件链,松手注入任意应用(对标 Wispr Flow / Typeless)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

138 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VIME — 高度插件化的 macOS 语音输入法

VIME

按住 Option 说话,VIME 实时将你的语音转成文字,松手即注入任意应用的光标处——支持本地/云端 ASR 自由切换,润色、翻译等后处理模块可任意拼接(对标 Wispr Flow / Typeless)。

特性

  • 全局 push-to-talk:按住 Option 说话,悬浮窗实时显示转写,松手自动注入光标处(辅助功能注入,失败回退剪贴板)
  • 插件化管线:ASR 适配器 + 后处理插件链任意拼接替换,如 ASR → 润色 → 翻译
  • 本地优先:sherpa-onnx(Paraformer-zh-small + Silero VAD 静音分段)离线识别,不依赖网络
  • 云端可选:OpenAI 兼容端点(一个适配器覆盖 DeepSeek / 阿里云 / OpenAI 等)
  • 设置即生效:菜单栏设置窗口——热键预设、ASR 引擎、润色/翻译开关、模型一键下载
  • 权限引导:麦克风/辅助功能缺失时明确提示并跳转系统设置
  • 私密:录音与转写默认全本地,音频不落盘;仅启用云端插件时才上传

架构

双进程:Swift 壳负责系统集成,Python 引擎负责插件化 AI 管线,本地 WebSocket 通信。

┌─ Swift App(壳)──────────────────────────┐
│ 热键 · 音频捕获 · 悬浮窗 · 文本注入 · 引擎守护 │
└──────────────┬───────────────────────────┘
        WebSocket(16kHz PCM 音频流 ↑ · 事件 ↓)
┌──────────────▼───────────────────────────┐
│ Python 引擎(uv)                             │
│  音频流 → ASR 适配器 → 后处理插件链 → 结果       │
└──────────────────────────────────────────┘

管线由 engine/config.toml 驱动:chain = ["post_polish", "post_translate"] 一行即拼装"润色→翻译"。

快速开始

前置:macOS 14+。

方式一:直接运行打包版(引擎已内嵌,无需仓库)

  1. 下载 最新 Release 的 VIME.app
  2. 首次打开若提示「无法验证开发者」:右键点击 VIME.app → 打开(ad-hoc 签名应用的标准步骤)
  3. 首次启动会自动把引擎暂存到 ~/Library/Application Support/VIME/engine 并从暂存副本运行(绕开下载隔离标记),随后按状态栏菜单引导授权麦克风与辅助功能
  4. 需要本地 ASR:状态栏「设置…」→「下载本地模型」(约 80MB)

方式二:源码构建(开发)

前置:macOS 14+、uv、Swift 6(Command Line Tools 即可,无需完整 Xcode)。

# 引擎依赖 + 本地模型(约 80MB)
cd engine && uv sync --extra dev --extra asr-local && uv run vime model download
# 壳(默认打包引擎;--no-bundle-engine 跳过打包)
cd ../app && ./Scripts/build-app.sh && open build/VIME.app

打开 TextEdit,按住 Option(可在「设置…」中录制自定义快捷键,支持纯修饰键与组合键如 ⇧⌘D)说话,松手即注入。

设置 → 两个独立配置区(编辑即保存,ASR 与 LLM 分开填写):

  • 云端 ASR 配置:转写端点 Base URL / API Key / Model(OpenAI 兼容转写,如 https://api.openai.com/v1,模型 whisper-1)——仅当 ASR 引擎选「asr_openai(云端)」时使用
  • LLM 配置(润色 / 翻译):OpenAI 兼容 Chat Completions(如 DeepSeek:https://api.deepseek.com/v1,模型 deepseek-chat)
  • 配置保存在本机(API Key 明文存 UserDefaults,仅本地使用;Keychain 安全存储为后续改进项),随每次语音会话发送给引擎;未填云端 ASR 配置时自动回退使用 LLM 配置

纯引擎 CLI(无壳可用)

cd engine
uv run vime list-plugins                      # 查看已发现插件
uv run vime run <16kHz单声道wav> --asr asr_sherpa   # 本地识别
uv run vime run-text "呃 你好" --chain post_polish   # 文本润色
uv run vime serve --port 8765                 # 启动 WebSocket 服务(壳的引擎)

插件体系

插件 类型 说明
asr_sherpa ASR 本地 Paraformer + Silero VAD 流式分段(默认)
asr_openai ASR OpenAI 兼容云端转写
post_polish 后处理 去口头语、补标点、保守润色
post_translate 后处理 中英互译(目标语言可配)

新增插件 = 在 engine/plugins/ 放一个模块(导出 PLUGIN 元数据 + Plugin 类),配置里引用即可,无需改核心代码。

目录结构

VIME/
├── engine/            # Python 引擎(uv)
│   ├── vime/          # 插件协议 · 配置 · 注册表 · 管线 · CLI · WS 服务 · 模型下载
│   ├── plugins/       # asr_sherpa / asr_openai / post_polish / post_translate
│   └── tests/         # pytest(72 用例)
├── app/               # Swift 壳(SwiftPM 三目标)
│   ├── Sources/VIMELib/    # 全部逻辑(热键/音频/悬浮窗/注入/引擎守护/配置/权限)
│   ├── Tests/VIMETests/    # 迷你测试运行器(96 断言)
│   └── Scripts/            # build-app.sh / Info.plist
└── docs/plans/        # 设计文档与各里程碑实施计划

里程碑

  • ✅ M1 引擎骨架与插件链(插件协议/注册表/管线/CLI)
  • ✅ M2 本地 ASR 流式(VAD 分段 partial/final + 模型下载 + WebSocket 服务)
  • ✅ M3 Swift 壳(热键/音频捕获/悬浮窗/AX 注入/引擎守护)
  • ✅ M4 联调收口(权限引导/设置窗口/失败路径)

诊断问题(无法语音输入时)

打开「设置…」最下方「诊断」区(默认关闭,勾选「诊断模式」开启实时刷新;点击诊断区可复制完整诊断文本),逐项对照:

  • 热键监听:若「最近任意按键」始终为 -,说明系统未向 VIME 投递按键事件——检查「隐私与安全性 → 输入监控 / 辅助功能」权限;若该时间在走但「press」不变,说明按键组合未匹配绑定(重新录制快捷键)
  • 麦克风:按住说话时「累计字节」应持续增长;若不涨,检查麦克风权限(菜单「授权麦克风…」)或系统输入设备
  • 事件尾部:出现 partial 说明识别在进行;若只有 error,按内容处理(模型未下载 → 设置里下载本地模型)

开发

cd engine && uv run pytest -q                    # 引擎测试
cd app && swift build && .build/debug/VIMETests  # 壳测试

路线图(v0.2 候选)

  • 语音修改指令(说"把 XX 改成 YY"操作已注入文本)
  • 正式签名与公证(Developer ID + notarization,当前 ad-hoc)
  • 系统音频捕获(识别会议/视频语音)
  • 个人词典 / 语音快捷片段 / 按应用切换语气风格

致谢

ASR 能力基于 sherpa-onnx(Paraformer + Silero VAD)与 OpenAI 兼容语音识别协议。

About

高度插件化的 macOS 语音输入法:按住说话,本地/云端 ASR 流式识别 + 润色/翻译插件链,松手注入任意应用(对标 Wispr Flow / Typeless)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages