Skip to main content
Next

What stays on your Mac

Proposals are made from numbers Vixlo reads off your photographs on this Mac. Read this page if you want to know what is written where and what is sent anywhere (nothing).

No key, no model to download​

Proposals use nothing from the Settings window. The Ollama address, the API keys and the Local only switch there belong to the edit page's Ask for an adjustment… field, and nothing in the proposals reads them. No model has to be fetched for proposals to work, and a Mac with no network does exactly what a connected one does. The measurement, the rules, your taste and the agreement score run entirely here.

What is written beside the library​

Inside the library folder, a Proposals/ folder holds up to three files, each written when there is something to put in it. Two of them are worked out from your photographs and decisions, and Vixlo rebuilds either if it goes. The third is yours: delete policy.json and the library goes back to the criteria Vixlo ships with, and the floors and switches you set are gone.

  • measurements.json is what the app read off each photograph: its sharpness, the rectangle and capture quality of each face it found, whether an eye read closed, how much of the frame is crushed or blown, the mean luminance, and whether a subject was found — plus the file's size and modification date, so it can tell whether the photograph it measured is still the one on disk, and a fingerprint of the file's contents where the library has recorded one. No pixels and no thumbnail. It does name the photographs, though: each entry is filed under the frame's id. A photograph that a card or folder import brings into the library is given an id made from a fingerprint of its contents, which holds no path. A frame already in the library keeps the id it was given, so a library that an earlier version of Vixlo imported into can still file frames under the path their files had when they were scanned, usually a path on the card ending in the file's name. Scanning a card into the library again does not change an id. Nothing in it is a decision.
  • policy.json is the criteria you set in the Proposals and criteria pane. It appears the first time you change one; until then the library uses the criteria Vixlo ships with, and there is no file.
  • adjustment.json is the one number this shoot's own decisions contribute to the ranking — whether it was culled harder or softer than you usually cull. It is written the first time Vixlo works that number out, which waits until the library has been measured and does not happen while Learn from my decisions is off.

An accepted proposal is written exactly the way a key is. The decision goes into the library and into the XMP file beside the photograph, and it says where it came from: which Accept made it, or, when you decided against a live proposal with a key, what the app had said.

What is written in your own folder​

What the app learns from your decisions lives outside every library, in ~/Library/Application Support/Vixlo/Learning/, in a folder of your own: decisions.jsonl, one line per decision, and model.json, the ranking fitted from it. The ranking can be deleted at any time and is rebuilt from the log.

A line of the log is mostly numbers and codes: what the frame measured, which way you decided, whether you were agreeing with the app or correcting it, which library and which machine, when, and — when the app had marked that frame — the number it was leaning by. It can carry the nine reason codes from your note card. It never carries a coordinate, a name you gave a person in People, or the text of a note you wrote. The photograph is named by a fingerprint of its contents.

Two things in a line can hold a file path, though, when a frame's id is one. A photograph with no fingerprint yet, such as one you decided in the first moments after an import, is named by its frame's id instead, and the line is marked as such. A frame that a card or folder import brought in has an id made from its fingerprint, which holds no path; an older frame's id is the path its file had when it was scanned. And a frame that sat in a burst when you decided it also carries the burst's name, which is made from the id of the burst's first frame: no path for a frame imported now, and for an older one the same kind of path, with that file's name at the end. A path is only as private as the folders in it, so if you name folders after people or places, those names can be in the log. Nothing here is sent anywhere, and no code that reads or writes this folder opens a network connection.

Forget my taste… in the criteria pane is the one thing that deletes this folder's files, and it asks first. See Learning from your decisions.

Measuring​

Each frame is measured once, in the background, as a library opens. Measuring a library says how far it has got, how to start it by hand, and what makes Vixlo read a frame again.