Smart Collections
A smart collection is a collection defined by filter criteria, not by hand-picking. You set filters ("SNES games tagged RPG", "Zelda franchise", "playable in the browser") and RomM keeps the list in sync as you add ROMs and edit metadata.
For hand-curated collections, see Collections, and for auto-generated groupings, see Virtual Collections.
How filters work
A smart collection holds a fixed set of filter fields (it isn't a generic rule engine). Each field accepts one or more values, and multi-value fields take a <field>_logic companion that picks any (OR) or all (AND) within that field. Different fields are always combined with AND.
That has two big consequences:
- No top-level OR. You can't express "Franchise = Zelda OR Title contains 'zelda'". Different fields always AND.
- No negation. Filters are inclusion-only. There's no "Status is not Complete" or "exclude Genre RPG". Pick the values you want, not the ones you don't.
- No nesting. A smart collection can't filter on another smart collection.
Supported fields
Multi-value
Each takes one or more values. All (except platform_ids) also accept a <field>_logic companion of any (OR, the default) or all (AND).
| Field | Matches |
|---|---|
platform_ids |
One or more platforms |
genres |
Game genres |
franchises |
Franchises |
collections |
Membership in named collections |
companies |
The combined company credit |
publishers |
Publishers specifically |
developers |
Developers specifically |
age_ratings |
ESRB / PEGI categorical labels |
regions |
Region tags |
languages |
Language tags |
tags |
Arbitrary filename tags |
statuses |
Your play status (backlogged, playing, etc.) |
player_counts |
Supported player counts |
metadata_providers |
Which provider matched the game |
Boolean
| Field | Matches |
|---|---|
matched |
Games a metadata provider matched |
verified |
Games with a verified match |
favorite |
Your favourites |
duplicate |
Games with more than one version |
playable |
Platforms with a browser player |
has_ra |
Games with a RetroAchievements set |
has_saves |
Games you have a save for |
has_states |
Games you have a state for |
has_soundtrack |
Games with tracks in the Jukebox |
missing |
Games flagged missing from the filesystem |
physical |
Physical games, entries with no file on disk |
Single-value
| Field | Matches |
|---|---|
search_term |
Case-insensitive substring match against the title |
collection_id, virtual_collection_id |
Membership in one specific collection |
hltb_main_story_min, hltb_main_story_max |
A game length range |
Game length
Lengths come from HowLongToBeat, so you need HLTB_API_ENABLED=true and a scan that matched the game. It's main story time, and you can set a floor, a ceiling, or both. The gallery sorts and filters by it too, without needing a collection. Games HowLongToBeat never matched have no length at all and drop out of a length filter entirely.
Examples
"SNES RPGs I'm playing or haven't started"
Inclusion-only, so list the statuses you want and let everything else fall away.
"Arcade games playable in browser"
"Short games I own physically and haven't started"
"Zelda franchise"
To match by title substring instead, use Title: zelda. You can't OR the two together in one collection (different fields always AND).
Public / private
Same visibility model as standard collections:
- Private: only you see it. Personal-data fields (Status) only make sense here.
- Public: everyone on the instance sees it. Your personal-data filters still apply, so a public smart collection filtering on Status will reflect your statuses for every viewer.
Refresh behaviour
Smart collections refresh on add/remove/edit of ROMs, and on scan. No manual refresh needed!