You select photos and ask Raza Photos to tag the faces in them. It finds each face, compares it with the others, and shows you groups to name. All of that runs on your own devices, with Apple's Vision framework, and the names and face boxes end up in your files only when you save.
Raza Photos never goes through your library looking at faces in the background. Detection runs only on the photos you select, when you choose to tag faces, and stops when you close the sheet.
There is no face index for the whole library, no profile of anyone, and nothing that keeps running. If you never use it, no face in your library is ever analyzed.
What happens when you tag faces
Five steps, all on the device you are holding.
Detection needs more detail than a thumbnail has, so the app loads each selected photo at full size. On a Mac, it reads the file from your folder. On an iPhone or iPad, it fetches the full-size photo from your Mac over your home network, and the iPhone does the detection itself. If a selected photo belongs to a burst, the whole burst is included.
Apple's Vision framework looks at each photo and returns a box around every face. This is a model that ships inside iOS and macOS, so it works with no network connection at all.
The app crops each face with a little room around it and asks Vision to describe it as 768 numbers. Two crops that look alike produce numbers that are close together. The next section explains what that means.
Faces whose fingerprints are close enough end up in one group. The app only ever compares faces within your selection. Faces that already have a name are never grouped with a face carrying a different name.
You see the groups, name them, and expand a group to name its faces one by one. Nothing is final until you confirm, and the names are stored in your library. They go into the photo files themselves when you choose Save Metadata.
What a fingerprint is
Think of how a map describes a city with two numbers, latitude and longitude. Two numbers are enough to place any city on the map, and once every city has its place, you can tell how far apart two of them are just by measuring the distance between their points. You don't need to know anything about the cities.
A fingerprint does the same for a picture, with more numbers. Vision looks at a face crop and produces 768 numbers. Together they are the picture's coordinates in a space with 768 directions instead of two. Pictures that look alike get coordinates that are close together, and pictures that look different land far apart. Comparing two faces becomes a question of arithmetic: how far apart are these two points?
Simplified to two dimensions. The real space has 768, but the idea is the same: nearby points are faces that look alike.
Where the numbers come from
Nobody sat down and decided what each number means. They come from a neural network, and the technique has a name: an embedding. An embedding is a way of turning something hard to compare, like a picture, into a point in a space, arranged so that distance in the space reflects similarity in the world.
Imagine sorting a huge pile of photos onto a table, with one rule: pictures that look alike go close together, and pictures that look different go far apart. Nobody writes down the categories. You just keep placing photos and adjusting, and groups form by themselves. A neural network is trained in a similar spirit. It is shown a great many example images, and it adjusts itself, over and over, until placing similar pictures near each other and different ones far apart becomes something it does reliably. Once trained, it can place a picture it has never seen, and the spot it picks is the fingerprint.
Why no single number means anything
It is tempting to think one number must stand for something, perhaps the shape of a nose or the shade of a skin tone. It doesn't work that way. Meaning is spread across all 768 numbers at once, and what matters is the arrangement: which points sit near which.
A map helps again. Rotate the grid lines you measure a map against, and every city's coordinates change, but every distance between cities stays exactly the same. The axes were never the point. An embedding is like that, with 768 axes nobody labeled. Single coordinates have no meaning you could read, and the distances between points carry all of it.
Language models show the same thing. In a famous result for word embeddings, taking the point for "king", subtracting "man" and adding "woman" lands near "queen". Directions in such a space can carry meaning, even though no individual axis says "royalty" or "gender". Nobody planned that. It emerged from the training.
Measuring "close", with a little maths
You already know the formula. On a flat map, the straight-line distance between two points follows from Pythagoras:
For three numbers, add a third term. For 768, add 768 terms: take the difference in each coordinate, square it, add them all up, and take the square root. Here is a tiny version with three numbers. Take two points, A = (0.2, 0.9, 0.4) and B = (0.3, 0.8, 0.5). Each coordinate differs by 0.1, so the distance is √(0.01 + 0.01 + 0.01) ≈ 0.17. Vision does the same thing with 768 coordinates.
Vision also scales every fingerprint to length 1. Picture each fingerprint as an arrow from the center of the space, and all the arrows the same length, so every point lies on the surface of a sphere. Then distance is just another way of reading the angle between two arrows: the closer the arrows point, the smaller the distance. The largest possible distance is 2, for arrows pointing in opposite directions.
| Distance | Angle between arrows | What it looks like |
|---|---|---|
| 0.22 | about 13° | Raza Photos puts two faces in one group |
| 1.16 | about 71° | Typical for two unrelated photos |
| 2 | 180° | The largest it can be |
Two unrelated photos usually land somewhere between 0.8 and 1.4 apart. Raza Photos treats two faces as the same person only when they are within 0.22, a small fraction of that. It is a strict rule on purpose: the app would rather leave a face ungrouped for you to place than merge two different people.
What is kept, and what isn't
What gets written to your files
When you choose Save Metadata, each tagged person is written into the photo as XMP: the name in PersonInImage, and the face box as a region, in the ACDSee region format as well.
Faces already tagged by another app, ACDSee included, are read first and kept as they are. Raza Photos only adds faces that no existing tag already covers.
Nothing else about the photo changes, and the pixels are never touched. How saving works → What is read →
What it won't do for you
Grouping is based on how faces look in the photos you selected, so it can put two similar-looking people together or split one person across several groups, especially across years, glasses, angles or very small faces. Like any face detector, it can also miss faces that are tiny, turned away or covered. Check the groups before you save. That is why the last step is yours.
It also doesn't look beyond your selection. It compares only the faces in the photos you picked, including any already tagged in those photos, so it won't recognize someone just because you tagged them elsewhere last month. Selecting more photos of the same person in one go gives it more to group.
Faces are found with Vision's DetectFaceRectanglesRequest, which returns normalized bounding boxes. Each box is cropped from the full-size image with 15% padding on every
edge, and the crop goes through GenerateImageFeaturePrintRequest to produce a feature print: 768 single-precision floating point numbers, normalized to length 1, from Vision's second image feature print revision on current macOS.
Two faces match when the distance between their feature prints, which is plain Euclidean distance as reported by Vision, is 0.22 or less. If both faces already carry a name, the names must also be identical. Groups are formed by transitive closure: if A matches B and B matches C, all three are one group, even if A and C wouldn't match directly.
Newly detected faces are dropped when they overlap an existing face box by more than 30% (intersection over union), so faces already tagged, in a file or in your library, stay the authoritative ones. Detection and grouping run in a background task. The cropped images and feature prints live in memory for the length of the scan.