Skip to content

About

🧠 Local-first AI memory assistant β€” records meetings, transcribes with Whisper, extracts tasks, and lets you search your conversations with natural language. 100% private, runs on your device.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

3 Commits

Folders and files

Repository files navigation

MemoryLens Logo

🧠 MemoryLens

Local-first AI memory assistant for your meetings.
Record β†’ Transcribe β†’ Extract Tasks β†’ Search β€” all on your own machine.

Python FastAPI Electron Next.js License: MIT

Download β€’ Features β€’ Architecture β€’ Getting Started β€’ API Docs β€’ Roadmap β€’ Contributing


πŸ“₯ Download

Get the latest installer for Windows from the Releases page.

  1. Download MemoryLens Setup 0.2.0.exe.
  2. Run the installer and follow the instructions.
  3. (Optional) Install the MemoryLens Browser Extension for speaker identification.

✨ Features

Feature Description
πŸŽ™οΈ Smart Audio Capture Records both your mic and system audio (Zoom, Meet, Teams) simultaneously via WASAPI loopback
πŸ“ Local Transcription Powered by Faster-Whisper β€” no data leaves your machine
πŸ‘₯ Speaker Identification Maps speaker names from browser extension signals + voice anchoring
βœ… Task Extraction Automatically detects action items like "Aman, please finish the audit by Friday"
πŸ” Natural Language Search Ask questions like "What did Rahul promise last week?"
πŸ§‘β€πŸ€β€πŸ§‘ People Tracker Track who you met, what was discussed, and tasks assigned to each person
πŸ”’ 100% Private All processing runs locally β€” audio, transcription, and LLM inference on your own hardware
πŸ–₯️ Desktop App Cross-platform Electron wrapper with a modern Next.js UI

πŸ—οΈ Architecture

Meeting Platform (Google Meet / Zoom / Teams)
       β”‚
Browser Extension  β†’ sends speaker events via HTTP
       β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               MemoryLens Desktop Agent            β”‚
β”‚                                                   β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚   β”‚    Audio    β”‚β†’ β”‚ Transcriptionβ”‚β†’ β”‚ Speaker β”‚ β”‚
β”‚   β”‚  Recorder   β”‚  β”‚  (Whisper)   β”‚  β”‚ Mapper  β”‚ β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚          β”‚                β”‚               β”‚       β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚
β”‚   β”‚               Memory Engine                  β”‚β”‚
β”‚   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚β”‚
β”‚   β”‚  β”‚    Task    β”‚ β”‚  Summary  β”‚ β”‚  Meeting  β”‚  β”‚β”‚
β”‚   β”‚  β”‚ Extractor  β”‚ β”‚ Generator β”‚ β”‚ Processor β”‚  β”‚β”‚
β”‚   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚
β”‚          β”‚                                        β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚
β”‚   β”‚  SQLite DB   β”‚   β”‚ Semantic Search β”‚           β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜           β”‚
β”‚          β”‚                                        β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                β”‚
β”‚   β”‚   FastAPI    β”‚  ← REST API (localhost:8000)   β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
          β”‚
   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
   β”‚  Electron +  β”‚
   β”‚  Next.js UI  β”‚
   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Getting Started

Prerequisites

  • Python 3.10+
  • Node.js 18+
  • A working microphone (system audio capture available on Windows via WASAPI)

1. Clone the repository

git clone https://github.com/Yashkush06/MemoryLens.git
cd MemoryLens

2. Set up the backend

cd memorylens
pip install -r requirements.txt

3. Configure environment

# Copy the example env file and fill in your values
cp .env.example .env

Important: Set MEMORYLENS_SECRET_KEY to a strong random string before running. Generate one with: python -c "import secrets; print(secrets.token_hex(32))"

4. Run the backend

python scripts/run_agent.py

The API will be live at http://localhost:8000.
Open http://localhost:8000/docs for the interactive Swagger UI.

5. Run the frontend (Development)

cd frontend
npm install
npm run dev

The UI will be at http://localhost:3000.

6. Run the Desktop App (Electron)

