TypeFree 是一款基于 Tauri v2 + React + Rust 的桌面语音听写客户端。它可以在任意输入框中把语音转成文字,自动写入剪贴板、粘贴到当前光标位置,并把转录结果保存到本地历史记录。既可以接入主流云端 ASR,也可以完全离线、在本机 GPU 上边说边出字。
当前版本:6.0.0 · 更新记录见 CHANGELOG.md
当前仓库地址:
git clone https://github.com/Charlo-O/typefree.git
cd typefree- 一键下载本地模型:Confucius4-R2T2、SenseVoice、Paraformer、Whisper、Qwen3-ASR 五个模型都能在设置里直接下载、选择、删除,所需文件和路径自动配齐。
- 选模型即完成配置:不再需要先选“运行时”和“模型家族”,选中哪张模型卡,就用哪个引擎。
- 进程内 llama.cpp 引擎:Confucius4-R2T2 GGUF 直接在 TypeFree 进程里运行,无需安装 Python、vLLM 或任何外部可执行文件;模型常驻内存,不再每次转写重新加载。
- 本地实时流式转写:移植 R2T2 官方流式算法(累积音频重推理 + 稳定前缀回滚),说话时文字就在录音胶囊里逐段浮现,已出现的文字不会回改。
- Vulkan GPU 加速:语言模型、KV cache、音频编码器全部 offload 到 GPU。RTX 3060 实测:3 秒音频推理从 CPU 约 1.5 s 降到约 130 ms;流式每 1 秒音频仅需约 160–195 ms 计算。
- 指令模式 + 处理模式快捷键:一句“帮我翻译 …”直接出译文;每个处理模式都可绑定独立全局快捷键,Prompt Studio 支持按模式单独定制提示词。
- 全新界面:迁移到 Astryx Design,控制面板统一尺寸与节奏,更紧凑、更一致。
TypeFree 当前唯一默认桌面运行时是 Tauri v2。默认开发、构建、发布和 CI 流程都以 src/ + src-tauri/ 为准。
旧 Electron 实现已移动到 legacy-electron/,只作为迁移参考保留。新增桌面能力必须通过 src/shared/platform 进入 Tauri bridge,不再新增 Electron main/preload 代码。
- 全局听写快捷键:在当前聚焦应用中开始/停止录音。
- 处理模式快捷键:可为快速模式、语音润色、指令模式、英文翻译和 Prompt 优化分别绑定全局快捷键,按下后直接以对应模式听写。
- Tauri 原生客户端:Windows 使用 WASAPI,macOS/Linux 走原生录音能力抽象。
- 语音转文字:支持 AssemblyAI、OpenAI、Groq、Z.ai、Volcengine/Doubao,以及本地 ASR 运行时。
- 本地 ASR:内置 sherpa-onnx(SenseVoice、Paraformer、Whisper、Qwen3-ASR ONNX)和进程内 llama.cpp(Confucius4-R2T2 GGUF,支持实时流式与 Vulkan GPU 加速),模型可在应用内一键下载;也可通过外部命令或 OpenAI-compatible 本地服务接入 whisper.cpp、faster-whisper 等自备引擎。
- AI 后处理:转录后可通过 reasoning 模型进行清理、格式化、改写;可选“指令模式”识别“帮我翻译”“总结”“改写”等文本指令。
- Prompt Studio:管理默认提示词、自定义提示词、版本、测试样例和 A/B 对比。
- 词表系统:支持 Hotwords、Snippets、Context Packs 和按场景分层。
- 剪贴板中心:支持文本/图片历史、收藏、缩略图存储和快速粘贴。
- 历史记录:SQLite 持久化 session、outputs、全文搜索和调试数据。
- 隐私与诊断:支持隐私应用策略、日志脱敏、runtime probe 和 session timeline。
- Frontend: React 19, TypeScript, Tailwind CSS v4, Vite
- Desktop: Tauri v2
- Backend: Rust, Tokio, reqwest, tokio-tungstenite, rusqlite
- Local ASR: sherpa-onnx, llama.cpp / MTMD(
llama-cpp-2),可选 Vulkan 后端 - UI: shadcn-style components, Radix primitives, lucide-react
- Persistence: SQLite, Tauri app data, platform credential store
- CI/CD: GitHub Actions
.
├── src/ # React/TypeScript 前端
├── src-tauri/ # Tauri v2 Rust 后端和打包配置
├── src/shared/platform/ # UI 到 Tauri command 的统一 platform bridge
├── src/features/ # feature-sliced 前端功能模块
├── scripts/ # 验证、runtime smoke、发布辅助脚本
├── .github/workflows/ # CI、客户端打包、Release workflows
├── .github/actions/ # GitHub Actions 复用步骤
├── docs/ # 运行时、发布、验收文档
└── legacy-electron/ # 旧 Electron 实现,仅作为迁移参考
- Node.js 20 或更高版本
- npm 10 或更高版本
- Rust stable toolchain
- Tauri 平台依赖
- CMake(编译内置 llama.cpp)
- 可选:Vulkan SDK,仅在需要 GPU 加速本地 R2T2 时使用;最终用户只需安装显卡驱动,Vulkan 运行时随驱动提供
macOS 客户端最低支持 macOS 10.15(内置 llama.cpp 依赖 std::filesystem)。Linux 构建需要 WebKitGTK、ayatana appindicator、rsvg、patchelf 等依赖;GitHub Actions 已通过 .github/actions/setup-tauri-linux 自动安装。macOS 如需签名和 notarization,需要配置 Apple 开发者证书和 notarization secrets。
安装依赖:
npm install启动前端 + Tauri 后端开发环境:
npm run tauri:dev启用 Vulkan GPU 加速的本地 R2T2(需已安装 Vulkan SDK):
npm run tauri:dev:vulkanWindows 上 llama.cpp 的
vulkan-shaders-gen嵌套路径较深,可能触发 MSBuildFTK1011;仓库根目录的.cargo/config.toml已通过TrackFileAccess=false规避,请勿删除该项。
只启动 Vite 前端:
npm run dev本地构建桌面客户端:
npm run tauri:build常见输出目录:
- Windows:
src-tauri/target/release/bundle/nsis/和src-tauri/target/release/bundle/msi/ - macOS:
src-tauri/target/release/bundle/dmg/ - Linux:
src-tauri/target/release/bundle/deb/、rpm/、appimage/
TypeFree 不会把 API key 写入仓库。开发时可以从设置页配置凭据,后端会通过平台 credential store 保存:
- Windows: DPAPI-protected app data
- macOS: Keychain
- Linux: Secret Service
支持的后端 credential keys:
ASSEMBLYAI_API_KEYOPENAI_API_KEYGROQ_API_KEYZAI_API_KEYANTHROPIC_API_KEYGEMINI_API_KEYVOLCENGINE_APP_IDVOLCENGINE_ACCESS_TOKEN
Volcengine/Doubao 配置说明见 doubaoapi.md。
前端、边界、类型、构建:
npm run verify:frontendTauri/Rust、命令边界、录音、转写 provider、release 配置:
npm run verify:tauri完整 release-oriented 本地验证:
npm run verify:frontend
npm run verify:tauri
npm run tauri:buildRuntime smoke 命令会启动 Tauri dev runtime,并可能访问本地麦克风、剪贴板或 provider 网络服务:
npm run smoke:tauri-dev
npm run smoke:runtime-probe
npm run smoke:native-recording
npm run smoke:dictation-pipeline
npm run smoke:cloud-credential-preflight
npm run smoke:cloud-transcription仓库包含三类 Actions:
.github/workflows/ci.yml: push/PR 到main时运行 frontend verify 和 Tauri Rust preflight。.github/workflows/client-build.yml: 手动触发客户端打包,上传 Windows/macOS/Linux artifact,适合测试构建。.github/workflows/release.yml: 推送vX.Y.Ztag 或手动输入版本号后,创建 GitHub Release 并上传正式客户端安装包。
- 打开 GitHub 仓库的 Actions 页面。
- 选择 Build Client workflow。
- 点击 Run workflow。
- 选择
all或单个平台。 - 等待 job 完成后,在 workflow run 的 Artifacts 区下载客户端包。
方式一:推送 tag。
git tag -a v6.0.0 -m "Release v6.0.0"
git push origin v6.0.0方式二:在 GitHub Actions 中手动运行 Release workflow,输入版本号。
Release workflow 会:
- 先运行 frontend verify、Rust preflight 和 release config gate。
- 自动创建缺失的 release tag。
- 构建 Windows、macOS、Linux 客户端。
- 上传安装包和源码压缩包。
- 发布 GitHub Release。
macOS 默认生成 unsigned artifact。如需 signed/notarized artifact,请在手动触发 Release 时选择 signed-notarized,并配置以下 GitHub secrets:
APPLE_CERTIFICATE_BASE64APPLE_CERTIFICATE_PASSWORDAPPLE_API_KEY_IDAPPLE_API_ISSUERAPPLE_API_PRIVATE_KEY_P8
- 打开 TypeFree 客户端。
- 在设置中选择语音转文字 provider、model 和语言。
- 配置 API key 或 Volcengine APP ID / Access Token。
- 设置全局听写快捷键。
- (可选)在“AI 文本增强 → 处理模式快捷键”中为各处理模式分别绑定快捷键。
- 在任意文本输入框聚焦光标。
- 按快捷键开始录音,再次按快捷键结束。
- TypeFree 会转写、可选 AI 后处理、写入剪贴板并自动粘贴。
需要用语音执行文本指令时,在“AI 文本增强”中选择“指令模式”,并在同一次录音中说出完整句子, 例如“帮我翻译 今天天气很好”或“总结 这周完成了接口和测试”。该模式只做文本转换,不执行系统命令; 如果未配置 reasoning 模型,TypeFree 会保留原始转写作为安全回退。
在“语音转文字”中选择“本地 ASR”,然后在模型卡列表里点击 下载 → 选择 即可。运行时、模型家族和全部文件路径都由所选模型自动决定,无需手动填写。
| 模型 | 引擎 | 大小 | 适合场景 |
|---|---|---|---|
| Confucius4-R2T2 Q4_K_M | 进程内 llama.cpp(GGUF + mmproj) | ~1.3 GB | 中英文高质量识别,支持实时流式与 GPU 加速 |
| SenseVoice | sherpa-onnx | ~228 MB | 多语种、速度快 |
| Paraformer 中文 | sherpa-onnx | ~78 MB | 中文、体积最小 |
| Whisper base | sherpa-onnx | ~153 MB | 通用多语种 |
| Qwen3-ASR 0.6B | sherpa-onnx | ~941 MB | 中文与多语种,精度更高 |
模型文件来自 Hugging Face 上的官方导出(netease-youdao/Confucius4-R2T2-GGUF 与 sherpa-onnx 导出仓库),下载到应用数据目录的 local-asr-models/ 下。
实时流式:选择 Confucius4-R2T2 后,录音时 TypeFree 会每秒把累计音频重新送入常驻引擎,并以已确定文字作为前缀续写,说话过程中文字实时出现在录音胶囊里;停止后再做一次完整收尾,结果进入 AI 后处理、剪贴板和历史记录。CPU 也能运行,但流式体验需要 GPU(Vulkan 构建)才能跟上说话速度。
自备引擎:需要使用 whisper.cpp、faster-whisper 等其他引擎时,可在模型卡下方选择“使用自建 OpenAI-compatible 本地服务”,填写 /v1 端点和服务端模型 ID;外部命令适配器仍然保留,命令参数支持 {audio_file}、{model}、{language} 占位符,且直接启动进程、不经过 shell。
- 启动失败:确认没有旧的
typefree.exe正在运行。 - 麦克风无数据:检查系统麦克风权限和输入设备选择。
- 自动粘贴失败:macOS 需要 Accessibility 权限;Linux 依赖 X11/Wayland 下的粘贴工具;Windows 使用原生按键模拟。
- 转录为空:检查录音 bytes、provider credential、模型、语言和网络。
- Volcengine/Doubao 超时:确认 APP ID、Access Token、网络和 provider 服务状态。
- 本地 R2T2 首次识别较慢:首次使用需要把约 1.4 GB 模型载入内存/显存,之后引擎常驻,后续识别会快很多。
- 本地 R2T2 没有用上 GPU:确认使用
local-asr-vulkan构建(开发时用npm run tauri:dev:vulkan),且ggml-vulkan.dll位于可执行文件旁;日志中应出现Vulkan0。
本项目基于 MIT License 开源。