opencode voice logo

OpenCode TUI 的本地语音转文字插件。

status license opencode stt

English | Русский | 简体中文 | Español

--- ### 安装 通过 OpenCode 一条命令安装: ```bash opencode plugin @safwan-o/opencode-voice ``` 安装后重启 OpenCode。首次启动会自动下载 managed `whisper.cpp` engine 和你选择的模型。用户不需要手动安装 `whisper-cli`。 可选 CLI 安装器。它会运行相同的 OpenCode plugin install 命令,并预下载 managed engine: ```bash npx @safwan-o/opencode-voice install ``` 除非你要开发插件,否则不需要 clone 仓库。 > [!TIP] > 首次启动会打开模型选择器。选择 Whisper 模型,等待下载完成,然后用 `ctrl+r` 向 prompt 听写。 ### 要求 插件会管理 STT engine 和模型: - 从 opencode-voice GitHub Release registry 下载 `whisper.cpp` - 存到 `~/.cache/opencode-voice/engines/whisper.cpp/-/` - 首次 setup 时下载你选择的 Whisper 模型 手动安装 `whisper-cli` 是可选项。如果本机已有 binary,`opencode-voice` 仍然可以导入或使用它。 检查本机环境: ```bash npx @safwan-o/opencode-voice doctor ``` 不打开 OpenCode 也可以安装 managed engine: ```bash npx @safwan-o/opencode-voice engine install whisper.cpp ``` ### 使用 命令: - `/voice` - 切换录音并插入转写文本 - `/voice-submit` - 切换录音,插入转写文本并提交 - `/voice-stop` - 取消当前录音或转写 - `/voice-settings` - 打开模型、快捷键、麦克风和诊断设置 默认快捷键: ```txt ctrl+r -> 开始录音 ctrl+r -> 停止、转写并插入文本 ``` 使用 `/voice-settings` -> **Recording** 配置一个录音快捷键。当前使用 toggle 模式:第一次按下开始录音,第二次按下停止、转写并插入文本。Hold-to-talk 需要 OpenCode 向 TUI 插件提供按键释放事件,因此目前不可用。 ### 模型 当前通过 `whisper.cpp` 可用: | 模型 | 大小 | 说明 | | -------------------- | ------ | ----------------------- | | Whisper Small | 465 MB | 默认,多语言 | | Whisper Medium Q4_1 | 469 MB | 更高准确率 | | Whisper Turbo | 1.5 GB | 大模型,比 full large 快 | | Whisper Large Q5_0 | 1.0 GB | 准确,但更慢 | 模型下载支持断点续传、重试、进度显示和 SHA256 校验。 通过 `transcribe-cpp` sidecar 可用的 Handy 模型系列: - Parakeet、Nemotron、GigaAM - Moonshine、Canary、Cohere、SenseVoice、Fun-ASR - Whisper、Breeze、Voxtral、Qwen、Granite ### 平台状态 | 平台 | 状态 | | ------- | ---- | | Linux | 一条命令安装 engine/model;录音使用 `arecord`、`ffmpeg` 或 `sox` | | macOS | 一条命令安装 engine/model;native recorder sidecar 发布前使用 `ffmpeg` AVFoundation | | Windows | 一条命令安装 engine/model/recorder;通过 managed cached `ffmpeg.exe` + DirectShow 录音,并保留系统/内置 ffmpeg 备用 | ### 架构 该包采用 OpenCode community TUI 插件使用的公共结构。 - npm package 导出 `./tui` - 本地开发可以在 `tui.json` 中使用绝对路径 - 发布后使用 `opencode plugin @safwan-o/opencode-voice` 安装 - runtime settings 存储在 OpenCode TUI plugin storage 中 文件: - `index.js` - TUI 插件入口、命令、dialogs、keymap layer - `lib/models.js` - 模型 registry、cache paths、default settings - `lib/download.js` - 可续传下载和 SHA256 校验 - `lib/engine.js` - recorder 选择、managed Windows recorder 安装和 `whisper-cli` 转写 - `lib/engines.js` - managed native engine 下载、状态、导入和移除 - `bin/opencode-voice.js` - install wrapper 和 diagnostics CLI 语音输入需要 native audio 和 STT binaries。JS 插件负责 OpenCode UI、settings、engine/model downloads 和 prompt insertion。未来的 native sidecar 应替换 shell recorders,并加入 fast VAD 和 Handy-style models。 ### Roadmap - npm release 前发布 managed `whisper-cli` release assets - 使用 `cpal` 和 VAD 的 Rust recorder sidecar - 支持 Parakeet、GigaAM、SenseVoice、Canary 和 Moonshine - 更完善的 Windows 录音体验和稳定性 - 更快的 streaming-style transcription ### 开发 运行检查: ```bash npm run check npm pack --dry-run ``` 此 MVP 没有 build step。 从 checkout 安装开发版本: ```bash git clone https://github.com/safwan-o/opencode-voice.git opencode-voice cd opencode-voice opencode plugin "$(pwd)" ``` ### 项目状态 这是独立的 OpenCode plugin。它不是 OpenCode 团队构建的项目,也不隶属于 OpenCode。 ### 鸣谢 - OpenCode wordmark SVG 改编自公开的 [OpenCode repository](https://github.com/anomalyco/opencode)。`voice` 标记为本插件新增。 - [Handy](https://github.com/cjpais/Handy) 启发了 local-first 模型体验,并提供本插件固定版本并验证的 `transcribe.cpp` 模型目录。 - 本地 Whisper 转写使用 [`whisper.cpp`](https://github.com/ggml-org/whisper.cpp)。 - Handy GGUF 模型通过 Rust binding [`transcribe-cpp`](https://crates.io/crates/transcribe-cpp) 及其 upstream `transcribe.cpp` runtime 运行。 - 平台需要时,录音和转换使用 [FFmpeg](https://ffmpeg.org/);managed 分发使用 [`ffmpeg-static`](https://github.com/eugeneware/ffmpeg-static)。 - 模型文件由 [Hugging Face](https://huggingface.co/) 托管。每个模型的作者和许可证以其 upstream 仓库声明为准;固定的源 URL 保留在 `lib/handy-model-catalog.js` 中。 --- **OpenCode** [Website](https://opencode.ai) | [Docs](https://opencode.ai/docs) | [Discord](https://opencode.ai/discord)