Search
Search is how you narrow a pass to something the chips cannot say on their own — a rating range, a date, a camera, a word you wrote on a frame — or to several of those at once. It orders and hides; it never decides anything.
The search field
The field at the top of the side panel is a button: click it, or press ⌘K, and the search panel opens. What the field offers is what this Mac can do, and in 0.1 it reads Search filename, date, camera. Type and the results update as you type. At the foot of the panel the count of what matched, 24 frames, stands beside Save this search… and Open as pass.
Press ↩, or Open as pass, to start a pass over the frames it found. Clicking one of the results starts the same pass, but first it sets Single's canvas back to Single, which matters only after Compare, and, when that frame was not in the pass you were in, puts the state back to All. ↩ and Open as pass do neither. The pass opens at its first frame, unless the search is only a state (status:pick, status:hold or status:unrated on its own) or the field is empty. Those make no search chip; they set the state, as clicking its chip would (Takes, Holds, Undecided, or All for an empty field), and the pass stays on the frame already on screen, or at the same place in the count when that frame is not in it. After a click on a result, a search that is only a state, or an empty field, stays on the frame you clicked, since that is then the frame on screen. Any other search opens on the first frame it found, whichever result you clicked. Esc closes the panel without starting one, empties the field and leaves whatever pass you were in untouched.
However you start a search's pass — from the panel, from a recent search or from a saved search in the Groups pane — it opens in Frames, whichever view you were in.
Terms
A search is one or more terms. A key:value term narrows; several terms narrow together.
| Term | Matches |
|---|---|
status:pick, status:hold, status:reject, status:unrated | The culling state. These are the stored words, so status:pick finds your takes and status:unrated the undecided frames. status:take is not understood. |
rating:>=4, rating:3, rating:<2 | The star rating, with =, >=, <=, > or <. |
date:2026-06-14 | The capture day, counted in UTC; see the caution below. |
camera:X-T5 | The camera body, as a part of its name. |
favourite:yes, favourite:no | Favourites. true and false work too. |
orientation:landscape, orientation:portrait, orientation:square | The frame's shape. |
keyword:beach | A keyword you gave the frame, as part of the word. |
person:maya | A named person whose face the frame holds, as part of the name. An unnamed person cannot be found this way — name the circle in People first. |
place:rome | The frame's place, as part of its name. It finds places only, never a journey. |
note:duplicate | A note you wrote on a decision — both the sentence and the reason chips beside it. |
label:cake | A scene label macOS's own image classifier put on the frame. |
filename:DSCF | Part of the file name. name: works the same. |
group:"14 Jun" | Part of the label the import filed the frame under, such as 14 Jun · 42 min; quote it when it has a space. See The import label. |
Terms can be combined with AND, OR, NOT and parentheses, written in capitals. In lower case they are ordinary words.
date: counts days in UTC, not on your own clock. Vixlo keeps each capture time as an exact moment, from the camera's clock and the time zone the file records (this Mac's, when it records none), and date: asks which UTC day that moment falls on. Away from UTC, frames taken near midnight land on the neighbouring day: in New York in summer, a frame taken after 8 pm on 14 June matches date:2026-06-15; in Sydney in winter, one taken before 10 am on the 15th matches date:2026-06-14. So date: is not exact for a day's frames.
To come closer to a day on this Mac's clock, use group:. It is not exact either: the label has no year, and it carries the day a stretch of shooting began. See The import label.
When a term is not understood
Above the results, in amber, a line names every term Vixlo could not read: Not supported yet: lens. It appears for a key Vixlo does not index, such as lens:, and for a value it cannot read. status:take gives Not supported yet: status, because the state's stored word is pick; rating:four, a date: not written like 2026-06-14 and an unclosed parenthesis give theirs. Vixlo ignores such a term instead of refusing it, so it narrows nothing: status:take on its own finds the whole library. A lower-case and, or or not is flagged as operator-needs-capitals but still searched for as a word, so status:pick or status:hold usually finds nothing; write OR. If a search finds too much or too little, look for the amber line.
Plain words
A bare word with no key matches part of a file name, one of your keywords, or the import label described below, so aug can also find August's frames. It does not reach the notes you wrote on decisions; use note: for those. To search the label alone, use group:.
The import label
Every frame is filed at import under a short label made from capture times, such as 14 Jun · 42 min, and group: matches part of it: group:"14 Jun" finds the frames filed under a label for the 14th of June. The import label says how the label is made, how to search it, and what it does not do.
A search is a chip
A committed search joins the views line as a chip carrying its text, and a frame must match it as well as everything else there — the state, a person, a place, a mark. Its × puts it down, and so do Clear filters in Organise and filter and All frames in the Groups pane. A search that is only a state, status:pick, status:hold or status:unrated on its own, becomes the Takes, Holds or Undecided chip instead, since that is the same narrowing said once. status:reject is the exception: it stays a search chip reading status:reject, and the state does not change.
A search's pass holds still like any other: see Narrowing the pass. Searches you ran or kept are on Recent and saved searches.