Skip to content

The frustrating version of this problem is always the same shape: there's an image you know exists, you can picture it clearly, and the only things you actually remember are facts that have nothing to do with its filename. A rough date. That you rated it well. That it was unusually large, or a portrait crop, or came from a folder about a project two jobs ago. Scrolling a folder tree by eye, hoping to recognise the thumbnail, is the default approach and it's also the slowest one — it treats the problem as "where did I put this" when the actual problem is "what do I remember about it," and those two questions call for completely different tools.

The fix is turning each fragment of memory into a query clause and stacking them until the result set is small enough to scroll. None of it depends on having tagged the file when you first saved it — the useful clues are almost always things the index already captured on its own.

Filenames were never going to solve this anyway. A file saved two years ago carries whatever name the camera, the export tool or the download gave it — IMG_4821.heic, Untitled_final_v2.png — and almost nobody renames a reference image the moment it's added, because renaming takes time that feels wasted on a file you might never look at again. That's precisely the gap this approach is built to close: it treats the filename as irrelevant and searches everything else the file actually carries instead, which is usually far more than it feels like from memory alone.

Step 0: Write down every fragment before searching

Before typing anything, it's worth spending thirty seconds listing every half-memory rather than jumping straight to the first one that comes to mind. A rough date, an impression of size or shape, whether it felt like something worth rating, which project or trip it might be connected to — each fragment becomes one clause, and having the full list up front means building the query in the order that narrows fastest rather than the order the memories happened to surface in.

It's also worth noticing what this approach doesn't require: it doesn't require having been a diligent tagger two years ago, it doesn't require remembering a project name accurately, and it doesn't require the file to have been opened even once since it was originally saved. Every clue used below is something the first pass already captured automatically, which means the search works just as well on a file you saved once in a hurry as on one you carefully filed and labelled at the time.

Step 1: Start from the one fact you're most sure of

Pick whichever memory feels most reliable and turn it into a single clause first, rather than trying to write the whole query from memory in one go. A rough date is usually the strongest starting point, because it narrows a library of tens of thousands down to a window of weeks without needing to be exact.

/added:2024-01..2024-06
added2024-01..2024-06
890 items
A six-month window, nothing else specified yet — still a lot of files, but a fraction of the full library.

Eight hundred and ninety is still too many to scroll, but it's a start, and every clause added from here only narrows it further.

Step 2: Add whatever you remember about the file itself

If the image was unusually large, a specific crop shape, or a particular format, that's a second clause that costs nothing to add and often does more narrowing than the date did.

/added:2024-01..2024-06 width:>3000
added2024-01..2024-06width>3000
214 items
A width floor on top of the date window — a fact about the file itself, not something you'd have had to tag in advance to search by later.

width and height read straight off the file at index time, so this works whether or not the image was ever opened again after it was first added — there's nothing to have forgotten to record, because nothing needed recording in the first place.

The same is true of format and media type. If the memory includes "it was a screen recording, not a photo" or "it came from a raw file, not a JPEG," type:video or ext:heic narrows just as hard as a dimension does, and neither requires the file to have been touched since the day it was added — the first pass read the format once, and that fact doesn't age.

/added:2024-01..2024-06 type:image ext:heic
added2024-01..2024-06typeimageextheic
156 items
Format narrows almost as well as size does, and it's often a clearer memory than an exact pixel width — "it was a HEIC" is easy to be sure of.

Step 2b: Combine two weak memories before trusting one strong one

A memory that feels shaky on its own — "maybe it was large, maybe not" — is still worth adding if a second, equally shaky memory points the same direction. Two uncertain clauses stacked together often narrow harder than either would alone, precisely because they're independent facts rather than two guesses at the same thing.

Step 3: Reach for rating and favourite status next

A vague memory like "it was really good" or "I starred it" is a real search clue, not a feeling to give up on. rating and is:favourite both narrow hard, because most of a library is never rated at all.

/added:2024-01..2024-06 rating:>=4
added2024-01..2024-06rating>=4
31 items
Down to thirty-one from nearly nine hundred — a date window and a rating floor, and nothing about either required remembering a filename.

Thirty-one is a number you can actually scroll through and recognise the thumbnail among. If the memory of having rated it well turns out to be wrong, dropping that one clause is cheap — the date window alone is still a far smaller set than the whole library.

Step 4: Search notes, not just tags

If a note was ever written on the file — even a short one — the text of that note is searchable the same way a tag is. A half-remembered phrase like "good pose, wrong lighting" is often more distinctive than any tag would have been, because notes tend to be specific to one file rather than shared across a category.

/has:notes added:2024-01..2024-06
hasnotesadded2024-01..2024-06
47 items
Everything with a note at all inside the window — worth checking even without remembering the note's exact wording.

Step 5: Try the folder, if any of it comes back

Sometimes a fragment of the folder name surfaces once the search gets close — "it was in something about the Berlin project." Scoping with in: cuts straight to that folder without needing the exact path memorised, since partial folder names still narrow the registered roots down to the plausible ones.

/in:~/Pictures/Reference/Berlin added:2024-01..2024-06 rating:>=4
in~/Pictures/Reference/Berlinadded2024-01..2024-06rating>=4
6 items
One folder, one date window, one rating floor — six files left, which is a number you can just look at.