cd electron
npm install
npm start

πŸ“‘ API Docs

Method Endpoint Auth Description
GET / β€” Health check
POST /auth/register β€” Register a new account
POST /auth/login β€” Login and get JWT
GET /auth/me βœ… Get current user
POST /meeting/start βœ… Start recording a meeting
POST /meeting/end βœ… Stop recording and process
GET /meetings βœ… List all meetings
GET /meeting/{id} βœ… Get meeting detail + transcript
POST /upload_meeting βœ… Upload an existing audio file
GET /tasks βœ… List extracted tasks
PATCH /tasks/{id} βœ… Toggle task completion
GET /people βœ… List known people
GET /people/{id}/insights βœ… Get insights for a person
POST /search βœ… Natural language search
GET /system/models/status β€” Check AI model status
POST /system/models/download β€” Download Whisper model

Full interactive docs at: http://localhost:8000/docs


βš™οΈ Configuration

All settings are controlled via environment variables prefixed with MEMORYLENS_.
Copy .env.example to .env to get started.

Variable Default Description
MEMORYLENS_SECRET_KEY (required) JWT signing secret β€” change this
MEMORYLENS_API_HOST 127.0.0.1 API bind address
MEMORYLENS_API_PORT 8000 API port
MEMORYLENS_WHISPER_MODEL_SIZE base Model size: tiny, base, small, medium, large-v2
MEMORYLENS_WHISPER_DEVICE cpu cpu or cuda
MEMORYLENS_USE_OLLAMA false Enable local Ollama LLM
MEMORYLENS_OLLAMA_MODEL llama3 Ollama model to use
MEMORYLENS_LOG_LEVEL INFO Logging level

πŸ“ Project Structure

MemoryLens/
β”œβ”€β”€ memorylens/            # Python backend
β”‚   β”œβ”€β”€ api/               # FastAPI server and routes
β”‚   β”œβ”€β”€ audio/             # Audio recording (mic + WASAPI loopback)
β”‚   β”œβ”€β”€ transcription/     # Faster-Whisper transcription engine
β”‚   β”œβ”€β”€ speaker_mapping/   # Speaker identification from events
β”‚   β”œβ”€β”€ memory_engine/     # Task extraction, summaries, processing
β”‚   β”œβ”€β”€ search/            # Hybrid text + semantic search
β”‚   β”œβ”€β”€ database/          # SQLAlchemy models and CRUD
β”‚   β”œβ”€β”€ extension_api/     # Browser extension interface
β”‚   β”œβ”€β”€ config/            # Pydantic settings
β”‚   β”œβ”€β”€ shared/            # Logging, utilities
β”‚   └── requirements.txt
β”œβ”€β”€ frontend/              # Next.js UI
β”‚   └── src/
β”‚       β”œβ”€β”€ app/           # Next.js App Router pages
β”‚       └── components/    # React components
β”œβ”€β”€ electron/              # Desktop app wrapper
β”‚   β”œβ”€β”€ main.js            # Electron main process
β”‚   └── preload.js         # Electron preload
β”œβ”€β”€ .env.example           # Environment configuration template
└── .gitignore

πŸ—ΊοΈ Roadmap

  • Audio capture (mic + system audio via WASAPI)
  • Faster-Whisper transcription
  • Task extraction from transcripts
  • Natural language memory search
  • JWT authentication
  • Electron desktop app
  • Real speaker diarization (pyannote.audio)
  • LLM-powered task extraction via Ollama
  • Semantic embeddings (sentence-transformers)
  • Browser extension (Chrome/Firefox)
  • Conversation replay with audio clips
  • Export meetings to PDF / Markdown

🀝 Contributing

Contributions are welcome! Please read CONTRIBUTING.md to get started.


πŸ“„ License

This project is licensed under the MIT License β€” see LICENSE for details.


Made with ❀️ by Yash

About

🧠 Local-first AI memory assistant β€” records meetings, transcribes with Whisper, extracts tasks, and lets you search your conversations with natural language. 100% private, runs on your device.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages