Files
transcript/README.md
T

97 lines
3.8 KiB
Markdown

# 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 <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+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