Features/Contextual Filters

Contextual Filters

Click any metadata value in the photo viewer — camera, lens, place, date, tag, filename — and the surface you are already on filters down to match.

searchfiltersmetadataURL state
The Gallery timeline filtered to 35 results by an 'Apple iPhone 17' chip, with the filter panel showing iPhone 17 selected under the Camera section

The panel that could only be read

Open a photo, open the info panel, and there it all is: the camera, the lens, the aperture, the city, the date, the album it lives in, the tags on it. Everything you would want to search by, already on screen and already correct.

And none of it did anything. To see the rest of the photos from that camera you closed the viewer, went to a search page, found the camera facet, and picked the value that had been sitting in front of you a moment earlier. The information was right there; acting on it meant leaving.

Now every one of those values is a filter. Click the camera and you get everything shot on it. Click the city and you get everything taken there. Click the date, the lens, the tag, the album, the filename, the contributor — same deal.

The Gallery asset viewer with the info panel open, showing a photo taken in Cape Town with its date, filename, camera, lens and location — each one clickable as a filter

It filters where you already are

This is the part that makes it feel different from search. The filter does not throw you onto a separate results page — it applies to the surface you opened the photo from. If you were in your timeline, your timeline narrows. If you were inside an album, a Shared Space, or on the map, that is what narrows, and the map keeps the viewport you had set.

So the question you are really asking is answered in context. Not "show me every photo on this camera", but "show me the ones in this space on this camera" — which is almost always what you meant, and which used to be impossible without building the query by hand.

Every action the info panel offered before is still there. Filtering was added alongside them, not on top of them.

Filters land in the URL

A contextual filter is a real filter, not a transient view state. It goes into the address bar, which means the filtered view is shareable, bookmarkable, and reachable with the back button — and it merges with any filters already applied rather than replacing your whole view.

Stacking works the way you would hope. Filter by a camera, open a photo from those results, filter by its city, and you have narrowed twice. Values that can only hold one answer replace rather than accumulate, so two clicks in a row never leave you looking at an empty screen. That property is guaranteed rather than hoped for: filtering by a value on a photo always returns a set that still contains that photo.

Why it changes how the library feels

Structured search is powerful and almost nobody opens it. The panel is a filtering surface people were already looking at for a different reason, so the cost of following a thread drops to one click — and following threads is how you actually find things. One photo from a trip becomes that whole city. One shot on the old camera becomes the year you carried it.

It pairs naturally with Dynamic Filters, which keep the filter panel's options honest as you narrow, and with Inline Search Filters when you would rather type the query than click your way into it.

Ready to run Gallery on your own server? Install in 5 minutes, keep the demo for a quick check.