Oreja is a Windows desktop application for real-time transcription of conference calls (Google Meet, Zoom, Slack, etc.) without storing or sending audio to the cloud. It captures microphone and system audio, uses local Hugging Face models for transcription and diarization, and provides a WPF interface with volume meters, transcription controls, and speaker renaming. Speaker embeddings improve recognition of recurring callers, stored locally in SQLite.
This application was built with the intention of letting a person get a better recollection of calls or conversations while still respecting the privacy of other people in the conversation. The transcription is done by capturing the sound of the last few seconds, transcribing that, then deleting the audio on the spot so that you are left with a transcript of the call and no full recording having ever touched any computer.
No data ever touches the cloud. No recording ever lasts more than a few seconds, and is never saved to any disk or server.
Use this at your own risk, and do not use it in a way that breaches privacy laws. If you live in a jurisdiction with laws around recording conversations there may be further restrictions to how you can use this app. You bear sole responsibility for the use of this app or its output files.
My recommendation: keep it simple and just let people know you are using a note-taking tool and ask if that is ok. That should cover most of the gray areas. I am not a lawyer, so don't take this as legal advice either.
- Real-time transcription with speaker diarization using faster-whisper and pyannote.audio.
- Captures microphone and system audio simultaneously via NAudio (with independent buffering per source).
- Visible backend connection status and automatic server startup.
- Start/Stop transcription, save transcripts in multiple formats (TXT, SRT, VTT, Markdown), and rename speakers.
- Privacy-focused: processes audio in memory, runs models locally, no cloud interaction.
- Persistent speaker recognition with locally stored voice embeddings; learns over time.
- Transcript search and keyword alerts for finding specific discussions.
- Optional Ollama-powered meeting summaries (with extractive fallback when Ollama unavailable).
- Settings persistence (backend URL, speaker database, audio preferences) via local AppData.
- π Privacy Mode: Analyze conversations without saving transcription text.
- π£οΈ Conversation Analysis: Extract summaries, action items, topics, and insights.
- π Speaker Analytics: Comprehensive dashboard for speaker database management.
- C#/.NET 8: Windows-native frontend and audio capture.
- Python 3.10: Backend for transcription and diarization.
- NAudio: Audio capture (microphone and system).
- faster-whisper: Local speech-to-text with word-level timestamps.
- pyannote.audio 3.1: Local speaker diarization and voice embedding extraction.
- FastAPI: Local server for C#/Python communication.
- WPF: User interface (code-behind, single-file App.xaml.cs).
- JSON (local file storage): Speaker database (v2 format) with voice embeddings.
- Ollama (optional): LLM backend for meeting summaries and conversation analysis.
Oreja stores settings and speaker databases locally. Configuration is controlled via environment variables and a settings file.
Set these in your shell before running the backend, or in a .env file in the backend/ directory:
OREJA_WHISPER_MODEL: Whisper model to use (default:base). Options:tiny,base,small,medium,large.OREJA_DEVICE: Device for model inference (default: auto-detect). Options:auto,cuda,cpu.OREJA_COMPUTE_TYPE: Compute precision for faster-whisper (default:auto). Options:int8,int8_float32,int8_float16,float16,float32,auto.OREJA_LANGUAGE: Transcription language (default:en). Use ISO 639-1 codes (e.g.,esfor Spanish,frfor French).OREJA_SPEAKER_THRESHOLD: Confidence threshold for speaker matching (default:0.72). Range: 0.0β1.0; lower = more lenient.OREJA_OLLAMA_URL: URL to Ollama API for summaries (e.g.,http://localhost:11434). If unset, conversation analysis falls back to extractive summaries.OREJA_OLLAMA_MODEL: Ollama model for summaries (e.g.,llama2). Ignored ifOREJA_OLLAMA_URLis unset.
Settings and the speaker database are stored in your user's local AppData directory:
- Windows:
%LOCALAPPDATA%\Oreja\(typicallyC:\Users\<YourName>\AppData\Local\Oreja\) - Speaker database:
speaker_database.json(persisted across sessions).
The live transcription application (Oreja.exe) is not included in this download because it's too large for GitHub (149 MB). You'll need to create it yourself using the simple steps below. Don't worry - this is much easier than it sounds!
- A Windows computer (Windows 10 or 11)
- About 15 minutes for the initial setup
- An internet connection to download the required tools
Easiest method - just double-click a file!
- Download the project: Click the green "Code" button at the top of this page, then "Download ZIP"
- Extract the files: Right-click the downloaded ZIP file and choose "Extract All"
- Run the builder: Double-click
build_executable.batin the extracted folder - Follow the prompts: The script will guide you through everything!
The batch file will:
- β Check if you have the required .NET SDK (and tell you how to install it if needed)
- β Automatically build the executable
- β Test that it works
- β Offer to create a desktop shortcut
- β Offer to launch the application immediately
If the batch file doesn't work for any reason, you can build it manually:
- Download: Go to Microsoft .NET Download Page
- Choose: Click "Download x64" under ".NET 8.0 SDK" (not Runtime)
- Install: Run the downloaded file and follow the installation wizard
- Verify: Open Command Prompt and type
dotnet --version. You should see something like8.0.xxx
- Download: Click the green "Code" button at the top of this page, then "Download ZIP"
- Extract: Right-click the downloaded ZIP file and choose "Extract All"
- Location: Extract to a folder like
C:\Users\YourName\oreja(avoid spaces in the path)
- Open Command Prompt:
- Press
Windows + R - Type
cmdand press Enter
- Press
- Navigate to the project:
(Replace
cd C:\Users\YourName\orejaYourNamewith your actual username and adjust path if needed) - Build the application:
dotnet publish -c Release -r win-x64 --self-contained true -o publish-standalone
- Wait: This will take 2-5 minutes to download dependencies and build everything
- Success: You should see "publish succeeded" at the end
After building, you'll find Oreja.exe in the publish-standalone folder:
C:\Users\YourName\oreja\publish-standalone\Oreja.exe
You can now run this file directly - no installation needed!
Double-click Oreja.exe to test if it works. You should see the Oreja interface open. If you get any errors, see the troubleshooting section below.
- Right-click on
Oreja.exe - Choose "Create shortcut"
- Drag the shortcut to your desktop
- Rename it to "Oreja Live Transcription"
Note: You only need this section if you want to modify the code or use advanced features like conversation analysis.
- Install Prerequisites:
- .NET 8 SDK (already done if you followed Quick Start)
- Python 3.10
- Git
-
Set Up Python Environment:
python -m venv venv .\venv\Scripts\activate pip install -r requirements_enhanced.txt
For GPU support, install PyTorch with CUDA: PyTorch Installation.
-
Download Hugging Face Models:
- Create a Hugging Face account and generate an access token.
- Log in:
huggingface-cli login
- Download Whisper and pyannote.audio models:
from transformers import pipeline from pyannote.audio import Pipeline pipeline("automatic-speech-recognition", model="openai/whisper-large-v3") Pipeline.from_pretrained("pyannote/speaker-diarization-3.0", use_auth_token="your-token")
- Models are cached in
~/.cache/huggingface/hub.
-
Build and Run:
- Start the Python backend:
cd backend uvicorn server:app --host 127.0.0.1 --port 8000 - Run the C# frontend (development mode):
dotnet run --project Oreja
- Start the Python backend:
- Run the executable you created in the Quick Start section
- Select audio sources: Choose your microphone and system audio
- Click Start to begin transcription
- Monitor volume meters to confirm audio capture
- View real-time transcription with speaker labels (e.g., "Speaker 1: Helloβ¦")
- Use controls: Stop to pause, Save to export transcripts, or Rename Speaker to label speakers
- Speaker recognition improves over time as the system learns voices
- Start the Python backend (see Full Development Setup)
- Launch the Speaker Analytics GUI:
python backend/speaker_analytics_gui.py
- Features available:
- π Speaker database overview and analytics
- π£οΈ Conversation analysis with summarization
- π Privacy Mode for sensitive conversations
- π Export summaries, action items, and meeting minutes
- π¬ Batch processing of recorded audio files
- Solution: Make sure you used
--self-contained truewhen building - Rebuild: Delete the
publish-standalonefolder and run the build command again
- Solution: .NET SDK wasn't installed properly
- Fix: Restart your computer after installing .NET SDK, or add it to your PATH manually
- Solution: Don't extract to Program Files or other protected folders
- Fix: Use a folder in your user directory like
C:\Users\YourName\oreja
- Normal: First build can take 5-10 minutes as it downloads all dependencies
- Tip: Subsequent builds will be much faster (30 seconds to 2 minutes)
- Make sure you have a stable internet connection
- Try running Command Prompt as Administrator
- Check that your antivirus isn't blocking the build process
- Create an issue on this GitHub repository with your error message
Once you have the executable working:
- Try live transcription with a test call or meeting
- Experiment with speaker renaming to improve recognition
- Check out the conversation analysis features if you set up the Python backend
- Read the advanced documentation in the other README files for specific features
See CONTRIBUTING.markdown for guidelines.
MIT License. See LICENSE for details.