中文 | English
kazlab 是一个本地优先的哈萨克语 AI 语言实验室,基于 Tauri + React + shadcn/ui 构建,完全离线运行。
- 引擎:sherpa-onnx (C++),调用其
sherpa-onnx-offline-tts静态二进制。 - 模型:不随 GitHub 仓库提交;首次使用时由用户在应用内下载。
- 可选模型:Piper VITS Kazakh models,例如
kk_KZ-issai-high(22050 Hz,high quality)。 - 说话人:下载支持多说话人的模型后,可在 UI 中实时切换。
- 音素化:espeak-ng 数据随模型或应用资源提供,遵循其原始许可。
kazlab/
├─ src/ 前端(React + TS + Tailwind + shadcn)
├─ src-tauri/ 后端(Rust + Tauri 2)
│ └─ src/tts.rs TTS 服务封装 (调用 sherpa-onnx-offline-tts)
└─ binaries/
├─ gen-tokens.js tokens.txt 生成辅助脚本
├─ sherpa-onnx/ 本地 TTS 运行时目录,不提交到 GitHub
├─ espeak-ng-data/ 本地音素化数据目录,不提交到 GitHub
└─ models/ 本地模型缓存目录,不提交到 GitHub
Tauri 需要本机安装 Rust 工具链。如果启动时报错 failed to run cargo metadata
或 No such file or directory (os error 2),通常是当前终端找不到 cargo。
macOS 可用以下命令安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source "$HOME/.cargo/env"
cargo --version如果已经安装 Rust,但仍然找不到 cargo,重新打开终端,或执行:
source "$HOME/.cargo/env"npm install
npm run prepare:binaries
npm run tauri -- dev这是推荐的桌面应用开发启动方式,会同时启动 Vite 前端和 Tauri 桌面窗口。
首次 tauri dev 会编译 Rust 后端(耗时较长,~3-5 分钟)。
首次启动时,如果本机还没有模型,应用会进入模型下载页面。请选择下载源 (Hugging Face 或镜像)和模型,下载完成后即可离线使用。模型文件会保存到 应用数据目录,不应提交到 GitHub。
仅启动前端开发服务器(不会启动 Tauri 后端能力):
npm run dev构建前端产物:
npm run build构建桌面应用安装包:
npm run prepare:binaries
npm run build:dmg构建完成后,macOS 安装包会输出到:
src-tauri/target/release/bundle/dmg/预览已构建的前端产物:
npm run preview| ID | Display | ISSAI key | Gender |
|---|---|---|---|
| 0 | Magzhan | ISSAI_KazakhTTS2_M2 | Male |
| 1 | Iseke | ISSAI_KazakhTTS_M1_Iseke | Male |
| 2 | Aida | ISSAI_KazakhTTS2_F3 | Female |
| 3 | Raya | ISSAI_KazakhTTS_F1_Raya | Female |
| 4 | Aigerim | ISSAI_KazakhTTS2_F1 | Female |
| 5 | Aizhan | ISSAI_KazakhTTS2_F2 | Female |
具体 voice 列表来自已下载模型的 speaker_id_map。如果选择的是单说话人模型,UI 中可用的 voice 数量会不同。
如果你已经在本机下载了模型,也可以直接调用 sherpa-onnx-offline-tts 验证。下面命令中的模型路径需要替换为你本机实际下载位置:
./binaries/sherpa-onnx/bin/sherpa-onnx-offline-tts \
--vits-model="$HOME/Library/Application Support/kazlab/models/vits-piper-kk_KZ-issai-high/kk_KZ-issai-high.onnx" \
--vits-tokens="$HOME/Library/Application Support/kazlab/models/vits-piper-kk_KZ-issai-high/tokens.txt" \
--vits-data-dir="/path/to/espeak-ng-data" \
--sid=3 \
--output-filename=/tmp/test.wav \
"Сәлеметсіз бе, бұл қазақ тіліндегі мәтін."仓库包含 .github/workflows/release.yml,支持两种方式生成 macOS .dmg:
- 在 GitHub Actions 页面手动运行
Releaseworkflow,会上传 DMG 作为 workflow artifact。 - 推送形如
v0.1.0的 tag,会构建 DMG,并以 draft 形式附加到 GitHub Release。
CI 会执行 npm run prepare:binaries 下载 sherpa-onnx-offline-tts 和 espeak-ng-data。这些第三方运行时资源不会提交到仓库,发布时请同时确认它们各自的许可证要求。
当前 GitHub Actions 产物面向 macOS Apple Silicon。未配置 Apple Developer 证书时,DMG 为未签名构建,首次打开可能被 Gatekeeper 拦截;用户可右键选择“打开”,正式发布建议配置代码签名和 notarization。
- 模型、espeak-ng-data 与 sherpa-onnx 遵循各自原始许可(Piper / ISSAI / espeak-ng / sherpa-onnx)。
- 代码部分 MIT。
