opencode voice logo

Speech-to-text local para OpenCode TUI.

status license opencode stt

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

--- ### Instalación Una sola orden mediante OpenCode: ```bash opencode plugin @safwan-o/opencode-voice ``` Reinicia OpenCode después de instalar. En el primer inicio, el plugin descarga el managed `whisper.cpp` engine y el modelo elegido. El usuario no instala `whisper-cli` manualmente. Instalador CLI opcional. Ejecuta el mismo comando de instalación de OpenCode y predescarga el managed engine: ```bash npx @safwan-o/opencode-voice install ``` No clones el repositorio salvo que quieras desarrollar el plugin. > [!TIP] > El primer inicio abre un selector de modelo. Elige un modelo Whisper, espera la descarga y usa `ctrl+r` para dictar en el prompt. ### Requisitos El plugin gestiona el STT engine y los modelos: - descarga `whisper.cpp` desde el GitHub Release registry de opencode-voice - lo guarda en `~/.cache/opencode-voice/engines/whisper.cpp/-/` - descarga el modelo Whisper elegido durante el primer setup Instalar `whisper-cli` manualmente es opcional. Si ya existe un binary local, `opencode-voice` puede importarlo o usarlo. Comprueba tu máquina: ```bash npx @safwan-o/opencode-voice doctor ``` Instala el managed engine sin abrir OpenCode: ```bash npx @safwan-o/opencode-voice engine install whisper.cpp ``` ### Uso Comandos: - `/voice` - alterna la grabación e inserta la transcripción - `/voice-submit` - alterna la grabación, inserta la transcripción y envía - `/voice-stop` - cancela la grabación o transcripción activa - `/voice-settings` - abre ajustes de modelo, hotkeys, micrófono y diagnóstico Hotkey por defecto: ```txt ctrl+r -> iniciar grabación ctrl+r -> detener, transcribir e insertar texto ``` Hold-to-talk está desactivado por defecto porque los terminal release events cambian entre terminales. Puedes configurar un hotkey hold en `/voice-settings`. ### Modelos Disponibles ahora mediante `whisper.cpp`: | Modelo | Tamaño | Notas | | -------------------- | ------ | ----------------------------- | | Whisper Small | 465 MB | por defecto, multilingue | | Whisper Medium Q4_1 | 469 MB | mejor precisión | | Whisper Turbo | 1.5 GB | grande, más rápido que large completo | | Whisper Large Q5_0 | 1.0 GB | preciso, más lento | Las descargas de modelos soportan resume, retry, progreso y verificación SHA256. Modelos sidecar planeados: - Parakeet V3 - GigaAM v3 - Moonshine V2 Small ### Estado Por Plataforma | Plataforma | Estado | | ---------- | ------ | | Linux | instalación engine/model en una orden; la grabación usa `arecord`, `ffmpeg` o `sox` | | macOS | instalación engine/model en una orden; la grabación usa `ffmpeg` AVFoundation hasta el native recorder sidecar | | Windows | instalación one-command de engine/model/recorder; grabación con DirectShow mediante `ffmpeg.exe` managed en caché, con fallback a ffmpeg del sistema/incluido | ### Arquitectura El paquete sigue la forma pública de plugin TUI que usan los plugins de la comunidad de OpenCode. - npm package exporta `./tui` - el desarrollo local puede apuntar `tui.json` a una ruta absoluta - la instalación publicada usa `opencode plugin @safwan-o/opencode-voice` - runtime settings viven en OpenCode TUI plugin storage Archivos: - `index.js` - entrada TUI, comandos, dialogs, keymap layer - `lib/models.js` - registry de modelos, cache paths, default settings - `lib/download.js` - descarga resumible y verificación SHA256 - `lib/engine.js` - selección de recorder, instalación managed del recorder Windows y transcripción con `whisper-cli` - `lib/engines.js` - descarga, estado, importación y eliminación de managed native engine - `bin/opencode-voice.js` - install wrapper y diagnostics CLI La entrada por voz necesita native audio y STT binaries. El plugin JS gestiona OpenCode UI, settings, engine/model downloads y prompt insertion. Un native sidecar futuro debe reemplazar shell recorders y añadir fast VAD más Handy-style models. ### Roadmap - publicar managed `whisper-cli` release assets antes del npm release - Rust recorder sidecar con `cpal` y VAD - soporte para Parakeet, GigaAM, SenseVoice, Canary y Moonshine - Mejorar estabilidad y UX del recorder en Windows - streaming-style transcription más rápida ### Desarrollo Ejecuta las comprobaciones: ```bash npm run check npm pack --dry-run ``` Este MVP no tiene build step. Instalación de desarrollo desde un checkout: ```bash git clone https://github.com/safwan-o/opencode-voice.git opencode-voice cd opencode-voice opencode plugin "$(pwd)" ``` ### Estado Del Proyecto Este es un OpenCode plugin independiente. No está construido por el equipo de OpenCode y no está afiliado con OpenCode. ### Créditos - OpenCode wordmark SVG adaptado del [OpenCode repository](https://github.com/anomalyco/opencode). La marca `voice` se añadió para este plugin. - [Handy](https://github.com/cjpais/Handy) inspiró la experiencia local-first y aporta el catálogo de modelos `transcribe.cpp` que este plugin fija y verifica. - La transcripción local de Whisper usa [`whisper.cpp`](https://github.com/ggml-org/whisper.cpp). - Los modelos GGUF de Handy se ejecutan mediante el binding Rust [`transcribe-cpp`](https://crates.io/crates/transcribe-cpp) y su runtime upstream `transcribe.cpp`. - La grabación y conversión usan [FFmpeg](https://ffmpeg.org/) cuando la plataforma lo necesita; la distribución managed usa [`ffmpeg-static`](https://github.com/eugeneware/ffmpeg-static). - Los artefactos de modelos están alojados en [Hugging Face](https://huggingface.co/). Los autores y licencias de cada modelo son los declarados en su repositorio upstream; las URL de origen fijadas se conservan en `lib/handy-model-catalog.js`. --- **OpenCode** [Website](https://opencode.ai) | [Docs](https://opencode.ai/docs) | [Discord](https://opencode.ai/discord)