स्मृति · Sanskrit for memory.
Smriti indexes any drive, recognises faces on-device, and surfaces memories — without leaving your machine. No account, no cloud, no server humming in a closet.
Download · Website · Manual · Discussions · Support
Most photo apps want to be a service. They want a login, a sync daemon, a monthly fee, a server you maintain. They want your photos to be content they process — endlessly, in the background, on a machine that runs all year so you can check in twice.
Smriti is none of that. Open the app, browse, close it. Your library is finished work, not a stream that needs draining. When the app is closed, nothing runs. When the app is open, the photos are already where they were — on your drive, in their folders, exactly as you left them.
| Bring 200,000 photos in. Point Smriti at a folder or drive. It indexes in place — never copies, never moves your originals. | Name a face once. On-device face recognition groups every photo of that person across your whole library. No cloud round-trip. |
| See where you've actually been. Every geotagged photo plotted on a map. Click a cluster to drill into a place. Tile cache lives on your drive. | Find that photo of grandma in 2018. Unified search across people, albums, places, dates. Three filters, one result. Milliseconds on 250K libraries. |
| Get reminded, not pestered. "This day, N years ago" surfaces when you open the app. Never a notification. Never a curated highlight reel. | Cull the obvious junk. Duplicates, bursts, near-duplicates surfaced in one place. One-click cleanup. Trash, not delete — restore if you change your mind. |
![]() |
![]() |
![]() |
| Timeline 20+ years of photos, sticky year headers, viewport-driven thumbs. |
People On-device face clustering. Name a face once. |
Map Every geotagged photo plotted. Click a cluster to drill in. |
| Cloud (Google · iCloud) | Self-hosted (Immich · PhotoPrism) | Smriti | |
|---|---|---|---|
| Photos live | On their servers | On your server | On the drive they came from |
| Original quality preserved | Compressed by default (Google's "Storage saver" caps at 16 MP) | Preserved | Preserved — files are never opened for write |
| Account required | Yes | Yes (you set one up) | None |
| Server to maintain | Theirs (you pay rent) | Yours, 24 / 7 | None — it's an app |
| Metadata (faces, tags, albums) | In their database | In your server's database | On the drive with the photos |
| Survives provider going away | No | Only if your server keeps running | Yes — it's files |
| Yearly attention you owe it | Renew subscription | Updates · certs · backups | None |
| Cost over five years | $250 – $750 | NAS + power + your time | $0 |
| Works on a plane | Limited | Limited (no VPN) | Everything |
| Memory footprint when closed | n/a | ~1 – 4 GB resident | Zero |
Smriti writes its database at
<drive>/.photovault/photovault.db— on the same drive as the photos. Unplug the drive, plug it into another computer, open Smriti there: same library, same faces, same albums. No sync, no upload, no re-indexing.
The Smriti website detects your operating system and downloads the normal installer directly. Advanced package choices and checksums remain on the latest release page.
.msiinstaller for Windows 10 / 11.
Smriti's installer is not code-signed. Windows SmartScreen may warn on first launch — click More info → Run anyway.
.dmgor.tar.gzarchives.
Smriti is not notarized. Gatekeeper may warn on first launch — right-click the app → Open → Open anyway.
.debfor Debian / Ubuntu,.rpmfor Fedora,.AppImagefor any other distro (chmod +xthen run).
Linux artifacts include SHA256SUMS for integrity verification. Tagged
releases run build and package checks in CI before publishing.
Click Set up smart features on Welcome. One action downloads and verifies faces, offline place names, and visual search (about 1.8 GB, once). If a library is open, visual indexing begins automatically; pending photos are also picked up after later scans and imports. Smriti remains fully usable if you decline.
Opt-in. Off by default. If enabled, Smriti queries api.github.com at most
once every 24 hours. No photo data leaves your machine. See
PRIVACY.md for the full disclosure.
If you installed via a system package manager (apt, brew, winget,
flatpak), the update banner shows the matching upgrade command rather
than self-replacing the binary.
Build from source
git clone https://github.com/ChivukulaVirinchi/photovault.git
cd photovault
npm ci --prefix src-ui
./scripts/dev.sh # Linux / macOS
# .\scripts\dev.ps1 # Windows PowerShelliPhone photos are HEIC. To decode them from a source build, install
libheif and rebuild with the heic feature:
# Linux (Debian/Ubuntu)
sudo apt-get install libheif-dev
# macOS
brew install libheif
# then build a production bundle
cd src-tauri
cargo tauri build --features heicShipped binaries (.deb, AppImage, macOS .tar.gz) include HEIC support
out of the box. The Windows MSI ships without HEIC for now — libheif
Windows binaries will land in v1.1. Without HEIC enabled, Smriti still
indexes .heic files but reports a clear "HEIC support not compiled in"
error when asked to decode one.
./scripts/setup_assets.sh # Linux / macOS
.\scripts\setup_assets.ps1 # WindowsSee docs/BUILD.md for full setup details including the
WSL + Windows development workflow.
./scripts/release_local.sh ubuntu
./scripts/release_local.sh linux-appimage
./scripts/release_local.sh assets-pack
./scripts/release_local.sh verifyWindows end-to-end local verification:
powershell -ExecutionPolicy Bypass -File scripts\release_local.ps1 -Mode fullThe official release flow is CI-driven from git tags (v*) via
.github/workflows/release.yml.
Smriti makes exactly four kinds of HTTP request. Three of them you can turn off. Nothing else leaves your machine — ever. No telemetry, no analytics, no "anonymous usage statistics."
- Map tiles when you open the Map view (
tile.openstreetmap.org). Cached locally. - Asset pack download (
github.com/.../releases), one-time, opt-in. - Update check (
api.github.com), opt-in — off by default. - Update install (
github.com/.../releases/download/...), only when you click Download.
Full disclosure: PRIVACY.md.
Full user guide and contributor docs are published at chivukulavirinchi.github.io/photovault.
- Getting Started
- Indexing Photos
- People and Faces
- Build Guide
- Architecture Overview
- API Reference (rustdoc)
- GitHub Discussions — questions, feature ideas, show-and-tell.
- Issues — bug reports and feature requests, via the templates.
- CONTRIBUTING.md — dev setup, commit style, CI gates, architectural rules.
- Security advisories — private reporting path for vulnerabilities (see SECURITY.md).
Smriti is free and Apache-2.0 licensed. If it's useful to you, a small contribution helps keep it maintained:
Note on face-recognition models. The face detection + recognition models come from InsightFace and are downloaded from the upstream project on first run, not bundled in the installer. See THIRD_PARTY_LICENSES.md for attributions.
- Rust — the engine: services, DB, ML, indexing
- Tauri 2 — native desktop shell (Linux / Windows / macOS)
- Svelte 5 + Vite — frontend
- SQLite — embedded per-drive database
- ONNX Runtime — on-device face detection + recognition
- MapLibre GL — interactive map view
- GeoNames — offline reverse geocoding
- OpenStreetMap — map tiles
Apache License 2.0. See THIRD_PARTY_LICENSES.md for the full third-party attribution list.