There's a broader point buried in that, worth stating directly: search built on facts the index captures automatically is inherently more durable than search built on facts you have to remember to record. A tag has to be typed at the moment it would be useful later, which means it only exists if someone anticipated the exact future search correctly. A dimension, a format, a date added — none of that anticipation is required, which is exactly why it's still there, two years later, when the tag that would have made this easy was never applied.

What to do when none of the clues narrow it enough

Occasionally every clause that comes to mind still leaves too many files — the date was a guess, the rating memory was wrong, there was never a note. When that happens, drop back to the widest reliable clause and sort by it instead of filtering further: sorting a few hundred results by date added, newest first, and scrolling with thumbnails visible is still faster than opening folders one at a time, because at least the search has already ruled out everything outside the window.

A worked example: "a portrait from sometime last year, I think I starred it"

That sentence alone is three clauses: a shape, a rough window, and a status flag.

/added:2025-01..2025-12 rating:>=4 width:<2200
added2025-01..2025-12rating>=4width<2200
14 items
A year-long window, a rating floor, and a width ceiling standing in for "portrait, not landscape" — three fragments of memory, one query line, fourteen results.

There's no dedicated "portrait" key in the syntax, so the actual move is picking a width ceiling low enough to rule out most landscape crops. It's a small extra step, an approximation rather than an exact filter, but it's still faster than opening a year of folders looking for a shape you can only describe, not name precisely.

A second worked example: "a clip, not a photo, from a shoot last spring"

The same approach works identically when the memory is of a video rather than a still — nothing about the method changes, only which key carries the media-type clause.

/type:video added:2025-03..2025-05 has:notes
typevideoadded2025-03..2025-05hasnotes
5 items
A media type, a season-length window, and "I remember writing something about it" — five clips, from a library where the filename was never going to help.

Five results from a starting library of tens of thousands, built from nothing more precise than "a clip," "around spring," and "I think I wrote a note on it." None of those three facts requires having looked at the file since the day it was saved.

Common mistakes worth avoiding

Scrolling by eye before trying a single query clause — even a wrong first guess at a date narrows the search space faster than looking at thumbnails does. Giving up on a memory because it feels too vague to be useful — "it was pretty recent" is still added:> something, and a rough boundary beats no boundary. And forgetting that dropping a clause is free — if a guess turns out wrong, removing it costs nothing and the search is exactly where it was before that clause was added.

A subtler mistake is confusing "date added" with "date the photo was actually taken." A file imported from an old hard drive years after it was originally shot has an added date reflecting the import, not the shoot — worth remembering when a date-window clause returns nothing, since the memory of "it's from that trip" and the memory of "I added it recently" can point at two completely different windows for the exact same file.

Why this works without having tagged anything

The whole approach depends on the index having captured facts about a file the moment it was added, rather than only what you deliberately typed in about it. Dimensions, format, date added and date modified are read during the first pass, before any tag or rating exists — which means even a file you saved once and never touched again carries enough for a query like the ones above to find it. Searching without tagging first covers this same principle for a different starting problem: building a useful search on a folder that's never been organised at all, rather than finding one specific file inside a library that mostly has been.

What to do when the library gets large

None of the steps above get harder as a library grows — if anything, a larger library makes date and rating clauses do more work, because there's more to rule out. What's worth doing ahead of time is saving the combinations you reach for often as views, so "recent, well-rated, not yet used" becomes a click rather than a query rebuilt from memory every time the same kind of search comes up.

Speed doesn't change with scale either — a query against forty thousand indexed files runs against the same index a query against four hundred does, rather than scanning folders live each time it's typed, so a search this specific costs nothing extra to run on the largest library it might ever need to search.

Building the habit before the next time this happens

The real payoff of this approach shows up the second time a search like this is needed, not the first. Once a rough date, a rating and a folder name have proven themselves as reliable search clues once, reaching for them the next time a half-remembered file needs finding stops feeling like a puzzle and starts feeling like a routine three-clause query — the same habit saving the combination as a view turns into something that doesn't even need retyping the query text, just recalling which view answers which kind of memory.

The full set of search operators covers every key used above and the ones left out — tag, ext and no are all useful once a library has more structure to search against. Organizing a library from folders you already have is the place to start if this kind of search keeps coming up empty because nothing has been indexed yet. The case for one query line over a folder tree covers why this approach beats browsing at any library size, and the one-time-purchase shape of the tool itself is worth reading if cost is part of the decision. Or try it against your own years-old folders — thirty days, every feature, no card and no account, which is enough time to test whether a half-remembered file is actually findable.

Questions

What if I don't remember which folder it's in?
Search across every registered folder at once instead of guessing which one — a query has no folder scope unless you add in:, so it checks everything by default.
What if I never tagged the file?
Search by what the file itself carries instead: dimensions, format, the date it was added, whether it's rated or favourited. None of that needs a tag applied in advance.
Does it matter if the file was renamed since I saved it?
No. The watcher tracks a rename as a rename rather than losing the file's history, so a search built around its rating or tags still finds it under the new name.
What if I remember roughly when I added it but not the exact date?
Use a range instead of a single date: added:2024-01..2024-06 covers a six-month window, which is usually enough to narrow thousands of files to a handful.