smriti
Photo library · fully local

Photos without a server.

स्मृति· remembered

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.

Apache-2.0·Free forever·No sign-up

live demo A 30-second loop of Smriti: indexing a folder, browsing the timeline, clustering faces, exploring the map, searching, and entering the slideshow.
01 — Why Smriti exists

Most photo apps want to be a service. Smriti wants to be a tool.

The cloud apps 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.

02 — interactive

Name a face once.
Smriti groups every photo of them.

Tap the button. Six people. Thirty-six photos. The clustering below runs in your browser — the real app does the same on your machine, with InsightFace ONNX models, no cloud round-trips.

36 unsorted faces

All offline.  No upload, no embedding service, no API key.

03 — what you do with it

Six things, deeply considered.

Smriti timeline view showing a scrollable grid of photo thumbnails with a sticky year header

Bring 200,000 photos in.

Point Smriti at a folder or drive. It indexes in place — never copies, never moves your originals.

Smriti people view showing a grid of clustered face thumbnails grouped by person

Name a face once.

On-device face recognition groups every photo of that person across your whole library. No cloud round-trip, no upload — clustering and review both stay on your machine.

Smriti map view showing photo clusters plotted on a geographic map

See where you've actually been.

Every geotagged photo plotted. Click a cluster to drill into the place. Tile cache lives on your drive.

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.

05 — opt-in assistant

Ask for the album.
Watch Smriti do the legwork.

The assistant isn’t a chat window glued to a photo app. It calls Smriti’s own tools — resolve people, resolve places, resolve dates, search photos, prepare an album preview — then waits. It can search and draft albums; it does not rename, move, trash or delete your originals.

you click a recipe →
Make an album of Amma and me in Vizianagaram, 2014.
uses library metadata · asks before changes
activity press a recipe →
smriti proposes cancel approve

You stay in charge.  Assistant is opt-in, provider-backed, scoped to the open library, and album creation needs approval.

06 — interactive

Click. Watch your year
become trips.

Smriti's album-suggestion engine clusters runs of photos taken away from your home city. The real app does this on indexing; below, it does it when you click. The data is synthetic, the algorithm is honest.

366 days · 1,847 photos

Found locally.  No upload, no geocoding API, no “trip suggestions powered by…”

07 — how it compares

One column has
no asterisks.

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

Comparison reflects each project's default setup as of 2026. Smriti's row makes no claims it can't keep.

08 — interactive proof

Move the slider.
See what recompression changes.

Left: your original. Right: what Google Photos' "Storage saver" is documented to do: compress to save space, and resize only when a photo is larger than 16 MP. Smriti never re-encodes anything.

Original photo
Compressed version
Original After Google Photos
Add quality-photo.jpg to website/ A high-detail photo (faces, sky, hair) makes compression visible.
Drag the divider·JPEG · conservative recompress · originals untouched
09 — interactive

Your library lives on the drive.

Smriti writes a database at <drive>/.photovault/ — on the same drive as the photos. Unplug it. Plug it elsewhere. Faces, tags, albums, the whole library travels with it. Try it below.

USB drive:  unplugged
smriti · macbook
247,938 photos 14 people · 23 albums

No library connected

MacBook
smriti · thinkpad
247,938 photos 14 people · 23 albums

No library connected

ThinkPad
Same library.  Same faces, same albums, same memories. No sync. No upload. No re-indexing.
10 — network honesty

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

    Map tiles

    When you open the Map view. Tiles are cached on your drive after first load; subsequent panning is served from cache.

    tile.openstreetmap.org
    Disable: avoid the Map view, or cap the cache in Settings
  2. 02

    Asset pack download — one time

    ONNX models for face recognition + GeoNames database for offline reverse-geocoding. You're prompted on first run; declining is fine, core app still works.

    github.com/ChivukulaVirinchi/photovault/releases
    Disable: decline the prompt on first run
  3. 03

    Update check — opt-in

    If you opt in, Smriti checks for new releases once every 24 hours. Off by default. No photo data, no telemetry, just a single HEAD-style request.

    api.github.com/repos/.../releases/latest
    Default: off
  4. 04

    Update install — only when you click Download

    If you accept an update, Smriti fetches the matching installer for your platform and verifies its SHA-256 against the signed checksum. No metadata about your install or library is sent.

    github.com/.../releases/download/...
    Disable: don't click Download
11 — design discipline

Offline by default.
Never by dogma.

Face recognition is the one slow step. On CPU, a 90,000-photo library takes ~3 hours. If you want to skip the wait, Smriti can borrow a free Kaggle or Colab GPU for the one-time pass — and finish in minutes.

It sends only 112×112 aligned face crops. Never originals, never metadata, never filenames. When the pass is done, you disconnect. Forever, not "until the next sync."

Face embedding · 90K photos
StageCPU (laptop)T4 GPU (Kaggle)Δ
DetectionLocal · ~45 minLocal · ~45 min
Embedding~3 h~2.5 min70×
ClusteringLocal · ~1 minLocal · ~1 min
12 — get smriti

Free. Forever.
No upsell.

Apache-2.0 licensed. Source on GitHub. The asset pack adds face recognition and offline place names — optional, prompted on first run, declinable.

Optional: for face recognition + offline geocoding, also grab Smriti-Assets.zip (ONNX runtime + face models + GeoNames database). Smriti runs without it — the asset pack just unlocks those two features. The app prompts you on first launch.

Apache-2.0 · Free forever · No sign-up · No telemetry