Search tracks with full compound filtering
search_tracksSearch your entire Navidrome library by mood, energy, tags, play history, and other filters to build custom playlists.
Instructions
The main query tool, over the WHOLE library. Every filter composes: real year/date ranges, play and listen recency, inferred mood axes (energy/valence/intensity/organic), mood descriptors, curated OR inferred vibe membership, Last.fm tags, duration, time-of-day fit, plus per-artist diversity caps and personal-affinity ranking.
For mood requests prefer mood_vibes / moods / the axis ranges over vibes: vibes matches only the ~3,800 tracks actually on a curated playlist, while the mood fields cover all 9,000+.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Makes 'random'/'affinity' reproducible. | |
| sort | No | Default 'affinity': a personal-fit blend of listens, plays, curated membership and recency. | |
| tags | No | Last.fm tags, e.g. ['shoegaze','melancholy']. | |
| limit | No | ||
| moods | No | Inferred feeling descriptors, e.g. ['hazy','wistful','anthemic']. Any-of, substring. | |
| query | No | Free text matched against title, artist, album and tags. | |
| vibes | No | Restrict to tracks on these curated playlists, e.g. ['golden hour','textured']. | |
| albums | No | ||
| genres | No | Any-of match on the library's own genres. | |
| offset | No | ||
| artists | No | Only these artists (substring match). | |
| bpm_max | No | ||
| bpm_min | No | ||
| decades | No | e.g. ['1990s','2000s']. | |
| starred | No | ||
| year_max | No | ||
| year_min | No | ||
| fits_time | No | One of: early morning, morning, midday, afternoon, golden hour, evening, late night. | |
| tags_mode | No | Default 'any'. | |
| energy_max | No | ||
| energy_min | No | Inferred mood axis 0-100: sleepy/still -> frantic. | |
| mood_vibes | No | Tracks that READ AS one of his curated vibes, whether or not they are filed on that playlist. Matches hand-curated membership, the mood pass, and tag-similarity predictions — so it reaches the whole library, not just the ~3,800 playlisted tracks. Prefer this over `vibes` for any mood request. | |
| day_of_week | No | 0 = Sunday. | |
| hour_of_day | No | Only tracks he has actually listened to at this local hour. | |
| organic_max | No | ||
| organic_min | No | 0-100: fully electronic -> fully acoustic. | |
| valence_max | No | ||
| valence_min | No | 0-100: bleak/melancholy -> bright/joyful. | |
| exclude_tags | No | ||
| never_played | No | ||
| exclude_moods | No | ||
| exclude_vibes | No | ||
| intensity_max | No | ||
| intensity_min | No | 0-100: gentle -> heavy/aggressive. | |
| max_per_album | No | ||
| exclude_genres | No | ||
| max_per_artist | No | Cap tracks per artist. Use 1-2 for playlists. | |
| play_count_max | No | ||
| play_count_min | No | ||
| released_after | No | ISO date, matched against the release date. | |
| exclude_artists | No | ||
| include_missing | No | Include tracks whose file is missing. Default false. | |
| released_before | No | ||
| duration_max_sec | No | ||
| duration_min_sec | No | ||
| listen_count_max | No | ||
| listen_count_min | No | Lifetime ListenBrainz listens. | |
| added_before_days | No | Added at least N days ago. | |
| added_within_days | No | Added to the library in the last N days. | |
| exclude_track_ids | No | ||
| played_within_days | No | ||
| listened_within_days | No | ||
| not_played_within_days | No | Exclude anything played in the last N days. | |
| exclude_recent_daylists | No | Exclude everything used by the last N daylist runs. Use ~6 for hourly rotation. | |
| not_listened_within_days | No |