Compare commits

...

10 Commits

14 changed files with 133 additions and 30 deletions
+100
View File
@@ -0,0 +1,100 @@
# Navidrome Smart Playlists
This repo is here to help people build and use Navidrome smart playlists.
The `.NSP` files in this repo are smart playlist definitions, not static song lists. Each file is a set of JSON rules that Navidrome can read during a library scan and turn into a playlist.
## What Smart Playlists Do
Smart playlists stay dynamic. Instead of manually adding songs one by one, you define rules like:
- songs from a genre
- songs from a year range
- loved or high-rated tracks
- tracks from or excluded by certain artists, albums, or tags
Navidrome applies those rules automatically, so the playlist updates as your library changes.
## How To Use
1. Save the `.NSP` file in a folder that Navidrome scans for playlists.
2. Run a library scan or quick scan in Navidrome.
3. Open the playlist in Navidrome and check that the results match what you wanted.
If the playlist does not appear, the file is usually in the wrong folder, the JSON is invalid, or the scan has not run yet.
## Basic File Structure
Most smart playlists here follow the same pattern:
- `title` is the playlist name shown in Navidrome.
- `comment` is a short description.
- `all` means every rule in the list must match.
- `any` means only one rule needs to match.
- `sort` and `order` control the result order.
- `limit` caps how many tracks the playlist returns.
Example ideas used in this folder:
- genre playlists such as Rock, Pop, Hip Hop, Metal, and Country
- decade playlists such as 70s, 80s, 90s, 2000s, and 2010s
- utility playlists such as Recently Added, Unrated, and Un-Played
- favorites and jukebox-style playlists for quick access
## Excluding Folders
Navidrome uses a `.ndignore` file to exclude folders or files from being added to the library.
- Put an empty `.ndignore` file in a folder to ignore that folder and everything under it.
- Or place one `.ndignore` file in your parent music folder and use `.gitignore`-style rules inside it.
Example:
```gitignore
# Ignore specific folders
/untagged/
/unsorted/
# Ignore a file type
*.flac
# Allow one specific album back in
!/favorite-album/*.flac
```
## Filename Order
The first character of the filename is used as a simple sorting trick for how playlists appear in Navidrome.
For example, a filename like `! Top Hip Hop ;).NSP` will appear near the top. While '_ Top Hip Hop ;).NSP' will appear near the bottom.
In this library, the leading characters are used in a rough order like this:
```text
! # $ & ' (; * + , - . ; = > @ A-Z ^ _
```
That makes it easier to group important playlists at the top and push utility playlists lower down.
This does not work well with different apps. For example, amperfy (iphone sub-sonic app) sorts '_ Top Hip Hop ;).NSP' as the top playlist, and 'Top Hip Hop ;).NSP' as the last playlist.
So haven't quite figured out the best naming scheme that works well across all apps. For now, just be aware that the leading characters may affect playlist order differently in different apps.
## Further Reading
If you want to edit or create smart playlists, this Navidrome guide is a good reference:
- [How to Use Smart Playlists in Navidrome](https://gitea.sickgaming.net/sickprodigy/navidrome-smart-playlists/wiki/How-to-Use-Smart-Playlists-in-Navidrome)
It covers the JSON fields, operators, importing playlists, and a few examples you can adapt for your own Navidrome setup.
## Ratings Sync
A couple of community tools can help synchronize ratings between your Navidrome library and MusicBrainz.
- SPTNR — https://gitea.sickgaming.net/sickprodigy/sptnr
- Use this to apply ratings to your Navidrome/Subsonic library. API is used, so user/pass is needed. Once most of your library is rated, you will see them show up in your smart playlists that filter by rating. I have updated it so you can use Spotify, MusicBrainz, or Last.fm ratings as the source for your Navidrome ratings.
- MusicBrainz Ratings Helper — https://gitea.sickgaming.net/sickprodigy/musicbrainz-ratings-helper
- Use this to push ratings from Navidrome to MusicBrainz. Requires a MusicBrainz account. This helps the community by sharing your ratings with the MusicBrainz database, so others can benefit from your ratings when they sync their Navidrome library with MusicBrainz. You can also see your ratings on the MusicBrainz website and use them in other apps that pull from MusicBrainz.
Note: These are community tools. Review the documentation, test on a small subset, and back up your data before running a full sync.
+2 -2
View File
@@ -1,6 +1,6 @@
{ {
"title": "-Recently Added ;)", "title": "^ Recently Added ;)",
"comment": "Recently added music to the library.", "comment": "Recently added music to the library, within 90 days.",
"all": [ "all": [
{"any": [ {"any": [
{"inTheLast": {"dateadded": "90"}} {"inTheLast": {"dateadded": "90"}}
+4 -4
View File
@@ -1,12 +1,12 @@
{ {
"title": "-Top 2000s Music ;)", "title": "^ Top 2000s Music ;)",
"comment": "Top rated songs from the 2000's by the admin.", "comment": "Top rated songs from the 2000's.",
"all": [ "all": [
{ "any": [ { "any": [
{ "is": { "loved": true } }, { "is": { "loved": true } },
{ "gt": { "rating": 2 } }] { "gt": { "rating": 3 } }]
}, },
{ "inTheRange": { "year": [2001, 2011] } } { "inTheRange": { "year": [2000, 2009] } }
], ],
"sort": "-year,-rating,title", "sort": "-year,-rating,title",
"limit": 1000 "limit": 1000
+4 -4
View File
@@ -1,12 +1,12 @@
{ {
"title": "-Top 2010s Music ;)", "title": "^ Top 2010s Music ;)",
"comment": "Top rated songs from the 2010's by the admin.", "comment": "Top rated songs from the 2010's.",
"all": [ "all": [
{ "any": [ { "any": [
{ "is": { "loved": true } }, { "is": { "loved": true } },
{ "gt": { "rating": 2 } }] { "gt": { "rating": 3 } }]
}, },
{ "inTheRange": { "year": [2011, 2021] } } { "inTheRange": { "year": [2010, 2019] } }
], ],
"sort": "-year,-rating,title", "sort": "-year,-rating,title",
"limit": 1000 "limit": 1000
+4 -4
View File
@@ -1,12 +1,12 @@
{ {
"title": "-Top 70s Music ;)", "title": "^ Top 70s Music ;)",
"comment": "Top rated songs from the 1970's by the admin.", "comment": "Top rated songs from the 1970's.",
"all": [ "all": [
{ "any": [ { "any": [
{ "is": { "loved": true } }, { "is": { "loved": true } },
{ "gt": { "rating": 2 } }] { "gt": { "rating": 3 } }]
}, },
{ "inTheRange": { "year": [1971, 1980] } } { "inTheRange": { "year": [1970, 1979] } }
], ],
"sort": "-year,-rating,title", "sort": "-year,-rating,title",
"limit": 1000 "limit": 1000
+4 -4
View File
@@ -1,12 +1,12 @@
{ {
"title": "-Top 80s Music ;)", "title": "^ Top 80s Music ;)",
"comment": "Top rated songs from the 1980's by the admin.", "comment": "Top rated songs from the 1980's.",
"all": [ "all": [
{ "any": [ { "any": [
{ "is": { "loved": true } }, { "is": { "loved": true } },
{ "gt": { "rating": 2 } }] { "gt": { "rating": 3 } }]
}, },
{ "inTheRange": { "year": [1981, 1990] } } { "inTheRange": { "year": [1980, 1989] } }
], ],
"sort": "-year,-rating,title", "sort": "-year,-rating,title",
"limit": 1000 "limit": 1000
+4 -4
View File
@@ -1,12 +1,12 @@
{ {
"title": "-Top 90s Music ;)", "title": "^ Top 90s Music ;)",
"comment": "Top rated songs from the 1990's by the admin.", "comment": "Top rated songs from the 1990's.",
"all": [ "all": [
{ "any": [ { "any": [
{ "is": { "loved": true } }, { "is": { "loved": true } },
{ "gt": { "rating": 2 } }] { "gt": { "rating": 3 } }]
}, },
{ "inTheRange": { "year": [1991, 2000] } } { "inTheRange": { "year": [1990, 1999] } }
], ],
"sort": "-year,-rating,title", "sort": "-year,-rating,title",
"limit": 1000 "limit": 1000
+1
View File
@@ -7,6 +7,7 @@
]}, ]},
{"gt": {"rating": 3}}, {"gt": {"rating": 3}},
{"notContains": {"genre": "Christmas Music"}}, {"notContains": {"genre": "Christmas Music"}},
{"notContains": {"genre": "Holiday"}},
{"notContains": {"genre": "Latin"}}, {"notContains": {"genre": "Latin"}},
{"isNot": {"artist": "Alec Benjamin"}}, {"isNot": {"artist": "Alec Benjamin"}},
{"isNot": {"artist": "Bad Bunny"}}, {"isNot": {"artist": "Bad Bunny"}},
+5 -1
View File
@@ -6,7 +6,11 @@
{"contains": {"genre": "Ambient"}} {"contains": {"genre": "Ambient"}}
]}, ]},
{"gt": {"rating": 3}}, {"gt": {"rating": 3}},
{"notContains": {"genre": "Christmas Music"}} {"notContains": {"genre": "Ambient Dub"}},
{"notContains": {"genre": "Christmas Music"}},
{"isNot": {"artist": "Billie Eilish"}},
{"isNot": {"artist": "Coldplay"}},
{"isNot": {"artist": "Lana Del Rey"}}
], ],
"sort": "dateModified", "sort": "dateModified",
"limit": 1000 "limit": 1000
+1 -1
View File
@@ -3,7 +3,7 @@
"comment": "The highest rated Classical music.", "comment": "The highest rated Classical music.",
"all": [ "all": [
{"contains": {"genre": "Classical"}}, {"contains": {"genre": "Classical"}},
{"gt": {"rating": 2}} {"gt": {"rating": 2}},
{"notContains": {"genre": "Christmas Music"}}, {"notContains": {"genre": "Christmas Music"}},
{"notContains": {"genre": "Classical Crossover"}}, {"notContains": {"genre": "Classical Crossover"}},
{"notContains": {"genre": "Electronic"}}, {"notContains": {"genre": "Electronic"}},
-2
View File
@@ -20,8 +20,6 @@
{"isNot": {"artist": "Coldplay"}}, {"isNot": {"artist": "Coldplay"}},
{"isNot": {"artist": "eevee"}}, {"isNot": {"artist": "eevee"}},
{"isNot": {"artist": "Elijah Who"}}, {"isNot": {"artist": "Elijah Who"}},
{"isNot": {"artist": "eevee"}},
{"isNot": {"artist": "Elijah Who"}},
{"isNot": {"artist": "Hollywood Undead"}}, {"isNot": {"artist": "Hollywood Undead"}},
{"isNot": {"artist": "Katy Perry"}}, {"isNot": {"artist": "Katy Perry"}},
{"isNot": {"artist": "Kero Kero Bonito"}}, {"isNot": {"artist": "Kero Kero Bonito"}},
+1 -1
View File
@@ -3,7 +3,7 @@
"comment": "The highest rated Singer-Songwriter music.", "comment": "The highest rated Singer-Songwriter music.",
"all": [ "all": [
{"contains": {"genre": "Singer-Songwriter"}}, {"contains": {"genre": "Singer-Songwriter"}},
{"gt": {"rating": 2}}, {"gt": {"rating": 3}},
{"notContains": {"genre": "Christmas Music"}}, {"notContains": {"genre": "Christmas Music"}},
{"notContains": {"genre": "Latin"}} {"notContains": {"genre": "Latin"}}
], ],
+2 -2
View File
@@ -2,9 +2,9 @@
"title": "-Top Trance ;)", "title": "-Top Trance ;)",
"comment": "The highest rated Trance music.", "comment": "The highest rated Trance music.",
"all": [ "all": [
{"contains": {"genre": "Trance"}} {"contains": {"genre": "Trance"}},
{"gt": {"rating": 2}}, {"gt": {"rating": 2}},
{"notContains": {"genre": "Christmas Music"}}, {"notContains": {"genre": "Christmas Music"}}
], ],
"sort": "dateModified", "sort": "dateModified",
"order": "desc", "order": "desc",
+1 -1
View File
@@ -1,5 +1,5 @@
{ {
"title": "' Christmas Music ;)", "title": "_ Christmas Music ;)",
"comment": "All Christmas Music", "comment": "All Christmas Music",
"all": [ "all": [
{"any": [ {"any": [