Inspiration
I built Local Face Photos because I got tired of the constant “buy more storage” nudges from cloud photo services.
Like many people, I had years of family photos and videos sitting in Google Photos. When I checked what was using most of my cloud storage, the answer was obvious: photos and videos. Google Takeout let me download everything, but then I had a new problem:
Now what?
I wanted Google Photos-style search without uploading my private memories to yet another cloud service. That became the starting point for Local Face Photos: a private, local-first way to search personal photo libraries.
What it does
Local Face Photos scans folders you choose, detects faces locally, lets you tag people, and makes your library searchable by:
- people
- albums
- custom tags
- dates
- photos and videos
The next layer is natural language search using OpenAI, so a user can ask things like:
Show me photos of Aman from 2022
Find Ironman Malaysia photos with Preeti
Show videos from December 2022
The goal is simple: make personal photo search feel useful again, while keeping the actual photos local.
How we built it
The app uses:
- Python for the local backend
- InsightFace for face detection and face embeddings
- SQLite for the local searchable index
- Tauri for desktop packaging
- HTML/CSS/JavaScript for the frontend
- OpenAI for the natural language query layer
The face recognition pipeline runs locally. Each detected face is represented by an embedding vector, and similar faces are matched using embedding similarity. The database stores photos, faces, tags, albums, metadata, and ignored face boxes so the app can improve as the user tags more people.
For videos, the app samples frames, detects faces, clusters repeated appearances, and shows representative face thumbnails instead of asking the user to tag the same person repeatedly.
Challenges we ran into
The biggest challenges were:
- making face tags propagate without forcing users to tag every photo manually
- handling noisy background faces in photos and videos
- keeping scans usable for large photo libraries
- Temporal Clustering & Optimization: Managing heavy video scanning without processing every single frame, and grouping recurring faces across video timestamps so the user doesn't have to tag the same person twenty times
- packaging a Python ML backend inside a desktop app
- being honest about privacy while still making the app easy to use
Another challenge was distribution. The first public build works on macOS Apple Silicon, while Intel Mac support is still experimental and generated through GitHub Actions.
Accomplishments that we're proud of
I’m proud that this became more than a prototype. It can scan real exported photo folders, detect faces, tag people, search by multiple criteria, handle videos, and run as a desktop app.
I’m also proud of the local-first design. Photos, videos, embeddings, tags, and metadata stay on the user’s machine. The app is built around the idea that personal memories should not need to be uploaded somewhere else just to become searchable.
What we learned
I learned that building a useful local-first app is less about one big model and more about carefully connecting many small systems:
- face detection
- embedding matching
- metadata extraction
- search filters
- SQLite schema design
- desktop packaging
- privacy-conscious UX
- performance tradeoffs for large libraries
I also learned that video support changes everything. A single video can contain dozens of face detections, many background people, and codec issues. Clustering and filtering became just as important as detection.
What's next for Local Face Photos
Next, I want to improve the natural language search layer so users can search in a more human way, such as:
Find photos of Aman at birthdays before 2020
Show trips with Preeti and Aman
Find videos from December 2022
Other next steps include:
- stronger OpenAI-powered query understanding
- better onboarding and demo media
- Windows and Intel Mac validation
- signed and notarized macOS builds
- improved video timestamp extraction
- optional location search from photo metadata
The bigger idea is still the same:
What if the intelligence came to your photo library, instead of your photo library going to the cloud?
Built With
- css3
- html
- insightface
- javascript
- openai
- python
- sqlite
- tauri
Log in or sign up for Devpost to join the conversation.