Skip to content

Latest commit

 

History

161 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

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

  • .msi installer for Windows 10 / 11.

Smriti's installer is not code-signed. Windows SmartScreen may warn on first launch — click More info → Run anyway.

macOS

  • .dmg or .tar.gz archives.

Smriti is not notarized. Gatekeeper may warn on first launch — right-click the app → Open → Open anyway.

Linux

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

Linux artifacts include SHA256SUMS for integrity verification. Tagged releases run build and package checks in CI before publishing.

Optional smart features

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.

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

  1. Map tiles when you open the Map view (tile.openstreetmap.org). Cached locally.
  2. Asset pack download (github.com/.../releases), one-time, opt-in.
  3. Update check (api.github.com), opt-in — off by default.
  4. Update install (github.com/.../releases/download/...), only when you click Download.

Full disclosure: 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 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.

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

26 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Contributors

Languages