Skip to content

About

Smriti — offline-first photo library for your drives. No server, no cloud. On-device face recognition, Google Photos Takeout import. Windows/macOS/Linux.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

32 stars

Watchers

1 watching

Forks

Latest commit

 

History

168 Commits

Folders and files

Smriti

Photos without a server.

स्मृति · 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.

Release CI Apache 2.0 Downloads Stars Support Smriti on Ko-fi

Featured on LINUX Unplugged #684 — You Ain’t Ready For This Jelly · September 13, 2026.

Smriti in motion — 30 second loop showing indexing, timeline, face clustering, map, search, and slideshow

Download  ·  Website  ·  Manual  ·  Discussions  ·  Support


Why Smriti exists

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.

What you do with it

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.

See it

Smriti timeline view Smriti people view Smriti map view
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.

How it compares

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.

Install

The Smriti website detects your operating system and downloads the normal installer directly. Advanced package choices and checksums remain on the latest release page.

Windows

  • .exe installer (recommended) or .msi package — 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; SHA256SUMS is published with every release.

macOS

  • .dmg for 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".

Linux

  • .deb for Debian / Ubuntu, .rpm for Fedora, .AppImage for any other distro (chmod +x then run). x64 only.

Every release publishes a SHA256SUMS file covering all artifacts. Tagged releases run build and package checks in CI before publishing.

Optional smart features

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.

Automatic updates

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 PowerShell

HEIC support (optional)

iPhone 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 heic

Shipped 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.

Local assets

./scripts/setup_assets.sh      # Linux / macOS
.\scripts\setup_assets.ps1     # Windows

See docs/BUILD.md for full setup details including the WSL + Windows development workflow.

Packaging helpers

./scripts/release_local.sh ubuntu
./scripts/release_local.sh linux-appimage
./scripts/release_local.sh assets-pack
./scripts/release_local.sh verify

Windows end-to-end local verification:

powershell -ExecutionPolicy Bypass -File scripts\release_local.ps1 -Mode full

The official release flow is CI-driven from git tags (v*) via .github/workflows/release.yml.

Privacy at a glance

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."

  1. Map tiles when you open the Map view (tile.openstreetmap.org). Cached locally.
  2. Asset pack download (github.com/.../releases, ~285 MB), one-time, opt-in.
  3. 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.
  4. Update check (api.github.com), opt-in — off by default.
  5. Update install (github.com/.../releases/download/...), only when you click Download.
  6. 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.

Documentation

Full user guide and contributor docs are published at chivukulavirinchi.github.io/photovault.

Community

Support

Smriti is free and Apache-2.0 licensed. If it's useful to you, a small contribution helps keep it maintained:

Sponsor on GitHub   ko-fi

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 the immich-app repository on Hugging Face. See THIRD_PARTY_LICENSES.md for attributions.

Built with

License

Apache License 2.0. See THIRD_PARTY_LICENSES.md for the full third-party attribution list.

About

Smriti — offline-first photo library for your drives. No server, no cloud. On-device face recognition, Google Photos Takeout import. Windows/macOS/Linux.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

32 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Contributors

Languages