Skip to content

Playbooks · A pile of photos

From a pile of unsorted photos to the folders I already have.

Three tools, around one move. Local indexes my folders by what their pictures show. Sort suggests where each unsorted photo belongs and writes a script that moves them. Geo and Local then catch up with what moved. Nothing passes between them on its own, and this route is not a pour of saved files: Sort reads the index Local keeps inside my folders, and Local and Geo see the moved photos only when I update their indexes.

What I start with and end with

Start with
A folder of photos I already keep in folders, such as Events by month and Things by what they show. Beside it, a folder of photos I never filed, such as Misc.
End with
The photos I accepted moved into those folders, or into new ones, and an undo script for the move. Every photo I left is still where it was.
Models used
Sort uses Apple’s Vision, part of macOS, to compare how photos look, score them and name new folders. Local uses EmbeddingGemma, a model that runs on my computer, to index pictures by what they show. Sort reads those vectors and runs no model of its own for them. Geo uses none.

The route

  1. Local: index the folders sorted by what they show. Make an index in each top folder that is sorted by what photos show, such as Things and Home. Do the same for the unsorted folder. This step is optional: without it, Sort compares by Apple’s model alone. On my check, Apple’s model put 73% of photos in the right folder first, and EmbeddingGemma 84%. It is slow: about two seconds a picture.
  2. Sort: suggest, then choose. Choose the folder that holds my photo folders, then the unsorted one. Untick folders sorted by who is in them, such as People, because Apple’s models do not tell people apart. Sort suggests a folder for each photo by date where it can, and by look otherwise. If Local’s indexes do not cover every folder sorted by what it shows, Sort says which to index, and uses Apple’s model for all of them. Every suggestion starts on Move: leave the ones that are wrong.
  3. Save the move script, read it, run it. Sort moves nothing. It saves a script that moves each photo I accepted, with its raw file and sidecars. The script never overwrites a file, and as it runs it writes an undo script beside itself.
  4. Local and Geo: update their indexes. Both folders have changed, so Local’s indexes of the unsorted folder and of the folders photos went into are out of date, and so is Geo’s index if it covers them. Update each one in Local, and Update in Geo.

What to check, and where

How it went for me

I ran Sort on my own photos, about 12,000 in folders, to sort a Misc folder of about 160. Only Misc had a Local index, so Sort compared by look with Apple’s model alone. Before building Sort, I checked it by hiding 10% of the photos I had already filed: by date it put 92% of 845 event photos in the right folder first, and all 541 it was sure about; by look, 73% of 44 photos, or 84% with EmbeddingGemma, and 95% within its first three. That look sample is small.

I have not yet taken the whole route: indexing Things and Home in Local first, and updating Local and Geo after a move.