स्मृति · 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.
Featured on LINUX Unplugged #684 — You Ain’t Ready For This Jelly · September 13, 2026.
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.
.exeinstaller (recommended) or.msipackage — Windows 10 / 11, x64.- Windows builds ship without HEIC support for now.
Smriti does not have a code-signing certificate yet. On the first install, Windows may show Windows protected your PC: click More info → Run anyway, then approve Install anyway or the UAC prompt if shown. Finish the installer and launch Smriti from the Start menu. Download only from this website/GitHub;
SHA256SUMSis published with every release.
.dmgfor Apple Silicon only (no Intel build yet).
Smriti is not notarized. Gatekeeper may warn on first launch — try to open the app, then allow it under System Settings → Privacy & Security → "Open Anyway".
.debfor Debian / Ubuntu,.rpmfor Fedora,.AppImagefor any other distro (chmod +xthen run). x64 only.
Every release publishes a SHA256SUMS file covering all artifacts. Tagged
releases run build and package checks in CI before publishing.
After opening your first library, choose Enable smart features in the one-time dialog, or Later to keep browsing without another startup prompt. Setup shows the download size and runs in the background. People, visual search, and offline place names start automatically when ready. You can also enable just one feature in People, Search, Map, or Settings. Downloads are one-time; photos are processed locally and the rest of the app works without them.
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 Smriti detects it was installed through a package manager (apt, brew,
winget, flatpak, scoop, snap, Microsoft Store), the update banner shows
the matching upgrade command rather than self-replacing the binary.
Only GitHub release artifacts are published today — there are no distro packages yet, so a normally installed copy will self-update.
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 six kinds of HTTP request, and you can turn off every one that is not a direct response to something you clicked. 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, ~285 MB), one-time, opt-in. - Visual-search models (
huggingface.co/immich-app/..., ~1.5 GB), part of the same opt-in smart-features setup. Text and photo vectors are computed on your machine; only the model files are downloaded. - Update check (
api.github.com), opt-in — off by default. - Update install (
github.com/.../releases/download/...), only when you click Download. - Optional remote inference — the GPU face-embedding bridge and the provider-backed assistant, both off unless you configure an endpoint or a provider key. These send photo-derived data (face crops) or conversation and library context to a service you choose.
Full disclosure, request by request: 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 models. The face detection + recognition models come from InsightFace. They are not bundled in the installer: the opt-in one-click setup fetches
Smriti-Assets.zip(models, ONNX Runtime and the GeoNames database) from this project's own GitHub releases, and the optional visual-search models from theimmich-apprepository on Hugging Face. 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.


