The privacy-first AI meeting assistant that lives on your machine
Download β’ Features β’ How It Works β’ Tech Stack β’ Development
Traditional meeting assistants expose your presence:
- π€ Bot joins the call β Everyone knows you're recording
- βοΈ Audio uploaded to cloud β Your data leaves your control
- π Admin install required β IT blocks the tool
- π° Monthly subscriptions β Costs add up
|
Audio never leaves your machine. Transcription runs locally using Whisper. Your meetings, your data, your control. |
No bots joining calls. No recording banners. No participant notifications. Completely invisible. |
|
Ask questions about any meeting. Get instant summaries. Search across all your conversations with semantic search. |
User-level installation. No admin rights. No IT tickets. Works on restricted corporate machines. |
| Platform | Architecture | Download |
|---|---|---|
| macOS | Apple Silicon (M1/M2/M3) | .dmg |
| Windows | x64 | .exe / .msi |
π Installation Notes
Since PhantomEar is not yet notarized with Apple, you may see a "damaged" warning. Fix it with:
xattr -cr /Applications/PhantomEar.app- If
.msiis blocked by corporate policy, use the.exeinstaller - If you see
MSVCP140.dllerror, install Visual C++ Runtime
| Feature | Description |
|---|---|
| ποΈ Multi-Model ASR | Whisper (tiny β large) or Parakeet CTC models |
| π€ LLM Flexibility | OpenAI API or Ollama (fully local) |
| βΈοΈ Pause/Resume | Pause transcription without stopping the session |
| π Transcript Editing | Edit segments, fix transcription errors |
| π£οΈ Speaker Labels | Manually assign speakers to segments |
| π Timeline View | Visual timeline with quick navigation |
| π Quick Search | Cmd+K to search across all meetings |
| π₯οΈ System Tray | Minimize to tray, start/stop from menu |
| π Export | Copy as Markdown or plain text |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β YOUR MACHINE β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββββββ β
β β Microphone βββββΆβ Whisper βββββΆβ SQLite βββββΆβ UI β β
β β (cpal) β β (local) β β + FTS5 β β (Svelte) β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββββββ β
β β β β
β βΌ βΌ β
β βββββββββββββββ βββββββββββββββ β
β β Embeddings β β Semantic β β
β β (BGE-small) βββββΆβ Search β β
β βββββββββββββββ βββββββββββββββ β
β β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββ΄ββββββββββββββββββββββ
β OPTIONAL: LLM Context β
β (Only curated text, never raw audio) β
βββββββββββββββββββββββ¬ββββββββββββββββββββββ
β
βββββββββββββ΄ββββββββββββ
βΌ βΌ
ββββββββββββ ββββββββββββ
β Ollama β β OpenAI β
β (local) β β (API) β
ββββββββββββ ββββββββββββ
| Data Type | Location | Sent to Cloud? |
|---|---|---|
| π€ Raw Audio | RAM only (never saved) | β Never |
| π Transcripts | Local SQLite | β Never |
| π§ Embeddings | Local SQLite | β Never |
| π¬ LLM Context | Selected text only |
*Only if using OpenAI. Use Ollama for 100% local operation.
phantom-ear/
βββ src/ # Svelte 5 Frontend
β βββ routes/+page.svelte # Main application
β βββ lib/
β β βββ components/ # UI components
β β βββ stores/ # State management
β β βββ utils/ # Utilities
β βββ app.css # TailwindCSS v4
β
βββ src-tauri/ # Rust Backend
β βββ src/
β βββ lib.rs # Tauri entry point
β βββ commands.rs # IPC handlers
β βββ audio/ # Audio capture (cpal)
β βββ asr/ # Whisper integration
β βββ transcription/ # Real-time pipeline
β βββ embeddings/ # BGE-small vectors
β βββ storage/ # SQLite + FTS5
β βββ llm/ # OpenAI/Ollama clients
Rust |
Tauri 2.0 |
Svelte 5 |
TailwindCSS |
| Layer | Technology | Purpose |
|---|---|---|
| Runtime | Tauri 2.0 | Lightweight native wrapper |
| Backend | Rust | Performance-critical processing |
| Frontend | Svelte 5 | Reactive UI with runes |
| Styling | TailwindCSS v4 | Dark theme, glassmorphism |
| ASR | whisper-rs | Local speech recognition |
| Embeddings | ONNX Runtime | BGE-small vectors |
| Database | SQLite + FTS5 | Full-text search |
| Audio | cpal | Cross-platform capture |
# Node.js 18+
node --version # v18.0.0+
# Rust (latest stable)
rustc --version # 1.75.0+
# CMake (for whisper.cpp)
cmake --version # 3.20+Install CMake
# macOS
brew install cmake
# Windows
choco install cmake
# Linux
sudo apt install cmake# Clone
git clone https://github.com/Phantom-Ear/phantom-ear.git
cd phantom-ear
# Install dependencies
npm install
# Run in development mode
npm run tauri dev
# Build for production
npm run tauri build| Status | Feature | Target |
|---|---|---|
| β | Real-time transcription | v0.1.0 |
| β | Meeting persistence | v0.1.0 |
| β | AI Q&A (RAG) | v0.1.0 |
| β | Semantic search | v0.1.0 |
| β | System tray | v0.2.0 |
| β | Transcript editing | v0.2.0 |
| β | Speaker labels | v0.2.0 |
| π | Audio device selection | v0.3.0 |
| π | SRT subtitle export | v0.3.0 |
| π | Auto-meeting detection | v0.4.0 |
| π | Light theme | v0.4.0 |
| π | Auto-titling with AI | v0.5.0 |
Contributions are welcome! Please read our contributing guidelines before submitting a PR.
# Fork the repo
# Create your feature branch
git checkout -b feature/amazing-feature
# Commit your changes
git commit -m "Add amazing feature"
# Push to the branch
git push origin feature/amazing-feature
# Open a Pull RequestMIT License - see LICENSE for details.
PhantomEar is not affiliated with any meeting platform. Use responsibly and in compliance with applicable laws.