Ability to sort playlists is great - thank you. Auto default to date modified is not. When you make frequent use of a lot of playlists adding a song to a list is a PITA because you never know where in the dropdown list the playlist will appear. Resorting (Name works best for us) every time you use a playlist becomes annoying fast. Letting the user lock the sort order solves the problem. It’s a minor thing but would be much appreciated if it can be implemented. If it’s already there, please tell me where it find it.
Still trying to use Roon playlists with external devices after all these years, and it’s still an incredibly frustrating experience.
Forcing users to export the songs every time we export a playlist is not useful. It’s hard to believe the option to export just the playlist hasn’t been implemented in all this time, that should be a cinch to implement.
Formatting of the resulting .m3u is minimalistic, and while that may work with some devices, it’s incompatible with many. Adding at the very least the #EXTM3U header should be a minimum, it is supposed to be compulsory for .m3u files. Adding an #EXTINF: label, even if left empty, before each song is also pretty standard. These small changes should be really easy to implement and would boost compatibility.
Finally, the ask to choose the folder for exporting the playlists and having the right paths (rather than automatically exporting to a playlist folder, which again many devices do not recognise and having to change all the paths manually) was unrealistic when Roon “did not do folders”, but now that it does: can we please have that?
I know managing external devices in any shape or form is not Roon’s shtick, but producing a decently useable .m3u file should be a standard feature for any piece of music software.
Bump.
It would be nice to have an icon or something that indicates when a track already belongs to a playlist(s). And show the name of the playlist(s) when you click on the icon.
Failing that, the above suggestion. When adding a track to a playlist, there should be “Currently in the Playlist” message.
Bumping this suggestion too!
Well, there already is the listing of playlists a track belongs to if you have the option turned on. it looks like this. Track circled is in two different playlists.
Hurray! Thank you for schooling me about this @Rugby!
FYI to others - Enable the Settings | General | Show playlist links option.
Of course that is ONLY if the song has been added to your Library. So if you are using songs from Albums you have added you are in good shape. If you have lots of odds and ends from streaming services, say if you copied a playlist from Spotify or other into Tidal, that above feature won’t be applicable.
I have the same problem. I need to use a Python script to convert the playlist from .xlsx to .m3u8. If anyone else needs it: `
pip install pandas openpyxl
import sys
from pathlib import Path
import pandas as pd
def first_existing_col(df, candidates):
for c in candidates:
if c in df.columns:
return c
return None
def clean(v):
if pd.isna(v):
return ""
return str(v).replace("\r", " ").replace("\n", " ").strip()
def main(xlsx_path: str):
xlsx = Path(xlsx_path)
if not xlsx.exists():
raise FileNotFoundError(xlsx)
df = pd.read_excel(xlsx)
# Colonne tipiche (adatta se necessario)
path_col = first_existing_col(df, ["Path", "Location", "File", "Filename", "URI", "Url", "URL"])
title_col = first_existing_col(df, ["Title", "Track Title", "Name"])
artist_col = first_existing_col(df, ["Track Artist(s)", "Artist", "Album Artist", "Artists"])
if not path_col:
raise ValueError("Non trovo una colonna con il percorso/URL (es. 'Path').")
lines = ["#EXTM3U"]
for _, r in df.iterrows():
p = clean(r.get(path_col))
if not p:
continue
artist = clean(r.get(artist_col)) if artist_col else ""
title = clean(r.get(title_col)) if title_col else ""
display = " - ".join([x for x in [artist, title] if x]) or Path(p).stem
lines.append(f"#EXTINF:-1,{display}")
lines.append(p)
out = xlsx.with_suffix(".m3u8")
# UTF-8 con BOM (perfetto per Foobar2000)
out.write_text("\n".join(lines) + "\n", encoding="utf-8-sig")
print(f"Creato: {out} ({len(lines)//2} tracce)")
if __name__ == "__main__":
if len(sys.argv) < 2:
print("Uso: python roon_xlsx_to_m3u8.py \"Playlist.xlsx\"")
sys.exit(1)
main(sys.argv[1])
bash
python roon_xlsx_to_m3u8.py “yourplaylist.xlsx”
`
