Assistente de Desktop Híbrido: O poder da nuvem com a privacidade do local.
O Nyx é um assistente de IA moderno que une modelos de IA locais (Ollama) e em nuvem (Gemini) em uma interface nativa fluida. Construído com a stack Electron + React + Rust, ele oferece baixa latência no processamento de áudio e uma experiência de overlay que não interrompe seu fluxo de trabalho.
Este exemplo mostra o app de verdade, transcrevendo áudio em tempo real:
- Transcrição em tempo real enquanto a conversa acontece
- Entendimento contínuo do contexto, mesmo com vários participantes falando
- Análise de prints dos slides compartilhados
- Sugestões imediatas do que dizer em seguida
- Perguntas de acompanhamento e respostas diretas e objetivas
- Tudo ao vivo, sem precisar gravar ou fazer qualquer processamento depois
The privacy-first AI assistant for meetings.
- IA Híbrida: Escolha entre privacidade total com Llama 3/Mistral via Ollama ou raciocínio com Google Gemini.
- Transcrição de Áudio em Rust e em tempo real : Captura de áudio de alta performance via módulo nativo (
nyx-audio) para garantir que o sistema não trave. - Overlay UI: Pressione um atalho e acesse a janela flutuante (
/overlay) instantaneamente sobre qualquer app. - Arquitetura separada: Backend Node.js isolado para gerenciar WebSockets e chaves de API, mantendo o processo do Electron leve e seguro.
O sistema de transcrição foi feito para ter baixa latência e máxima segurança. Diferente de implementações simples que rodam no frontend, esse app usa uma arquitetura de três camadas:
- Captura Nativa (Rust): O módulo
nyx-audioacessa diretamente o driver de áudio do sistema (WASAPI no Windows) para capturar o som do microfone sem gargalos de performance. - Streaming de audio: O áudio é enviado via WebSocket para um Backend Local (Node.js) isolado.
- Processamento Nuvem: O backend gerencia as credenciais do Google Cloud Speech-to-Text e realiza o streaming para obter a transcrição em tempo real.
para que as chaves de API nunca sejam expostas no frontend e que o processamento pesado de áudio não trave a interface do usuário.
- Frontend: React (Vite), TailwindCSS, Framer Motion.
- Shell: Electron (IPC para comunicação).
- Core Nativo: Rust (captura de áudio).
- Database: SQLite (
better-sqlite3) para banco de dados local.
O app tem como ser controlado por atalhos de teclado.
| Ação | Atalho (Win/Linux) | Atalho (Mac) |
|---|---|---|
| Alternar Visibilidade | Ctrl + B |
⌘ + B |
| Mostrar/Centralizar | Ctrl + Shift + Espaço |
⌘ + ⇧ + Space |
| Processar Screenshot | Ctrl + Enter |
⌘ + Enter |
| Resetar / Cancelar | Ctrl + R |
⌘ + R |
| Tirar Screenshot | Ctrl + H |
⌘ + H |
| Screenshot Seletivo | Ctrl + Shift + H |
⌘ + ⇧ + H |
| Ação | Atalho |
|---|---|
| Mover para Cima | Ctrl + ↑ |
| Mover para Baixo | Ctrl + ↓ |
| Mover para Esquerda | Ctrl + ← |
| Mover para Direita | Ctrl + → |
- Node.js v20+
- Rust/Cargo (para o módulo nativo)
- Ollama rodando localmente (opcional, para modelos locais)
- Google Cloud SDK (credenciais para Speech-to-Text)
- Clone e instale as dependências base:
git clone https://github.com/GabrielSantos23/nyx.git
cd nyx && npm install
- Configure o Backend (Serviços de API):
cd backend && npm install
- Compile o módulo de áudio (Rust):
cd ../native-module
cargo build --release
O app usa o padrão do Google Cloud para voz.
- Pegue o JSON de Service Account no Google Cloud Console.
- Salve na pasta
/backendcom o nome seguindo o mesmo padrãogen-lang-client-*.json. - O
server.jsidentifica o arquivo automaticamente na próxima inicialização.
Para subir o ambiente completo (Vite + Electron + Backend Server):
npm run app:dev
/electron: janelas e funcoes do aplicativo./src: UI em React e estilo./backend: Proxy para APIs externas e WebSockets./native-module: Rust para captura de audio.
Para gerar o .exe de produção:
npm run app:build
