Transcript Desktop
Aplicativo desktop de transcrição para Windows e Linux, construído com Tauri + Rust + TypeScript. O objetivo é oferecer ditado/transcrição offline-first com revisão obrigatória em modal antes de inserir texto em outro aplicativo.
Estado atual
Este repositório contém um MVP nativo funcional:
- app Tauri 2 funcional;
- modal editável em TypeScript sem framework pesado;
- backend Rust modular;
- catálogo e download do modelo
cstr/parakeet-tdt-0.6b-v3-GGUFem Q8; - captura real de microfone em WAV via CPAL;
- execução do sidecar CrispASR/Parakeet;
- hotkey global
Ctrl+Shift+Space; - inserção híbrida por clipboard + paste automático no Windows/X11 quando disponível;
- fallback manual no Wayland;
- tray/system tray básico;
- CI, build e release via GitHub Actions.
Arquitetura
src/ Frontend TypeScript/CSS
src-tauri/src/
audio/ Captura de microfone e gravação WAV
transcription/ Contratos, CrispASR sidecar e API compatível com OpenAI
injection/ Clipboard, paste automático e fallback manual
models/ Catálogo do modelo offline
settings/ Configuração padrão
tray.rs Menu da bandeja do sistema
ui_commands.rs Comandos Tauri expostos ao frontend
app_state.rs Estado compartilhado mínimo
A regra de design é manter arquivos pequenos, responsabilidades claras e zero overengineering. O app começa com contratos e stubs explícitos para as partes nativas mais arriscadas.
Modelo offline principal
- Repositório:
cstr/parakeet-tdt-0.6b-v3-GGUF - Arquivo:
parakeet-tdt-0.6b-v3-q8_0.gguf - Quantização:
Q8_0 - Tamanho registrado no catálogo:
745121600bytes - Modelo base: NVIDIA Parakeet TDT 0.6B v3
- Idioma: detecção automática; português incluído no conjunto suportado pelo modelo base.
O modelo não deve ser embutido no instalador principal. A estratégia recomendada é instalar o app leve e baixar o GGUF pelo gerenciador de modelos.
Sidecar CrispASR
O app chama por padrão o binário parakeet-main com:
parakeet-main -m <modelo.gguf> -f <audio.wav> -t <threads>
Para o modelo v3, o projeto CrispASR recomenda compilar o target parakeet-main no branch parakeet. O app limita automaticamente o número de threads a no máximo 4 para manter compatibilidade com PCs simples.
Enquanto o binário não estiver no PATH ou empacotado como sidecar, a transcrição local retorna erro claro após a gravação.
Compatibilidade Windows/Linux
- Windows: clipboard + tentativa de
Ctrl+VviaSendKeys. - Linux X11: clipboard + tentativa de
Ctrl+Vviaxdotoolquando instalado. - Linux Wayland: suporte parcial por limitação de segurança dos compositors. O fallback seguro é copiar o texto e orientar o usuário a colar manualmente.
Comandos locais
npm install
npm run typecheck
npm run test -- --run
npm run build
cargo test --manifest-path src-tauri/Cargo.toml
npm run tauri:build
CI/CD
Workflows:
.github/workflows/ci.yml: valida PRs e pushes emmain..github/workflows/build.yml: gera bundles Windows/Linux em push paramaine manualmente..github/workflows/release.yml: publica GitHub Releases em tagsv*.*.*.
A lógica fica em comandos npm/cargo para facilitar migração futura para GitLab CI.
Fontes técnicas usadas
- Tauri 2 commands: https://v2.tauri.app/develop/calling-rust
- Tauri 2 system tray: https://v2.tauri.app/learn/system-tray
- Tauri 2 sidecars: https://v2.tauri.app/develop/sidecar
- Tauri GitHub pipelines: https://v2.tauri.app/distribute/pipelines/github
- Tauri Linux prerequisites: https://v2.tauri.app/start/prerequisites
- NVIDIA Parakeet v3 model card: https://huggingface.co/nvidia/parakeet-tdt-0.6b-v3/blob/main/README.md
- cstr Parakeet GGUF: https://huggingface.co/cstr/parakeet-tdt-0.6b-v3-GGUF