I use navidrome[0], its a music streaming server you can selfhost and then use a player that supports the subsonic api for playback. I use the strawberry[1] music player on my desktop and substreamer[2] on android. Navidrome can also scrobble your music to last.fm if you tell it to. The actual music files are mounted with rclone and --vfs-cache-mode full to a directory.
Another Navidrome user here, hosted on a $5 Linode Nano. I have rclone set up to mount an S3 bucket with the music files. Scanning them is a bit slow, but otherwise I've had no issues.
I highly recommend Symphonium as an Android client. It is receiving constant updates, highly polished, has an offline mode, Android Auto support, and so much more.
How many Gb do you have on and how much do you pay for that S3 bucket? I'm thinking of doing that but I wonder what'll be the cost. I'm not sure what to put on the AWS calculator, becasue it depends on usage and whatnot!
I have a little over 250GB and I pay $5/month. This is using DO Spaces S3 compatible, not AWS S3. The droplet is $7/month so $12 total. Never even gets close to being out of resources.
A shameless plug, but you may also like Quod Libet[1]. Although not for everyone, it has very advanced searching and the more unusual integrations and features all implemented as plugins.
I also use Navidrome on a Raspberry Pi 3 with a 2.5" 1TB disk connected to it via usb. I don't use metadata and or last.fm; My folder structure info enough for me. Easy enough to play music on mobile devices around home.
For playing music in the living room i use an Ikea Sonos (Symfonisk bookshelf) and the standard Sonos app connecting to the collection via smb.
For the car i transfered (most of) the collection to a sd card. Makes it also it's onw backup :)
I could also use Spotify since the kids love it, but i don't really use it that much myself.
Another Navidrome user here. I used Subsonic for a decade before the developer eventually abandoned it, and Navidrome is a great replacement (and doesn't make me install Java like Subsonic).
I host mine on a Digital Ocean VPS with 1 core and 1GB of RAM, syncing my music from my home PC to DO Spaces storage with rclone. Works perfectly
As someone currently running a Navidrome instance with 40k songs...yeah, I wouldn't wish that on anyone(horrible performance), but it is an option I suppose.
As someone also hosting thousands of songs who has been using Navidrome for months I can't say I experienced any performance issues.
The codebase is fairly small so it should be fairly straight forward to investigate and narrow down the performance issues you're experiencing.
In two places. The web client takes _minutes_ to load the artist page. It's slow enough that I get the Firefox warning stating that the page is slowing down Firefox. The web client (seemingly) doesn't load the song/tracklist in chunks and attempts to load every song at once(at least on the artist page).
The second issue isn't specifically a "Navidrome" problem, but every iOS and Mac desktop client I've used(and I've tried _every_ one that Navidrome lists on their site) attempts to load every song on load and basically becomes unusable.
I'm about two notches away from writing my own music streaming server. Navidrone is barely functional for me...and falls under software I hate, but there are no better options.
I have no such issues using Navidrome (docker image from linuserver.io) with 150k songs. On the client i use sonixd which also have no problem running. It might be something on your server
[0] https://www.navidrome.org/
[1] https://github.com/strawberrymusicplayer/strawberry
[2] https://substreamerapp.com/