Skip to main content
  1. Portfolios/

Smriti: Photos Without a Server

·5 mins· loading · loading · ·
Programming
Ch Virinchi
Author
Ch Virinchi
Elixir programmer, rocket propulsion enthusiast. Web Application developer.
Table of Contents

Everyone with a phone in their pocket is a photographer now. We take more photos in a week than our parents took in a decade. And yet finding the one that actually matters — your grandmother at last year’s family function, buried somewhere in forty thousand others — has never been harder.

Most photo apps don’t want to solve that. They want to be a service — a login, a sync daemon, a monthly fee, a server that runs all year so you can check in twice. I wanted a tool instead. Your library is finished work. It shouldn’t need to be a stream that keeps draining.

So I built Smriti — स्मृति, Sanskrit for memory — photos without a server. It indexes any drive, recognises faces on-device, and surfaces memories, all without leaving your machine. No account, no cloud, no server humming in a closet.

Don’t take my word for it. Type something below.

type to search the library
try →

Meaning, not magic.  Hover a photo to see why it matched. Strong matches sit closer to the top.

The grid above is synthetic; the constraint — pixels, not filenames — is real. On your actual library, Smriti turns a word into a local vector query and finds what’s in the frame, running entirely on your CPU.

See it on a real library: The live demo shows this same search, plus face clustering, trip detection, and a portable-drive toggle — all running against an actual photo library, in your browser.

Six things, deeply considered

  • Bring 200,000 photos in. Point Smriti at a folder or a drive. It indexes in place — never copies, never moves your originals.
  • Name a face once. On-device face recognition, InsightFace models, no cloud round-trip. It groups every photo of that person, from every year.
  • See where you’ve actually been. Every geotagged photo, plotted on a map, reverse-geocoded offline. The tile cache lives on your drive, not someone’s CDN.
  • Find that photo of grandma in 2018. One search across people, albums, places, and dates. Milliseconds, even on a 250,000-photo library.
  • Get reminded, not pestered. “This day, N years ago” surfaces when you open the app. Never a push notification. Never a curated highlight reel.
  • Cull the obvious junk. Duplicates and bursts, surfaced in one place, one-click cleanup. Trash, not delete — you can always change your mind.

Ask for the album. Watch Smriti do the legwork.

On top of search sits a first-class AI assistant with tool-calling access to your library’s metadata — people, places, albums, dates. Say “make an album of Amma and me in Vizianagaram, 2014” and it resolves the people, resolves the place, resolves the date, and proposes the album. It doesn’t rename, move, trash, or delete anything on its own — album creation waits for your approval. And it’s worth being precise here: the assistant is opt-in and provider-backed, meaning it does call out to an AI model to reason — but only ever over metadata. Not one photo is ever sent anywhere.

Click. Watch your year become trips.

Smriti also clusters runs of photos taken away from your home city into trips automatically, at indexing time — no manual tagging, no “add to album” busywork. A year of scattered photos turns into a handful of trips you can actually scroll through.

Your library lives on the drive, not the machine

Smriti writes its database to <drive>/.photovault/photovault.db — right next to your photos, not into a hidden app-data folder. Unplug the drive, plug it into a different laptop, open Smriti, and it’s all there — same faces, same albums, same memories. No sync, no re-indexing, no lock-in to one computer.

How it actually compares

Cloud (Google Photos, iCloud) Self-hosted (Immich, PhotoPrism) Smriti
Original quality preserved Compressed past a threshold Yes Yes, always
Account required Yes Usually Never
Server to maintain No (they do) Yes, by you No
Survives the provider going away No Yes Yes
Works on a plane No Only if self-hosted at home Yes
Memory footprint when closed N/A ~1–4GB resident Zero

Comparison reflects each project’s default setup as of 2026. This row doesn’t get to make claims it can’t keep.

Offline by default, never by dogma

The one genuinely slow step is building face embeddings for a large library — roughly three hours on a CPU for 90,000 photos. Smriti gives you the option to borrow a free Kaggle or Colab GPU for that one-time pass instead: three hours becomes about two and a half minutes. It sends only 112×112 aligned face crops for that pass — never originals, never metadata, never filenames — and when it’s done, you disconnect. Forever, not “until the next sync.”

Network honesty

Smriti makes exactly four kinds of HTTP request in total, and three of them are opt-in or off by default: cached map tiles, a one-time optional download for the face-recognition and place-name asset pack, and an opt-in update check. No telemetry, no analytics, ever. The full breakdown is in PRIVACY.md — I’d rather you verify it than take my word for it.

Download: Free and open-source under Apache-2.0, built with Rust, Tauri, and Svelte. Windows, macOS, and Linux builds are on the latest release.

Conclusion

You didn’t need to take my word for any of it — you just searched a grid of pictures without typing a single tag. Scale that up to your real library, and that’s the whole pitch: fast, private, and it never has to leave your machine to work.

Free. Forever. No upsell. Try the live demo on a real library, or head to GitHub to download Smriti and read the code for yourself.

Related

LiveTable: Real‑Time Data Tables in Elixir
·5 mins· loading · loading
Programming
Most ERPs of the world have begun to show their age.
Turning JEE Counselling Chaos into a LiveView Showcase
·5 mins· loading · loading
Programming
A real-time JOSAA counselling platform built with Phoenix LiveView to help students make informed college choices.
Integrating Sonnet 3.5 with Phoenix LiveView: AI-Powered Web Apps
·5 mins· loading · loading
Programming
Integrate LLMs like Anthropic&rsquo;s Sonnet 3.5 with Phoenix LiveView for AI-powered web apps.