Skip to content
MrBeanDev edited this page Aug 24, 2026 · 3 revisions

Face Gallery

Face Gallery detects the faces in a pile of photos, works out which photos each person appears in, and lets you browse the result as face cards or as an interactive graph.

The app is public and free to use

face-gallery.mrbean.dev is open to everyone. No sign-up, no account, nothing to install just to look around.

You connect your own backend to it, and a backend running on your own laptop is fully supported — it is the normal way to use the app.

Your data stays yours

The hosted site is only the interface. It is static HTML, CSS, and JavaScript, with no server behind it and no storage of any kind.

Every photo you add is uploaded to, processed by, and stored on the backend you point it at. Point it at http://localhost:8000 and your photos never travel further than your own computer. They are not copied anywhere, not sent to a third party, and nobody running the hosted site can reach them — there is nothing on that side to reach.

Your photos, the cropped faces, and the database all live in one folder on your machine that you can inspect or delete at any time. See where your data is stored.

One thing worth understanding: the app talks to whatever backend URL you give it. If you deliberately point it at a backend on someone else's server, your photos go there instead. Keep it on localhost and they stay local.

Start here

I want to... Go to
Try it with the least effort Running Your Own Backend
Run both halves locally from source Quick Start
Understand what the buttons do Usage
Change tolerance, limits, or storage Configuration
Call the API myself API Reference
Fix a problem Troubleshooting

How it works

Processing runs in two passes.

The first pass scans every photo, detects faces, and builds a list of distinct people. A face is considered new when its encoding is further than the match tolerance from every person already found.

The second pass walks the photos again and links each detected face to its closest known person, recording the bounding box. Encodings computed in the first pass are reused, so no photo is encoded twice.

Detection runs on a copy scaled to at most 1600 px on the long edge, which is several times faster on large photos and costs no accuracy at the default tolerance. Face crops are always taken from the original resolution, so the face images stay sharp.

What it can do

  • Drag and drop photos or a ZIP archive
  • Live progress over a WebSocket, with faces appearing as they are found
  • List view — a card per person, with every photo they appear in
  • Graph view — photos and faces as a node network, in square or radial layout, with hover highlighting, fullscreen, and a minimap
  • Reversible merge — grouping two faces never deletes anything, so a wrong merge can be undone and the display face swapped at any time
  • Rename, disable, or delete people
  • Assign a face to a photo by hand, optionally drawing the bounding box
  • Add more photos to an existing session and re-process
  • Server-side thumbnails with a disk cache, and per-effect toggles for large graphs

Requirements

A modern browser, and a machine that can run the backend.

Safari cannot be used with the hosted frontend. It blocks all mixed content, including requests to localhost. Chrome, Edge, and Firefox 84+ work.

Project links

Clone this wiki locally