Skip to content
← Back

phota

Folder cleanup utility · Python, FastAPI, React · Jun 2026

Every photo folder I touch turns into a mess. Camera dumps next to screenshots next to exports, five near-identical shots of the same thing. phota is the cleanup tool I wanted: type phota in a terminal and a small control window opens on the folder I already have open in Finder. No importing, no library. The folder stays a folder.

The phota picker window listing the folders currently open in Finder
Type phota in any terminal. It offers the folders you have open in Finder.

Photo apps want to own my photos. Import them, organize a copy inside a database, and the original folder is still a mess. I wanted the opposite: a tool that walks into the folder, tidies it in place, and leaves. Re-ordering is written back as numbered filenames, so the order survives anywhere. Repeats are found with a perceptual hash and only flagged, nothing moves until I say so. Anything that touches disk writes an undo manifest first.

The phota control window on a folder of 75 photos, with rows for sorting by date, grouping by day, camera and format, finding duplicates, renaming, and tidying Finder icons
The control window on a folder of 75 photos: sort, group, find repeats, rename, tidy the Finder icons.

A Python engine scans the folder once into a local SQLite index: EXIF, sharpness, exposure, perceptual hashes, burst groups. A FastAPI server wraps the engine and serves a small React app on localhost, so the window is just a browser doing its best impression of a utility. There is an AI layer for semantic search and picking the best shot of a burst, but it stays hidden until you bring your own key (Claude, GPT, or a local model). Without a key, everything local still works.

Python, FastAPI, and SQLite for the engine. React, Vite, and Tailwind for the window. Built with Claude Code, spec first: the rule that nothing touches originals without an explicit apply came before any feature, and 193 tests hold it in place.

View the code on GitHub ↗