Smart Collections
A smart collection is a collection defined by filter criteria instead of hand-picked games. 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.
This model has some limits:
- 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".
- 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"
Filters are inclusion-only, so list the statuses you want and leave out the rest.
"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
Smart collections use the 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 when ROMs are added, removed, or edited, and on scan, so you don't need to refresh them manually.