[HN Gopher] Show HN: kew - A Terminal Music Player for Linux
       ___________________________________________________________________
        
       Show HN: kew - A Terminal Music Player for Linux
        
       Hi HN,  I created kew, a music player for the Linux terminal.  This
       started when I asked myself: what if I could just type something
       like "play nirvana" in the terminal and have the rest taken care of
       automatically? That got the ball rolling and I kept adding stuff:
       covers in ascii and then as sixel images, a playlist view, a
       visualizer, a library view and finally search.  While kew can be
       used as a commandline tool, it has evolved into a TUI app.  Here
       are some example commands:  kew nirvana # Plays all of your Nirvana
       songs, shuffled  kew nevermind # Plays the "Nevermind" album in
       order  kew spirit # Plays "Smells Like Teen Spirit"  kew all #
       Plays all your music, shuffled  kew albums # Plays one album after
       the other in random order  It works best when your music library is
       organized like this: Artist/Album(s)/Track(s)  kew is written in C
       and licensed under GPLv2.  Source and screenshot:
       https://github.com/ravachol/kew
        
       Author : ravachol
       Score  : 113 points
       Date   : 2024-10-04 12:56 UTC (10 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | martinbaun wrote:
       | This is exactly what I was looking for! I actually started
       | writing something myself.
       | 
       | And I "compiled from source" as I am using Fedora, but it was
       | just one command.
       | 
       | Thank you!
        
         | ravachol wrote:
         | Glad you are liking it!
        
       | atrus wrote:
       | I love the readme, and I wish that every project had one this
       | great. And it player looks awesome as well!
        
         | ravachol wrote:
         | Thanks, yes the readme is really important. A lot of projects
         | would benefit from spending a bit more time on it.
        
         | politelemon wrote:
         | I agree, the README makes me want to try it tonight when I get
         | home. This project is very interesting and worth trying.
        
       | kopirgan wrote:
       | Requires Debian 13?
        
         | ravachol wrote:
         | You know I'm not sure. I think there was some problem with
         | FFmpeg in earlier versions, but I'm not 100% sure. There
         | shouldn't be a problem trying to install it in earlier versions
         | though.
        
       | BoingBoomTschak wrote:
       | It's is pretty cool, I can feel the energy poured into making
       | your personal computing experience more seamless! Though the
       | first thing I wondered when reading your examples is "how is
       | ambiguity resolved?". Like albums, artists and tracks having the
       | same string or sharing a prefix (search in this specific order, I
       | guess?); or artists having the exact same name.
       | 
       | The aspect I like the most is using the filesystem as a database,
       | since that's what UNIX people should like (and you can use
       | symlinks for more complex cases). In fact, I myself made a music
       | player with that as central philosophy, though it is much more
       | bare/suckless compared to yours: https://git.sr.ht/~q3cpma/mus
       | 
       | Did you consider implementing a simple event system (maybe even
       | IPC) for track and status change? Possibly MPRIS or something
       | simpler. That was the main feature I kept from cmus when creating
       | mus, so that I can easily interact with it through lemonbar and
       | scripts.
        
         | ravachol wrote:
         | Thank you. To answer your first question, ambiguity isn't
         | resolved unfortunately. When the album has the same name as the
         | artist for instance, I have sometimes resorted to renaming the
         | album name by adding "album" to it. You can however get an
         | exact search by adding -e so that resolves some problems.
         | 
         | Yes, MPRIS is supported.
        
       | leapon wrote:
       | brew install failed on macos
       | 
       | % brew install kew
       | 
       | ...
       | 
       | kew: Linux is required for this software.
       | 
       | Error: kew: An unsatisfied requirement failed this build.
        
         | ravachol wrote:
         | Yes, unfortunately it only works on Linux and FreeBSD. I should
         | add that to the readme.
         | 
         | EDIT: Added.
        
           | jeffhuys wrote:
           | Why, though?
        
             | jhatemyjob wrote:
             | Cus they like Stallman too much
        
       | VyseofArcadia wrote:
       | Slick! I love it.
       | 
       | It doesn't fit my use-case very well, though. I'm not saying it
       | needs to, but I'm going to put my use-case out there in case
       | someone is looking for project ideas.
       | 
       | We have oodles of music players on Linux, GUI and terminal. But
       | we have very few choices that
       | 
       | * are optimized for the absurdly, comically large library of
       | someone who has been diligently collecting and organizing music
       | for decades
       | 
       | * collect playback statistics and allow user rating of songs
       | 
       | * that can be used to create smart playlists
       | 
       | I used amarok for years, but it keeps dying and reviving, and I
       | don't trust it to stick around. I then used mpd for years, but
       | while mpd excels at large libraries, the other two requirements
       | have to be implemented client-side, and the experience was always
       | at least a little janky. I currently use Strawberry, but 1) it
       | chugs with a large library, 2) its smart playlists aren't
       | expressive enough, and 3) it is also kind of janky, and I
       | experience frequent crashes.
       | 
       | The only player I've found that really fits my use-case like a
       | glove is MediaMonkey, but I walked away from Microsoft years ago,
       | and I'm not about to go back now just to wrangle my music
       | library.
        
         | ravachol wrote:
         | Yes, while a comically large music library is supported in
         | principle (kew offers to cache your library if it takes a long
         | time to search through), it might not be entirely suited for
         | it.
         | 
         | As for your other two suggestions those fall outside the scope
         | of kew. kew is supposed to be simple with minimal bloat.
        
           | VyseofArcadia wrote:
           | I will by trying it out on my laptop which has only a
           | fraction of my library and I don't use often enough to want
           | statistics or smart playlists.
        
         | sandreas wrote:
         | Nice, thanks for sharing your thoughts. Currently, I use
         | navidrome[1], which not really is a player but more a music
         | server, but since it supports the "subsonic" protocol, you can
         | use native apps to connect and manage your stuff (substreamer
         | for android / iOS is all I really need but navidrome also comes
         | with a handy web interface). It also has support for json based
         | smart playlists[2].
         | 
         | 1: https://www.navidrome.org/ 2:
         | https://github.com/navidrome/navidrome/issues/1417
        
           | worble wrote:
           | Just to add an alternative, I'm using Airsonic Advanced[0] as
           | my subsonic server of choice if for only one reason: it
           | properly supports folder navigation. I've ranted about this
           | before (looking at you Jellyfin) but my folder layout is
           | sacred and any media service I use needs to respect it.
           | 
           | For an android client I use tempo[1] which again was one I
           | landed on because pretty much all the other clients didn't
           | support folder lookup either (I _think_ dsub also does but
           | tempo is a lot prettier).
           | 
           | 0: https://github.com/kagemomiji/airsonic-advanced
           | 
           | 1: https://github.com/CappielloAntonio/tempo
        
           | VyseofArcadia wrote:
           | That looks like it checks most of my boxes, but I have a
           | personal/philosophical objection to running a service. The
           | objection is, I don't want to[0]. I just want a local
           | application. Not local-first, I want local-only. Just an
           | application.
           | 
           | [0] and also I think it's insane to add that much complexity
           | to something that is single-user.
        
             | sandreas wrote:
             | Totally understandable. I recently thought of developing a
             | cross platform player in C# and AvaloniaUI, but cross
             | platform audio is not as easy as it seems, especially
             | trying to use open source libs only and minimizing
             | dependencies.
        
             | lunchables wrote:
             | I'm also a navidrome user and I run it via docker exposed
             | via traefik so I can access my music anywhere. I can use
             | any subsonic client on android or iOS and I can bluetooth
             | that to my car or headphones or whatever and I can load it
             | up on my laptop anywhere.
             | 
             | As you've said you just want a local application just
             | wanted to mention that in case that's actually something
             | that might also be useful for you.
        
         | amlib wrote:
         | Strawberry is a pretty solid Amarok fork that is picking up
         | steam. They are now releasing multiple releases a month and in
         | my opinion it's a great "fully featured", gui first, easy to
         | use player that handles large libraries well.
        
       | cdaringe wrote:
       | I love the idea. My music is now 50% cloud only, 50% on disk. I
       | mean, its 100% in the cloud, i just have local files for half
       | available. Ive been thinking about self hosting some music
       | provider thingy (or even just supporting ssh via my dyndns-like
       | capability) to my NAS and bringing music back to self owned
       | files. However, it is work to do when the internet is pretty
       | reliable, costs are low, etc.
       | 
       | Those who love this conceptually but have/had cloud music, did
       | you act? How/why?
        
         | reverend_gonzo wrote:
         | I have a airsonic (fork of subsonic, which I used for a long
         | time) server running on a vps. I've probably had this for
         | coming on 20 years now.
         | 
         | It works phenomenally.
         | 
         | At some point I was going to mirror it locally, but never got
         | around to it.
         | 
         | It is all backed up in dropbox
        
           | lunchables wrote:
           | I've also been a long time airsonic (and now airsonic-
           | advanced) user for so long I can't even remember, but a
           | couple years ago I switched to navidrome which is also
           | subsonic compatible and it's sooo much nicer.
           | 
           | Use whatever you want! Just wanted to suggest it.
        
         | nvllsvm wrote:
         | I used various Subsonic clients for a number of years, but the
         | clients were always lacking. Android clients were buggy or
         | didn't prioritize local caching and I preferred to use
         | mpd+ncmpcpp on my laptop.
         | 
         | I ended up switching to fully-local media after realizing that
         | my 956GB flac+mp3 would be ~159GB when converted to Opus. I now
         | use https://github.com/nvllsvm/harmonize to maintain a 128kbps
         | Opus version of my main library and Syncthing to synchronize it
         | to my phone and laptop.
         | 
         | --- side note, Auxio is the client I'm using on Android with my
         | synced library.
        
       | molticrystal wrote:
       | mpv --vo=caca
        
       | edgarvaldes wrote:
       | Random album is great. Few players do it right.
        
       | udev4096 wrote:
       | I personally use a self hosted musikcube server [0] for playing
       | songs. It has a great TUI and an android app. Highly recommended!
       | 
       | [0] - https://musikcube.com/
        
       | kunley wrote:
       | Apart from all the audio goodies, that's one of the few projects
       | around that has actually working make uninstall.
       | 
       | So much thanks for giving a good example
        
         | ravachol wrote:
         | You uninstalled it. :(
        
           | kunley wrote:
           | No, I didn't! But I was happy to see such a makefile target
           | exists and one doesn't need to go through console logs to see
           | wtf was installed, or just shrug and think "yet another
           | project made like it's the center of the universe"
        
             | ravachol wrote:
             | Oh ok, my bad! And GOOD.
             | 
             | I agree it's important. kew is so small it was pretty
             | trivial to do.
        
       | mass_and_energy wrote:
       | Hmm I wonder how hard this would be to hook into my Jellyfin
       | server, has anybody tried?
        
       | whoomp12342 wrote:
       | great, now my coworkers will have a new interesting way of rick
       | rolling me -> while I run my build scripts
        
       | smartmic wrote:
       | I use mpd with various clients, mostly also from terminal. mpd
       | support would be great - and actually the only reason for me to
       | try it out.
       | 
       | https://www.musicpd.org/
        
       | jakobdabo wrote:
       | I see what you've done there!                       int
       | randomNumber = getRandomNumber(1, 808);             if
       | (randomNumber == 808)
       | printGlimmeringText(text, nerdFontText, lastRowColor);
       | 
       | Nice project!
        
         | ravachol wrote:
         | That's an easter egg! Gj! You're the first that has mentioned
         | it.
        
       | n2j3 wrote:
       | Cool, but does it scrobble?
        
         | ravachol wrote:
         | kew does not scrobble. It does not track any of your listening
         | habits or anything else for that matter.
        
       | sigmonsays wrote:
       | Trying to nix run it I get a ton of insecure warnings and it
       | lists the CVEs
       | 
       | Is this a nix thing (i'm unsure what freeimage-unstable is)
       | error: Package 'freeimage-unstable-2021-11-01' in
       | /nix/store/20yis5w6g397plssim663hqxdiiah2wr-
       | source/pkgs/development/libraries/freeimage/default.nix:72 is
       | marked as insecure, refusing to evaluate.
       | Known issues:             - CVE-2021-33367             -
       | CVE-2021-40262             - CVE-2021-40263             -
       | CVE-2021-40264             - CVE-2021-40265             -
       | CVE-2021-40266             - CVE-2023-47992             -
       | CVE-2023-47993             - CVE-2023-47994             -
       | CVE-2023-47995             - CVE-2023-47996
        
         | ravachol wrote:
         | FreeImage is used by Chafa to display the covers in the
         | terminal.
         | 
         | The version of kew packaged for Nix is very old: v1.5.2. We're
         | at version 2.8.2. So it's more than a year old, from very early
         | on in the project.
        
         | ravachol wrote:
         | "Buffer Overflow vulnerability in Freeimage v3.18.0 allows
         | attacker to cause a denial of service via a crafted JXR file."
         | 
         | I don't know how relevant these vulnerabilities are to kew,
         | which isn't run across the network in any way, it just reads
         | your local files.
         | 
         | Thank you for bringing this to light. I don't know how feasible
         | it is to use something other than freeimage though, gonna have
         | to investigate.
        
       | cebu_blue wrote:
       | KekW
        
       | theandrewbailey wrote:
       | sudo bash -c "curl
       | https://raw.githubusercontent.com/ravachol/kew/main/install.sh |
       | bash"
       | 
       | Might as well run unsigned binaries straight from the internet.
       | What is this, Windows?
        
         | ravachol wrote:
         | Good point. Might be better to just have the commands
         | installing the requirements for the different distros, in the
         | readme.
        
         | shepherdjerred wrote:
         | Super weird to bring Windows into this, but, anyway? I actually
         | really like these one liners even if they have greater
         | potential for abuse.
        
           | halJordan wrote:
           | It's not weird to mention the other os where downloading and
           | blindly double-clicking a naked exe is the standard.
        
           | ravachol wrote:
           | he's right actually the quick-install script is pretty
           | barbaric.
        
       ___________________________________________________________________
       (page generated 2024-10-04 23:00 UTC)