AI-powered multimodal search engine for your computer
Find PDFs and images in your laptop using semantic understanding with image embeddings and AI-powered multimodal search.
Ready-to-use desktop app - no installation required!
- OtterSearch-1.0.0-arm64.dmg - For Apple Silicon (M1/M2/M3)
Just download the right version for your Mac, open the DMG, and drag to Applications!
Windows: Coming soon! For now, use Python setup below.
- Download the DMG file for your Mac
- Open the downloaded DMG file
- Drag OtterSearch to the Applications folder
- Launch OtterSearch from Applications
If you see "OtterSearch can't be opened because Apple cannot check it for malicious software":
- Right-click (or Control+click) on OtterSearch in Applications
- Select "Open" from the menu
- Click "Open" in the security dialog
- App will launch (only need to do this once!)
This is normal for unsigned apps. The app is safe - it's open source!
- 📑 Scanned PDF Detection - Automatically detects pages with minimal text and indexes them as image embeddings using CLIP
- ⏸️ Pause/Resume/Stop - Full control over indexing with progress persistence across app restarts
- 💾 Data Durability - SQLite WAL mode with automatic checkpoints ensures no data loss
- 🔄 Smart Updates - Only indexes new/modified files, dramatically faster reindexing
- 🖼️ Image Search - Find images using text descriptions with CLIP embeddings
- 📄 PDF Search - Search across PDF documents (indexes first 2 pages) with MiniLM embeddings
- 📑 Scanned PDF Support - Automatically detects and indexes scanned pages as images using CLIP
- ⏸️ Pause/Resume Indexing - Control indexing progress, pause and resume anytime
- 🛑 Smart Updates - Only indexes new/modified files, skips already-indexed ones
- 🤖 AI-Powered - Multimodal semantic understanding using image embeddings
- 🔍 Query Expansion - Uses LFM2-350M (Small Language Model) to enhance search queries
- ⚡ Fast - HNSW vector indexing with WAL-mode SQLite for durability
- 🏠 Local - Everything stays on your computer
- 💻 Lightweight - Minimal dependencies, runs anywhere
- Launch OtterSearch from Applications
- Click Index Settings button
- Index folders (quick: Documents/Desktop/Downloads, or custom path)
- Use Pause/Resume/Stop buttons to control indexing progress
- Progress is saved - you can close the app and resume later
- Search anything using the search box
Note: Scanned PDFs are automatically detected and indexed as images for better search accuracy!
If you prefer to run from source or don't want the DMG:
# Setup with uv (fastest)
bash setup_uv.sh
# Run
python __main__.py
# Open in browser
# http://localhost:8000- Python 3.9+
- ~1GB disk space (for ML models)
uv(or standard pip)
Option 1: uv (Recommended - Fastest)
bash setup_uv.sh
python __main__.pyOption 2: Standard pip
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python __main__.pyEdit ottersearch/config.py to customize:
data_dir: Path = Path.home() / ".ottersearch"
port: int = 8000
batch_size: int = 32ottersearch/
├── config.py - Settings
├── models.py - Data structures
├── extractors.py - PDF/image extraction
├── storage.py - Vector indexing
├── ml_models.py - AI models (CLIP, transformers)
├── indexer.py - Indexing pipeline
├── searcher.py - Semantic search
└── api.py - Web server
Port 8000 in use?
# Edit ottersearch/config.py
port: int = 8001Out of memory?
# Edit ottersearch/config.py
batch_size: int = 16Models not downloading?
- Check disk space (need ~1GB)
- Models go to:
~/.ottersearch/models/
# Install test dependencies
pip install pytest pytest-cov
# Run all tests
pytest
# Run with coverage
pytest --cov=ottersearch --cov-report=html
# Run specific test file
pytest tests/test_models.pyContributions welcome! Please read CONTRIBUTING.md for guidelines.
MIT License - see LICENSE file for details.
- Indexing: ~30 docs/second
- Search: <2 sec for 30000+ documents
- Memory: 2-4GB with batch processing
See CONTRIBUTING.md
MIT License - See LICENSE
- Check README.md for details
- See DEVELOPMENT.md for extending
- STRUCTURE.md explains file organization
Find anything in your images and PDFs! 🦦
Built with CLIP embeddings, MiniLM embeddings, LFM2-350M query expansion, and HNSW vector search.