Data & algorithms
Photato
A self-hosted photo library in Rust that organizes existing folders without ever writing to the original photos.
Technologies: Rust · SQLite · ONNX Runtime · Leaflet
Stage: Version 0.5; usable for testing against an existing photo library
Screenshot tour
Step through Photato's timeline, places map, events and face grouping. These are screenshots from a local run against public-domain and CC0 photos, not a live instance.

A photo library that leaves the photos alone
Photato is a photo library for a small self-hosted installation. It browses folders of photos that already exist, rather than importing them into its own storage. Original photos, videos and sidecar files are read-only inputs. Albums, tags, ratings, favorites, people and descriptions live in Photato’s separate catalog, so deleting an album or correcting a face never touches a file.
It is a single Rust program with SQLite by default, so it needs no database server, Redis, Node.js or machine-learning service. Firebird, PostgreSQL and MariaDB are optional for running several application instances against one shared catalog.
The screenshots on this page come from Photato running on my machine against a small demo library, not my own photos. They show 21 CC0 photos from Yosemite and Zion and 10 public-domain portraits; the credits are at the end. Photato itself does not run on this website.
Places and events, from the photos’ own metadata
Photato reads capture times, camera details and GPS from EXIF, and descriptions, dates and locations from Google Photos JSON sidecars. Sidecars are read, never rewritten.
Nearby GPS coordinates become suggested places, and photos taken close together in time become suggested events. There is no reverse-geocoding service, and the map loads tiles only when you open it. Photos without GPS are never given a guessed location: the Zion photos in the demo have capture times but no coordinates, so they form events but stay off the map.
People, grouped on your own machine
Face detection and grouping run locally with pinned, hash-verified models through ONNX Runtime’s CPU backend; no photos are uploaded. Photato proposes groups of unknown people, and you name, merge, split, confirm or correct them. Corrections survive later analysis and rescans, and merges can be undone.
In the demo, analysis put all four Lincoln portraits in one group and all three of Douglass. It split Mark Twain in two: the 1907 portrait of him at 71 formed its own group, apart from photographs from 1867 and 1871. One merge corrected it, which is the review workflow Photato is built around.
Built to be trusted with a real library
Scans run as durable background jobs with bounded parallelism, progress, error reports and cancellation. A file that disappears is marked missing only after a complete, error-free scan, so a cancelled or failed scan never hides photos. Missing entries keep their organization and cached previews. An audit command records the SHA-256, size, modification time and mode of every original before testing and verifies them afterward.
Search uses SQLite full-text search across filenames, paths, cameras, descriptions, tags, and people, place and event names. The gallery has a scrolling date timeline, folders, favorites, an archive, exact-duplicate detection, keyboard navigation and a slideshow.
What it is not yet
Version 0.5 is usable for testing against an existing library, but it is not a complete replacement for a project like Immich. Phone backup and mobile apps, uploads, multiple users, sharing links, visual search, crop and color editing, and video transcoding are not implemented.
Demo photo credits
The Yosemite photos are by Brush1988 and the Zion photos by Vulturesong, both released under CC0 on Wikimedia Commons. The portraits are public domain. Year-only and circa dates are entered as January 1, which is why one Lincoln portrait shows January 1, 1858.
Portrait sources
- Abraham Lincoln, 1858
- Abraham Lincoln by Mathew Brady, 1861
- Abraham Lincoln by Alexander Gardner, 1863
- Abraham Lincoln by Mathew Brady, 1864
- Mark Twain by Abdullah Frères, 1867
- Mark Twain by Mathew Brady, 1871
- Mark Twain by A. F. Bradley, 1907
- Frederick Douglass, circa 1850–1860
- Frederick Douglass, circa 1860s
- Frederick Douglass by George Kendall Warren, circa 1879