cd /news/ai-tools/show-hn-echo-offline-semantic-image-… · home › topics › ai-tools › article
[ARTICLE · art-163000] src=github.com ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

Show HN: Echo – Offline semantic image search for Windows (CLIP and FAISS)

Developer kelvinolabanji released Echo v1.0.1, a fully offline semantic image search tool for Windows that indexes photos locally using OpenAI's CLIP model (openai/clip-vit-base-patch32) and Facebook's FAISS vector library, letting users search in plain English without sending images or embeddings to the cloud. Echo runs a Python 3.11/FastAPI backend with a C#/.NET 8 WinForms frontend, is summoned by the Win+Shift+F global hotkey, and stores its SQLite database, FAISS index and thumbnail cache in %LOCALAPPDATA%\Echo. Because the bundled backend exceeds 600MB, the installer ships only the frontend and downloads the backend package on first launch, verifying it with a SHA-256 checksum.

read3 min views2 publishedNov 3, 2026
Show HN: Echo – Offline semantic image search for Windows (CLIP and FAISS)
Image: Michielbdejong (auto-discovered)

A fully local, offline semantic image search tool for Windows. Describe what you're looking for in plain English — "sunset over water," "my dog on the couch," "receipt from last week" — and Echo finds matching photos instantly, without ever sending anything to the cloud.

No account. No internet required after setup. No cloud storage of your photos or their embeddings. Everything runs on your machine.

Echo indexes your photos locally using CLIP (openai/clip-vit-base-patch32), which turns both images and text descriptions into vectors in the same embedding space. Searching just means turning your query into a vector and finding the closest image vectors with FAISS. All of this happens on-device — the model, the index, and your photos never leave your computer.

  • Global hotkey (Win+Shift+F) summons a floating search panel from anywhere in Windows
  • Instant, as-you-type search across all your indexed folders
  • Automatic first-run setup — indexes your Pictures folder automatically on first launch
  • Live folder management — add/remove indexed folders, with real-time progress
  • File system watching — new photos dropped into an indexed folder get picked up automatically
  • Tray notifications for indexing start/completion
  • UI that feels like a native Windows feature, not a third-party app
  • Fully offline — after initial setup, no internet connection is required

Backend — Python 3.11, FastAPI, CLIP via HuggingFace Transformers, FAISS, SQLite Frontend — C# / .NET 8, WinForms, WebView2 (HTML/CSS/JS UI), DWM APIs for acrylic blur

echo/
├── backend/
│   ├── main.py            — FastAPI app + all endpoints
│   ├── model.py            — CLIP model 
│   ├── indexer.py          — image embedding + FAISS indexing
│   ├── searcher.py         — text query embedding + search
│   ├── database.py         — SQLite operations
│   ├── watcher.py           — filesystem watcher for auto-indexing
│   ├── paths.py            — resolves where user data vs. bundled resources live
│   └── echo-backend.spec   — PyInstaller build spec
├── frontend/EchoApp/
│   ├── Program.cs                — entry point
│   ├── BootstrapAppContext.cs    — first-run backend setup, inside the message loop
│   ├── AppContext.cs             — tray icon, hotkey, first-run auto-indexing
│   ├── BackendManager.cs         — spawns/manages the Python backend process
│   ├── BackendDown.cs      — downloads the backend package on first run
│   ├── IndexingWatcher.cs        — polls indexing progress, tray notifications
│   ├── SearchWindow.cs           — floating search UI
│   ├── FolderManagerWindow.cs    — folder management UI
│   ├── EchoBridge.cs             — JS ↔ C# bridge for the WebView2 UI
│   └── ui/                       — HTML/CSS/JS frontend
└── echo-setup.iss          — Inno Setup installer script

The backend bundles CLIP, PyTorch, Transformers, and FAISS — 600MB+ once packaged, which is too large for a lightweight installer. So the installer ships only the (small) frontend; on first launch, the app downloads the backend package from this repo's Releases, verifies it with a SHA-256 checksum, and extracts it — a one-time setup step with its own progress window.

User data (the SQLite database, FAISS index, and thumbnail cache) lives in %LOCALAPPDATA%\Echo, independent of wherever the app itself is installed.

Download the latest installer from the Releases page and run it. On first launch, Echo will download and set up its search engine (a few hundred MB, one-time) before it's ready to use.

Backend:

cd backend
python -m venv .venv
.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn main:app --reload

Frontend:

cd frontend/EchoApp
dotnet run
cd backend
pyinstaller echo-backend.spec


cd frontend/EchoApp
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true

  • CLIP performs slighty better on real photos than on stylized/animated content (wallpapers, posters, cartoon screenshots)

  • Windows only (WinForms + WebView2)

  • ONNX-quantized model for faster CPU indexing

  • OCR layer for finding photos by text they contain (screenshots, receipts, signs, documents)

  • Video support — extracting and indexing frames so video files become searchable the same way photos are

MIT — see LICENSE for details.

── more in #ai-tools 4 stories · sorted by recency
── more on @echo 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-echo-offline…] indexed:0 read:3min 2026-11-03 · —