Navidrome and Jellyfin

Navidrome and Jellyfin are servers for Audio and Video, respectively. They run on Linux (and possibly other operating systems) and have clients that can access them and stream media, provide an organized interface for browsing, etc. They should be accessible to AI agents as well.

Navidrome for audio

Navidrome uses the Subsonic API and has a web interface.

It basically works, and using Symphonium as the front end, there is little to do beside install and setup. Note that the web interface also supports Internet Radios (e.g., SomaFM).

Jellyfin for video

Jellyfin on the other hand has a ton of work behind the scenese, from admin utilities, to custom skins, to a myriad of clients, to metadata, subtitles, etc., etc. It is a huge amount of work when compared with Nova Video Player which I've previously used.

Nova is best if all files are local to the device, and no network viewing is needed. It is pretty cool and self-contained that way for a TV 10-foot experience. Sadly that is somewhat difficult to deal with as files need to live and be updated somewhere and a server model is best for that. Basically, Navidrome for audio and Jellyfin for video.

Install and configure Jellyfin

Handy script for Debian and descendents:

curl -s https://repo.jellyfin.org/install-debuntu.sh -O && \
curl -s https://repo.jellyfin.org/install-debuntu.sh.sha256sum -O && \
sha256sum -c install-debuntu.sh.sha256sum

Note: for external drives, use this script on the drive mount root (/media/username not /media/username/mounted-drive).

sudo setfacl -R -d -m u:jellyfin:rx /media/username

Jellyfin clients

  • There is the basic web client at ip-address:8096 point a browser and it is there. Also, this is the ip:port that other clients connect over. Note that some clients require the protocol as well as the port, but others can try and guess if given just the address.
  • For Android there is Findroid
  • For Android TV there is Jellywatch, Jellyfin client, and Void
  • For Linux there is Jellyfin Desktop:
flatpak install flathub org.jellyfin.JellyfinDesktop

Naming best practices

Basically there are two kinds of video databases, those with television shows and those with movies. And never the twain shall meet. Nor can separate movies be organized (in terms of a directory structure) to show relatedness (for example, all Spider Man movies). And so, our directory structures need to follow these conventions, and different sources are added to a server based on what kind of content is there. I like to also keep animation separate so my root structure looks like:

- anime-movies
- anime-shows
- movies
- shows

For film (movies), the name of the folder and the name of the file are identical with the exception of the filetype extension:

- anime-movies
  - Spider man into the spider verse (2018)
    - Spider man into the spider verse (2018).mkv
  - Spider ham caught in a ham (2019)
    - Spider ham caught in a ham (2019).mkv
  ...

For tv (shows), there is an additional Season nn folder:

- anime-shows
  - Hell Mode (2026)
    - Season 01
      - Hell Mode S01E01.mkv
      - Hell Mode S01E02.mkv
      ...
    - Season 02
      - Hell Mode S01E01.mkv
      - Hell Mode S02E02.mkv
      ...

Note that there are several metadata databases that can be used to clean up a directory and file structure, though sometimes not in the way intended. More on this later.

  • See this valuable resource on naming structure that provides even greater detail.

Subtitles

More on this later.

Jellyfin resources

We use cookies only for WordPress functionality, and do not use third-party analytics or tracking.
Accept