Features / Interdependent Filtering

Interdependent Filtering

Every filter narrows every other filter. Select a country and only see cameras, people, tags, and ratings that exist in those photos.

filteringfaceted searchUX Documentation
Photos page with filter panel showing Germany selected, narrowing people, cameras, tags, and ratings to only matching values

Click a filter, watch everything react

Traditional photo managers show you every filter value regardless of what you've already selected. You pick a country, then a camera — and get zero results because that camera was never used in that country. Trial and error.

Gallery's filter panels talk to each other. Select Germany and the People panel instantly narrows to only people who appear in German photos. The Camera panel shows only cameras used in Germany. Tags, ratings, media type — everything updates.

This is faceted search — the same pattern Amazon and eBay use. Every visible option is guaranteed to return results. No dead ends, no guessing.

Filter panel showing countries, tags, and cameras narrowing dynamically as the user clicks different filter values

How it works

A single API call returns all filter suggestions in one round trip. Under the hood, the server runs six parallel queries — one per category (countries, cameras, people, tags, ratings, media type). Each query applies all your active filters except its own category, so you always see what else is available given your other selections.

When you select Germany, the countries query excludes the country filter (showing all countries that match your other filters) while the cameras query includes it (showing only cameras used in Germany). This is why it feels instant — one request, six parallel answers.

Orphaned selections stay visible

If you select France and then pick a camera make that was never used in France, France doesn't disappear — it dims. You can see exactly why your result set is empty and undo the selection with one click. No mystery, no frustration.

Ratings and media type adapt too

It's not just dropdowns that update. If your filtered photos are all rated 4 and 5 stars, the 1-2-3 star buttons vanish. If they're all photos (no videos), the Videos button disappears. Every control reflects reality.

Smart debouncing

Rapid clicks are batched — the server isn't hammered when you're selecting multiple people or toggling tags quickly. Temporal changes (picking a year or month) get a slightly longer debounce since the date picker is more exploratory. Clearing all filters is instant.

Read the full documentation on GitHub

See Interdependent Filtering in action or set up your own instance.