Skip Navigation
navidrome

Navidrome Music Server (Unofficial)

  • How do I migrate from the docker image to TrueNas?

    I want to spin up Navidrome on a seperate machine running TrueNas but I'm wondering how to do that. Specifically, I noticed that a lot of the data including ratings and favorites are per-user. That means I'd need to migrate the whole database and somehow manage to point all music files to the correct location on my Nas and so on. Is there an easier way to accomplish that?

    2
  • @navidrome

    Hey folks. I set up #NaviDrome on a #YunoHost instance I'm testing stuff out on. Installation worked just fine. But it won't allow me to create that first user (the admin, sort of) but SSO me in. Which then doesn't work with the #Tempo app, obviously.

    Does anyone have any experience and can help?

    0
  • Reset cover cache

    Hi folks. Some rightwing shithead uploaded an incorrect cover to LastFM for a song in my library. The cover is gone on LastFM now, but my Navidrome still displays the invalid one. There's probably caching in place in Navidrom - but how can I reset this cache? I know I can delete the cache directory, but is there a more targeted way to do this?

    0
  • Release v1.0.0-alpha07 · siper/Youamp · GitHub
    github.com Release v1.0.0-alpha07 · siper/Youamp

    What's Changed Update Crowdin Contributors table by @github-actions in #160 New Crowdin updates by @siper in #161 Bump com.google.devtools.ksp from 2.0.0-1.0.21 to 2.0.0-1.0.22 by @dependabot in #...

    Release v1.0.0-alpha07 · siper/Youamp

    Okay, so it looks like there's a new alternative/backup to Symfonium. It's available on F-Droid, the Play Store and GitHub.

    2
  • How can I hide a service behind a proxy with #Apache ?

    How can I hide a service behind a proxy with #Apache ? Like I have @navidrome running on standard port 4533 but I would like to Proxy it behind apache. So when I go to my website(dot)com/music I can reach it (as well with the apps so prolly websockets needs to be configured?).

    I'm doing: ProxyPass /music/ http://127.0.0.1:4533/music/ ProxyPassReverse /music/ http://127.0.0.1:4533/music/

    But when i go to mywebsite(dot)com/music it goes to mywebsite(dot)com/app/

    WTF?

    Apache2 running on #debian

    15
  • Symfonium like alternative for IOS?

    Is there any ios client which looks as good as Symfonium? Every ios airsonic client i know is either abandoned or just doesn't look as visually pleasing.

    4
  • Navidrome 0.52.5 has been released
    github.com Release v0.52.5 · navidrome/navidrome

    Bug fix point release This is mostly a bug-fix version, with focus on some Jukebox issues, but also other general improvements and fixes. Highlights [UI] Add Catppuccin Macchiato Theme (#3014). Th...

    Release v0.52.5 · navidrome/navidrome
    4
  • Navidrome 0.52.0 is out
    github.com Release v0.52.0 · navidrome/navidrome

    New in this release This release upgrades TagLib to 2.0, improving tag importing in general. Also general improvements to Jukebox mode, Reverse Proxy authentication, more OpenSubsonic compatibility...

    Release v0.52.0 · navidrome/navidrome
    0
  • Do you use ratings and favorites?

    Hello! After discovering that navidrome implements smart playlists, I've been seriously thinking about using faves or ratings.

    What about you? Do you use ratings and faves, and if yes, for what reason? Do you use track or album ratings? I'm curious, since I'm sure one can get pretty creative with it.

    4
  • Version 10.0.0 Beta 1 - Changelog - Symfonium support
    support.symfonium.app Version 10.0.0 Beta 1

    Version 10.0.0 Notes: If you are a graphic designer or can help building some new custom themes, please join the forum. Added: Complete rewrite of the theming engine with a lot more control over everything: Custom M3 seed color, palette type and contrasts. New powerful custom themes with more...

    Version 10.0.0 Beta 1

    Anyone else using this and finding that sync is now broken? I can force a sync by using compatibility mode, but it's slow and I have to manually force start it.

    Also there's a weird bug where it takes album art from files in directories above.

    2
  • sabreW4K3 sabreW4K3 @lazysoci.al
    Tempo – An open source music client for Subsonic built natively for Android, with Android Auto support and synchronized lyrics and it's available on F-Droid
    github.com GitHub - CappielloAntonio/tempo: An open source and lightweight music client for Subsonic, designed and built natively for Android.

    An open source and lightweight music client for Subsonic, designed and built natively for Android. - CappielloAntonio/tempo

    GitHub - CappielloAntonio/tempo: An open source and lightweight music client for Subsonic, designed and built natively for Android.

    cross-posted from: https://lemmy.world/post/13596797

    > Hello community, today I want to present to you the work done on Tempo in recent months. This new version brings improvements to Android Auto, a first use of the OpenSubsonic API, synchronized song lyrics and the ability to customize the home screen. > > As usual, Tempo is free and open source, by the community and for the community. You can follow the development on Github and you can download it from F-Droid as well. > > If you appreciate the work put into Tempo, remember that you can star the project on Github or make a donation! It’s not much but it’s useful to help the project grow and give visibility to the app.

    2
  • Navidrome YouTube Sync, is that a thing?

    Does anyone know of a plugin or extension they will play the video of whatever song I'm listening to when the video is available and just play something like a screensaver when the video isn't available?

    2
  • automated weekly playlists from Listenbrainz with troi
    • install troi first https://github.com/metabrainz/troi-recommendation-playground
    • put following into a shell file python -m troi.cli weekly-jams USERACCOUNT -u -y
    • open crontab -e and put @weekly filelocation And it'll push your weekly jams to your account
    6
  • How to merge two users' listen statistics in sqlite3

    I want to share this as I wanted this for a long time. Finally, I sat down and wrote it. It merges the listens and star ratings of two accounts USER_ID_OLD and USER_ID_NEW. If you want to use it yourself, you have to replace those values with your values. The upper part is descriptive to explore the database and find the fields.

    Use at your own risk. backup first. cp navidrome.db navidrome.db.bu. Found mistakes? Please report. Read all lines prior to executing.

    ````

    open database

    sqlite3 navidrome.db

    show content

    .tables

    show users

    SELECT * FROM user;

    delete all playlists

    DELETE FROM playlist;

    PRAGMA table_info(annotation);

    SELECT user_id, item_id, play_count FROM annotation ORDER BY play_count DESC LIMIT 10;

    UPDATE annotation AS a SET play_count = ( SELECT SUM(play_count) FROM annotation AS b WHERE b.item_id = a.item_id );

    UPDATE annotation AS a SET rating = ( SELECT MAX(rating) FROM annotation AS b WHERE b.item_id = a.item_id );

    UPDATE annotation AS a SET starred = ( SELECT MAX(starred) FROM annotation AS b WHERE b.item_id = a.item_id );

    UPDATE annotation AS a SET play_date = ( SELECT MAX(play_date) FROM annotation AS b WHERE b.item_id = a.item_id );

    DELETE FROM annotation WHERE ROWID NOT IN ( SELECT MIN(ROWID) FROM annotation GROUP BY item_id );

    UPDATE annotation SET user_id='USER_ID_OLD' WHERE user_id='USER_ID_NEW';

    SELECT user_id, item_id, play_count FROM annotation ORDER BY play_count DESC LIMIT 10;

    .quit ````

    Edit: reading it again, it might only work correctly if there are two users.

    1
  • Get notified about new Navidrome releases
    mastodon.social Navidrome Releases (@navidrome_releases@mastodon.social)

    0 Posts, 0 Following, 1 Follower · This (unofficial) account toots, whenever a new Navidrome release has been published on github.

    Navidrome Releases (@navidrome_releases@mastodon.social)

    Since I regularly miss new Navidrome releases I have created a bot that automatically checks Navidrome's github page for new releases and publishes to a Mastodon account if a new release is available.

    You can follow the account here: https://mastodon.social/@navidrome_releases

    Pro tip: If you click the little bell icon on its profile page, you'll get a notification for every post.

    2
  • Navidrome 0.51.0 is available
    github.com Release v0.51.0 · navidrome/navidrome

    New in this release. ⚠️ BREAKING CHANGE: This release removes the Last.fm shared API-key, as previously announced here. If you use any Last.fm functionality (scrobbling, biographies, album descript...

    Release v0.51.0 · navidrome/navidrome

    Available since almost two weeks:

    "New in this release.

    ⚠️ BREAKING CHANGE: This release removes the Last.fm shared API-key, as previously announced here. If you use any Last.fm functionality (scrobbling, biographies, album descriptions), please check the documentation on how to create your own API Key, it is free and should only take you a couple of minutes. NOTE: Remember to re-enable scrobbling after changing the API Key and restarting the server.

    In this release we focused on support and compatibility with OpenSubsonic, increasing the overall user experience when using a compatible Subsonic client. Click here for the full list of what is implemented and what is missing for now.

    NOTE: Even though this release does not force a full rescan, you should do it at your discretion, to import more tags available in the scanner, ex: structured lyrics."

    1
  • rip your music collection to a selfhosted Navidrome

    rip your music collection to a selfhosted Navidrome @navidrome and connect with #substreamer and thank me later

    3
  • [Release] Import Clementine Ratings

    What?

    Hello everyone, you may know me from films such as... Kidding. But hello nonetheless, today I'm releasing the culmination of all of my recent sleepless nights.

    This simple script scans the location of your Navidrome music collection, pulls the embedded rating and then adds that rating to your Navidrome account

    Code

    v 0.3: Not only was the last version hideous, it was inconsistent. Stuff that worked in single directory mode never worked in full mode. Also removed some print statements, cleaned up some others. ``` import os import mutagen import requests import urllib.parse import json import sys import glob from mutagen.id3 import ID3 global rating global track_id

    Navidrome credentials

    script_name = "ImportClementineRatings" navidrome_url = "your-navidrome-server:port" navidrome_username = "your-navidrome-username" navidrome_password = "your-navidrome-password" headers = None

    Directory containing MP3 files

    mp3_directory = "your-collection-relative-to-this-script"

    Single Directory Mode

    if len(sys.argv) > 1: for arg in sys.argv: #print(arg) #if arg != "import_ratings.py": if arg != os.path.basename(file): mp3_directory = "/".join([mp3_directory,"Collection",arg])

    def extract_rating(mp3_file): audio = mutagen.File(mp3_file) tags = ID3(mp3_file) if "TXXX:FMPS_Rating_Amarok_Score" in tags: rating = tags["TXXX:FMPS_Rating_Amarok_Score"] else: print(" ".join(["No rating exists for",mp3_file,"this song"])) rating = None

    if (rating != None): sanerating = float(str(rating)) else: sanerating = float(0)

    if sanerating >= 1.0: return 5 elif sanerating >= 0.8: return 4 elif sanerating >= 0.6: return 3 elif sanerating >= 0.4: return 2 elif sanerating >= 0.2: return 1 else: return 0

    def update_rating_on_navidrome(track_id, rating): hex_encoded_pass = navidrome_password.encode().hex() #print(rating) if rating != 0: url = f"{navidrome_url}/rest/setRating?id={track_id}&u={navidrome_username}&p=enc:{hex_encoded_pass}&v=1.12.0&rating={rating}&c={script_name}" response = requests.get(url) print(f"Success!")

    def find_track_id_on_navidrome(mp3_file): track_id = None

    # Remove File Extension song = mp3_file.rsplit(".",1)[0]

    # Fetch Song Artist From Filename songartist = song.split(" - ")[0] songartist = songartist.split("/")[-1]

    # Fetch Song Title From Filename index_var = 1 if 0 <= index_var < len(song.split(" - ")): songtitle = song.split(" - ")[1] else: return None

    #songtitle = urllib.parse.quote(songtitle) hex_encoded_pass = navidrome_password.encode().hex()

    if len(songtitle) < 2: return None else: #print(songtitle) songtitle = song.split(" - ")[1] songtitle = urllib.parse.quote(songtitle)

    url = f"{navidrome_url}/rest/search3?query={songtitle}&u={navidrome_username}&p=enc:{hex_encoded_pass}&v=1.12.0&c={script_name}&f=json" data = None

    response = requests.get(url) parsed = json.loads(response.content) print(f"Debug URL: {url}") if "subsonic-response" in parsed: parsed = parsed["subsonic-response"] if "searchResult3" in parsed: parsed = parsed["searchResult3"] if "song" in parsed: for match in parsed["song"]: special_characters = ":?*" if any(character in special_characters for character in match["artist"]): match["artist"] = match["artist"].translate({ord(c): "_" for c in special_characters})

    if (match["artist"] == songartist): parsed = match track_id = match["id"]

    songtitle = urllib.parse.unquote(songtitle) if response.status_code == 200: if track_id: print(f"Track successfully identified: {songtitle}: {track_id}") return track_id else: print(f"Could not find {songtitle} track") return None else: print(f"Failed to identify track {songtitle}: {response.text}") return None

    def process_file(mp3_file, folder): track_id = "fail"

    mp3_file = "/".join([folder, mp3_file]) rating = extract_rating(mp3_file) track_id = find_track_id_on_navidrome(mp3_file)

    if track_id != "fail": try: update_rating_on_navidrome(track_id, rating) except: print(f"Failed to set rating for {file}")

    notmusicext = ("DS_Store","jpg", ".JPG", ".jpeg", ".JPEG", ".mood", ".m3u", ".nfo", ".png", ".PNG", ".sfv", ".url")

    for foldername in os.listdir(mp3_directory): if foldername.endswith(".mp3"): process_file(foldername, mp3_directory) folderpath = mp3_directory elif foldername.endswith(notmusicext): print(f"Skipping: {foldername}") else: folderpath = "/".join([mp3_directory, foldername]) #for filename in glob.iglob(mp3_directory + "*.mp3", recursive=True): #can't get this to work #would do stuff here print(f" Debug: folderpath")

    for filename in os.listdir(folderpath): if filename.endswith(".mp3"): process_file(filename, folderpath) elif filename.endswith(notmusicext): print(f"Skipping: {filename}") else: foldername2 = "/".join([folderpath,filename]) for filename2 in os.listdir(foldername2): if filename2.endswith(".mp3"): if filename2.startswith("A") == False: process_file(filename2, foldername2) elif filename2.endswith(notmusicext): print(f"Skipping: {filename2}") else: print(f"What is: {filename2}")

    print("Done!") ```

    Usage

    Copy the code block, create a Python script in your chosen directory and then run it.

    Thanks

    This truly would not be possible without the Fediverse community, especially the Lemmy community. So thank you everyone but especially

    @Deebster@programming.dev @ggwithgg@feddit.nl @jnovinger@programming.dev @ishanpage@programming.dev @rglullis@communick.news @oscar@programming.dev @TootSweet@lemmy.world @sabret00the@mas.to @amcewen@mastodon.me.uk @oblomov@sociale.network @mdylanbell@fosstodon.org @mborous@mastodon.social @cohomologyisFUN@mastodon.sdf.org @eichin@mastodon.mit.edu @mdione@en.osm.town

    For some of you what you did seemed so small, but it was massive to me and I'm incredibly grateful for your kindness.

    The Lore

    One day, one man decided that enough was enough, it was time to move to the modern age, but to get there he needed his music collection. However it wasn't enough to just have the music, he needed the ratings too. First world problems, I know! So with nothing but hope, he said out in search of the ring! I mean the script! He couldn't find the script, but Deebster offered to help and so the two of them embarked on a journey whereby I kept pasting stuff to Desbster and he was like "no" but under his guidance, my script born from the embers of Bard, started taking shape. Now, for me with zero Python experience, you can imagine that the guidance I required was a lot, but Deebster earned his Scout badge in guidance. And as I got closer and closer, I kept cutting my sleep short so that I could spend some extra time trying to figure it out. Also huge thanks to Minz from the Navidrome discord as they came in clutch with some API advice. Anyway, I got a working script and I'm paying it forward by sharing it. Thank you all again.

    Anything Else

    If you can see how I should improve this, please let me know. Thank you all again.

    6
  • Script to import track ratings from id3 to Navidrome?

    I know of a MusicBee plugin, but don't know of a method that doesn't involve Windows. Does anyone perhaps know if one?

    0
  • New Tempo version, now with Android Auto support
    lemmy.world Tempo – An open source music client for Subsonic built natively for Android, now with Android Auto support - Lemmy.World

    After an all-too-long development phase, I’m opening the new year with a new version of Tempo [https://github.com/CappielloAntonio/tempo]. This new version brings with it Android Auto support, one of the most requested features of all time. Other new features include support for Chinese and Korean l...

    Tempo – An open source music client for Subsonic built natively for Android, now with Android Auto support - Lemmy.World

    Crosspost from !selfhosted@lemmy.world

    0
  • Navidrome on my Pi, music on my NAS

    I'm curious if there's a specific way to go about doing this?

    Can I just set my docker-compose.yaml to volumes: - "/opt/navidrome/data:/data" - "http://192.168.0.88/Shared Music/:/music:ro"

    Or do I have to mount the directory first

    Or can I use the ND_BASEURL?

    1
  • Navidrome 0.50.2 is available
    github.com Release v0.50.2 · navidrome/navidrome

    Bug fix point release This release fixes a couple of bugs, most importantly authentication could be bypassed when the server had never been restarted after initial setup. More details are coming in...

    Release v0.50.2 · navidrome/navidrome

    Another bug fix point release of navidrome is available.

    0
  • Does anyone know how to auto-import playlists in #Navidrome ?

    Does anyone know how to auto-import playlists in #Navidrome ?

    In my config I have set

    MusicFolder = '/home/horn/Music'PlaylistsPath = './Playlist'AutoImportPlaylists = true

    and in /home/horn/Music/Playlist/ there's a subfolder for each playlist containing FLAC files. For each playlist /home/horn/Music/Playlist/Foo/ there's also a /home/horn/Music/Playlist/Foo.m3u playlist file containing lines like /home/horn/Music/Playlist/Foo/FooArtist - FooSong.flac. However, those playlists don't show up in #Navidrome. What am I doing wrong?

    @navidrome

    1
  • Ratings Question

    I'm planning to put Navidrome on a Raspberry Pi in order to manage and consume my music collection, however I've realized that all my ratings are stored in-file and given that Navidrome is multi-user, I'm wondering how that works? Will I be able to preserve my ratings? Will Navidrome even pick them up?

    2
  • Navidrome 0.50.1 is available
    github.com Release v0.50.1 · navidrome/navidrome

    Bug fix point release This release fixes a few bugs, most notably the scanner in Windows systems and the ARM docker image availability in Docker Hub. [UI] Add Indonesian. Thanks @tarokeitaro [Scan...

    Release v0.50.1 · navidrome/navidrome

    I just realised that almost three weeks ago, a new minor navidrome version (0.50.1) has been released. Just wanted to mention it in case some of you haven't taken note as well. This release contains mostly bugfixes.

    Most of all I'm happy to see some activity again. Hoping to see more in the near future!

    4
  • Is there any benefit to using your own Last.fm API key?

    I've made a Last.fm API key but at the point of adding it to Navidrome I wondered why I was bothering; is this option only there because of backwards compatibility or is there a tangible benefit?

    6
  • Just installed, last.fm help

    Just setup navidrome, got my last.fm API keys

    Running everything in docker. Music plays good on mobile and in the laptop browser.

    In my environment variables I set : ND_LASTFM_APIKEY: xxxxx...

    But scrobbling is not working, should the keys be key: value or key: "value"

    PS. I setup the other 4 last.fm variables also

    5
  • Tagging your music collection

    I'm using MusicBrainz Picard for tagging my music library and I'm not unhappy with it. Yet, sometimes it feels a bit clunky and I'm wondering if there are other good tools out there. What do people use? What are the major pros of these tools? Let's collect some recommendations here. I'm Linux based, but for the benefit of others don't restrict yourself!

    6
  • A new Version of Tempo was just released

    Not strictly Navidrome news, but related. Version 3.5.0 of my favourite mobile subsonic client app was released. It delivers some new features (like filtering downloaded items by track, album or artist), several bugfixes and a full german localization.

    You can download it from Github releases or IzzyOnDroid.

    2
  • Which mobile apps are you using to access your Navidrome server?

    I've been using substreamer to access my Navidrome server from my android phone initially but I just came to learn about Tempo, which is also a nice app. What I like about substreamer among others is the option to let it download fanart from an external source by itself bypassing navidrome. There might be more nice apps, so I'm curious what you folks are using on your mobile devices.

    17
  • Radio stations won't play in web ui

    I've noticed that I cannot play radio stations that I have added to Navidrome. The player just shows a cycling icon and the radio won't start playing. Looking at network activity, I could see the browser complaining about CORS issues: it cannot deliver content from a third-party domain. It turns out the issue is known and there should be a fix available in the next release: https://github.com/navidrome/navidrome/issues/2267 .

    1
  • Welcome to the unofficial Navidrome community.

    Hi folks. I have just created this community as a hub for fedizens interested in discussing Navidrome, as the official channels are all located outside the fediverse. Let's see if we can create a community that provides value here. Possible topics are navidrome news, tech help, tips and so on.

    !

    !

    4
1 Active user