# 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-GGUF` em 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 ```text 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: `745121600` bytes - 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: ```bash parakeet-main -m -f -t ``` 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+V` via `SendKeys`. - Linux X11: clipboard + tentativa de `Ctrl+V` via `xdotool` quando 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 ```bash 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 em `main`. - `.github/workflows/build.yml`: gera bundles Windows/Linux em push para `main` e manualmente. - `.github/workflows/release.yml`: publica GitHub Releases em tags `v*.*.*`. 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